@ionite/core 0.0.24-beta.20260928.17 → 0.0.24-beta.20260930.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -16,212 +16,6 @@ declare const KNOWN_WORKLOAD_KEYS: readonly ["id", "clientId", "displayName", "d
16
16
  declare function customAttributes(value: object, knownKeys: readonly PropertyKey[]): Record<string, unknown> | undefined;
17
17
  import { StandardSchemaV1 as StandardSchemaV19 } from "@standard-schema/spec";
18
18
  import { StandardSchemaV1 as StandardSchemaV18 } from "@standard-schema/spec";
19
- /**
20
- * Third-party CIAM provider presets and claim mapping.
21
- *
22
- * Defines the built-in provider adapters used by the CIAM module for customer
23
- * login. Each preset supplies default OIDC/OAuth2 endpoints, scope, branding,
24
- * and a claim mapper that normalizes provider claims into a candidate customer.
25
- * The application's `CustomerStore` remains the system of record: the SDK only
26
- * extracts standard claims and hands a candidate to `lookup`/`upsert`.
27
- */
28
- /** Built-in provider types. `oidc` is a generic OIDC provider; `magic-link` is the passwordless flow. */
29
- type CIAMProviderType = "oidc" | "google" | "github" | "microsoft" | "apple" | "magic-link";
30
- /** Branding colors for rendering a provider button in light and dark themes. */
31
- type CIAMProviderColors = {
32
- /** Background/brand color for light theme (hex or CSS color). */
33
- light: string;
34
- /** Background/brand color for dark theme (hex or CSS color). */
35
- dark: string;
36
- /** Optional secondary/accent color. */
37
- secondary?: string;
38
- };
39
- /** Operator-supplied branding so the UI can render a provider list without hardcoding. */
40
- type CIAMProviderBranding = {
41
- /** Human-readable name shown on the login button (e.g. "Google"). */
42
- displayName: string;
43
- /** External icon URL (typically an SVG/PNG hosted on a CDN). */
44
- iconUrl?: string;
45
- /** Light/dark brand colors. */
46
- colors?: CIAMProviderColors;
47
- /** Optional provider info/marketing URL. */
48
- url?: string;
49
- };
50
- /**
51
- * A single CIAM provider declaration. OIDC/OAuth2 endpoint and credential
52
- * fields come from the ConfigSource (never application code).
53
- */
54
- type CIAMProviderConfig = {
55
- /** Provider adapter type. Selects defaults and claim mapping. */
56
- type: CIAMProviderType;
57
- /** Whether this provider is enabled. Defaults to true when omitted. */
58
- enabled?: boolean;
59
- /** Recommended display order (ascending). Ties broken by declaration order. */
60
- order?: number;
61
- /** UI branding metadata. */
62
- branding?: CIAMProviderBranding;
63
- /** OIDC issuer/authority (used for discovery when explicit endpoints are omitted). */
64
- authority?: string;
65
- /** Authorization endpoint (overrides preset). */
66
- authorizationUrl?: string;
67
- /** Token endpoint (overrides preset). */
68
- tokenUrl?: string;
69
- /** JWKS endpoint for ID token verification (overrides preset). */
70
- jwksUri?: string;
71
- /** OAuth2 UserInfo endpoint for providers without an ID token (e.g. GitHub). */
72
- userInfoUrl?: string;
73
- /** OAuth2 client id (ConfigSource-only). */
74
- clientId?: string;
75
- /** OAuth2 client secret (ConfigSource-only). */
76
- clientSecret?: string;
77
- /** Requested scope (overrides preset). */
78
- scope?: string;
79
- /** Apple: team id for client-secret generation. */
80
- teamId?: string;
81
- /** Apple: key id for client-secret generation. */
82
- keyId?: string;
83
- /** Apple: PKCS#8 PEM private key for client-secret generation. */
84
- privateKey?: string;
85
- };
86
- /** Sanitized provider entry returned by the discovery endpoint for the UI. */
87
- type CIAMProviderDescriptor = {
88
- /** Provider key (matches the RemoteConfig map key); used as `?provider=`. */
89
- name: string;
90
- type: CIAMProviderType;
91
- displayName: string;
92
- /** SDK-derived login URL to navigate to (begins the flow). */
93
- loginUrl: string;
94
- iconUrl?: string;
95
- colors?: CIAMProviderColors;
96
- url?: string;
97
- };
98
- /**
99
- * Light display cookies (`${cookiesPrefix}.profile`).
100
- *
101
- * The envelope is SDK-owned. App code supplies only `user`. The cookie is not an
102
- * authentication input: the server never reads it to resolve a session, and the browser
103
- * may forge it. `expiresAt` is display metadata so a client can order entries without a
104
- * round trip; authoritative expiry is the peer `${cookiesPrefix}.session` record.
105
- */
106
- declare const DISPLAY_COOKIE_SUFFIX = ".profile";
107
- declare const DISPLAY_COOKIE_VERSION = 1;
108
- declare const DEFAULT_DISPLAY_COOKIE_MAX = 10;
109
- declare const DEFAULT_DISCOVERED_COOKIE_MAX = 10;
110
- declare const DEFAULT_DISCOVERED_COOKIE_TTL_SECONDS: number;
111
- declare const DISCOVERED_COOKIE_PREFIX = "ion.discovered";
112
- type DisplayCookieConfig = {
113
- /**
114
- * When true, the SDK writes a non-HttpOnly display cookie beside the opaque session cookie.
115
- * ConfigSource-only. Default false.
116
- */
117
- enabled?: boolean;
118
- /**
119
- * How many display cookies a single response may leave on the browser, newest session window
120
- * first. ConfigSource-only. Values below 1 fall back to {@link DEFAULT_DISPLAY_COOKIE_MAX}.
121
- * @default 10
122
- */
123
- max?: number;
124
- /**
125
- * Session-less tenant hints written by an App after an explicit directory lookup.
126
- * ConfigSource-only and off unless `enabled` is true.
127
- */
128
- discovered?: DiscoveredDisplayCookieConfig;
129
- };
130
- type DiscoveredDisplayCookieConfig = {
131
- enabled?: boolean;
132
- /** Browser hint lifetime. This is not a session expiry. @default 14400 */
133
- ttlSeconds?: number;
134
- /** Independent cap; discovered hints never displace live-session entries. @default 10 */
135
- max?: number;
136
- };
137
- /** What `${basePath}/auth/user` and `${basePath}/auth/customer` return. ConfigSource-only. */
138
- type UserEndpointPolicy = "full" | "display" | "off";
139
- type DisplayUser = Record<string, string | number | boolean | null>;
140
- type DisplayAuthType = "sso" | "ciam";
141
- type DisplayCookieEnvelope = {
142
- v: typeof DISPLAY_COOKIE_VERSION;
143
- /**
144
- * Session envelopes omit this field (absent means `'session'`) so the wire format stays identical
145
- * to cookies written before discovered hints existed; only discovered hints set it explicitly.
146
- * Readers must treat `undefined` as `'session'`.
147
- */
148
- kind?: "session" | "discovered";
149
- tenantId?: string;
150
- authType: DisplayAuthType;
151
- /** ISO timestamp copied from the session window at write time. Display only. */
152
- expiresAt: string;
153
- user: DisplayUser;
154
- tenantName?: string;
155
- };
156
- type DisplayIdentity = {
157
- name?: string;
158
- email?: string;
159
- avatar?: string;
160
- };
161
- declare function resolveDisplayCookieMax(max: number | undefined): number;
162
- declare function resolveDiscoveredCookieMax(max: number | undefined): number;
163
- declare function resolveDiscoveredCookieTtlSeconds(ttlSeconds: number | undefined): number;
164
- declare function defaultDisplayUser(identity: DisplayIdentity): DisplayUser;
165
- /** Drop non-primitives and auth-bearing keys. Display cookies carry UI fields only. */
166
- declare function sanitizeDisplayUser(value: unknown): DisplayUser;
167
- /**
168
- * AppDev projection runs on the full user (including custom attributes). When omitted, or when it
169
- * throws, the cookie carries name, email, and avatar only. Forbidden and non-primitive fields are
170
- * dropped either way — a projector cannot put a session id or token into the cookie.
171
- */
172
- declare function projectDisplayUser<TUser extends object>(user: TUser, projector?: (user: TUser) => unknown): DisplayUser;
173
- declare function encodeDisplayCookie(envelope: DisplayCookieEnvelope): string;
174
- declare function decodeDisplayCookie(raw: string): DisplayCookieEnvelope | undefined;
175
- type ParsedDisplayCookie = {
176
- name: string;
177
- prefix: string;
178
- envelope: DisplayCookieEnvelope;
179
- };
180
- declare function readDisplayCookies(cookieHeader: string | null | undefined): ParsedDisplayCookie[];
181
- /** Client ordering: newest session window first. Invalid timestamps sort last. */
182
- declare function compareDisplayExpiryDesc(a: string | undefined, b: string | undefined): number;
183
- declare function profileCookieName(cookiesPrefix: string): string;
184
- declare function discoveredProfileCookieName(tenantId: string): string;
185
- /**
186
- * Minimal logger interface compatible with common structured logging patterns.
187
- */
188
- interface Logger {
189
- trace(message?: unknown, ...optionalParams: unknown[]): void;
190
- debug(message?: unknown, ...optionalParams: unknown[]): void;
191
- info(message?: unknown, ...optionalParams: unknown[]): void;
192
- warn(message?: unknown, ...optionalParams: unknown[]): void;
193
- error(message?: unknown, ...optionalParams: unknown[]): void;
194
- }
195
- /**
196
- * Renders a structured logger call as one greppable line while leaving the source fields separate
197
- * for telemetry exporters.
198
- */
199
- declare function formatLogLine(level: keyof Logger, message: unknown, optionalParams?: unknown[], timestamp?: Date): string;
200
- /**
201
- * No-op implementation — does nothing for any log level
202
- */
203
- declare const silentLogger: Logger;
204
- /**
205
- * Default logger used until an ionite instance is configured with
206
- * an OpenTelemetry-backed logger or an application-provided logger.
207
- */
208
- declare const defaultLogger: Logger;
209
- /**
210
- * Logger that logs messages debug, info, warn, and error to the console.
211
- */
212
- declare const debugLogger: Logger;
213
- /**
214
- * Logger that logs messages info, warn, and error to the console.
215
- */
216
- declare const infoLogger: Logger;
217
- /**
218
- * Logger that logs messages warn and error to the console.
219
- */
220
- declare const warnLogger: Logger;
221
- /**
222
- * Human-readable single-line console logger for local application output.
223
- */
224
- declare const prettyLogger: Logger;
225
19
  /** Synchronous, in-memory read surface for one code catalog entity kind. */
226
20
  type CodeCatalogNamespace<TEntity> = {
227
21
  get(id: string): TEntity | undefined;
@@ -300,7 +94,6 @@ declare function deprecateRetiredCodeCatalogRows(code: CodeCatalog | undefined,
300
94
  * visible. Returns undefined when neither source is wired.
301
95
  */
302
96
  declare function unionCatalogRead(code: CodeCatalog | undefined, store: AccessCatalogStore | undefined): AccessCatalogStore | undefined;
303
- import { StandardSchemaV1 as StandardSchemaV15 } from "@standard-schema/spec";
304
97
  /**
305
98
  * Resolve an access subject/target/resource reference (a string id or an object carrying one) to its
306
99
  * canonical, trimmed string id. This is the single id-resolution rule shared across the authz stack
@@ -315,495 +108,106 @@ declare function accessRefId(value: unknown): string;
315
108
  * default, or `applyToApplication`) collapses to the `app` scope key.
316
109
  */
317
110
  declare function accessRootId(change: AccessChange): string;
318
- type ChangeListener = () => void;
319
- /**
320
- * Reactive source/adapter contract. Implemented by config-source-backed adapters
321
- * (for example `SecretsSource`) to advertise change subscription and source liveness.
322
- * `isAvailable()` here is an adapter liveness hook and is intentionally distinct from
323
- * module readiness (`ModuleReadiness.isReady()` / `ready()`).
324
- */
325
- type ReactiveHandle = {
326
- beforeChange?(listener: ChangeListener): () => void;
327
- afterChange?(listener: ChangeListener): () => void;
328
- isAvailable?(): boolean;
329
- };
330
111
  /**
331
- * Readiness contract for reactive module/service handles whose usability depends on
332
- * RemoteConfig that can arrive or change at runtime (for example `ion.secrets`,
333
- * `ion.workload`, `ion.otel`, `ion.authz.oaa`).
112
+ * ConfigSource-only block that lets an issuing IdP's token claims satisfy `has*` checks.
113
+ * Placed independently on `sso`, each CIAM provider, and each incoming workload IdP.
114
+ * Absent means that issuer's claims never satisfy entitlements.
334
115
  *
335
- * - `isReady()` is a synchronous check; use it in request handlers and health probes and
336
- * return 503 (or branch) when false instead of blocking.
337
- * - `ready(timeout?)` resolves once the handle first becomes usable; use it at startup or
338
- * as a feature gate. With no timeout it waits indefinitely; with `timeout > 0` it rejects
339
- * after that many milliseconds.
116
+ * Derived rows are session-scoped for users and customers (expanded onto the session at login
117
+ * and refresh) and per-request for workloads. They are never written to the access stores.
340
118
  */
341
- type ModuleReadiness = {
342
- beforeChange?(listener: ChangeListener): () => void;
343
- afterChange?(listener: ChangeListener): () => void;
344
- isReady?(): boolean;
345
- ready?(timeout?: number): Promise<void>;
119
+ type ClaimsAsEntitlements = {
120
+ /**
121
+ * Claim names to read. A dotted path addresses a nested claim (`realm_access.roles`).
122
+ * `scope` is space-delimited; every other string claim is one value; arrays contribute each string.
123
+ * Required and non-empty.
124
+ */
125
+ claims: string[];
126
+ /**
127
+ * Expand a matched catalog role or group into the permissions it confers.
128
+ * Default false: a claim value matches only the catalog id it names.
129
+ */
130
+ expand?: boolean;
131
+ /**
132
+ * Let catalog-bound resources on expanded rows satisfy resource-scoped checks.
133
+ * Default false. Ignored unless `expand` is true: a claim string cannot name a resource.
134
+ */
135
+ resources?: boolean;
136
+ };
137
+ /** One effective entitlement derived from a token claim. Not a stored grant. */
138
+ type DerivedEntitlement = {
139
+ targetType: OaaAccessTargetType;
140
+ target: string;
141
+ /** Set only when the plane opted into `resources` and the catalog row binds this resource. */
142
+ resource?: string;
143
+ /** Claim name the value was read from. */
144
+ claim: string;
145
+ /** Expansion root id when the row came from catalog expansion. Absent for a direct id match. */
146
+ root?: string;
147
+ };
148
+ /** Secret-free projection of a configured claims block, including whether the App can persist it. */
149
+ type ClaimsAsEntitlementsDescription = {
150
+ claims: string[];
151
+ expand: boolean;
152
+ resources: boolean;
153
+ /**
154
+ * User and customer planes: the session store declares it persists `Session.entitlements`.
155
+ * Workload plane: always true (nothing is stored).
156
+ */
157
+ capable: boolean;
346
158
  };
347
159
  /**
348
- * Canonical ionite module names used by the holistic readiness report and the
349
- * `requireReady([...])` helper. These are the config-driven module handles whose readiness can be
350
- * composed; `ion.isReady()` itself stays the narrow "config applied" signal and is NOT one of these.
160
+ * Shared minimal identity fields used to build both the workforce user
161
+ * record (`BaseUser`) and the CIAM customer record (`BaseCustomer`), as well
162
+ * as the authenticated session types (`WorkforceUser`, `Customer`).
351
163
  *
352
- * IAM-delta egress is intentionally NOT a member. Delta patch-back is best-effort and non-fatal (a
353
- * failed push only logs `degraded` and is reconciled by a later full sync — the Batch 7 drift-signal
354
- * contract), so folding it into `iam` readiness would let a delta-target outage make
355
- * `requireReady(['iam'])` false and take the app out of rotation for a signal that is designed not to
356
- * block. Apps that DO treat delta as a hard dependency can gate on `ion.iam.delta.isReady()` /
357
- * `ion.iam.delta.ready()` explicitly instead.
164
+ * This is an internal structural base and is intentionally not part of the
165
+ * public API surface; consumers extend the `BaseUser` Zod/Valibot schema
166
+ * instead.
358
167
  */
359
- type ModuleName = "sso" | "ciam" | "iam" | "workload" | "otel" | "secrets" | "kms" | "authz" | "tm";
360
- /** Per-module readiness snapshot in {@link ReadinessReport}. */
361
- type ModuleReadinessState = {
362
- /** Whether the module is active (present/requested) in the effective config. Inactive modules never block readiness. */
363
- active: boolean;
364
- /** Synchronous readiness of the module right now (mirrors the module's own `isReady()`). */
365
- ready: boolean;
366
- /** Human-readable explanation when the module is `active` but not `ready`. */
367
- reason?: string;
368
- };
369
- /**
370
- * Holistic, read-only readiness snapshot for an ionite instance. Returned by
371
- * `ion.readiness()` and used by the built-in `${basePath}/readyz` endpoint. This is composition
372
- * DATA, not a request gate: applications combine it (via `ion.requireReady([...])`) with their own
373
- * non-ionite dependency checks to build their health endpoints.
374
- */
375
- type ReadinessReport = {
376
- /** True when config has been applied (`applied`) and every ACTIVE module is ready. */
377
- ok: boolean;
378
- /** Whether RemoteConfig has been applied at least once (mirrors `ion.isReady()`). */
379
- applied: boolean;
380
- /** Per-module readiness keyed by {@link ModuleName}. */
381
- modules: Record<ModuleName, ModuleReadinessState>;
382
- /** Most recent config-application outcome (last applied time and last error, if any). */
383
- config: ConfigApplyStatus;
384
- };
385
- /** Result of `ion.requireReady(names)`: a synchronous, declarative readiness gate over selected modules. */
386
- type RequireReadyResult = {
387
- /** True when config is applied and every requested module is ready. */
388
- ok: boolean;
389
- /** The requested modules that are not ready, with reasons when available. */
390
- notReady: Array<{
391
- name: ModuleName;
392
- reason?: string;
393
- }>;
394
- };
395
- type CapabilityKey = "sso.login" | "sso.jit" | "sso.logout" | "sso.back_channel_logout" | "ciam.magic_link" | "ciam.oidc_login" | "ciam.customer" | "ciam.logout" | "iam.users" | "iam.groups" | "iam.workloads" | "iam.customers" | "workload.incoming" | "workload.outgoing" | "authz.oaa" | "tm.integration";
396
- type CapabilityEndpointUrls = {
397
- readyzUrl: string;
398
- capabilitiezUrl: string;
399
- sso: {
400
- loginUrl: string;
401
- userUrl: string;
402
- logoutUrl: string;
403
- logoutBackChannelUrl: string;
404
- refreshUrl: string;
405
- callbackUrl: string;
406
- };
407
- workload: {
408
- validateUrl: string;
409
- jwksUrl: string;
410
- };
411
- iam: {
412
- basePath: string;
413
- usersUrl: string;
414
- groupsUrl: string;
415
- workloadsUrl: string;
416
- customersUrl: string;
417
- };
418
- ciam: {
419
- magicLinkUrl: string;
420
- magicLinkLoginUrl: string;
421
- customerUrl: string;
422
- customerLoginUrl: string;
423
- customerCallbackUrl: string;
424
- customerProvidersUrl: string;
425
- logoutUrl: string;
426
- };
427
- };
428
- type CapabilityState = {
429
- module: ModuleName;
430
- active: boolean;
431
- ready: boolean;
432
- testable: boolean;
433
- urls?: string[];
434
- reason?: string;
435
- };
436
- type CapabilitiezManifest = {
437
- sdk: {
438
- /** Runtime @ionite/server version serving this manifest. */
439
- version: string;
440
- /** Version of the stable capability/test-unit vocabulary. */
441
- catalogVersion: number;
442
- };
443
- basePath: string;
444
- urls: CapabilityEndpointUrls;
445
- modules: Record<ModuleName, ModuleReadinessState>;
446
- capabilities: Record<CapabilityKey, CapabilityState>;
168
+ interface BaseUserFields {
447
169
  /**
448
- * True when FrameworkConfig wired a live LFV callback transport. Boolean only — the transport
449
- * object, Redis URL, and credentials are never exposed.
170
+ * Unique identifier for the user
450
171
  */
451
- lfvCallbackTransport: boolean;
452
- };
453
- type OtelSignalName = "traces" | "metrics" | "logs";
454
- type OtelProtocol = "http/protobuf" | "http/json";
455
- type OtelProviderType = "otlp" | "grafana-lgtm" | "datadog" | "splunk" | "elastic";
456
- type OtelLogLevel = "trace" | "debug" | "info" | "warn" | "error";
457
- type OtelLevels = Partial<Record<OtelLogLevel, boolean>>;
458
- /** Local console mirror policy: disable it or set its minimum emitted severity. */
459
- type OtelConsoleMode = "off" | OtelLogLevel;
460
- type OtelAttributeValue = string | number | boolean | string[] | number[] | boolean[];
461
- type OtelAttributes = Record<string, OtelAttributeValue>;
462
- type OtelSignalConfig = {
463
- /** Per-signal OTLP endpoint. When omitted, the module appends /v1/{signal} to `endpoint`. */
464
- endpoint?: string;
465
- headers?: Record<string, string>;
466
- timeoutMillis?: number;
467
- concurrencyLimit?: number;
468
- };
469
- type OtelMetricsSignalConfig = OtelSignalConfig & {
470
- exportIntervalMillis?: number;
471
- exportTimeoutMillis?: number;
472
- };
473
- type OtelOAuthClientCredentialsConfig = {
474
- tokenUrl: string;
475
- clientId: string;
476
- clientSecret: string;
477
- scope?: string;
478
- audience?: string;
479
- headers?: Record<string, string>;
480
- };
481
- type OtelLogRecord = {
482
- severityNumber?: number;
483
- severityText?: string;
484
- body?: unknown;
485
- attributes?: Record<string, unknown>;
486
- };
172
+ id?: string;
173
+ /**
174
+ * REQUIRED. Unique identifier for login
175
+ */
176
+ userName: string;
177
+ /**
178
+ * REQUIRED. Simple display name
179
+ */
180
+ name: string;
181
+ /**
182
+ * REQUIRED. Primary email address
183
+ */
184
+ email: string;
185
+ /**
186
+ * URL to user's avatar/profile picture
187
+ */
188
+ avatar?: string;
189
+ /**
190
+ * User type (e.g., "employee", "contractor", "customer").
191
+ * Shared by SSO/CIAM and enterprise/SCIM user representations.
192
+ */
193
+ userType?: string;
194
+ }
487
195
  /**
488
- * OpenTelemetry config supplied by ConfigSource/RemoteConfig.
489
- * Keep environment-specific URLs and credentials here, not in FrameworkConfig.
196
+ * Shared types for paginated list operations across stores.
197
+ *
198
+ * List methods return a ListResult with total, count, items, size, page, and pages.
199
+ * Options accept optional start (0-based), limit (page size), and filter.
200
+ *
201
+ * ORDERING CONTRACT: `list()` does NOT accept a caller-specified sort. Every store MUST return items
202
+ * in a stable, deterministic order (recommended: primary key ascending) so that offset pagination is
203
+ * coherent across pages — page N+1 must continue exactly where page N ended for an unchanged dataset.
204
+ * UI-style arbitrary sorting is the app's concern (sort the returned page, or push ORDER BY into a
205
+ * SQL/search-backed custom store); the SDK only guarantees deterministic paging.
490
206
  */
491
- type OtelConfig = {
492
- type?: OtelProviderType;
493
- name: string;
494
- endpoint?: string;
495
- protocol?: OtelProtocol;
496
- headers?: Record<string, string>;
497
- apiKey?: string;
498
- /** Name of a `RemoteConfig.kms` key pool used for exporter authentication. */
499
- apiKeyPool?: string;
500
- apiKeyHeader?: string;
501
- oauth?: OtelOAuthClientCredentialsConfig;
502
- version?: string;
503
- deploymentEnvironment?: string;
504
- resourceAttributes?: OtelAttributes;
505
- levels?: OtelLevels;
506
- /** `'off'` exports only to OTel; a level dual-emits at or above that severity. Defaults to `'info'`. */
507
- console?: OtelConsoleMode;
508
- traces?: boolean | OtelSignalConfig;
509
- metrics?: boolean | OtelMetricsSignalConfig;
510
- logs?: boolean | OtelSignalConfig;
511
- };
512
207
  /**
513
- * OpenTelemetry app/runtime wiring supplied by code.
514
- * Instrumentation instances and callbacks live here because they are framework-specific code.
515
- */
516
- type FrameworkOtelConfig = {
517
- levels?: OtelLevels;
518
- instrument?: unknown[];
519
- /** Optional app-owned destination/renderer for records admitted by `RemoteConfig.otel.console`. */
520
- console?: (record: OtelLogRecord) => void;
521
- spanProcessors?: unknown[];
522
- metricReaders?: unknown[];
523
- logRecordProcessors?: unknown[];
524
- sampler?: unknown;
525
- textMapPropagator?: unknown;
526
- contextManager?: unknown;
527
- configure?: (options: Record<string, unknown>) => Record<string, unknown> | void;
528
- };
529
- type Otel = {
530
- /** Secret-free, JSON-serializable configuration and readiness summary. */
531
- describe(): OtelDescription;
532
- beforeChange(listener: ChangeListener): () => void;
533
- afterChange(listener: ChangeListener): () => void;
534
- isReady(): boolean;
535
- ready(timeout?: number): Promise<void>;
536
- logger: Logger;
537
- forceFlush(): Promise<void>;
538
- shutdown(): Promise<void>;
539
- };
540
- type ModuleDescriptionBase<TModule extends ModuleName> = {
541
- module: TModule;
542
- active: boolean;
543
- ready: boolean;
544
- };
545
- type CookieDescription = {
546
- prefix?: string;
547
- path?: string;
548
- secure?: boolean;
549
- sameSite?: "Strict" | "Lax";
550
- domain?: string;
551
- };
552
- type SsoDescription = ModuleDescriptionBase<"sso"> & {
553
- authority?: string;
554
- tokenUrl?: string;
555
- authorizationUrl?: string;
556
- clientId?: string;
557
- redirectUri?: string;
558
- responseType?: "code";
559
- scope?: string;
560
- silentRedirectUri?: string;
561
- jwksUri?: string;
562
- endSessionEndpoint?: string;
563
- revocationEndpoint?: string;
564
- cookies: CookieDescription;
565
- loginStateTtl?: number;
566
- rotationGraceSeconds?: number;
567
- sessionWindowSeconds?: number;
568
- displayCookie?: DisplayCookieConfig;
569
- jit: {
570
- enabled: boolean;
571
- userStore: boolean;
572
- };
573
- sessionStore: boolean;
574
- urls: Partial<CapabilityEndpointUrls["sso"]>;
575
- };
576
- type CiamProviderDescription = {
577
- name: string;
578
- type: CIAMProviderType;
579
- enabled: boolean;
580
- order?: number;
581
- branding?: CIAMProviderBranding;
582
- authority?: string;
583
- authorizationUrl?: string;
584
- tokenUrl?: string;
585
- jwksUri?: string;
586
- userInfoUrl?: string;
587
- clientId?: string;
588
- scope?: string;
589
- loginUrl: string;
590
- };
591
- type CiamDescription = ModuleDescriptionBase<"ciam"> & {
592
- magicLinkTtl?: number;
593
- loginStateTtl?: number;
594
- sessionTtl?: number;
595
- cookies: CookieDescription;
596
- displayCookie?: DisplayCookieConfig;
597
- jit: {
598
- enabled: boolean;
599
- customerStore: boolean;
600
- };
601
- sessionStore: boolean;
602
- magicLinkStore: boolean;
603
- providers: CiamProviderDescription[];
604
- urls: Partial<CapabilityEndpointUrls["ciam"]>;
605
- };
606
- type IamPrincipalDescription = {
607
- enabled: boolean;
608
- assignment: "app" | "iam" | "iam-request";
609
- delta?: "patch";
610
- storeWired: boolean;
611
- };
612
- type IamDescription = ModuleDescriptionBase<"iam"> & {
613
- url?: string;
614
- deltaAudience?: string;
615
- users: IamPrincipalDescription;
616
- workloads: IamPrincipalDescription;
617
- customers: IamPrincipalDescription;
618
- groups: {
619
- enabled: boolean;
620
- catalogWired: boolean;
621
- };
622
- urls: Partial<CapabilityEndpointUrls["iam"]>;
623
- };
624
- type WorkloadTrustedIdpDescription = {
625
- issuer: string;
626
- jwksUri: string;
627
- audience: string | string[];
628
- scopesAsEntitlements?: boolean;
629
- };
630
- type WorkloadClientDescription = {
631
- name: string;
632
- ready: boolean;
633
- clientId?: string;
634
- workloadId?: string;
635
- idpTokenUrl?: string;
636
- scope?: string;
637
- audience?: string;
638
- authMethod: "client_secret" | "private_key_jwt" | "server_only";
639
- };
640
- type WorkloadDescription = ModuleDescriptionBase<"workload"> & {
641
- incoming: {
642
- trustedIdps: WorkloadTrustedIdpDescription[];
643
- };
644
- outgoing: WorkloadClientDescription[];
645
- urls: Partial<CapabilityEndpointUrls["workload"]>;
646
- };
647
- type SecretsSourceDescription = {
648
- name: string;
649
- type: "dev" | "gcp" | "vault" | "aws" | "azure";
650
- ready: boolean;
651
- url?: string;
652
- clientId?: string;
653
- authMethod?: string;
654
- };
655
- type SecretsDescription = ModuleDescriptionBase<"secrets"> & {
656
- sources: SecretsSourceDescription[];
657
- };
658
- type KmsPoolDescription = {
659
- name: string;
660
- source?: string;
661
- path: string;
662
- ready: boolean;
663
- };
664
- type KmsDescription = ModuleDescriptionBase<"kms"> & {
665
- pools: KmsPoolDescription[];
666
- };
667
- type OtelSignalDescription = {
668
- enabled: boolean;
669
- endpoint?: string;
670
- timeoutMillis?: number;
671
- concurrencyLimit?: number;
672
- exportIntervalMillis?: number;
673
- exportTimeoutMillis?: number;
674
- };
675
- type OtelDescription = ModuleDescriptionBase<"otel"> & {
676
- type?: OtelProviderType;
677
- name?: string;
678
- endpoint?: string;
679
- protocol?: OtelProtocol;
680
- apiKeyPool?: string;
681
- apiKeyHeader?: string;
682
- oauth?: {
683
- tokenUrl: string;
684
- clientId: string;
685
- scope?: string;
686
- audience?: string;
687
- };
688
- version?: string;
689
- deploymentEnvironment?: string;
690
- resourceAttributes?: OtelAttributes;
691
- levels?: OtelLevels;
692
- console?: OtelConsoleMode;
693
- signals: {
694
- traces: OtelSignalDescription;
695
- metrics: OtelSignalDescription;
696
- logs: OtelSignalDescription;
697
- };
698
- };
699
- type OaaDescription = {
700
- ready: boolean;
701
- url?: string;
702
- providerId?: string;
703
- datasourceId?: string;
704
- applicationName?: string;
705
- applicationType?: string;
706
- population?: Record<string, string>;
707
- fullSync: boolean;
708
- };
709
- type AuthzDescription = ModuleDescriptionBase<"authz"> & {
710
- scopesAsEntitlements: boolean;
711
- trustedProvisioningClients: Array<{
712
- issuer: string;
713
- audience: string | string[];
714
- clientId: string;
715
- permissions: string[];
716
- }>;
717
- oaa?: OaaDescription;
718
- stores: {
719
- accessStore: boolean;
720
- accessIndex: boolean;
721
- catalogStore: boolean;
722
- resources: boolean;
723
- };
724
- };
725
- type TmDescription = ModuleDescriptionBase<"tm"> & {
726
- enabled: boolean;
727
- integrator?: {
728
- id: string;
729
- name?: string;
730
- url: string;
731
- issuer: string;
732
- jwksUri: string;
733
- audience: string;
734
- clientId: string;
735
- };
736
- consentTtlSeconds?: number;
737
- maxRedeemAttempts?: number;
738
- };
739
- type ModuleDescription = SsoDescription | CiamDescription | IamDescription | WorkloadDescription | SecretsDescription | KmsDescription | OtelDescription | AuthzDescription | TmDescription;
740
- type IoniteDescription = {
741
- id?: string;
742
- sdk: {
743
- version: string;
744
- catalogVersion: number;
745
- };
746
- basePath: string;
747
- urls: CapabilityEndpointUrls;
748
- ok: boolean;
749
- applied: boolean;
750
- config: ConfigApplyStatus;
751
- modules: Record<ModuleName, ModuleReadinessState & {
752
- description?: ModuleDescription;
753
- }>;
754
- };
755
- /**
756
- * Shared minimal identity fields used to build both the workforce user
757
- * record (`BaseUser`) and the CIAM customer record (`BaseCustomer`), as well
758
- * as the authenticated session types (`WorkforceUser`, `Customer`).
759
- *
760
- * This is an internal structural base and is intentionally not part of the
761
- * public API surface; consumers extend the `BaseUser` Zod/Valibot schema
762
- * instead.
763
- */
764
- interface BaseUserFields {
765
- /**
766
- * Unique identifier for the user
767
- */
768
- id?: string;
769
- /**
770
- * REQUIRED. Unique identifier for login
771
- */
772
- userName: string;
773
- /**
774
- * REQUIRED. Simple display name
775
- */
776
- name: string;
777
- /**
778
- * REQUIRED. Primary email address
779
- */
780
- email: string;
781
- /**
782
- * URL to user's avatar/profile picture
783
- */
784
- avatar?: string;
785
- /**
786
- * User type (e.g., "employee", "contractor", "customer").
787
- * Shared by SSO/CIAM and enterprise/SCIM user representations.
788
- */
789
- userType?: string;
790
- }
791
- /**
792
- * Shared types for paginated list operations across stores.
793
- *
794
- * List methods return a ListResult with total, count, items, size, page, and pages.
795
- * Options accept optional start (0-based), limit (page size), and filter.
796
- *
797
- * ORDERING CONTRACT: `list()` does NOT accept a caller-specified sort. Every store MUST return items
798
- * in a stable, deterministic order (recommended: primary key ascending) so that offset pagination is
799
- * coherent across pages — page N+1 must continue exactly where page N ended for an unchanged dataset.
800
- * UI-style arbitrary sorting is the app's concern (sort the returned page, or push ORDER BY into a
801
- * SQL/search-backed custom store); the SDK only guarantees deterministic paging.
802
- */
803
- /**
804
- * Result of a paginated list operation.
805
- *
806
- * @template T - Item type (e.g. Group, BaseUser, BaseTenant)
208
+ * Result of a paginated list operation.
209
+ *
210
+ * @template T - Item type (e.g. Group, BaseUser, BaseTenant)
807
211
  */
808
212
  interface ListResult<T> {
809
213
  /** Total number of records matching (before pagination). */
@@ -1567,11 +971,10 @@ type WorkloadIdentity = {
1567
971
  /** Granted OAuth scopes (space-delimited). */
1568
972
  scope?: string;
1569
973
  /**
1570
- * Whether the trusted IdP that validated this token opts into honoring its OAuth `scope` claim as
1571
- * entitlements (per-IdP intent, resolved at validation time). Consumed by the request-level `has*`
1572
- * helpers; `undefined` falls back to the global `RemoteConfig.authz.scopesAsEntitlements`.
974
+ * Claim-derived entitlements for this request. Present only when the matched incoming IdP
975
+ * configured `claimsAsEntitlements`. Never persisted.
1573
976
  */
1574
- scopesAsEntitlements?: boolean;
977
+ derivedEntitlements?: DerivedEntitlement[];
1575
978
  /**
1576
979
  * Enterprise Controlled ID for this workload (`ecid:<realm>:<opaque>`), when carried on the token
1577
980
  * `ecid` claim or enriched from a wired `WorkloadIdentityStore`. A workload is its own governance
@@ -1953,165 +1356,823 @@ type BaseWorkloadIdentitySdkFields = {
1953
1356
  /** Optional free-form metadata bag. */
1954
1357
  metadata?: Record<string, unknown>;
1955
1358
  };
1956
- type BaseWorkloadIdentityReservedKey = keyof BaseWorkloadIdentitySdkFields;
1957
- type BaseWorkloadIdentity<TExtended = object> = BaseWorkloadIdentitySdkFields & NoReserved<TExtended, BaseWorkloadIdentityReservedKey, "id">;
1958
- /**
1959
- * Abstract interface for workload identity storage backends. Implement to back the registry with
1960
- * in-memory, Redis, or a database. Mirrors {@link UserStore}.
1961
- *
1962
- * @template TExtended - Type-safe custom data that consumers can add to workload identities.
1963
- */
1964
- interface WorkloadIdentityStore<TExtended = object> {
1965
- /**
1966
- * Retrieve a workload identity by its unique id.
1967
- *
1968
- * @param id - The workload's unique identifier.
1969
- * @returns The workload identity if found, undefined otherwise.
1970
- */
1971
- get(id: string): Promise<BaseWorkloadIdentity<TExtended> | undefined>;
1972
- /**
1973
- * Retrieve a workload identity by matching identifying attributes (e.g. `clientId`, `externalId`).
1974
- *
1975
- * @param identity - The workload identity to look up.
1976
- * @returns The workload identity if found, undefined otherwise.
1977
- */
1978
- lookup(identity: BaseWorkloadIdentity<TExtended>): Promise<BaseWorkloadIdentity<TExtended> | undefined>;
1979
- /**
1980
- * Optional indexed lookup by `externalId`. When omitted, callers fall back to `lookup` or a list scan.
1981
- */
1982
- getByExternalId?(externalId: string): Promise<BaseWorkloadIdentity<TExtended> | undefined>;
1983
- /**
1984
- * Create or update a workload identity. If a record with the same `id` exists it is updated,
1985
- * otherwise a new record is created.
1986
- *
1987
- * @param identity - The workload identity to store.
1988
- */
1989
- upsert(identity: BaseWorkloadIdentity<TExtended>): Promise<BaseWorkloadIdentity<TExtended>>;
1990
- /**
1991
- * Delete a workload identity by id.
1992
- *
1993
- * @param id - The workload's unique identifier.
1994
- * @returns The number of records deleted (0 or 1).
1995
- */
1996
- delete(id: string): Promise<number>;
1997
- /**
1998
- * List workload identities with optional pagination and sort.
1999
- *
2000
- * @param options - Optional start (0-based), limit (page size), and sort.
2001
- * @returns ListResult with total, count, items, size, page, pages.
2002
- */
2003
- list(options?: ListOptions): Promise<ListResult<BaseWorkloadIdentity<TExtended>>>;
2004
- }
2005
- /**
2006
- * IAM delta egress mode (RemoteConfig/ECI intent). Selects how IAM-visible runtime changes that
2007
- * occur inside the application are surfaced to the enterprise's IAM/governance layer:
2008
- *
2009
- * - `'patch'`: outbound SCIM into the IAM tool (per-resource POST/PUT/PATCH/DELETE,
2010
- * correlated by the App-owned id carried as SCIM `externalId`). The IAM tool's view stays fresh as users, materialized entitlement
2011
- * definitions, and access change in the app. See the README "IAM delta egress" section.
2012
- *
2013
- * Origin/trust: every push is authenticated with the app's outgoing workload client (OAuth bearer);
2014
- * the receiver treats the authenticated workload identity as the verified origin. Audit
2015
- * accountability lives with the IdP that authenticated the workload and the IAM tool that granted
2016
- * it access. The SDK only surfaces the signal; it never dictates the enterprise's workflow or
2017
- * policy (flag, auto-revoke + notify, or simply audit).
2018
- */
2019
- type IamDeltaMode = "patch";
2020
- type AccessRequestCreate = {
2021
- subject: string;
2022
- subjectType: SubjectType;
2023
- targetType: EntitlementType;
2024
- target: string;
2025
- operation: "grant" | "revoke";
2026
- justification?: string;
1359
+ type BaseWorkloadIdentityReservedKey = keyof BaseWorkloadIdentitySdkFields;
1360
+ type BaseWorkloadIdentity<TExtended = object> = BaseWorkloadIdentitySdkFields & NoReserved<TExtended, BaseWorkloadIdentityReservedKey, "id">;
1361
+ /**
1362
+ * Abstract interface for workload identity storage backends. Implement to back the registry with
1363
+ * in-memory, Redis, or a database. Mirrors {@link UserStore}.
1364
+ *
1365
+ * @template TExtended - Type-safe custom data that consumers can add to workload identities.
1366
+ */
1367
+ interface WorkloadIdentityStore<TExtended = object> {
1368
+ /**
1369
+ * Retrieve a workload identity by its unique id.
1370
+ *
1371
+ * @param id - The workload's unique identifier.
1372
+ * @returns The workload identity if found, undefined otherwise.
1373
+ */
1374
+ get(id: string): Promise<BaseWorkloadIdentity<TExtended> | undefined>;
1375
+ /**
1376
+ * Retrieve a workload identity by matching identifying attributes (e.g. `clientId`, `externalId`).
1377
+ *
1378
+ * @param identity - The workload identity to look up.
1379
+ * @returns The workload identity if found, undefined otherwise.
1380
+ */
1381
+ lookup(identity: BaseWorkloadIdentity<TExtended>): Promise<BaseWorkloadIdentity<TExtended> | undefined>;
1382
+ /**
1383
+ * Optional indexed lookup by `externalId`. When omitted, callers fall back to `lookup` or a list scan.
1384
+ */
1385
+ getByExternalId?(externalId: string): Promise<BaseWorkloadIdentity<TExtended> | undefined>;
1386
+ /**
1387
+ * Create or update a workload identity. If a record with the same `id` exists it is updated,
1388
+ * otherwise a new record is created.
1389
+ *
1390
+ * @param identity - The workload identity to store.
1391
+ */
1392
+ upsert(identity: BaseWorkloadIdentity<TExtended>): Promise<BaseWorkloadIdentity<TExtended>>;
1393
+ /**
1394
+ * Delete a workload identity by id.
1395
+ *
1396
+ * @param id - The workload's unique identifier.
1397
+ * @returns The number of records deleted (0 or 1).
1398
+ */
1399
+ delete(id: string): Promise<number>;
1400
+ /**
1401
+ * List workload identities with optional pagination and sort.
1402
+ *
1403
+ * @param options - Optional start (0-based), limit (page size), and sort.
1404
+ * @returns ListResult with total, count, items, size, page, pages.
1405
+ */
1406
+ list(options?: ListOptions): Promise<ListResult<BaseWorkloadIdentity<TExtended>>>;
1407
+ }
1408
+ /**
1409
+ * IAM delta egress mode (RemoteConfig/ECI intent). Selects how IAM-visible runtime changes that
1410
+ * occur inside the application are surfaced to the enterprise's IAM/governance layer:
1411
+ *
1412
+ * - `'patch'`: outbound SCIM into the IAM tool (per-resource POST/PUT/PATCH/DELETE,
1413
+ * correlated by the App-owned id carried as SCIM `externalId`). The IAM tool's view stays fresh as users, materialized entitlement
1414
+ * definitions, and access change in the app. See the README "IAM delta egress" section.
1415
+ *
1416
+ * Origin/trust: every push is authenticated with the app's outgoing workload client (OAuth bearer);
1417
+ * the receiver treats the authenticated workload identity as the verified origin. Audit
1418
+ * accountability lives with the IdP that authenticated the workload and the IAM tool that granted
1419
+ * it access. The SDK only surfaces the signal; it never dictates the enterprise's workflow or
1420
+ * policy (flag, auto-revoke + notify, or simply audit).
1421
+ */
1422
+ type IamDeltaMode = "patch";
1423
+ /** ConfigSource-owned authenticated destination for the AccessRequests protocol. */
1424
+ type AccessRequestsDestination = {
1425
+ url: string;
1426
+ /** Named outgoing workload client. Omit to use the default workload server identity. */
1427
+ audience?: string;
1428
+ };
1429
+ type AccessRequestCreate = {
1430
+ subject: string;
1431
+ subjectType: SubjectType;
1432
+ targetType: EntitlementType;
1433
+ target: string;
1434
+ operation: "grant" | "revoke";
1435
+ justification?: string;
1436
+ };
1437
+ type AccessRequestResult = {
1438
+ id: string;
1439
+ status: "pending" | "approved" | "denied";
1440
+ operation: "grant" | "revoke";
1441
+ trackingUrl: string;
1442
+ };
1443
+ /** SCIM resource types the delta patch adapter addresses. */
1444
+ type IamDeltaResourceType = "user" | "group" | "workload" | "customer";
1445
+ /** Destination-owned reference captured from a SCIM User/Group response. */
1446
+ type DestinationReference = {
1447
+ /** Service-provider-assigned SCIM resource id. */
1448
+ providerId: string;
1449
+ /** IAM-owned deep link where access to an entitlement can be requested, when supplied. */
1450
+ requestUrl?: string;
1451
+ };
1452
+ /**
1453
+ * Full IAM delta snapshot supplied by the app's maintenance/reconcile path. It mirrors the entities
1454
+ * visible through IAM aggregation: users, durable entitlement definitions, and active access roots.
1455
+ */
1456
+ type IamDeltaReconcileInput = {
1457
+ users?: Iterable<BaseUser> | AsyncIterable<BaseUser>;
1458
+ workloads?: Iterable<BaseWorkloadIdentity> | AsyncIterable<BaseWorkloadIdentity>;
1459
+ customers?: Iterable<BaseCustomer> | AsyncIterable<BaseCustomer>;
1460
+ groups?: Iterable<Group> | AsyncIterable<Group>;
1461
+ roles?: Iterable<Role> | AsyncIterable<Role>;
1462
+ permissions?: Iterable<Permission> | AsyncIterable<Permission>;
1463
+ access?: Iterable<AccessChange> | AsyncIterable<AccessChange>;
1464
+ };
1465
+ /** Result of an app-driven full reconcile (re-push of definitions, users, and active roots). */
1466
+ type IamDeltaReconcileResult = {
1467
+ pushed: number;
1468
+ skipped: number;
1469
+ errors: string[];
1470
+ };
1471
+ /**
1472
+ * Projects observed runtime mutations to the configured IAM delta destination. The invariant is:
1473
+ * every runtime mutation the SDK observes that would change what IAM full sync shows must also
1474
+ * egress through this handle. That includes users, materialized entitlement definitions, and access
1475
+ * roots. Code templates are not pushed during config apply.
1476
+ *
1477
+ * Request-triggered methods resolve when projection completes (or immediately when not ready). They
1478
+ * are best-effort egress: the SCIM mutation path awaits them inside the request, but a rejection is
1479
+ * caught and reported as degraded egress — it never turns a committed store mutation into a SCIM
1480
+ * error. Reactive catalog/resource events use the same methods outside a request and warn on failure.
1481
+ *
1482
+ * Readiness follows the shared contract: `isReady()` is a synchronous check; `ready(timeout?)`
1483
+ * resolves once the emitter first becomes usable.
1484
+ */
1485
+ interface IamDeltaEmitter {
1486
+ /** Upsert a full SCIM User representation at the destination. */
1487
+ onUserUpsert(user: BaseUser): Promise<void>;
1488
+ /** Delete a destination User identified strictly by externalId. */
1489
+ onUserDelete(externalId: string): Promise<void>;
1490
+ /** Upsert a full AppDev-projected SCIM Workload representation at the destination. */
1491
+ onWorkloadUpsert(workload: BaseWorkloadIdentity): Promise<void>;
1492
+ /** Delete a destination Workload identified by externalId (falling back to its App-owned id). */
1493
+ onWorkloadDelete(externalId: string): Promise<void>;
1494
+ /** Upsert a full AppDev-projected SCIM Customer representation at the destination. */
1495
+ onCustomerUpsert(customer: BaseCustomer): Promise<void>;
1496
+ /** Delete a destination Customer identified by externalId (falling back to its App-owned id). */
1497
+ onCustomerDelete(externalId: string): Promise<void>;
1498
+ /** Upsert a full SCIM Group representation for a group, role, or permission definition. */
1499
+ onEntitlementUpsert(entity: Entitlement, type: EntitlementType): Promise<void>;
1500
+ /** Delete a destination entitlement Group identified by the App-owned catalog id. */
1501
+ onEntitlementDelete(type: EntitlementType, id: string): Promise<void>;
1502
+ /** Project a granted root; resolves on completion (or immediately when not ready), rejects on push failure. */
1503
+ onGrant(change: AccessChange): Promise<void>;
1504
+ /** Project a revoked root; resolves on completion (or immediately when not ready), rejects on push failure. */
1505
+ onRevoke(change: AccessChange): Promise<void>;
1506
+ /** Re-push the complete IAM-visible snapshot to the destination (app-driven full reconcile). */
1507
+ reconcile(input: IamDeltaReconcileInput): Promise<IamDeltaReconcileResult>;
1508
+ /**
1509
+ * Submit an on-behalf access request at `${iam.url}/AccessRequests`. Requires only the
1510
+ * destination channel (`url` plus the `deltaAudience` workload client) — not `isReady()`, which
1511
+ * additionally demands delta egress (a per-kind `'patch'` mode and its receipt stores). A tenant
1512
+ * whose IAM aggregates by pull alone may still submit requests.
1513
+ */
1514
+ requestAccess(input: AccessRequestCreate): Promise<AccessRequestResult>;
1515
+ /** Read the current state of a request previously submitted to this destination. */
1516
+ getAccessRequest(id: string): Promise<AccessRequestResult>;
1517
+ /**
1518
+ * Read a previously captured destination reference without making a network request. Returns
1519
+ * undefined until the resource has been resolved or pushed to the configured IAM destination.
1520
+ * `correlationId` is a User's `externalId` or an entitlement's App-owned catalog `id`.
1521
+ */
1522
+ getDestinationRef(resourceType: IamDeltaResourceType, correlationId: string): Promise<DestinationReference | undefined>;
1523
+ isReady(): boolean;
1524
+ ready(timeout?: number): Promise<void>;
1525
+ }
1526
+ /** Built-in provider types. `oidc` is a generic OIDC provider; `magic-link` is the passwordless flow. */
1527
+ type CIAMProviderType = "oidc" | "google" | "github" | "microsoft" | "apple" | "magic-link";
1528
+ /** Branding colors for rendering a provider button in light and dark themes. */
1529
+ type CIAMProviderColors = {
1530
+ /** Background/brand color for light theme (hex or CSS color). */
1531
+ light: string;
1532
+ /** Background/brand color for dark theme (hex or CSS color). */
1533
+ dark: string;
1534
+ /** Optional secondary/accent color. */
1535
+ secondary?: string;
1536
+ };
1537
+ /** Operator-supplied branding so the UI can render a provider list without hardcoding. */
1538
+ type CIAMProviderBranding = {
1539
+ /** Human-readable name shown on the login button (e.g. "Google"). */
1540
+ displayName: string;
1541
+ /** External icon URL (typically an SVG/PNG hosted on a CDN). */
1542
+ iconUrl?: string;
1543
+ /** Light/dark brand colors. */
1544
+ colors?: CIAMProviderColors;
1545
+ /** Optional provider info/marketing URL. */
1546
+ url?: string;
1547
+ };
1548
+ /**
1549
+ * A single CIAM provider declaration. OIDC/OAuth2 endpoint and credential
1550
+ * fields come from the ConfigSource (never application code).
1551
+ */
1552
+ type CIAMProviderConfig = {
1553
+ /** Provider adapter type. Selects defaults and claim mapping. */
1554
+ type: CIAMProviderType;
1555
+ /** Whether this provider is enabled. Defaults to true when omitted. */
1556
+ enabled?: boolean;
1557
+ /** Recommended display order (ascending). Ties broken by declaration order. */
1558
+ order?: number;
1559
+ /** UI branding metadata. */
1560
+ branding?: CIAMProviderBranding;
1561
+ /** OIDC issuer/authority (used for discovery when explicit endpoints are omitted). */
1562
+ authority?: string;
1563
+ /** Authorization endpoint (overrides preset). */
1564
+ authorizationUrl?: string;
1565
+ /** Token endpoint (overrides preset). */
1566
+ tokenUrl?: string;
1567
+ /** JWKS endpoint for ID token verification (overrides preset). */
1568
+ jwksUri?: string;
1569
+ /** OAuth2 UserInfo endpoint for providers without an ID token (e.g. GitHub). */
1570
+ userInfoUrl?: string;
1571
+ /** OAuth2 client id (ConfigSource-only). */
1572
+ clientId?: string;
1573
+ /** OAuth2 client secret (ConfigSource-only). */
1574
+ clientSecret?: string;
1575
+ /** Requested scope (overrides preset). */
1576
+ scope?: string;
1577
+ /** Apple: team id for client-secret generation. */
1578
+ teamId?: string;
1579
+ /** Apple: key id for client-secret generation. */
1580
+ keyId?: string;
1581
+ /** Apple: PKCS#8 PEM private key for client-secret generation. */
1582
+ privateKey?: string;
1583
+ /**
1584
+ * ConfigSource-only. When set, this provider's token claims are derived into session-scoped
1585
+ * customer entitlements at login. Magic link has no issuer and ignores this block.
1586
+ */
1587
+ claimsAsEntitlements?: ClaimsAsEntitlements;
1588
+ /** ConfigSource-only IdP assignment workflow used when IAM assignment is `'idp'`. */
1589
+ accessRequests?: AccessRequestsDestination;
1590
+ };
1591
+ /** Sanitized provider entry returned by the discovery endpoint for the UI. */
1592
+ type CIAMProviderDescriptor = {
1593
+ /** Provider key (matches the RemoteConfig map key); used as `?provider=`. */
1594
+ name: string;
1595
+ type: CIAMProviderType;
1596
+ displayName: string;
1597
+ /** SDK-derived login URL to navigate to (begins the flow). */
1598
+ loginUrl: string;
1599
+ iconUrl?: string;
1600
+ colors?: CIAMProviderColors;
1601
+ url?: string;
1602
+ };
1603
+ /**
1604
+ * Light display cookies (`${cookiesPrefix}.profile`).
1605
+ *
1606
+ * The envelope is SDK-owned. App code supplies only `user`. The cookie is not an
1607
+ * authentication input: the server never reads it to resolve a session, and the browser
1608
+ * may forge it. `expiresAt` is display metadata so a client can order entries without a
1609
+ * round trip; authoritative expiry is the peer `${cookiesPrefix}.session` record.
1610
+ */
1611
+ declare const DISPLAY_COOKIE_SUFFIX = ".profile";
1612
+ declare const DISPLAY_COOKIE_VERSION = 1;
1613
+ declare const DEFAULT_DISPLAY_COOKIE_MAX = 10;
1614
+ declare const DEFAULT_DISCOVERED_COOKIE_MAX = 10;
1615
+ declare const DEFAULT_DISCOVERED_COOKIE_TTL_SECONDS: number;
1616
+ declare const DISCOVERED_COOKIE_PREFIX = "ion.discovered";
1617
+ type DisplayCookieConfig = {
1618
+ /**
1619
+ * When true, the SDK writes a non-HttpOnly display cookie beside the opaque session cookie.
1620
+ * ConfigSource-only. Default false.
1621
+ */
1622
+ enabled?: boolean;
1623
+ /**
1624
+ * How many display cookies a single response may leave on the browser, newest session window
1625
+ * first. ConfigSource-only. Values below 1 fall back to {@link DEFAULT_DISPLAY_COOKIE_MAX}.
1626
+ * @default 10
1627
+ */
1628
+ max?: number;
1629
+ /**
1630
+ * Session-less tenant hints written by an App after an explicit directory lookup.
1631
+ * ConfigSource-only and off unless `enabled` is true.
1632
+ */
1633
+ discovered?: DiscoveredDisplayCookieConfig;
1634
+ };
1635
+ type DiscoveredDisplayCookieConfig = {
1636
+ enabled?: boolean;
1637
+ /** Browser hint lifetime. This is not a session expiry. @default 14400 */
1638
+ ttlSeconds?: number;
1639
+ /** Independent cap; discovered hints never displace live-session entries. @default 10 */
1640
+ max?: number;
1641
+ };
1642
+ /** What `${basePath}/auth/user` and `${basePath}/auth/customer` return. ConfigSource-only. */
1643
+ type UserEndpointPolicy = "full" | "display" | "off";
1644
+ type DisplayUser = Record<string, string | number | boolean | null>;
1645
+ type DisplayAuthType = "sso" | "ciam";
1646
+ type DisplayCookieEnvelope = {
1647
+ v: typeof DISPLAY_COOKIE_VERSION;
1648
+ /**
1649
+ * Session envelopes omit this field (absent means `'session'`) so the wire format stays identical
1650
+ * to cookies written before discovered hints existed; only discovered hints set it explicitly.
1651
+ * Readers must treat `undefined` as `'session'`.
1652
+ */
1653
+ kind?: "session" | "discovered";
1654
+ tenantId?: string;
1655
+ authType: DisplayAuthType;
1656
+ /** ISO timestamp copied from the session window at write time. Display only. */
1657
+ expiresAt: string;
1658
+ user: DisplayUser;
1659
+ tenantName?: string;
1660
+ };
1661
+ type DisplayIdentity = {
1662
+ name?: string;
1663
+ email?: string;
1664
+ avatar?: string;
1665
+ };
1666
+ declare function resolveDisplayCookieMax(max: number | undefined): number;
1667
+ declare function resolveDiscoveredCookieMax(max: number | undefined): number;
1668
+ declare function resolveDiscoveredCookieTtlSeconds(ttlSeconds: number | undefined): number;
1669
+ declare function defaultDisplayUser(identity: DisplayIdentity): DisplayUser;
1670
+ /** Drop non-primitives and auth-bearing keys. Display cookies carry UI fields only. */
1671
+ declare function sanitizeDisplayUser(value: unknown): DisplayUser;
1672
+ /**
1673
+ * AppDev projection runs on the full user (including custom attributes). When omitted, or when it
1674
+ * throws, the cookie carries name, email, and avatar only. Forbidden and non-primitive fields are
1675
+ * dropped either way — a projector cannot put a session id or token into the cookie.
1676
+ */
1677
+ declare function projectDisplayUser<TUser extends object>(user: TUser, projector?: (user: TUser) => unknown): DisplayUser;
1678
+ declare function encodeDisplayCookie(envelope: DisplayCookieEnvelope): string;
1679
+ declare function decodeDisplayCookie(raw: string): DisplayCookieEnvelope | undefined;
1680
+ type ParsedDisplayCookie = {
1681
+ name: string;
1682
+ prefix: string;
1683
+ envelope: DisplayCookieEnvelope;
1684
+ };
1685
+ declare function readDisplayCookies(cookieHeader: string | null | undefined): ParsedDisplayCookie[];
1686
+ /** Client ordering: newest session window first. Invalid timestamps sort last. */
1687
+ declare function compareDisplayExpiryDesc(a: string | undefined, b: string | undefined): number;
1688
+ declare function profileCookieName(cookiesPrefix: string): string;
1689
+ declare function discoveredProfileCookieName(tenantId: string): string;
1690
+ /**
1691
+ * Minimal logger interface compatible with common structured logging patterns.
1692
+ */
1693
+ interface Logger {
1694
+ trace(message?: unknown, ...optionalParams: unknown[]): void;
1695
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
1696
+ info(message?: unknown, ...optionalParams: unknown[]): void;
1697
+ warn(message?: unknown, ...optionalParams: unknown[]): void;
1698
+ error(message?: unknown, ...optionalParams: unknown[]): void;
1699
+ }
1700
+ /**
1701
+ * Renders a structured logger call as one greppable line while leaving the source fields separate
1702
+ * for telemetry exporters.
1703
+ */
1704
+ declare function formatLogLine(level: keyof Logger, message: unknown, optionalParams?: unknown[], timestamp?: Date): string;
1705
+ /**
1706
+ * No-op implementation — does nothing for any log level
1707
+ */
1708
+ declare const silentLogger: Logger;
1709
+ /**
1710
+ * Default logger used until an ionite instance is configured with
1711
+ * an OpenTelemetry-backed logger or an application-provided logger.
1712
+ */
1713
+ declare const defaultLogger: Logger;
1714
+ /**
1715
+ * Logger that logs messages debug, info, warn, and error to the console.
1716
+ */
1717
+ declare const debugLogger: Logger;
1718
+ /**
1719
+ * Logger that logs messages info, warn, and error to the console.
1720
+ */
1721
+ declare const infoLogger: Logger;
1722
+ /**
1723
+ * Logger that logs messages warn and error to the console.
1724
+ */
1725
+ declare const warnLogger: Logger;
1726
+ /**
1727
+ * Human-readable single-line console logger for local application output.
1728
+ */
1729
+ declare const prettyLogger: Logger;
1730
+ import { StandardSchemaV1 as StandardSchemaV15 } from "@standard-schema/spec";
1731
+ type ChangeListener = () => void;
1732
+ /**
1733
+ * Reactive source/adapter contract. Implemented by config-source-backed adapters
1734
+ * (for example `SecretsSource`) to advertise change subscription and source liveness.
1735
+ * `isAvailable()` here is an adapter liveness hook and is intentionally distinct from
1736
+ * module readiness (`ModuleReadiness.isReady()` / `ready()`).
1737
+ */
1738
+ type ReactiveHandle = {
1739
+ beforeChange?(listener: ChangeListener): () => void;
1740
+ afterChange?(listener: ChangeListener): () => void;
1741
+ isAvailable?(): boolean;
1742
+ };
1743
+ /**
1744
+ * Readiness contract for reactive module/service handles whose usability depends on
1745
+ * RemoteConfig that can arrive or change at runtime (for example `ion.secrets`,
1746
+ * `ion.workload`, `ion.otel`, `ion.authz.oaa`).
1747
+ *
1748
+ * - `isReady()` is a synchronous check; use it in request handlers and health probes and
1749
+ * return 503 (or branch) when false instead of blocking.
1750
+ * - `ready(timeout?)` resolves once the handle first becomes usable; use it at startup or
1751
+ * as a feature gate. With no timeout it waits indefinitely; with `timeout > 0` it rejects
1752
+ * after that many milliseconds.
1753
+ */
1754
+ type ModuleReadiness = {
1755
+ beforeChange?(listener: ChangeListener): () => void;
1756
+ afterChange?(listener: ChangeListener): () => void;
1757
+ isReady?(): boolean;
1758
+ ready?(timeout?: number): Promise<void>;
1759
+ };
1760
+ /**
1761
+ * Canonical ionite module names used by the holistic readiness report and the
1762
+ * `requireReady([...])` helper. These are the config-driven module handles whose readiness can be
1763
+ * composed; `ion.isReady()` itself stays the narrow "config applied" signal and is NOT one of these.
1764
+ *
1765
+ * IAM-delta egress is intentionally NOT a member. Delta patch-back is best-effort and non-fatal (a
1766
+ * failed push only logs `degraded` and is reconciled by a later full sync — the Batch 7 drift-signal
1767
+ * contract), so folding it into `iam` readiness would let a delta-target outage make
1768
+ * `requireReady(['iam'])` false and take the app out of rotation for a signal that is designed not to
1769
+ * block. Apps that DO treat delta as a hard dependency can gate on `ion.iam.delta.isReady()` /
1770
+ * `ion.iam.delta.ready()` explicitly instead.
1771
+ */
1772
+ type ModuleName = "sso" | "ciam" | "iam" | "workload" | "otel" | "secrets" | "kms" | "authz" | "tm";
1773
+ /** Per-module readiness snapshot in {@link ReadinessReport}. */
1774
+ type ModuleReadinessState = {
1775
+ /** Whether the module is active (present/requested) in the effective config. Inactive modules never block readiness. */
1776
+ active: boolean;
1777
+ /** Synchronous readiness of the module right now (mirrors the module's own `isReady()`). */
1778
+ ready: boolean;
1779
+ /** Human-readable explanation when the module is `active` but not `ready`. */
1780
+ reason?: string;
1781
+ };
1782
+ /**
1783
+ * Holistic, read-only readiness snapshot for an ionite instance. Returned by
1784
+ * `ion.readiness()` and used by the built-in `${basePath}/readyz` endpoint. This is composition
1785
+ * DATA, not a request gate: applications combine it (via `ion.requireReady([...])`) with their own
1786
+ * non-ionite dependency checks to build their health endpoints.
1787
+ */
1788
+ type ReadinessReport = {
1789
+ /** True when config has been applied (`applied`) and every ACTIVE module is ready. */
1790
+ ok: boolean;
1791
+ /** Whether RemoteConfig has been applied at least once (mirrors `ion.isReady()`). */
1792
+ applied: boolean;
1793
+ /** Per-module readiness keyed by {@link ModuleName}. */
1794
+ modules: Record<ModuleName, ModuleReadinessState>;
1795
+ /** Most recent config-application outcome (last applied time and last error, if any). */
1796
+ config: ConfigApplyStatus;
1797
+ };
1798
+ /** Result of `ion.requireReady(names)`: a synchronous, declarative readiness gate over selected modules. */
1799
+ type RequireReadyResult = {
1800
+ /** True when config is applied and every requested module is ready. */
1801
+ ok: boolean;
1802
+ /** The requested modules that are not ready, with reasons when available. */
1803
+ notReady: Array<{
1804
+ name: ModuleName;
1805
+ reason?: string;
1806
+ }>;
1807
+ };
1808
+ type CapabilityKey = "sso.login" | "sso.jit" | "sso.logout" | "sso.back_channel_logout" | "sso.claims_authz" | "ciam.magic_link" | "ciam.oidc_login" | "ciam.customer" | "ciam.logout" | "ciam.claims_authz" | "iam.users" | "iam.groups" | "iam.workloads" | "iam.customers" | "workload.incoming" | "workload.outgoing" | "workload.claims_authz" | "authz.oaa" | "authz.access_requests" | "tm.integration";
1809
+ type CapabilityEndpointUrls = {
1810
+ readyzUrl: string;
1811
+ capabilitiezUrl: string;
1812
+ sso: {
1813
+ loginUrl: string;
1814
+ userUrl: string;
1815
+ logoutUrl: string;
1816
+ logoutBackChannelUrl: string;
1817
+ refreshUrl: string;
1818
+ callbackUrl: string;
1819
+ };
1820
+ workload: {
1821
+ validateUrl: string;
1822
+ jwksUrl: string;
1823
+ };
1824
+ iam: {
1825
+ basePath: string;
1826
+ usersUrl: string;
1827
+ groupsUrl: string;
1828
+ workloadsUrl: string;
1829
+ customersUrl: string;
1830
+ };
1831
+ ciam: {
1832
+ magicLinkUrl: string;
1833
+ magicLinkLoginUrl: string;
1834
+ customerUrl: string;
1835
+ customerLoginUrl: string;
1836
+ customerCallbackUrl: string;
1837
+ customerProvidersUrl: string;
1838
+ logoutUrl: string;
1839
+ };
1840
+ };
1841
+ type CapabilityState = {
1842
+ module: ModuleName;
1843
+ active: boolean;
1844
+ ready: boolean;
1845
+ testable: boolean;
1846
+ urls?: string[];
1847
+ reason?: string;
1848
+ };
1849
+ type CapabilitiezManifest = {
1850
+ sdk: {
1851
+ /** Runtime @ionite/server version serving this manifest. */
1852
+ version: string;
1853
+ /** Version of the stable capability/test-unit vocabulary. */
1854
+ catalogVersion: number;
1855
+ };
1856
+ basePath: string;
1857
+ urls: CapabilityEndpointUrls;
1858
+ modules: Record<ModuleName, ModuleReadinessState>;
1859
+ capabilities: Record<CapabilityKey, CapabilityState>;
1860
+ /**
1861
+ * True when FrameworkConfig wired a live LFV callback transport. Boolean only — the transport
1862
+ * object, Redis URL, and credentials are never exposed.
1863
+ */
1864
+ lfvCallbackTransport: boolean;
1865
+ };
1866
+ type OtelSignalName = "traces" | "metrics" | "logs";
1867
+ type OtelProtocol = "http/protobuf" | "http/json";
1868
+ type OtelProviderType = "otlp" | "grafana-lgtm" | "datadog" | "splunk" | "elastic";
1869
+ type OtelLogLevel = "trace" | "debug" | "info" | "warn" | "error";
1870
+ type OtelLevels = Partial<Record<OtelLogLevel, boolean>>;
1871
+ /** Local console mirror policy: disable it or set its minimum emitted severity. */
1872
+ type OtelConsoleMode = "off" | OtelLogLevel;
1873
+ type OtelAttributeValue = string | number | boolean | string[] | number[] | boolean[];
1874
+ type OtelAttributes = Record<string, OtelAttributeValue>;
1875
+ type OtelSignalConfig = {
1876
+ /** Per-signal OTLP endpoint. When omitted, the module appends /v1/{signal} to `endpoint`. */
1877
+ endpoint?: string;
1878
+ headers?: Record<string, string>;
1879
+ timeoutMillis?: number;
1880
+ concurrencyLimit?: number;
1881
+ };
1882
+ type OtelMetricsSignalConfig = OtelSignalConfig & {
1883
+ exportIntervalMillis?: number;
1884
+ exportTimeoutMillis?: number;
1885
+ };
1886
+ type OtelOAuthClientCredentialsConfig = {
1887
+ tokenUrl: string;
1888
+ clientId: string;
1889
+ clientSecret: string;
1890
+ scope?: string;
1891
+ audience?: string;
1892
+ headers?: Record<string, string>;
1893
+ };
1894
+ type OtelLogRecord = {
1895
+ severityNumber?: number;
1896
+ severityText?: string;
1897
+ body?: unknown;
1898
+ attributes?: Record<string, unknown>;
1899
+ };
1900
+ /**
1901
+ * OpenTelemetry config supplied by ConfigSource/RemoteConfig.
1902
+ * Keep environment-specific URLs and credentials here, not in FrameworkConfig.
1903
+ */
1904
+ type OtelConfig = {
1905
+ type?: OtelProviderType;
1906
+ name: string;
1907
+ endpoint?: string;
1908
+ protocol?: OtelProtocol;
1909
+ headers?: Record<string, string>;
1910
+ apiKey?: string;
1911
+ /** Name of a `RemoteConfig.kms` key pool used for exporter authentication. */
1912
+ apiKeyPool?: string;
1913
+ apiKeyHeader?: string;
1914
+ oauth?: OtelOAuthClientCredentialsConfig;
1915
+ version?: string;
1916
+ deploymentEnvironment?: string;
1917
+ resourceAttributes?: OtelAttributes;
1918
+ levels?: OtelLevels;
1919
+ /** `'off'` exports only to OTel; a level dual-emits at or above that severity. Defaults to `'info'`. */
1920
+ console?: OtelConsoleMode;
1921
+ traces?: boolean | OtelSignalConfig;
1922
+ metrics?: boolean | OtelMetricsSignalConfig;
1923
+ logs?: boolean | OtelSignalConfig;
1924
+ };
1925
+ /**
1926
+ * OpenTelemetry app/runtime wiring supplied by code.
1927
+ * Instrumentation instances and callbacks live here because they are framework-specific code.
1928
+ */
1929
+ type FrameworkOtelConfig = {
1930
+ levels?: OtelLevels;
1931
+ instrument?: unknown[];
1932
+ /** Optional app-owned destination/renderer for records admitted by `RemoteConfig.otel.console`. */
1933
+ console?: (record: OtelLogRecord) => void;
1934
+ spanProcessors?: unknown[];
1935
+ metricReaders?: unknown[];
1936
+ logRecordProcessors?: unknown[];
1937
+ sampler?: unknown;
1938
+ textMapPropagator?: unknown;
1939
+ contextManager?: unknown;
1940
+ configure?: (options: Record<string, unknown>) => Record<string, unknown> | void;
1941
+ };
1942
+ type Otel = {
1943
+ /** Secret-free, JSON-serializable configuration and readiness summary. */
1944
+ describe(): OtelDescription;
1945
+ beforeChange(listener: ChangeListener): () => void;
1946
+ afterChange(listener: ChangeListener): () => void;
1947
+ isReady(): boolean;
1948
+ ready(timeout?: number): Promise<void>;
1949
+ logger: Logger;
1950
+ forceFlush(): Promise<void>;
1951
+ shutdown(): Promise<void>;
1952
+ };
1953
+ type ModuleDescriptionBase<TModule extends ModuleName> = {
1954
+ module: TModule;
1955
+ active: boolean;
1956
+ ready: boolean;
1957
+ };
1958
+ type CookieDescription = {
1959
+ prefix?: string;
1960
+ path?: string;
1961
+ secure?: boolean;
1962
+ sameSite?: "Strict" | "Lax";
1963
+ domain?: string;
1964
+ };
1965
+ type SsoDescription = ModuleDescriptionBase<"sso"> & {
1966
+ authority?: string;
1967
+ tokenUrl?: string;
1968
+ authorizationUrl?: string;
1969
+ clientId?: string;
1970
+ redirectUri?: string;
1971
+ responseType?: "code";
1972
+ scope?: string;
1973
+ silentRedirectUri?: string;
1974
+ jwksUri?: string;
1975
+ endSessionEndpoint?: string;
1976
+ revocationEndpoint?: string;
1977
+ cookies: CookieDescription;
1978
+ loginStateTtl?: number;
1979
+ rotationGraceSeconds?: number;
1980
+ sessionWindowSeconds?: number;
1981
+ displayCookie?: DisplayCookieConfig;
1982
+ jit: {
1983
+ enabled: boolean;
1984
+ userStore: boolean;
1985
+ };
1986
+ sessionStore: boolean;
1987
+ /** Present when RemoteConfig configured claim-derived entitlements for this workforce issuer. */
1988
+ claimsAsEntitlements?: ClaimsAsEntitlementsDescription;
1989
+ urls: Partial<CapabilityEndpointUrls["sso"]>;
1990
+ };
1991
+ type CiamProviderDescription = {
1992
+ name: string;
1993
+ type: CIAMProviderType;
1994
+ enabled: boolean;
1995
+ order?: number;
1996
+ branding?: CIAMProviderBranding;
1997
+ authority?: string;
1998
+ authorizationUrl?: string;
1999
+ tokenUrl?: string;
2000
+ jwksUri?: string;
2001
+ userInfoUrl?: string;
2002
+ clientId?: string;
2003
+ scope?: string;
2004
+ claimsAsEntitlements?: ClaimsAsEntitlementsDescription;
2005
+ loginUrl: string;
2006
+ };
2007
+ type CiamDescription = ModuleDescriptionBase<"ciam"> & {
2008
+ magicLinkTtl?: number;
2009
+ loginStateTtl?: number;
2010
+ sessionTtl?: number;
2011
+ cookies: CookieDescription;
2012
+ displayCookie?: DisplayCookieConfig;
2013
+ jit: {
2014
+ enabled: boolean;
2015
+ customerStore: boolean;
2016
+ };
2017
+ sessionStore: boolean;
2018
+ magicLinkStore: boolean;
2019
+ providers: CiamProviderDescription[];
2020
+ urls: Partial<CapabilityEndpointUrls["ciam"]>;
2021
+ };
2022
+ type IamPrincipalDescription = {
2023
+ enabled: boolean;
2024
+ assignment: IamAssignmentPolicy;
2025
+ delta?: "patch";
2026
+ storeWired: boolean;
2027
+ };
2028
+ type AccessRequestsChannelsDescription = {
2029
+ iam?: string;
2030
+ sso?: string;
2031
+ ciam: Record<string, string>;
2032
+ };
2033
+ type IamDescription = ModuleDescriptionBase<"iam"> & {
2034
+ url?: string;
2035
+ deltaAudience?: string;
2036
+ accessRequests: AccessRequestsChannelsDescription;
2037
+ users: IamPrincipalDescription;
2038
+ workloads: IamPrincipalDescription;
2039
+ customers: IamPrincipalDescription;
2040
+ groups: {
2041
+ enabled: boolean;
2042
+ catalogWired: boolean;
2043
+ };
2044
+ urls: Partial<CapabilityEndpointUrls["iam"]>;
2045
+ };
2046
+ type WorkloadTrustedIdpDescription = {
2047
+ issuer: string;
2048
+ jwksUri: string;
2049
+ audience: string | string[];
2050
+ claimsAsEntitlements?: ClaimsAsEntitlementsDescription;
2051
+ };
2052
+ type WorkloadClientDescription = {
2053
+ name: string;
2054
+ ready: boolean;
2055
+ clientId?: string;
2056
+ workloadId?: string;
2057
+ idpTokenUrl?: string;
2058
+ scope?: string;
2059
+ audience?: string;
2060
+ authMethod: "client_secret" | "private_key_jwt" | "server_only";
2061
+ };
2062
+ type WorkloadDescription = ModuleDescriptionBase<"workload"> & {
2063
+ incoming: {
2064
+ trustedIdps: WorkloadTrustedIdpDescription[];
2065
+ };
2066
+ outgoing: WorkloadClientDescription[];
2067
+ urls: Partial<CapabilityEndpointUrls["workload"]>;
2068
+ };
2069
+ type SecretsSourceDescription = {
2070
+ name: string;
2071
+ type: "dev" | "gcp" | "vault" | "aws" | "azure";
2072
+ ready: boolean;
2073
+ url?: string;
2074
+ clientId?: string;
2075
+ authMethod?: string;
2076
+ };
2077
+ type SecretsDescription = ModuleDescriptionBase<"secrets"> & {
2078
+ sources: SecretsSourceDescription[];
2079
+ };
2080
+ type KmsPoolDescription = {
2081
+ name: string;
2082
+ source?: string;
2083
+ path: string;
2084
+ ready: boolean;
2085
+ };
2086
+ type KmsDescription = ModuleDescriptionBase<"kms"> & {
2087
+ pools: KmsPoolDescription[];
2088
+ };
2089
+ type OtelSignalDescription = {
2090
+ enabled: boolean;
2091
+ endpoint?: string;
2092
+ timeoutMillis?: number;
2093
+ concurrencyLimit?: number;
2094
+ exportIntervalMillis?: number;
2095
+ exportTimeoutMillis?: number;
2027
2096
  };
2028
- type AccessRequestResult = {
2029
- id: string;
2030
- status: "pending" | "approved" | "denied";
2031
- operation: "grant" | "revoke";
2032
- trackingUrl: string;
2097
+ type OtelDescription = ModuleDescriptionBase<"otel"> & {
2098
+ type?: OtelProviderType;
2099
+ name?: string;
2100
+ endpoint?: string;
2101
+ protocol?: OtelProtocol;
2102
+ apiKeyPool?: string;
2103
+ apiKeyHeader?: string;
2104
+ oauth?: {
2105
+ tokenUrl: string;
2106
+ clientId: string;
2107
+ scope?: string;
2108
+ audience?: string;
2109
+ };
2110
+ version?: string;
2111
+ deploymentEnvironment?: string;
2112
+ resourceAttributes?: OtelAttributes;
2113
+ levels?: OtelLevels;
2114
+ console?: OtelConsoleMode;
2115
+ signals: {
2116
+ traces: OtelSignalDescription;
2117
+ metrics: OtelSignalDescription;
2118
+ logs: OtelSignalDescription;
2119
+ };
2033
2120
  };
2034
- /** SCIM resource types the delta patch adapter addresses. */
2035
- type IamDeltaResourceType = "user" | "group" | "workload" | "customer";
2036
- /** Destination-owned reference captured from a SCIM User/Group response. */
2037
- type DestinationReference = {
2038
- /** Service-provider-assigned SCIM resource id. */
2039
- providerId: string;
2040
- /** IAM-owned deep link where access to an entitlement can be requested, when supplied. */
2041
- requestUrl?: string;
2121
+ type OaaDescription = {
2122
+ ready: boolean;
2123
+ url?: string;
2124
+ providerId?: string;
2125
+ datasourceId?: string;
2126
+ applicationName?: string;
2127
+ applicationType?: string;
2128
+ population?: Record<string, string>;
2129
+ fullSync: boolean;
2042
2130
  };
2043
- /**
2044
- * Full IAM delta snapshot supplied by the app's maintenance/reconcile path. It mirrors the entities
2045
- * visible through IAM aggregation: users, durable entitlement definitions, and active access roots.
2046
- */
2047
- type IamDeltaReconcileInput = {
2048
- users?: Iterable<BaseUser> | AsyncIterable<BaseUser>;
2049
- workloads?: Iterable<BaseWorkloadIdentity> | AsyncIterable<BaseWorkloadIdentity>;
2050
- customers?: Iterable<BaseCustomer> | AsyncIterable<BaseCustomer>;
2051
- groups?: Iterable<Group> | AsyncIterable<Group>;
2052
- roles?: Iterable<Role> | AsyncIterable<Role>;
2053
- permissions?: Iterable<Permission> | AsyncIterable<Permission>;
2054
- access?: Iterable<AccessChange> | AsyncIterable<AccessChange>;
2131
+ type AuthzDescription = ModuleDescriptionBase<"authz"> & {
2132
+ trustedProvisioningClients: Array<{
2133
+ issuer: string;
2134
+ audience: string | string[];
2135
+ clientId: string;
2136
+ permissions: string[];
2137
+ }>;
2138
+ oaa?: OaaDescription;
2139
+ stores: {
2140
+ accessStore: boolean;
2141
+ accessIndex: boolean;
2142
+ catalogStore: boolean;
2143
+ resources: boolean;
2144
+ };
2055
2145
  };
2056
- /** Result of an app-driven full reconcile (re-push of definitions, users, and active roots). */
2057
- type IamDeltaReconcileResult = {
2058
- pushed: number;
2059
- skipped: number;
2060
- errors: string[];
2146
+ type TmDescription = ModuleDescriptionBase<"tm"> & {
2147
+ enabled: boolean;
2148
+ integrator?: {
2149
+ id: string;
2150
+ name?: string;
2151
+ url: string;
2152
+ issuer: string;
2153
+ jwksUri: string;
2154
+ audience: string;
2155
+ clientId: string;
2156
+ };
2157
+ consentTtlSeconds?: number;
2158
+ maxRedeemAttempts?: number;
2159
+ };
2160
+ type ModuleDescription = SsoDescription | CiamDescription | IamDescription | WorkloadDescription | SecretsDescription | KmsDescription | OtelDescription | AuthzDescription | TmDescription;
2161
+ type IoniteDescription = {
2162
+ id?: string;
2163
+ sdk: {
2164
+ version: string;
2165
+ catalogVersion: number;
2166
+ };
2167
+ basePath: string;
2168
+ urls: CapabilityEndpointUrls;
2169
+ ok: boolean;
2170
+ applied: boolean;
2171
+ config: ConfigApplyStatus;
2172
+ modules: Record<ModuleName, ModuleReadinessState & {
2173
+ description?: ModuleDescription;
2174
+ }>;
2061
2175
  };
2062
- /**
2063
- * Projects observed runtime mutations to the configured IAM delta destination. The invariant is:
2064
- * every runtime mutation the SDK observes that would change what IAM full sync shows must also
2065
- * egress through this handle. That includes users, materialized entitlement definitions, and access
2066
- * roots. Code templates are not pushed during config apply.
2067
- *
2068
- * Request-triggered methods resolve when projection completes (or immediately when not ready). They
2069
- * are best-effort egress: the SCIM mutation path awaits them inside the request, but a rejection is
2070
- * caught and reported as degraded egress — it never turns a committed store mutation into a SCIM
2071
- * error. Reactive catalog/resource events use the same methods outside a request and warn on failure.
2072
- *
2073
- * Readiness follows the shared contract: `isReady()` is a synchronous check; `ready(timeout?)`
2074
- * resolves once the emitter first becomes usable.
2075
- */
2076
- interface IamDeltaEmitter {
2077
- /** Upsert a full SCIM User representation at the destination. */
2078
- onUserUpsert(user: BaseUser): Promise<void>;
2079
- /** Delete a destination User identified strictly by externalId. */
2080
- onUserDelete(externalId: string): Promise<void>;
2081
- /** Upsert a full AppDev-projected SCIM Workload representation at the destination. */
2082
- onWorkloadUpsert(workload: BaseWorkloadIdentity): Promise<void>;
2083
- /** Delete a destination Workload identified by externalId (falling back to its App-owned id). */
2084
- onWorkloadDelete(externalId: string): Promise<void>;
2085
- /** Upsert a full AppDev-projected SCIM Customer representation at the destination. */
2086
- onCustomerUpsert(customer: BaseCustomer): Promise<void>;
2087
- /** Delete a destination Customer identified by externalId (falling back to its App-owned id). */
2088
- onCustomerDelete(externalId: string): Promise<void>;
2089
- /** Upsert a full SCIM Group representation for a group, role, or permission definition. */
2090
- onEntitlementUpsert(entity: Entitlement, type: EntitlementType): Promise<void>;
2091
- /** Delete a destination entitlement Group identified by the App-owned catalog id. */
2092
- onEntitlementDelete(type: EntitlementType, id: string): Promise<void>;
2093
- /** Project a granted root; resolves on completion (or immediately when not ready), rejects on push failure. */
2094
- onGrant(change: AccessChange): Promise<void>;
2095
- /** Project a revoked root; resolves on completion (or immediately when not ready), rejects on push failure. */
2096
- onRevoke(change: AccessChange): Promise<void>;
2097
- /** Re-push the complete IAM-visible snapshot to the destination (app-driven full reconcile). */
2098
- reconcile(input: IamDeltaReconcileInput): Promise<IamDeltaReconcileResult>;
2099
- /**
2100
- * Submit an on-behalf access request at `${iam.url}/AccessRequests`. Requires only the
2101
- * destination channel (`url` plus the `deltaAudience` workload client) — not `isReady()`, which
2102
- * additionally demands delta egress (a per-kind `'patch'` mode and its receipt stores). A tenant
2103
- * whose IAM aggregates by pull alone may still submit requests.
2104
- */
2105
- requestAccess(input: AccessRequestCreate): Promise<AccessRequestResult>;
2106
- /**
2107
- * Read a previously captured destination reference without making a network request. Returns
2108
- * undefined until the resource has been resolved or pushed to the configured IAM destination.
2109
- * `correlationId` is a User's `externalId` or an entitlement's App-owned catalog `id`.
2110
- */
2111
- getDestinationRef(resourceType: IamDeltaResourceType, correlationId: string): Promise<DestinationReference | undefined>;
2112
- isReady(): boolean;
2113
- ready(timeout?: number): Promise<void>;
2114
- }
2115
2176
  import { StandardSchemaV1 as StandardSchemaV14 } from "@standard-schema/spec";
2116
2177
  /**
2117
2178
  * Token caching for workload identity authentication.
@@ -2303,12 +2364,10 @@ type WorkloadConfigBase = {
2303
2364
  */
2304
2365
  audience?: string;
2305
2366
  /**
2306
- * Per-IdP intent (incoming/server role only): when `true`, tokens validated against THIS trust
2307
- * anchor have their OAuth `scope` claim auto-honored as entitlements by the request-level `has*`
2308
- * helpers (audience-bound). Mirrors `RemoteConfig.authz.scopesAsEntitlements` but scoped to a single
2309
- * trusted IdP so first-party scopes can be honored while federated/third-party ones are not.
2367
+ * Per-IdP intent (incoming/server role only): token claims from THIS trust anchor may satisfy
2368
+ * `has*` (audience-bound). ConfigSource-only. There is no global fallback.
2310
2369
  */
2311
- scopesAsEntitlements?: boolean;
2370
+ claimsAsEntitlements?: ClaimsAsEntitlements;
2312
2371
  /**
2313
2372
  * Default OAuth2 scopes (space-delimited)
2314
2373
  */
@@ -2484,8 +2543,8 @@ type TrustedIdp = {
2484
2543
  * one of these values (with `azp` fallback). REQUIRED: prevents cross-app token reuse.
2485
2544
  */
2486
2545
  audience: string | string[];
2487
- /** Per-IdP scopesAsEntitlements intent (see {@link WorkloadConfigBase.scopesAsEntitlements}). */
2488
- scopesAsEntitlements?: boolean;
2546
+ /** Per-IdP claims intent (see {@link WorkloadConfigBase.claimsAsEntitlements}). */
2547
+ claimsAsEntitlements?: ClaimsAsEntitlements;
2489
2548
  };
2490
2549
  /**
2491
2550
  * Workload config with separate incoming (server) and outgoing (client) roles.
@@ -2720,6 +2779,7 @@ type IAMAccessRequestsConfig = {
2720
2779
  request: AccessRequestResult;
2721
2780
  created: boolean;
2722
2781
  }>;
2782
+ get?: (id: string) => Promise<AccessRequestResult | undefined>;
2723
2783
  };
2724
2784
  type IAMEntitlementRequestUrlContext = {
2725
2785
  request: Request;
@@ -3301,6 +3361,12 @@ type Session<TExtended = object> = {
3301
3361
  */
3302
3362
  claims?: Record<string, unknown>;
3303
3363
  /**
3364
+ * Entitlements derived from token claims at login and refresh. Session-scoped: they die with the
3365
+ * record (TTL, rotation, back-channel logout) and are never written to the access stores.
3366
+ * Only meaningful when the store declares {@link SessionStoreCapabilities.derivedEntitlements}.
3367
+ */
3368
+ entitlements?: DerivedEntitlement[];
3369
+ /**
3304
3370
  * Optional access-token claims for modules that keep access/id claims separate.
3305
3371
  */
3306
3372
  accessClaims?: Record<string, unknown>;
@@ -3337,7 +3403,21 @@ type Session<TExtended = object> = {
3337
3403
  * }
3338
3404
  * ```
3339
3405
  */
3406
+ /**
3407
+ * Store-declared capabilities. The SDK does not probe a custom store (a write at init is forbidden);
3408
+ * a store that omits the declaration is treated as incapable.
3409
+ */
3410
+ type SessionStoreCapabilities = {
3411
+ /**
3412
+ * The store persists {@link Session.entitlements} round-trip. JSON-backed stores (the SDK Redis
3413
+ * and in-memory implementations) declare this. A column-mapped SQL store declares it only after
3414
+ * it has a column for the derived set.
3415
+ */
3416
+ derivedEntitlements?: boolean;
3417
+ };
3340
3418
  interface SessionStore<TExtended = object> {
3419
+ /** Declaration of what this store persists beyond the required session fields. */
3420
+ readonly capabilities?: SessionStoreCapabilities;
3341
3421
  /**
3342
3422
  * Create a new session in the store.
3343
3423
  *
@@ -3670,6 +3750,13 @@ type SSOConfig<
3670
3750
  */
3671
3751
  userStore?: UserStore<TUserData>;
3672
3752
  /**
3753
+ * ConfigSource-only. When set, the named token claims are derived into session-scoped
3754
+ * entitlements at login and refresh. Never set from application code.
3755
+ */
3756
+ claimsAsEntitlements?: ClaimsAsEntitlements;
3757
+ /** ConfigSource-only IdP assignment workflow used when IAM assignment is `'idp'`. */
3758
+ accessRequests?: AccessRequestsDestination;
3759
+ /**
3673
3760
  * Enable Just-In-Time (JIT) user provisioning.
3674
3761
  * When enabled, new users are automatically created in the userStore on their first login.
3675
3762
  * When disabled (default), only existing users in the userStore are updated on login.
@@ -4585,17 +4672,6 @@ type TrustedProvisioningClient = {
4585
4672
  type AuthzConfig = {
4586
4673
  oaa?: AuthzOaaConfig;
4587
4674
  /**
4588
- * RemoteConfig/Ops-governed intent. When `true`, the request-level `has*` helpers auto-honor a
4589
- * principal's OAuth token `scope` claims as entitlements: an app-wide check (no `resource` arg)
4590
- * also allows when the target id matches a granted scope. Default `false` (secure): scopes never
4591
- * satisfy `has*` and authorization comes solely from the `AccessAssignmentStore`/`AccessIndex` (IAM/SCIM).
4592
- * Read at check time so it can be flipped live. This NEVER affects token validation, and the
4593
- * explicit `hasScope*` helpers are always available regardless of this flag. Resource-scoped
4594
- * checks (a `resource` arg supplied) are never satisfied by scopes. For workload principals this is
4595
- * a fallback only: a matched trusted IdP's per-entry `scopesAsEntitlements` takes precedence.
4596
- */
4597
- scopesAsEntitlements?: boolean;
4598
- /**
4599
4675
  * Config-declared trusted provisioning clients (read-path overlay; ConfigSource/ECI-owned). Each
4600
4676
  * entry pre-authorizes a workload client to hold specific permissions without a stored grant. See
4601
4677
  * {@link TrustedProvisioningClient}. Honored in the request-level `has*` helpers BEFORE the
@@ -4676,11 +4752,11 @@ type FrameworkConfig = {
4676
4752
  * `afterLogout` callbacks, which are code-only and therefore kept. RemoteConfig-only intent flags (e.g. IAM `users`/`groups`
4677
4753
  * enablement) are also stripped from code.
4678
4754
  */
4679
- type SSOConfigFromCode = Omit<SSOConfig, "loginUrl" | "userUrl" | "logoutUrl" | "logoutBackChannelUrl" | "refreshUrl" | "redirectUri">;
4755
+ type SSOConfigFromCode = Omit<SSOConfig, "loginUrl" | "userUrl" | "logoutUrl" | "logoutBackChannelUrl" | "refreshUrl" | "redirectUri" | "claimsAsEntitlements" | "accessRequests">;
4680
4756
  type IAMConfigFromCode = Omit<IAMConfig, "usersUrl" | "groupsUrl" | "workloadsUrl" | "customersUrl" | "users" | "workloads" | "customers" | "groups" | "discovery" | "deltaAudience"> & {
4681
4757
  discovery?: Omit<IAMDiscoveryConfig, "basePath">;
4682
4758
  };
4683
- type WorkloadServerConfigFromCode = Omit<Partial<WorkloadConfig>, "tokenUrl" | "validateUrl" | "jwksUrl" | "refreshUrl">;
4759
+ type WorkloadServerConfigFromCode = Omit<Partial<WorkloadConfig>, "tokenUrl" | "validateUrl" | "jwksUrl" | "refreshUrl" | "claimsAsEntitlements">;
4684
4760
  type FrameworkWorkloadConfigFromCode = WorkloadServerConfigFromCode | {
4685
4761
  incoming?: WorkloadServerConfigFromCode;
4686
4762
  outgoing?: FrameworkWorkloadIncomingOutgoing["outgoing"];
@@ -5273,8 +5349,8 @@ type ResolvedRoute = {
5273
5349
  /**
5274
5350
  * Authorization required to invoke this route. When set, the router enforces it (deny-by-default)
5275
5351
  * before the handler runs: the caller must hold the {@link EndpointPermission.permission} as a
5276
- * granted entitlement, or—when `RemoteConfig.authz.scopesAsEntitlements` is enabled—carry the
5277
- * matching OAuth scope. Login/public/discovery routes omit it.
5352
+ * granted entitlement, or a claim-derived entitlement from the issuing IdP's `claimsAsEntitlements`
5353
+ * block. Login/public/discovery routes omit it.
5278
5354
  *
5279
5355
  * Three states, chosen so a custom `resolve` cannot silently drop authorization by omission:
5280
5356
  * - a permission object → enforce it;
@@ -6415,9 +6491,9 @@ type Authz = {
6415
6491
  */
6416
6492
  grant(change: AccessChange): Promise<AccessChange>;
6417
6493
  /**
6418
- * Submit one grant or revoke request on a principal's behalf. Allowed only when that kind's
6419
- * assignment policy is `'iam-request'`. One operation maps to one approval decision, status,
6420
- * and tracking URL. Authenticated with the module-wide `deltaAudience` workload client.
6494
+ * Submit one grant or revoke request on a principal's behalf. Under `'iam-request'`, targets the
6495
+ * IAM destination; under `'idp'`, targets the claims-bearing SSO/CIAM provider. One operation
6496
+ * maps to one approval decision, status, and tracking URL.
6421
6497
  */
6422
6498
  requestAccess(change: {
6423
6499
  subject: AccessChange["subject"];
@@ -6426,6 +6502,20 @@ type Authz = {
6426
6502
  target: AccessChange["target"];
6427
6503
  operation: "grant" | "revoke";
6428
6504
  justification?: string;
6505
+ /** CIAM provider key. Required only when multiple providers expose an AccessRequests channel. */
6506
+ provider?: string;
6507
+ }): Promise<{
6508
+ id: string;
6509
+ status: "pending" | "approved" | "denied";
6510
+ operation: "grant" | "revoke";
6511
+ trackingUrl: string;
6512
+ }>;
6513
+ /** Read the destination-owned state of an on-behalf access request. */
6514
+ getAccessRequest(input: {
6515
+ id: string;
6516
+ subjectType: SubjectType;
6517
+ /** CIAM provider key. Required only when multiple providers expose an AccessRequests channel. */
6518
+ provider?: string;
6429
6519
  }): Promise<{
6430
6520
  id: string;
6431
6521
  status: "pending" | "approved" | "denied";
@@ -6445,8 +6535,10 @@ type Authz = {
6445
6535
  * - `'iam'` — never assign in-app; show a request link (or a read-only entitlement table).
6446
6536
  * - `'iam-request'` — never assign in-app; the app submits a request on the principal's behalf via
6447
6537
  * {@link Authz.requestAccess}.
6538
+ * - `'idp'` — the claims-bearing SSO/CIAM provider is assigner of record; requests use that
6539
+ * provider's ConfigSource-owned AccessRequests channel.
6448
6540
  */
6449
- type IamAssignmentPolicy = "app" | "iam" | "iam-request";
6541
+ type IamAssignmentPolicy = "app" | "iam" | "iam-request" | "idp";
6450
6542
  /**
6451
6543
  * Thrown by {@link Authz.grant} when the Ops-owned assignment policy forbids in-app assignment.
6452
6544
  * `requestUrl` is the IAM-written entitlement receipt when one exists, so the app can send the
@@ -6865,4 +6957,4 @@ type LfvErrorResponse = {
6865
6957
  };
6866
6958
  /** Generates a ULID */
6867
6959
  declare function generateULID(prefix?: string): string;
6868
- export { ACCEPT_JSON, ACCEPT_OCTET_STREAM, ACCEPT_SCIM, ACCEPT_XML, AccessAssignmentStore, AccessCatalogStore, AccessChange, AccessCheckReason, AccessCheckResult, AccessCheckTarget, AccessIndex, AccessMutationResult, AccessMutationStatus, AccessProvenance, AccessRef, AccessRequestCreate, AccessRequestResult, AccessStatus, Address, ApplicationValidators, AssignmentPolicyError, AuthenticatedPrincipal, AuthenticatedUser, Authz, AuthzConfig, AuthzDecision, AuthzDescription, AuthzEntityBase, AuthzOaaConfig, AuthzOaaPrincipalConfig, AuthzScimGroupExtension, AuthzScimGroupType, AwsConfigLocator, AwsSecretsConfig, AzureAuthMethod, AzureConfigLocator, AzureSecretsConfig, BaseCustomer, BaseTenant, BaseUser, BaseWorkloadIdentity, CANONICAL_RISK_LEVELS, CIAM, CIAMConfig, CIAMConfigFromCode, CIAMConfigFromCodeInput, CIAMProviderBranding, CIAMProviderColors, CIAMProviderConfig, CIAMProviderDescriptor, CIAMProviderType, CIAMValidators, CONTENT_TYPE_FORM, CONTENT_TYPE_JSON, CONTENT_TYPE_OCTET_STREAM, CONTENT_TYPE_SCIM, CONTENT_TYPE_XML, CacheConfig, CachedWorkloadToken, CapabilitiezManifest, CapabilityEndpointUrls, CapabilityKey, CapabilityState, CatalogChange, CatalogChangeKind, CatalogChangeListener, CatalogEntityKind, ChangeListener, CiamDescription, CiamProviderDescription, ClientCredentialsWorkloadConfig, CodeCatalog, CodeCatalogInput, CodeCatalogNamespace, ConfigApplyStatus, ConfigChangeCallback, ConfigChangeOptions, ConfigChangeResult, ConfigErrorKind, ConfigExportEnvelope, ConfigLocator, ConfigSource, ConfigSourceEnv, ConfigSourceError, ConfigSourceErrorInit, ConfigSourceResolver, ConfigSourceType, ConfigSubscriptionOptions, ConnectRequestContext, CookieDescription, CreateGroupOptions, CreateTenantRequest, CreateUserOptions, Customer, CustomerStore, CustomerStoreOptions, DEFAULT_DISCOVERED_COOKIE_MAX, DEFAULT_DISCOVERED_COOKIE_TTL_SECONDS, DEFAULT_DISPLAY_COOKIE_MAX, DEFAULT_RISK_LEVEL, DEFAULT_SECRET_MIME_TYPES, DEFAULT_TENANT_API_NAMESPACE, DEFAULT_TENANT_UI_NAMESPACE, DISCOVERED_COOKIE_PREFIX, DISPLAY_COOKIE_SUFFIX, DISPLAY_COOKIE_VERSION, DescribedSecretsSource, DestinationReference, DevSecretsConfig, DiscoveredDisplayCookieConfig, DisplayAuthType, DisplayCookieConfig, DisplayCookieEnvelope, DisplayIdentity, DisplayUser, ECID_SCHEME, EcidFormatError, EffectiveEdge, EgressChannelOutcome, EgressOutcome, Email, EndpointOperation, EndpointPermission, EnterpriseExtension, Entitlement, EntitlementType, EntityStore, EnvironmentType, FORM_MEDIA_TYPE, FrameworkConfig, FrameworkConfigInput, FrameworkLfvConfig, FrameworkOtelConfig, FrameworkSecretsModuleConfig, FrameworkSecretsSourceConfig, FrameworkStores, FrameworkTmConfig, FrameworkWorkloadConfig, FrameworkWorkloadConfigFromCode, FrameworkWorkloadIncomingOutgoing, GcpConfigLocator, GcpSecretsConfig, Group, GroupMember, GroupResource, GroupsInboundHandlerConfig, IAM, IAMAccessRequestsConfig, IAMAppRegistry, IAMAppValidators, IAMConfig, IAMConfigFromCode, IAMDiscoveryConfig, IAMDiscoveryContext, IAMDiscoveryHandlerConfig, IAMEndpointFlag, IAMGroupsInbound, IAMGroupsOutbound, IAMHandlerConfig, IAMInboundCustomersConfig, IAMInboundPrincipalContext, IAMInboundUserContext, IAMInboundUsersConfig, IAMInboundWorkloadsConfig, IAMPrincipalsInbound, IAMUsersInbound, IAMValidators, ION_AUTHZ_GROUP_SCHEMA, ION_AUTHZ_OAA_SYNC, ION_CAPABILITIEZ_READ, ION_CIAM_MAGIC_LINK_CREATE, ION_ENDPOINT_PERMISSIONS, ION_IAM_ACCESS_REQUESTS_WRITE, ION_IAM_CUSTOMERS_WRITE, ION_IAM_GROUPS_WRITE, ION_IAM_READ, ION_IAM_USERS_WRITE, ION_IAM_WORKLOADS_WRITE, ION_SCIM_CUSTOMER_SCHEMA, ION_SCIM_USER_EXTENSION_URN, ION_SCIM_WORKLOAD_SCHEMA, ION_SDK_PERMISSIONS, ION_TENANT_MANAGE, IamAssignmentPolicy, IamDeltaEmitter, IamDeltaMode, IamDeltaReconcileInput, IamDeltaReconcileResult, IamDeltaResourceType, IamDescription, IamPrincipalDescription, IamPrincipalKind, IamPrincipalKindFlag, IdTokenClaims, IdentityResolution, InMemoryTenantStoreOptions, InferSecretType, Ionite, IoniteBase, IoniteDescription, IoniteError, IoniteErrorOptions, IoniteUserExtension, IoniteValidators, JSON_MEDIA_TYPE, JWTAssertionClaims, JwtBearerWorkloadConfig, KNOWN_BASE_CUSTOMER_KEYS, KNOWN_BASE_USER_KEYS, KNOWN_ENTITLEMENT_KEYS, KNOWN_WORKLOAD_KEYS, Kms, KmsAddKeysRequest, KmsAddKeysResult, KmsAllocationPolicy, KmsAllocationStrategy, KmsConfig, KmsDescription, KmsIssuedKey, KmsIssuerEvent, KmsIssuerEventListener, KmsIssuerEventName, KmsKey, KmsKeyState, KmsParkDisposition, KmsParkReport, KmsParkRequest, KmsParkResult, KmsPool, KmsPoolConfig, KmsPoolControlDocument, KmsPoolDescription, KmsPoolDocument, KmsPoolIssuer, KmsPoolListener, KmsPoolSlot, KmsRevokeKeyRequest, KmsRevokeKeyResult, LfvActionAcceptedResponse, LfvActionName, LfvActionRequestBase, LfvCallbackEnvelope, LfvCallbackHeaders, LfvCallbackKind, LfvCallbackTransport, LfvEd25519PrivateJwk, LfvEd25519PublicJwk, LfvErrorCode, LfvErrorResponse, LfvJwks, LfvOtpRequest, LfvOtpResponse, ListFilter, ListOptions, ListResult, Logger, MagicLink, MagicLinkStore, MetaData, MirrorConfigLocator, ModifiableFrameworkConfig, ModuleDescription, ModuleDescriptionBase, ModuleName, ModuleReadiness, ModuleReadinessState, Name, NoReserved, OCTET_STREAM_MEDIA_TYPE, OaaAccessChangeBatchItem, OaaAccessTargetType, OaaClient, OaaDescription, OaaPrincipalPopulation, OaaSyncInput, OaaSyncOptions, OaaSyncResult, OidcCallbackParams, Otel, OtelAttributeValue, OtelAttributes, OtelConfig, OtelConsoleMode, OtelDescription, OtelLevels, OtelLogLevel, OtelLogRecord, OtelMetricsSignalConfig, OtelOAuthClientCredentialsConfig, OtelProtocol, OtelProviderType, OtelSignalConfig, OtelSignalDescription, OtelSignalName, PLATFORM_ASSIGNABLE_SUBJECT_TYPES, ParsedEcid, Permission, PhoneNumber, Photo, PrincipalInboundHandlerConfig, ReactiveHandle, ReadJsonResponseOptions, ReadinessReport, ReadyAccessCatalogEntry, ReadyzEndpointConfig, ReconcileReport, RecordTenantConsentInput, RegisterIAMAppError, RegisterIAMAppPayload, RegisterIAMAppResult, RegisterSSOAppError, RegisterSSOAppPayload, RegisterSSOAppResult, RemoteConfig, RemoteConfigLoadErrorKind, RemoteConfigRetryContext, RemoteConfigRetryHook, RemoteConfigRetryOptions, RemoteTmConfig, RequireReadyResult, ResolvedRoute, ResolvedVaultLfvSecretsConfig, Resource, ResourceChange, ResourceChangeListener, ResourceProvider, RiskLevel, Role, RouteFilterResult, RouteModule, RoutingOptions, SCIM_MEDIA_TYPE, SSO, SSOAppRegistry, SSOAppValidators, SSOConfig, SSOConfigFromCode, SSOHandlerConfig, SSOValidators, ScimAuthenticationScheme, ScimCustomer, ScimError, Group2 as ScimGroup, ScimListResponse, ScimMutationSummary, ScimResourceType, ScimResourceTypeSchemaExtension, ScimResult, Role2 as ScimRole, ScimSchemaAttributeDefinition, ScimSchemaDefinition, ScimServiceProviderConfig, User as ScimUser, ScimWorkload, Secret, SecretContentType, SecretContentTypeMismatchError, SecretEvent, SecretEventListener, SecretEventName, SecretFormat, SecretHandle, SecretLifecycleRequest, SecretRequestSeverity, SecretTypeDescriptor, SecretTypeInput, SecretTypeRegistryEntry, Secrets, SecretsDescription, SecretsModuleConfig, SecretsOperationOptions, SecretsSource, SecretsSourceConfig, SecretsSourceDescription, SecretsSourceMap, SecretsSourceType, SecretsSubscriptionOptions, SecretsValidators, SecretsWriteOptions, ServerOnlyWorkloadConfig, Session, SessionStore, SetTenantIntegrationOptions, SsoDescription, StagedIntegration, StandardSchemaWithValidate, StateCookie, StoreConflictError, StoreConflictKind, SubjectRef, SubjectScope, SubjectType, SubjectTypeScoping, SubscriptionMode, TenantDirectory, TenantDirectoryIdentity, TenantHostMatch, TenantHostRoutingStrategy, TenantIntegration, TenantIntegrationStatus, TenantIntegrationView, TenantIonCache, TenantManagement, TenantPathMatch, TenantPathNamespace, TenantPathRoutingStrategy, TenantResponse, TenantRoutingStrategy, TenantSelectorRoutingStrategy, TenantStatus, TenantStore, TenantValidators, TenantWebhookPayload, TmDescription, TmIntegratorConfig, TokenResponse, TokenValidationResult, TrustedIdp, TrustedProvisioningClient, UnexpectedBodySummary, UpdateTenantRequest, UserEndpointPolicy, UserStore, UserStoreOptions, UsersInboundHandlerConfig, ValidateResult, VaultConfigLocator, VaultLfvSecretsConfig, VaultSecretsConfig, VaultWebSocketAuthHeader, VaultWebSocketSecretsConfig, VaultWorkloadAuthConfig, WorkforceUser, Workload, WorkloadClient, WorkloadClientDescription, WorkloadConfig, WorkloadConfigMap, WorkloadDescription, WorkloadGetToken, WorkloadIdentity, WorkloadIdentityStore, WorkloadIncomingOutgoing, WorkloadPrincipal, WorkloadTokenResponse, WorkloadTokenStore, WorkloadTrustedIdpDescription, WorkloadValidators, X509Certificate, XML_MEDIA_TYPE, accessRefId, accessRootId, assertEcid, assertRequiredSubjectType, assertValidSubjectTypeScoping, buildTenantPath, buildTenantUrl, catalogEntityStore, claimsToUser, compareDisplayExpiryDesc, configTrustedClientGrants, customAttributes, customerResourceSchema, debugLogger, decodeDisplayCookie, decodeUser, deepEqualPlain, defaultDisplayUser, defaultLogger, defaultSecretContentType, defineCatalog, defineSecretType, deprecateRetiredCodeCatalogRows, discoveredProfileCookieName, encodeDisplayCookie, formatEcid, formatLogLine, generateULID, getCodeCatalogEntity, groupResourceSchema, idTokenClaimsSchema, infoLogger, isCodeCatalog, isConfigLocator, isConfigSourceError, isEcid, isJsonResponse, isStoreConflictError, jwtAssertionClaimsSchema, list, listGenerator, matchTenantHost, matchTenantPath, matchesListFilter, materializeCodeCatalogEntity, mergeCodeCatalogEntity, mergeConfig, must, normalizeTenantBaseDomain, normalizeTenantPathNamespace, normalizeTenantRoutingStrategy, oidcCallbackSchema, parseEcid, parseJsonc, parseKmsPoolControlDocument, parseKmsPoolDocument, prettyLogger, profileCookieName, projectDisplayUser, readDisplayCookies, readJsonResponse, readyCatalogEntry, remoteConfigSecretType, resolveDiscoveredCookieMax, resolveDiscoveredCookieTtlSeconds, resolveDisplayCookieMax, sanitizeDisplayUser, serializeConfig, silentLogger, stableConfigHash, stripJsonComments, tmIntegrationState, toCodeCatalog, tokenResponseSchema, trimTrailingSlash, trustedClientPermissionsForPrincipal, unexpectedBodySummary, unionCatalogRead, userSchema, validationFailureResponse, version, waitOn, warnLogger, withValidate, workloadResourceSchema, workloadTokenResponseSchema };
6960
+ export { ACCEPT_JSON, ACCEPT_OCTET_STREAM, ACCEPT_SCIM, ACCEPT_XML, AccessAssignmentStore, AccessCatalogStore, AccessChange, AccessCheckReason, AccessCheckResult, AccessCheckTarget, AccessIndex, AccessMutationResult, AccessMutationStatus, AccessProvenance, AccessRef, AccessRequestCreate, AccessRequestResult, AccessRequestsDestination, AccessStatus, Address, ApplicationValidators, AssignmentPolicyError, AuthenticatedPrincipal, AuthenticatedUser, Authz, AuthzConfig, AuthzDecision, AuthzDescription, AuthzEntityBase, AuthzOaaConfig, AuthzOaaPrincipalConfig, AuthzScimGroupExtension, AuthzScimGroupType, AwsConfigLocator, AwsSecretsConfig, AzureAuthMethod, AzureConfigLocator, AzureSecretsConfig, BaseCustomer, BaseTenant, BaseUser, BaseWorkloadIdentity, CANONICAL_RISK_LEVELS, CIAM, CIAMConfig, CIAMConfigFromCode, CIAMConfigFromCodeInput, CIAMProviderBranding, CIAMProviderColors, CIAMProviderConfig, CIAMProviderDescriptor, CIAMProviderType, CIAMValidators, CONTENT_TYPE_FORM, CONTENT_TYPE_JSON, CONTENT_TYPE_OCTET_STREAM, CONTENT_TYPE_SCIM, CONTENT_TYPE_XML, CacheConfig, CachedWorkloadToken, CapabilitiezManifest, CapabilityEndpointUrls, CapabilityKey, CapabilityState, CatalogChange, CatalogChangeKind, CatalogChangeListener, CatalogEntityKind, ChangeListener, CiamDescription, CiamProviderDescription, ClaimsAsEntitlements, ClaimsAsEntitlementsDescription, ClientCredentialsWorkloadConfig, CodeCatalog, CodeCatalogInput, CodeCatalogNamespace, ConfigApplyStatus, ConfigChangeCallback, ConfigChangeOptions, ConfigChangeResult, ConfigErrorKind, ConfigExportEnvelope, ConfigLocator, ConfigSource, ConfigSourceEnv, ConfigSourceError, ConfigSourceErrorInit, ConfigSourceResolver, ConfigSourceType, ConfigSubscriptionOptions, ConnectRequestContext, CookieDescription, CreateGroupOptions, CreateTenantRequest, CreateUserOptions, Customer, CustomerStore, CustomerStoreOptions, DEFAULT_DISCOVERED_COOKIE_MAX, DEFAULT_DISCOVERED_COOKIE_TTL_SECONDS, DEFAULT_DISPLAY_COOKIE_MAX, DEFAULT_RISK_LEVEL, DEFAULT_SECRET_MIME_TYPES, DEFAULT_TENANT_API_NAMESPACE, DEFAULT_TENANT_UI_NAMESPACE, DISCOVERED_COOKIE_PREFIX, DISPLAY_COOKIE_SUFFIX, DISPLAY_COOKIE_VERSION, DerivedEntitlement, DescribedSecretsSource, DestinationReference, DevSecretsConfig, DiscoveredDisplayCookieConfig, DisplayAuthType, DisplayCookieConfig, DisplayCookieEnvelope, DisplayIdentity, DisplayUser, ECID_SCHEME, EcidFormatError, EffectiveEdge, EgressChannelOutcome, EgressOutcome, Email, EndpointOperation, EndpointPermission, EnterpriseExtension, Entitlement, EntitlementType, EntityStore, EnvironmentType, FORM_MEDIA_TYPE, FrameworkConfig, FrameworkConfigInput, FrameworkLfvConfig, FrameworkOtelConfig, FrameworkSecretsModuleConfig, FrameworkSecretsSourceConfig, FrameworkStores, FrameworkTmConfig, FrameworkWorkloadConfig, FrameworkWorkloadConfigFromCode, FrameworkWorkloadIncomingOutgoing, GcpConfigLocator, GcpSecretsConfig, Group, GroupMember, GroupResource, GroupsInboundHandlerConfig, IAM, IAMAccessRequestsConfig, IAMAppRegistry, IAMAppValidators, IAMConfig, IAMConfigFromCode, IAMDiscoveryConfig, IAMDiscoveryContext, IAMDiscoveryHandlerConfig, IAMEndpointFlag, IAMGroupsInbound, IAMGroupsOutbound, IAMHandlerConfig, IAMInboundCustomersConfig, IAMInboundPrincipalContext, IAMInboundUserContext, IAMInboundUsersConfig, IAMInboundWorkloadsConfig, IAMPrincipalsInbound, IAMUsersInbound, IAMValidators, ION_AUTHZ_GROUP_SCHEMA, ION_AUTHZ_OAA_SYNC, ION_CAPABILITIEZ_READ, ION_CIAM_MAGIC_LINK_CREATE, ION_ENDPOINT_PERMISSIONS, ION_IAM_ACCESS_REQUESTS_WRITE, ION_IAM_CUSTOMERS_WRITE, ION_IAM_GROUPS_WRITE, ION_IAM_READ, ION_IAM_USERS_WRITE, ION_IAM_WORKLOADS_WRITE, ION_SCIM_CUSTOMER_SCHEMA, ION_SCIM_USER_EXTENSION_URN, ION_SCIM_WORKLOAD_SCHEMA, ION_SDK_PERMISSIONS, ION_TENANT_MANAGE, IamAssignmentPolicy, IamDeltaEmitter, IamDeltaMode, IamDeltaReconcileInput, IamDeltaReconcileResult, IamDeltaResourceType, IamDescription, IamPrincipalDescription, IamPrincipalKind, IamPrincipalKindFlag, IdTokenClaims, IdentityResolution, InMemoryTenantStoreOptions, InferSecretType, Ionite, IoniteBase, IoniteDescription, IoniteError, IoniteErrorOptions, IoniteUserExtension, IoniteValidators, JSON_MEDIA_TYPE, JWTAssertionClaims, JwtBearerWorkloadConfig, KNOWN_BASE_CUSTOMER_KEYS, KNOWN_BASE_USER_KEYS, KNOWN_ENTITLEMENT_KEYS, KNOWN_WORKLOAD_KEYS, Kms, KmsAddKeysRequest, KmsAddKeysResult, KmsAllocationPolicy, KmsAllocationStrategy, KmsConfig, KmsDescription, KmsIssuedKey, KmsIssuerEvent, KmsIssuerEventListener, KmsIssuerEventName, KmsKey, KmsKeyState, KmsParkDisposition, KmsParkReport, KmsParkRequest, KmsParkResult, KmsPool, KmsPoolConfig, KmsPoolControlDocument, KmsPoolDescription, KmsPoolDocument, KmsPoolIssuer, KmsPoolListener, KmsPoolSlot, KmsRevokeKeyRequest, KmsRevokeKeyResult, LfvActionAcceptedResponse, LfvActionName, LfvActionRequestBase, LfvCallbackEnvelope, LfvCallbackHeaders, LfvCallbackKind, LfvCallbackTransport, LfvEd25519PrivateJwk, LfvEd25519PublicJwk, LfvErrorCode, LfvErrorResponse, LfvJwks, LfvOtpRequest, LfvOtpResponse, ListFilter, ListOptions, ListResult, Logger, MagicLink, MagicLinkStore, MetaData, MirrorConfigLocator, ModifiableFrameworkConfig, ModuleDescription, ModuleDescriptionBase, ModuleName, ModuleReadiness, ModuleReadinessState, Name, NoReserved, OCTET_STREAM_MEDIA_TYPE, OaaAccessChangeBatchItem, OaaAccessTargetType, OaaClient, OaaDescription, OaaPrincipalPopulation, OaaSyncInput, OaaSyncOptions, OaaSyncResult, OidcCallbackParams, Otel, OtelAttributeValue, OtelAttributes, OtelConfig, OtelConsoleMode, OtelDescription, OtelLevels, OtelLogLevel, OtelLogRecord, OtelMetricsSignalConfig, OtelOAuthClientCredentialsConfig, OtelProtocol, OtelProviderType, OtelSignalConfig, OtelSignalDescription, OtelSignalName, PLATFORM_ASSIGNABLE_SUBJECT_TYPES, ParsedEcid, Permission, PhoneNumber, Photo, PrincipalInboundHandlerConfig, ReactiveHandle, ReadJsonResponseOptions, ReadinessReport, ReadyAccessCatalogEntry, ReadyzEndpointConfig, ReconcileReport, RecordTenantConsentInput, RegisterIAMAppError, RegisterIAMAppPayload, RegisterIAMAppResult, RegisterSSOAppError, RegisterSSOAppPayload, RegisterSSOAppResult, RemoteConfig, RemoteConfigLoadErrorKind, RemoteConfigRetryContext, RemoteConfigRetryHook, RemoteConfigRetryOptions, RemoteTmConfig, RequireReadyResult, ResolvedRoute, ResolvedVaultLfvSecretsConfig, Resource, ResourceChange, ResourceChangeListener, ResourceProvider, RiskLevel, Role, RouteFilterResult, RouteModule, RoutingOptions, SCIM_MEDIA_TYPE, SSO, SSOAppRegistry, SSOAppValidators, SSOConfig, SSOConfigFromCode, SSOHandlerConfig, SSOValidators, ScimAuthenticationScheme, ScimCustomer, ScimError, Group2 as ScimGroup, ScimListResponse, ScimMutationSummary, ScimResourceType, ScimResourceTypeSchemaExtension, ScimResult, Role2 as ScimRole, ScimSchemaAttributeDefinition, ScimSchemaDefinition, ScimServiceProviderConfig, User as ScimUser, ScimWorkload, Secret, SecretContentType, SecretContentTypeMismatchError, SecretEvent, SecretEventListener, SecretEventName, SecretFormat, SecretHandle, SecretLifecycleRequest, SecretRequestSeverity, SecretTypeDescriptor, SecretTypeInput, SecretTypeRegistryEntry, Secrets, SecretsDescription, SecretsModuleConfig, SecretsOperationOptions, SecretsSource, SecretsSourceConfig, SecretsSourceDescription, SecretsSourceMap, SecretsSourceType, SecretsSubscriptionOptions, SecretsValidators, SecretsWriteOptions, ServerOnlyWorkloadConfig, Session, SessionStore, SetTenantIntegrationOptions, SsoDescription, StagedIntegration, StandardSchemaWithValidate, StateCookie, StoreConflictError, StoreConflictKind, SubjectRef, SubjectScope, SubjectType, SubjectTypeScoping, SubscriptionMode, TenantDirectory, TenantDirectoryIdentity, TenantHostMatch, TenantHostRoutingStrategy, TenantIntegration, TenantIntegrationStatus, TenantIntegrationView, TenantIonCache, TenantManagement, TenantPathMatch, TenantPathNamespace, TenantPathRoutingStrategy, TenantResponse, TenantRoutingStrategy, TenantSelectorRoutingStrategy, TenantStatus, TenantStore, TenantValidators, TenantWebhookPayload, TmDescription, TmIntegratorConfig, TokenResponse, TokenValidationResult, TrustedIdp, TrustedProvisioningClient, UnexpectedBodySummary, UpdateTenantRequest, UserEndpointPolicy, UserStore, UserStoreOptions, UsersInboundHandlerConfig, ValidateResult, VaultConfigLocator, VaultLfvSecretsConfig, VaultSecretsConfig, VaultWebSocketAuthHeader, VaultWebSocketSecretsConfig, VaultWorkloadAuthConfig, WorkforceUser, Workload, WorkloadClient, WorkloadClientDescription, WorkloadConfig, WorkloadConfigMap, WorkloadDescription, WorkloadGetToken, WorkloadIdentity, WorkloadIdentityStore, WorkloadIncomingOutgoing, WorkloadPrincipal, WorkloadTokenResponse, WorkloadTokenStore, WorkloadTrustedIdpDescription, WorkloadValidators, X509Certificate, XML_MEDIA_TYPE, accessRefId, accessRootId, assertEcid, assertRequiredSubjectType, assertValidSubjectTypeScoping, buildTenantPath, buildTenantUrl, catalogEntityStore, claimsToUser, compareDisplayExpiryDesc, configTrustedClientGrants, customAttributes, customerResourceSchema, debugLogger, decodeDisplayCookie, decodeUser, deepEqualPlain, defaultDisplayUser, defaultLogger, defaultSecretContentType, defineCatalog, defineSecretType, deprecateRetiredCodeCatalogRows, discoveredProfileCookieName, encodeDisplayCookie, formatEcid, formatLogLine, generateULID, getCodeCatalogEntity, groupResourceSchema, idTokenClaimsSchema, infoLogger, isCodeCatalog, isConfigLocator, isConfigSourceError, isEcid, isJsonResponse, isStoreConflictError, jwtAssertionClaimsSchema, list, listGenerator, matchTenantHost, matchTenantPath, matchesListFilter, materializeCodeCatalogEntity, mergeCodeCatalogEntity, mergeConfig, must, normalizeTenantBaseDomain, normalizeTenantPathNamespace, normalizeTenantRoutingStrategy, oidcCallbackSchema, parseEcid, parseJsonc, parseKmsPoolControlDocument, parseKmsPoolDocument, prettyLogger, profileCookieName, projectDisplayUser, readDisplayCookies, readJsonResponse, readyCatalogEntry, remoteConfigSecretType, resolveDiscoveredCookieMax, resolveDiscoveredCookieTtlSeconds, resolveDisplayCookieMax, sanitizeDisplayUser, serializeConfig, silentLogger, stableConfigHash, stripJsonComments, tmIntegrationState, toCodeCatalog, tokenResponseSchema, trimTrailingSlash, trustedClientPermissionsForPrincipal, unexpectedBodySummary, unionCatalogRead, userSchema, validationFailureResponse, version, waitOn, warnLogger, withValidate, workloadResourceSchema, workloadTokenResponseSchema };