Skip to content

Configuration

Configuration requires an explicit URL and credential.

Basic configuration

use Newfoundcodes\Okatana\Configuration;
use Newfoundcodes\Okatana\OkatanaClient;

$config = new Configuration(
    baseUrl: 'https://pm.example.com',
    apiKey: 'oka_public.secret',
);

$client = new OkatanaClient($config);

URL behavior

Configuration requires an HTTP or HTTPS absolute URL. Query strings and fragments are rejected. Appends /api/v1 if missing.

Supports local, staging, and production deployments:

$local = OkatanaClient::create('http://localhost:8000', $token);
$staging = OkatanaClient::create('https://okatana.staging.example', $token);
$production = OkatanaClient::create('https://work.example/api/v1', $token);

Host inference is disabled.

Timeout

$client = OkatanaClient::create(
    baseUrl: $_ENV['OKATANA_URL'],
    apiKey: $_ENV['OKATANA_TOKEN'],
    timeout: 15.0,
);

Timeout applies to the default Guzzle transport. Configure timeouts on custom PSR-18 clients separately.

Retry policy

use Newfoundcodes\Okatana\Http\RetryPolicy;

$policy = new RetryPolicy(
    maxAttempts: 3,
    baseDelayMs: 200,
    maxDelayMs: 2500,
    methods: ['GET', 'HEAD'],
    statusCodes: [429, 500, 502, 503, 504],
    retryTransportErrors: true,
    jitter: true,
);

$config = new Configuration(
    $_ENV['OKATANA_URL'],
    $_ENV['OKATANA_TOKEN'],
    retryPolicy: $policy,
);

Disable retries:

retryPolicy: RetryPolicy::disabled()

Custom PSR-18 transport

$client = new OkatanaClient(
    configuration: $config,
    httpClient: $myPsr18Client,
    requestFactory: $myPsr17Factory,
    streamFactory: $myPsr17Factory,
);

Supports custom transports for proxy configuration, tracing, client certificates, or custom DNS.

Logger

Pass a PSR-3 logger:

$client = new OkatanaClient(
    configuration: $config,
    logger: $logger,
);

Logs method, relative path, status, attempt, duration, and exception class. Bearer tokens and JSON bodies are excluded.