ObjectStackObjectStack

services.settings

Namespace-based configuration service with OS env/global/tenant/user/default cascade.

services.settings

  • Stability: stable
  • Canonical source: packages/services/service-settings/src/settings-service.ts

Key Methods

services.settings.get<T = unknown>(namespace: string, key: string, ctx?: SettingsContext): Promise<ResolvedSettingValue<T>>
services.settings.getNamespace(namespace: string, ctx?: SettingsContext): Promise<SettingsNamespacePayload>
services.settings.set(namespace: string, key: string, value: unknown, ctx?: SettingsContext): Promise<ResolvedSettingValue>
services.settings.setMany(namespace: string, patch: Record<string, unknown>, ctx?: SettingsContext): Promise<Record<string, ResolvedSettingValue>>
services.settings.runAction(namespace: string, actionId: string, payload: unknown, ctx?: SettingsContext): Promise<SettingsActionResult>
services.settings.registerManifest(manifest: SettingsManifest): void
services.settings.listManifests(ctx?: SettingsContext): SettingsManifest[]
services.settings.subscribe(namespace: string | undefined, handler: SettingsChangeHandler): SettingsUnsubscribe

Error Types

  • SETTINGS_LOCKED (SettingsLockedError)
  • SETTINGS_UNKNOWN_NAMESPACE (UnknownNamespaceError)
  • SETTINGS_UNKNOWN_KEY (UnknownKeyError)
  • SETTINGS_VALIDATION (SettingsValidationError) — thrown by set / setMany when a write would leave a visible required specifier empty or violate its pattern. Its fields is a FieldError[] (ADR-0114), one entry per offending key, with code naming the constraint: required or invalid_format.

Over REST, each of these puts its context in the declared error.details slot — { namespace, key, reason, fields } as the branch carries them — never as siblings of error.code / error.message (#4224).

Notes

  • Effective resolution order: OS_ env > Global > Tenant > User > Default*
  • Encrypted keys are supported through crypto adapters/providers.

On this page