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

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,6 +16,212 @@ 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;
19
225
  /** Synchronous, in-memory read surface for one code catalog entity kind. */
20
226
  type CodeCatalogNamespace<TEntity> = {
21
227
  get(id: string): TEntity | undefined;
@@ -94,6 +300,7 @@ declare function deprecateRetiredCodeCatalogRows(code: CodeCatalog | undefined,
94
300
  * visible. Returns undefined when neither source is wired.
95
301
  */
96
302
  declare function unionCatalogRead(code: CodeCatalog | undefined, store: AccessCatalogStore | undefined): AccessCatalogStore | undefined;
303
+ import { StandardSchemaV1 as StandardSchemaV15 } from "@standard-schema/spec";
97
304
  /**
98
305
  * Resolve an access subject/target/resource reference (a string id or an object carrying one) to its
99
306
  * canonical, trimmed string id. This is the single id-resolution rule shared across the authz stack
@@ -109,54 +316,6 @@ declare function accessRefId(value: unknown): string;
109
316
  */
110
317
  declare function accessRootId(change: AccessChange): string;
111
318
  /**
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.
115
- *
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.
118
- */
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;
158
- };
159
- /**
160
319
  * Shared minimal identity fields used to build both the workforce user
161
320
  * record (`BaseUser`) and the CIAM customer record (`BaseCustomer`), as well
162
321
  * as the authenticated session types (`WorkforceUser`, `Customer`).
@@ -971,10 +1130,11 @@ type WorkloadIdentity = {
971
1130
  /** Granted OAuth scopes (space-delimited). */
972
1131
  scope?: string;
973
1132
  /**
974
- * Claim-derived entitlements for this request. Present only when the matched incoming IdP
975
- * configured `claimsAsEntitlements`. Never persisted.
1133
+ * Whether the trusted IdP that validated this token opts into honoring its OAuth `scope` claim as
1134
+ * entitlements (per-IdP intent, resolved at validation time). Consumed by the request-level `has*`
1135
+ * helpers; `undefined` falls back to the global `RemoteConfig.authz.scopesAsEntitlements`.
976
1136
  */
977
- derivedEntitlements?: DerivedEntitlement[];
1137
+ scopesAsEntitlements?: boolean;
978
1138
  /**
979
1139
  * Enterprise Controlled ID for this workload (`ecid:<realm>:<opaque>`), when carried on the token
980
1140
  * `ecid` claim or enriched from a wired `WorkloadIdentityStore`. A workload is its own governance
@@ -1420,12 +1580,6 @@ interface WorkloadIdentityStore<TExtended = object> {
1420
1580
  * policy (flag, auto-revoke + notify, or simply audit).
1421
1581
  */
1422
1582
  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
1583
  type AccessRequestCreate = {
1430
1584
  subject: string;
1431
1585
  subjectType: SubjectType;
@@ -1512,8 +1666,6 @@ interface IamDeltaEmitter {
1512
1666
  * whose IAM aggregates by pull alone may still submit requests.
1513
1667
  */
1514
1668
  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
1669
  /**
1518
1670
  * Read a previously captured destination reference without making a network request. Returns
1519
1671
  * undefined until the resource has been resolved or pushed to the configured IAM destination.
@@ -1523,657 +1675,84 @@ interface IamDeltaEmitter {
1523
1675
  isReady(): boolean;
1524
1676
  ready(timeout?: number): Promise<void>;
1525
1677
  }
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
- };
1678
+ import { StandardSchemaV1 as StandardSchemaV14 } from "@standard-schema/spec";
1679
+ type ChangeListener = () => void;
1548
1680
  /**
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()`).
1681
+ * Reactive source/adapter contract. Implemented by config-source-backed adapters
1682
+ * (for example `SecretsSource`) to advertise change subscription and source liveness.
1683
+ * `isAvailable()` here is an adapter liveness hook and is intentionally distinct from
1684
+ * module readiness (`ModuleReadiness.isReady()` / `ready()`).
1737
1685
  */
1738
1686
  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;
2096
- };
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
- };
1687
+ beforeChange?(listener: ChangeListener): () => void;
1688
+ afterChange?(listener: ChangeListener): () => void;
1689
+ isAvailable?(): boolean;
2120
1690
  };
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;
2130
- };
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
- };
1691
+ /**
1692
+ * Readiness contract for reactive module/service handles whose usability depends on
1693
+ * RemoteConfig that can arrive or change at runtime (for example `ion.secrets`,
1694
+ * `ion.workload`, `ion.otel`, `ion.authz.oaa`).
1695
+ *
1696
+ * - `isReady()` is a synchronous check; use it in request handlers and health probes and
1697
+ * return 503 (or branch) when false instead of blocking.
1698
+ * - `ready(timeout?)` resolves once the handle first becomes usable; use it at startup or
1699
+ * as a feature gate. With no timeout it waits indefinitely; with `timeout > 0` it rejects
1700
+ * after that many milliseconds.
1701
+ */
1702
+ type ModuleReadiness = {
1703
+ beforeChange?(listener: ChangeListener): () => void;
1704
+ afterChange?(listener: ChangeListener): () => void;
1705
+ isReady?(): boolean;
1706
+ ready?(timeout?: number): Promise<void>;
2145
1707
  };
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;
1708
+ /**
1709
+ * Canonical ionite module names used by the holistic readiness report and the
1710
+ * `requireReady([...])` helper. These are the config-driven module handles whose readiness can be
1711
+ * composed; `ion.isReady()` itself stays the narrow "config applied" signal and is NOT one of these.
1712
+ *
1713
+ * IAM-delta egress is intentionally NOT a member. Delta patch-back is best-effort and non-fatal (a
1714
+ * failed push only logs `degraded` and is reconciled by a later full sync — the Batch 7 drift-signal
1715
+ * contract), so folding it into `iam` readiness would let a delta-target outage make
1716
+ * `requireReady(['iam'])` false and take the app out of rotation for a signal that is designed not to
1717
+ * block. Apps that DO treat delta as a hard dependency can gate on `ion.iam.delta.isReady()` /
1718
+ * `ion.iam.delta.ready()` explicitly instead.
1719
+ */
1720
+ type ModuleName = "sso" | "ciam" | "iam" | "workload" | "otel" | "secrets" | "kms" | "authz" | "tm";
1721
+ /** Per-module readiness snapshot in {@link ReadinessReport}. */
1722
+ type ModuleReadinessState = {
1723
+ /** Whether the module is active (present/requested) in the effective config. Inactive modules never block readiness. */
1724
+ active: boolean;
1725
+ /** Synchronous readiness of the module right now (mirrors the module's own `isReady()`). */
1726
+ ready: boolean;
1727
+ /** Human-readable explanation when the module is `active` but not `ready`. */
1728
+ reason?: string;
2159
1729
  };
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;
1730
+ /**
1731
+ * Holistic, read-only readiness snapshot for an ionite instance. Returned by
1732
+ * `ion.readiness()` and used by the built-in `${basePath}/readyz` endpoint. This is composition
1733
+ * DATA, not a request gate: applications combine it (via `ion.requireReady([...])`) with their own
1734
+ * non-ionite dependency checks to build their health endpoints.
1735
+ */
1736
+ type ReadinessReport = {
1737
+ /** True when config has been applied (`applied`) and every ACTIVE module is ready. */
2169
1738
  ok: boolean;
1739
+ /** Whether RemoteConfig has been applied at least once (mirrors `ion.isReady()`). */
2170
1740
  applied: boolean;
1741
+ /** Per-module readiness keyed by {@link ModuleName}. */
1742
+ modules: Record<ModuleName, ModuleReadinessState>;
1743
+ /** Most recent config-application outcome (last applied time and last error, if any). */
2171
1744
  config: ConfigApplyStatus;
2172
- modules: Record<ModuleName, ModuleReadinessState & {
2173
- description?: ModuleDescription;
1745
+ };
1746
+ /** Result of `ion.requireReady(names)`: a synchronous, declarative readiness gate over selected modules. */
1747
+ type RequireReadyResult = {
1748
+ /** True when config is applied and every requested module is ready. */
1749
+ ok: boolean;
1750
+ /** The requested modules that are not ready, with reasons when available. */
1751
+ notReady: Array<{
1752
+ name: ModuleName;
1753
+ reason?: string;
2174
1754
  }>;
2175
1755
  };
2176
- import { StandardSchemaV1 as StandardSchemaV14 } from "@standard-schema/spec";
2177
1756
  /**
2178
1757
  * Token caching for workload identity authentication.
2179
1758
  *
@@ -2364,10 +1943,12 @@ type WorkloadConfigBase = {
2364
1943
  */
2365
1944
  audience?: string;
2366
1945
  /**
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.
1946
+ * Per-IdP intent (incoming/server role only): when `true`, tokens validated against THIS trust
1947
+ * anchor have their OAuth `scope` claim auto-honored as entitlements by the request-level `has*`
1948
+ * helpers (audience-bound). Mirrors `RemoteConfig.authz.scopesAsEntitlements` but scoped to a single
1949
+ * trusted IdP so first-party scopes can be honored while federated/third-party ones are not.
2369
1950
  */
2370
- claimsAsEntitlements?: ClaimsAsEntitlements;
1951
+ scopesAsEntitlements?: boolean;
2371
1952
  /**
2372
1953
  * Default OAuth2 scopes (space-delimited)
2373
1954
  */
@@ -2477,10 +2058,21 @@ type ClientCredentialsWorkloadConfig = WorkloadConfigBase & {
2477
2058
  */
2478
2059
  clientId: string;
2479
2060
  /**
2480
- * OAuth2 client secret
2481
- * REQUIRED for Client Credentials mode
2061
+ * OAuth2 client secret. Omit it to authenticate with a federated token instead
2062
+ * (see `federatedTokenFile`). A client secret wins when both are present.
2482
2063
  */
2483
- clientSecret: string;
2064
+ clientSecret?: string;
2065
+ /**
2066
+ * Path to a projected federated token (e.g. AKS Workload Identity), sent as a jwt-bearer
2067
+ * `client_assertion` in place of `client_secret`. Defaults to `AZURE_FEDERATED_TOKEN_FILE`.
2068
+ * Read on every acquisition because the platform rotates it.
2069
+ */
2070
+ federatedTokenFile?: string;
2071
+ /**
2072
+ * `managed_identity`: get the token from the platform's managed identity endpoint instead of an
2073
+ * IdP token URL. `clientId` is the managed identity's client ID; `scope` names the audience.
2074
+ */
2075
+ authMethod?: "managed_identity";
2484
2076
  };
2485
2077
  /**
2486
2078
  * Server-Only Workload Configuration
@@ -2514,7 +2106,7 @@ type ServerOnlyWorkloadConfig = WorkloadConfigBase & {
2514
2106
  * detected based on which fields are present:
2515
2107
  *
2516
2108
  * - **JWT Bearer Grant**: Requires `workload_id` + `private_key`
2517
- * - **Client Credentials**: Requires `client_id` + `client_secret`
2109
+ * - **Client Credentials**: Requires `client_id` + `client_secret`, a federated token file, or `authMethod: "managed_identity"`
2518
2110
  * - **Server-Only**: Only `jwks_uri` (and optionally `issuer`) for token validation
2519
2111
  *
2520
2112
  * The developer uses the same API regardless of mode - the library handles the details.
@@ -2543,8 +2135,8 @@ type TrustedIdp = {
2543
2135
  * one of these values (with `azp` fallback). REQUIRED: prevents cross-app token reuse.
2544
2136
  */
2545
2137
  audience: string | string[];
2546
- /** Per-IdP claims intent (see {@link WorkloadConfigBase.claimsAsEntitlements}). */
2547
- claimsAsEntitlements?: ClaimsAsEntitlements;
2138
+ /** Per-IdP scopesAsEntitlements intent (see {@link WorkloadConfigBase.scopesAsEntitlements}). */
2139
+ scopesAsEntitlements?: boolean;
2548
2140
  };
