Skip to main content
Every public symbol in westyx/nexus. All read methods (getConfig, getSecret, getFlag, etc.) are non-blocking - they hit the in-memory cache. Only NexusClient::create, sync, and evaluateAb make network calls.

Construction

NexusClient::create(NexusConfig $config, ?GuzzleClient $http = null): static

Creates a client and runs a blocking initial sync. Returns the populated client. Throws on failure.
Throws:
  • NexusUnauthorizedException - initial sync returned 401
  • NexusBillingException - initial sync returned 402
  • NexusNotFoundException - initial sync returned 404

Configs

getConfig(string $key, mixed $default = null): mixed

Returns the resolved config value, or $default when the key is absent.
The value mirrors the wire-level JSON type: string, int, float, bool, array, or null. Cast or validate as needed.

getAllConfigs(): array

Returns a snapshot copy of every config key-value pair currently in the cache. The returned array is independent of the SDK’s internal storage - mutating it has no effect.

Feature flags

getFlag(string $key, bool $default = false): bool

Returns the is_active state of a flag, or $default when the key is absent.
The server computes is_active (combining is_enabled, starts_at, ends_at); the SDK never makes that call itself.

getAllFlags(): array

Returns a snapshot copy of every flag key-is_active pair in the cache. Keys are strings, values are booleans.

Secrets (secret key only)

All secret methods throw NexusPublicKeyException synchronously when the client uses a public key - before any network call.

getSecret(string $key): ?string

Returns the plaintext value of a text-type secret, or null when the key is absent or the secret is file-type.
Returns null (does not throw) when:
  • The key does not exist in the cache
  • The secret has type = 'file' - use getSecretFilePath instead
Throws:
  • NexusPublicKeyException - client uses a public key

getSecretFilePath(string $key): ?string

Returns the temp-file path holding the value of a file-type secret, or null when the key is absent or the secret is text-type.
The SDK materialises every file-type secret to a temp file on every sync. The file path includes a hash of the value - when the secret changes on the server the path changes and the old file is removed. Files are written mode 0600. Temp files are deleted in __destruct. Returns null when:
  • The key does not exist in the cache
  • The secret has type = 'text' - use getSecret instead
Throws:
  • NexusPublicKeyException - client uses a public key

Write API (secret key only)

Write methods require a secret key. A public key throws NexusPublicKeyException before making any network call. All write methods call the API directly and do not update the local cache - call sync() afterward if you need the new value immediately.

setSecret(string $key, string $value, string $type = 'text'): void

Creates or updates a secret. $type must be 'text' or 'file'.
Throws:
  • NexusPublicKeyException - client uses a public key
  • NexusUnauthorizedException - 401
  • NexusBillingException - 402
  • NexusNotFoundException - 404 (unknown service)
  • NexusRateLimitedException - 429

deleteSecret(string $key): void

Deletes all versions of a secret.
Throws:
  • NexusPublicKeyException - client uses a public key
  • NexusUnauthorizedException - 401
  • NexusBillingException - 402
  • NexusNotFoundException - 404 (secret or service not found)
  • NexusRateLimitedException - 429

deleteSecretVersion(string $key, int $version): void

Deletes a specific version of a secret. Version numbers are 1-based integers matching the server’s version sequence.
Throws:
  • NexusPublicKeyException - client uses a public key
  • NexusUnauthorizedException - 401
  • NexusBillingException - 402
  • NexusNotFoundException - 404 (secret, version, or service not found)
  • NexusRateLimitedException - 429

A/B Testing

evaluateAb(array $keys, string $userId, array $attributes = []): array

Batch-evaluates feature flags through the AB Testing add-on against the supplied user context. Issues a single POST /v1/flags/evaluate-ab and returns the results map - flag key to evaluated boolean. Unlike getFlag, this method always performs a network call and does not consult the local cache.
Returns array<string, bool>. Missing keys in the response default to false. Throws:
  • NexusUnauthorizedException - 401
  • NexusBillingException - 402
  • NexusNotFoundException - 404
  • NexusRateLimitedException - 429 (no AB Testing add-on returns 403 which is surfaced as NexusNotFoundException)

SSE

connectStream(int $maxErrors = 3): void

Opens the SSE live-update connection. This method blocks indefinitely. It must only be called from CLI daemons and queue workers - never from FPM request handlers.
The method returns when:
  • $maxErrors consecutive transport errors have occurred (TTL polling continues)
After returning, the SDK falls back to TTL polling automatically. See SSE live updates for the full backoff table and event reference.
Do NOT call connectStream() inside a PHP-FPM request handler. It blocks the worker indefinitely, preventing it from serving further HTTP requests. Use it only in long-running CLI scripts started with php artisan queue:work, Swoole workers, or equivalent.

Sync

sync(): void

Forces an immediate sync, bypassing the TTL. ETag / If-None-Match is used automatically - a 304 resets the TTL without downloading data.
Throws:
  • NexusUnauthorizedException - 401
  • NexusBillingException - 402
  • NexusNotFoundException - 404
  • NexusRateLimitedException - 429
  • NexusQuarantinedException - 429 quarantine body

Metadata

getKeyType(): string

Returns 'sk' or 'pk' based on the configured apiKey prefix. Returns '' when authentication is exclusively via WIF and no static apiKey is set.