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 401NexusBillingException- initial sync returned 402NexusNotFoundException- initial sync returned 404
Configs
getConfig(string $key, mixed $default = null): mixed
Returns the resolved config value, or $default when the key is absent.
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.
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)
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.
null (does not throw) when:
- The key does not exist in the cache
- The secret has
type = 'file'- usegetSecretFilePathinstead
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.
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'- usegetSecretinstead
NexusPublicKeyException- client uses a public key
Write API (secret key only)
setSecret(string $key, string $value, string $type = 'text'): void
Creates or updates a secret. $type must be 'text' or 'file'.
NexusPublicKeyException- client uses a public keyNexusUnauthorizedException- 401NexusBillingException- 402NexusNotFoundException- 404 (unknown service)NexusRateLimitedException- 429
deleteSecret(string $key): void
Deletes all versions of a secret.
NexusPublicKeyException- client uses a public keyNexusUnauthorizedException- 401NexusBillingException- 402NexusNotFoundException- 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.
NexusPublicKeyException- client uses a public keyNexusUnauthorizedException- 401NexusBillingException- 402NexusNotFoundException- 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- 401NexusBillingException- 402NexusNotFoundException- 404NexusRateLimitedException- 429 (no AB Testing add-on returns 403 which is surfaced asNexusNotFoundException)
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.
$maxErrorsconsecutive transport errors have occurred (TTL polling continues)
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.
NexusUnauthorizedException- 401NexusBillingException- 402NexusNotFoundException- 404NexusRateLimitedException- 429NexusQuarantinedException- 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.