2549
2141
  /**
2550
2142
  * Workload config with separate incoming (server) and outgoing (client) roles.
@@ -2587,8 +2179,6 @@ interface WorkloadGetToken {
2587
2179
  * Workload Identity Authentication Interface
2588
2180
  */
2589
2181
  type Workload = WorkloadConfig & ModuleReadiness & Required<Pick<ModuleReadiness, "isReady" | "ready">> & {
2590
- /** Secret-free, JSON-serializable configuration and readiness summary. */
2591
- describe: () => WorkloadDescription;
2592
2182
  /**
2593
2183
  * Returns a token for this workload configuration.
2594
2184
  * The optional argument overrides the configured default scope.
@@ -2603,9 +2193,7 @@ type Workload = WorkloadConfig & ModuleReadiness & Required<Pick<ModuleReadiness
2603
2193
  /** Framework-agnostic request handler for the Workload module (token, validate, jwks, refresh). */
2604
2194
  handler: (request: Request) => Promise<Response>;
2605
2195
  };
2606
- type WorkloadClient = Pick<Workload, "getToken" | "refreshToken" | "generateJWTAssertion" | "revokeToken" | "beforeChange" | "afterChange" | "isReady" | "ready"> & {
2607
- describe(): WorkloadClientDescription;
2608
- };
2196
+ type WorkloadClient = Pick<Workload, "getToken" | "refreshToken" | "generateJWTAssertion" | "revokeToken" | "beforeChange" | "afterChange" | "isReady" | "ready">;
2609
2197
  /**
2610
2198
  * SCIM Error response structure
2611
2199
  */
@@ -2779,7 +2367,6 @@ type IAMAccessRequestsConfig = {
2779
2367
  request: AccessRequestResult;
2780
2368
  created: boolean;
2781
2369
  }>;
2782
- get?: (id: string) => Promise<AccessRequestResult | undefined>;
2783
2370
  };
2784
2371
  type IAMEntitlementRequestUrlContext = {
2785
2372
  request: Request;
@@ -3037,8 +2624,6 @@ type IAMUsersInbound = {
3037
2624
  * - `users_inbound` is available when `userStore` is configured
3038
2625
  */
3039
2626
  type IAM = Omit<IAMConfig, "users" | "workloads" | "customers" | "groups"> & {
3040
- /** Secret-free, JSON-serializable configuration and readiness summary. */
3041
- describe: () => IamDescription;
3042
2627
  users: IamPrincipalKind;
3043
2628
  workloads: IamPrincipalKind;
3044
2629
  customers: IamPrincipalKind;
@@ -3223,8 +2808,6 @@ type KmsPoolSlot = {
3223
2808
  ready(timeout?: number): Promise<void>;
3224
2809
  };
3225
2810
  type KmsPool = {
3226
- /** Secret-free, JSON-serializable pool configuration and readiness summary. */
3227
- describe(): KmsPoolDescription;
3228
2811
  /**
3229
2812
  * Returns the current granted key for slot 0. Calls wait on one shared local subscription until a
3230
2813
  * grant is available; repeated calls resolve from the local cache and never initiate a vault request.
@@ -3257,8 +2840,6 @@ type KmsPool = {
3257
2840
  * (`ion.kms.<name>`); use `getPool(name)` when the name is dynamic.
3258
2841
  */
3259
2842
  type Kms = ModuleReadiness & {
3260
- /** Secret-free, JSON-serializable configuration and readiness summary. */
3261
- describe(): KmsDescription;
3262
2843
  readonly config: Readonly<KmsConfig>;
3263
2844
  listPools(): string[];
3264
2845
  getPool(name: string): KmsPool;
@@ -3269,6 +2850,91 @@ type Kms = ModuleReadiness & {
3269
2850
  declare function parseKmsPoolDocument(value: unknown): KmsPoolDocument;
3270
2851
  /** Parse and fail closed on a vault-stored KMS key-material document. */
3271
2852
  declare function parseKmsPoolControlDocument(value: unknown): KmsPoolControlDocument;
2853
+ type OtelSignalName = "traces" | "metrics" | "logs";
2854
+ type OtelProtocol = "http/protobuf" | "http/json";
2855
+ type OtelProviderType = "otlp" | "grafana-lgtm" | "datadog" | "splunk" | "elastic";
2856
+ type OtelLogLevel = "trace" | "debug" | "info" | "warn" | "error";
2857
+ type OtelLevels = Partial<Record<OtelLogLevel, boolean>>;
2858
+ /** Local console mirror policy: disable it or set its minimum emitted severity. */
2859
+ type OtelConsoleMode = "off" | OtelLogLevel;
2860
+ type OtelAttributeValue = string | number | boolean | string[] | number[] | boolean[];
2861
+ type OtelAttributes = Record<string, OtelAttributeValue>;
2862
+ type OtelSignalConfig = {
2863
+ /** Per-signal OTLP endpoint. When omitted, the module appends /v1/{signal} to `endpoint`. */
2864
+ endpoint?: string;
2865
+ headers?: Record<string, string>;
2866
+ timeoutMillis?: number;
2867
+ concurrencyLimit?: number;
2868
+ };
2869
+ type OtelMetricsSignalConfig = OtelSignalConfig & {
2870
+ exportIntervalMillis?: number;
2871
+ exportTimeoutMillis?: number;
2872
+ };
2873
+ type OtelOAuthClientCredentialsConfig = {
2874
+ tokenUrl: string;
2875
+ clientId: string;
2876
+ clientSecret: string;
2877
+ scope?: string;
2878
+ audience?: string;
2879
+ headers?: Record<string, string>;
2880
+ };
2881
+ type OtelLogRecord = {
2882
+ severityNumber?: number;
2883
+ severityText?: string;
2884
+ body?: unknown;
2885
+ attributes?: Record<string, unknown>;
2886
+ };
2887
+ /**
2888
+ * OpenTelemetry config supplied by ConfigSource/RemoteConfig.
2889
+ * Keep environment-specific URLs and credentials here, not in FrameworkConfig.
2890
+ */
2891
+ type OtelConfig = {
2892
+ type?: OtelProviderType;
2893
+ name: string;
2894
+ endpoint?: string;
2895
+ protocol?: OtelProtocol;
2896
+ headers?: Record<string, string>;
2897
+ apiKey?: string;
2898
+ /** Name of a `RemoteConfig.kms` key pool used for exporter authentication. */
2899
+ apiKeyPool?: string;
2900
+ apiKeyHeader?: string;
2901
+ oauth?: OtelOAuthClientCredentialsConfig;
2902
+ version?: string;
2903
+ deploymentEnvironment?: string;
2904
+ resourceAttributes?: OtelAttributes;
2905
+ levels?: OtelLevels;
2906
+ /** `'off'` exports only to OTel; a level dual-emits at or above that severity. Defaults to `'info'`. */
2907
+ console?: OtelConsoleMode;
2908
+ traces?: boolean | OtelSignalConfig;
2909
+ metrics?: boolean | OtelMetricsSignalConfig;
2910
+ logs?: boolean | OtelSignalConfig;
2911
+ };
2912
+ /**
2913
+ * OpenTelemetry app/runtime wiring supplied by code.
2914
+ * Instrumentation instances and callbacks live here because they are framework-specific code.
2915
+ */
2916
+ type FrameworkOtelConfig = {
2917
+ levels?: OtelLevels;
2918
+ instrument?: unknown[];
2919
+ /** Optional app-owned destination/renderer for records admitted by `RemoteConfig.otel.console`. */
2920
+ console?: (record: OtelLogRecord) => void;
2921
+ spanProcessors?: unknown[];
2922
+ metricReaders?: unknown[];
2923
+ logRecordProcessors?: unknown[];
2924
+ sampler?: unknown;
2925
+ textMapPropagator?: unknown;
2926
+ contextManager?: unknown;
2927
+ configure?: (options: Record<string, unknown>) => Record<string, unknown> | void;
2928
+ };
2929
+ type Otel = {
2930
+ beforeChange(listener: ChangeListener): () => void;
2931
+ afterChange(listener: ChangeListener): () => void;
2932
+ isReady(): boolean;
2933
+ ready(timeout?: number): Promise<void>;
2934
+ logger: Logger;
2935
+ forceFlush(): Promise<void>;
2936
+ shutdown(): Promise<void>;
2937
+ };
3272
2938
  /**
3273
2939
  * Session management for tracking user sessions and enabling backchannel logout.
3274
2940
  *
@@ -3361,12 +3027,6 @@ type Session<TExtended = object> = {
3361
3027
  */
3362
3028
  claims?: Record<string, unknown>;
3363
3029
  /**
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
- /**
3370
3030
  * Optional access-token claims for modules that keep access/id claims separate.
3371
3031
  */
3372
3032
  accessClaims?: Record<string, unknown>;
@@ -3403,21 +3063,7 @@ type Session<TExtended = object> = {
3403
3063
  * }
3404
3064
  * ```
3405
3065
  */
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
- };
3418
3066
  interface SessionStore<TExtended = object> {
3419
- /** Declaration of what this store persists beyond the required session fields. */
3420
- readonly capabilities?: SessionStoreCapabilities;
3421
3067
  /**
3422
3068
  * Create a new session in the store.
3423
3069
  *
@@ -3750,13 +3396,6 @@ type SSOConfig<
3750
3396
  */
3751
3397
  userStore?: UserStore<TUserData>;
3752
3398
  /**
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
- /**
3760
3399
  * Enable Just-In-Time (JIT) user provisioning.
3761
3400
  * When enabled, new users are automatically created in the userStore on their first login.
3762
3401
  * When disabled (default), only existing users in the userStore are updated on login.
@@ -3856,8 +3495,6 @@ type SSO<
3856
3495
  TSessionData = Record<string, never>,
3857
3496
  TUserData = Record<string, never>
3858
3497
  > = SSOConfig<TSessionData, TUserData> & {
3859
- /** Secret-free, JSON-serializable configuration and readiness summary. */
3860
- describe: () => SsoDescription;
3861
3498
  getUser: (request: Request) => Promise<WorkforceUser | undefined>;
3862
3499
  /**
3863
3500
  * Degraded-aware resolution: distinguishes a signed-out visitor (`unauthenticated`) from a failed
@@ -4205,12 +3842,7 @@ type SecretsValidators = {
4205
3842
  */
4206
3843
  validateSourceConfig?(sourceName: string, config: SecretsSourceConfig): void;
4207
3844
  };
4208
- type DescribedSecretsSource = SecretsSource & {
4209
- describe(): SecretsSourceDescription;
4210
- };
4211
3845
  type Secrets = ModuleReadiness & {
4212
- /** Secret-free, JSON-serializable configuration and readiness summary. */
4213
- describe(): SecretsDescription;
4214
3846
  /**
4215
3847
  * Liveness across configured sources. Returns false when any ready source reports a degraded
4216
3848
  * `isAvailable()` (e.g. an HTTP-poll source whose upstream is failing). Surfaced in
@@ -4222,7 +3854,7 @@ type Secrets = ModuleReadiness & {
4222
3854
  /** Returns configured secrets source names/keys. */
4223
3855
  listSecretsSources(): string[];
4224
3856
  /** Gets a named secrets source client. Throws when missing. */
4225
- getSecretsSource(sourceName: string): DescribedSecretsSource;
3857
+ getSecretsSource(sourceName: string): SecretsSource;
4226
3858
  /** Creates a lazy handle for a secret in a named source. */
4227
3859
  get(sourceName: string, path: string, options?: SecretsOperationOptions): SecretHandle;
4228
3860
  /** Reads a secret from a named secrets source client. */
@@ -4672,6 +4304,17 @@ type TrustedProvisioningClient = {
4672
4304
  type AuthzConfig = {
4673
4305
  oaa?: AuthzOaaConfig;
4674
4306
  /**
4307
+ * RemoteConfig/Ops-governed intent. When `true`, the request-level `has*` helpers auto-honor a
4308
+ * principal's OAuth token `scope` claims as entitlements: an app-wide check (no `resource` arg)
4309
+ * also allows when the target id matches a granted scope. Default `false` (secure): scopes never
4310
+ * satisfy `has*` and authorization comes solely from the `AccessAssignmentStore`/`AccessIndex` (IAM/SCIM).
4311
+ * Read at check time so it can be flipped live. This NEVER affects token validation, and the
4312
+ * explicit `hasScope*` helpers are always available regardless of this flag. Resource-scoped
4313
+ * checks (a `resource` arg supplied) are never satisfied by scopes. For workload principals this is
4314
+ * a fallback only: a matched trusted IdP's per-entry `scopesAsEntitlements` takes precedence.
4315
+ */
4316
+ scopesAsEntitlements?: boolean;
4317
+ /**
4675
4318
  * Config-declared trusted provisioning clients (read-path overlay; ConfigSource/ECI-owned). Each
4676
4319
  * entry pre-authorizes a workload client to hold specific permissions without a stored grant. See
4677
4320
  * {@link TrustedProvisioningClient}. Honored in the request-level `has*` helpers BEFORE the
@@ -4752,11 +4395,11 @@ type FrameworkConfig = {
4752
4395
  * `afterLogout` callbacks, which are code-only and therefore kept. RemoteConfig-only intent flags (e.g. IAM `users`/`groups`
4753
4396
  * enablement) are also stripped from code.
4754
4397
  */
4755
- type SSOConfigFromCode = Omit<SSOConfig, "loginUrl" | "userUrl" | "logoutUrl" | "logoutBackChannelUrl" | "refreshUrl" | "redirectUri" | "claimsAsEntitlements" | "accessRequests">;
4398
+ type SSOConfigFromCode = Omit<SSOConfig, "loginUrl" | "userUrl" | "logoutUrl" | "logoutBackChannelUrl" | "refreshUrl" | "redirectUri">;
4756
4399
  type IAMConfigFromCode = Omit<IAMConfig, "usersUrl" | "groupsUrl" | "workloadsUrl" | "customersUrl" | "users" | "workloads" | "customers" | "groups" | "discovery" | "deltaAudience"> & {
4757
4400
  discovery?: Omit<IAMDiscoveryConfig, "basePath">;
4758
4401
  };
4759
- type WorkloadServerConfigFromCode = Omit<Partial<WorkloadConfig>, "tokenUrl" | "validateUrl" | "jwksUrl" | "refreshUrl" | "claimsAsEntitlements">;
4402
+ type WorkloadServerConfigFromCode = Omit<Partial<WorkloadConfig>, "tokenUrl" | "validateUrl" | "jwksUrl" | "refreshUrl">;
4760
4403
  type FrameworkWorkloadConfigFromCode = WorkloadServerConfigFromCode | {
4761
4404
  incoming?: WorkloadServerConfigFromCode;
4762
4405
  outgoing?: FrameworkWorkloadIncomingOutgoing["outgoing"];
@@ -5175,8 +4818,6 @@ type CIAM<
5175
4818
  TMagicLinkData = Record<string, never>,
5176
4819
  TCustomerData = Record<string, never>
5177
4820
  > = CIAMConfig<TMagicLinkData, TCustomerData> & {
5178
- /** Secret-free, JSON-serializable configuration and readiness summary. */
5179
- describe: () => CiamDescription;
5180
4821
  getCustomer: (request: Request) => Promise<Customer | undefined>;
5181
4822
  /**
5182
4823
  * Degraded-aware resolution: distinguishes a signed-out visitor (`unauthenticated`) from a failed
@@ -5320,15 +4961,6 @@ type IoniteBase = {
5320
4961
  * module is ready; `notReady` lists the requested modules that are not ready, with reasons.
5321
4962
  */
5322
4963
  requireReady(names: ModuleName[]): RequireReadyResult;
5323
- /**
5324
- * Returns an allow-listed, JSON-serializable snapshot for privileged App-owned diagnostics.
5325
- * Unlike `config`, this never contains credentials, secret values, stores, or callbacks.
5326
- *
5327
- * Diagnostics only: each call rebuilds the readiness report and every module projection. Call it
5328
- * from an admin loader, never per request; handlers and health probes use `isReady()` /
5329
- * `requireReady()`.
5330
- */
5331
- describe(): IoniteDescription;
5332
4964
  /** Most recent RemoteConfig application outcome (last applied time and last error, if any). */
5333
4965
  configStatus: ConfigApplyStatus;
5334
4966
  /** Release config subscriptions and background resources. */
@@ -5349,8 +4981,8 @@ type ResolvedRoute = {
5349
4981
  /**
5350
4982
  * Authorization required to invoke this route. When set, the router enforces it (deny-by-default)
5351
4983
  * before the handler runs: the caller must hold the {@link EndpointPermission.permission} as a
5352
- * granted entitlement, or a claim-derived entitlement from the issuing IdP's `claimsAsEntitlements`
5353
- * block. Login/public/discovery routes omit it.
4984
+ * granted entitlement, or—when `RemoteConfig.authz.scopesAsEntitlements` is enabled—carry the
4985
+ * matching OAuth scope. Login/public/discovery routes omit it.
5354
4986
  *
5355
4987
  * Three states, chosen so a custom `resolve` cannot silently drop authorization by omission:
5356
4988
  * - a permission object → enforce it;
@@ -5640,8 +5272,6 @@ type TenantIntegrationView = {
5640
5272
  integration: TenantIntegration;
5641
5273
  };
5642
5274
  type TenantManagement<TTenant extends BaseTenant = BaseTenant> = ModuleReadiness & {
5643
- /** Secret-free, JSON-serializable configuration and readiness summary. */
5644
- describe(): TmDescription;
5645
5275
  handler(request: Request): Promise<Response>;
5646
5276
  getTenant(id: string): Promise<TTenant | undefined>;
5647
5277
  recordConsent(input: RecordTenantConsentInput): Promise<TTenant>;
@@ -6318,8 +5948,6 @@ interface OaaClient<
6318
5948
  TCustomer = BaseCustomer,
6319
5949
  TWorkload = BaseWorkloadIdentity
6320
5950
  > {
6321
- /** Secret-free, JSON-serializable OAA configuration and readiness summary. */
6322
- describe(): OaaDescription;
6323
5951
  pushUser(user: TUser): Promise<void>;
6324
5952
  pushCustomer(customer: TCustomer): Promise<void>;
6325
5953
  pushWorkload(workload: TWorkload): Promise<void>;
@@ -6438,8 +6066,6 @@ type ReconcileReport = {
6438
6066
  * wired they deny by default (`{ allow: false }`, `metadata.reason = 'access_index_not_configured'`).
6439
6067
  */
6440
6068
  type Authz = {
6441
- /** Secret-free, JSON-serializable configuration and readiness summary. */
6442
- describe(): AuthzDescription;
6443
6069
  oaa: OaaClient;
6444
6070
  /** Read the effective catalog union (materialized rows plus unmaterialized code templates). */
6445
6071
  entitlements: {
@@ -6491,9 +6117,9 @@ type Authz = {
6491
6117
  */
6492
6118
  grant(change: AccessChange): Promise<AccessChange>;
6493
6119
  /**
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.
6120
+ * Submit one grant or revoke request on a principal's behalf. Allowed only when that kind's
6121
+ * assignment policy is `'iam-request'`. One operation maps to one approval decision, status,
6122
+ * and tracking URL. Authenticated with the module-wide `deltaAudience` workload client.
6497
6123
  */
6498
6124
  requestAccess(change: {
6499
6125
  subject: AccessChange["subject"];
@@ -6502,20 +6128,6 @@ type Authz = {
6502
6128
  target: AccessChange["target"];
6503
6129
  operation: "grant" | "revoke";
6504
6130
  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;
6519
6131
  }): Promise<{
6520
6132
  id: string;
6521
6133
  status: "pending" | "approved" | "denied";
@@ -6535,10 +6147,8 @@ type Authz = {
6535
6147
  * - `'iam'` — never assign in-app; show a request link (or a read-only entitlement table).
6536
6148
  * - `'iam-request'` — never assign in-app; the app submits a request on the principal's behalf via
6537
6149
  * {@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.
6540
6150
  */
6541
- type IamAssignmentPolicy = "app" | "iam" | "iam-request" | "idp";
6151
+ type IamAssignmentPolicy = "app" | "iam" | "iam-request";
6542
6152
  /**
6543
6153
  * Thrown by {@link Authz.grant} when the Ops-owned assignment policy forbids in-app assignment.
6544
6154
  * `requestUrl` is the IAM-written entitlement receipt when one exists, so the app can send the
@@ -6589,6 +6199,64 @@ declare function trustedClientPermissionsForPrincipal(authz: AuthzConfig | null
6589
6199
  * OAA full sync — they are NEVER written to a store or materialized into the AccessIndex.
6590
6200
  */
6591
6201
  declare function configTrustedClientGrants(authz: AuthzConfig | null | undefined): AccessChange[];
6202
+ 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";
6203
+ type CapabilityEndpointUrls = {
6204
+ readyzUrl: string;
6205
+ capabilitiezUrl: string;
6206
+ sso: {
6207
+ loginUrl: string;
6208
+ userUrl: string;
6209
+ logoutUrl: string;
6210
+ logoutBackChannelUrl: string;
6211
+ refreshUrl: string;
6212
+ callbackUrl: string;
6213
+ };
6214
+ workload: {
6215
+ validateUrl: string;
6216
+ jwksUrl: string;
6217
+ };
6218
+ iam: {
6219
+ basePath: string;
6220
+ usersUrl: string;
6221
+ groupsUrl: string;
6222
+ workloadsUrl: string;
6223
+ customersUrl: string;
6224
+ };
6225
+ ciam: {
6226
+ magicLinkUrl: string;
6227
+ magicLinkLoginUrl: string;
6228
+ customerUrl: string;
6229
+ customerLoginUrl: string;
6230
+ customerCallbackUrl: string;
6231
+ customerProvidersUrl: string;
6232
+ logoutUrl: string;
6233
+ };
6234
+ };
6235
+ type CapabilityState = {
6236
+ module: ModuleName;
6237
+ active: boolean;
6238
+ ready: boolean;
6239
+ testable: boolean;
6240
+ urls?: string[];
6241
+ reason?: string;
6242
+ };
6243
+ type CapabilitiezManifest = {
6244
+ sdk: {
6245
+ /** Runtime @ionite/server version serving this manifest. */
6246
+ version: string;
6247
+ /** Version of the stable capability/test-unit vocabulary. */
6248
+ catalogVersion: number;
6249
+ };
6250
+ basePath: string;
6251
+ urls: CapabilityEndpointUrls;
6252
+ modules: Record<ModuleName, ModuleReadinessState>;
6253
+ capabilities: Record<CapabilityKey, CapabilityState>;
6254
+ /**
6255
+ * True when FrameworkConfig wired a live LFV callback transport. Boolean only — the transport
6256
+ * object, Redis URL, and credentials are never exposed.
6257
+ */
6258
+ lfvCallbackTransport: boolean;
6259
+ };
6592
6260
  /**
6593
6261
  * Fields a {@link ConfigSource} may attach to a thrown error so the SDK can classify load/subscribe
6594
6262
  * failures structurally instead of by fragile message-substring matching (§2.1). All fields are
@@ -6957,4 +6625,4 @@ type LfvErrorResponse = {
6957
6625
  };
6958
6626
  /** Generates a ULID */
6959
6627
  declare function generateULID(prefix?: string): string;
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 };
6628
+ 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, 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, ClientCredentialsWorkloadConfig, CodeCatalog, CodeCatalogInput, CodeCatalogNamespace, ConfigApplyStatus, ConfigChangeCallback, ConfigChangeOptions, ConfigChangeResult, ConfigErrorKind, ConfigExportEnvelope, ConfigLocator, ConfigSource, ConfigSourceEnv, ConfigSourceError, ConfigSourceErrorInit, ConfigSourceResolver, ConfigSourceType, ConfigSubscriptionOptions, ConnectRequestContext, 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, 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, IamPrincipalKind, IamPrincipalKindFlag, IdTokenClaims, IdentityResolution, InMemoryTenantStoreOptions, InferSecretType, Ionite, IoniteBase, 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, KmsIssuedKey, KmsIssuerEvent, KmsIssuerEventListener, KmsIssuerEventName, KmsKey, KmsKeyState, KmsParkDisposition, KmsParkReport, KmsParkRequest, KmsParkResult, KmsPool, KmsPoolConfig, KmsPoolControlDocument, 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, ModuleName, ModuleReadiness, ModuleReadinessState, Name, NoReserved, OCTET_STREAM_MEDIA_TYPE, OaaAccessChangeBatchItem, OaaAccessTargetType, OaaClient, OaaPrincipalPopulation, OaaSyncInput, OaaSyncOptions, OaaSyncResult, OidcCallbackParams, Otel, OtelAttributeValue, OtelAttributes, OtelConfig, OtelConsoleMode, OtelLevels, OtelLogLevel, OtelLogRecord, OtelMetricsSignalConfig, OtelOAuthClientCredentialsConfig, OtelProtocol, OtelProviderType, OtelSignalConfig, 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, SecretsModuleConfig, SecretsOperationOptions, SecretsSource, SecretsSourceConfig, SecretsSourceMap, SecretsSourceType, SecretsSubscriptionOptions, SecretsValidators, SecretsWriteOptions, ServerOnlyWorkloadConfig, Session, SessionStore, SetTenantIntegrationOptions, 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, TmIntegratorConfig, TokenResponse, TokenValidationResult, TrustedIdp, TrustedProvisioningClient, UnexpectedBodySummary, UpdateTenantRequest, UserEndpointPolicy, UserStore, UserStoreOptions, UsersInboundHandlerConfig, ValidateResult, VaultConfigLocator, VaultLfvSecretsConfig, VaultSecretsConfig, VaultWebSocketAuthHeader, VaultWebSocketSecretsConfig, VaultWorkloadAuthConfig, WorkforceUser, Workload, WorkloadClient, WorkloadConfig, WorkloadConfigMap, WorkloadGetToken, WorkloadIdentity, WorkloadIdentityStore, WorkloadIncomingOutgoing, WorkloadPrincipal, WorkloadTokenResponse, WorkloadTokenStore, 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 };