@ionite/core 0.0.24-beta.20260922.9 → 0.0.24-beta.20260927.13

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/server.d.ts CHANGED
@@ -146,6 +146,56 @@ declare function orderedEnabledProviders(providers: Record<string, CIAMProviderC
146
146
  name: string;
147
147
  config: CIAMProviderConfig;
148
148
  }>;
149
+ declare const DISPLAY_COOKIE_VERSION = 1;
150
+ type DisplayCookieConfig = {
151
+ /**
152
+ * When true, the SDK writes a non-HttpOnly display cookie beside the opaque session cookie.
153
+ * ConfigSource-only. Default false.
154
+ */
155
+ enabled?: boolean;
156
+ /**
157
+ * How many display cookies a single response may leave on the browser, newest session window
158
+ * first. ConfigSource-only. Values below 1 fall back to {@link DEFAULT_DISPLAY_COOKIE_MAX}.
159
+ * @default 10
160
+ */
161
+ max?: number;
162
+ /**
163
+ * Session-less tenant hints written by an App after an explicit directory lookup.
164
+ * ConfigSource-only and off unless `enabled` is true.
165
+ */
166
+ discovered?: DiscoveredDisplayCookieConfig;
167
+ };
168
+ type DiscoveredDisplayCookieConfig = {
169
+ enabled?: boolean;
170
+ /** Browser hint lifetime. This is not a session expiry. @default 14400 */
171
+ ttlSeconds?: number;
172
+ /** Independent cap; discovered hints never displace live-session entries. @default 10 */
173
+ max?: number;
174
+ };
175
+ /** What `${basePath}/auth/user` and `${basePath}/auth/customer` return. ConfigSource-only. */
176
+ type UserEndpointPolicy = "full" | "display" | "off";
177
+ type DisplayUser = Record<string, string | number | boolean | null>;
178
+ type DisplayAuthType = "sso" | "ciam";
179
+ type DisplayCookieEnvelope = {
180
+ v: typeof DISPLAY_COOKIE_VERSION;
181
+ /**
182
+ * Session envelopes omit this field (absent means `'session'`) so the wire format stays identical
183
+ * to cookies written before discovered hints existed; only discovered hints set it explicitly.
184
+ * Readers must treat `undefined` as `'session'`.
185
+ */
186
+ kind?: "session" | "discovered";
187
+ tenantId?: string;
188
+ authType: DisplayAuthType;
189
+ /** ISO timestamp copied from the session window at write time. Display only. */
190
+ expiresAt: string;
191
+ user: DisplayUser;
192
+ tenantName?: string;
193
+ };
194
+ type ParsedDisplayCookie = {
195
+ name: string;
196
+ prefix: string;
197
+ envelope: DisplayCookieEnvelope;
198
+ };
149
199
  /**
150
200
  * Minimal logger interface compatible with common structured logging patterns.
151
201
  */
@@ -2109,20 +2159,18 @@ type IamPrincipalKind = {
2109
2159
  assignment: IamAssignmentPolicy;
2110
2160
  delta?: IamDeltaMode;
2111
2161
  };
2162
+ /**
2163
+ * Destination-side inbox contract. The destination owns idempotency: when a pending request
2164
+ * already exists for the same (subjectType, subject, target, operation) tuple, `create` must
2165
+ * return that request with `created: false` (the handler answers 200 instead of 201). Operation
2166
+ * arrays are forbidden — one request carries exactly one `'grant' | 'revoke'`.
2167
+ */
2112
2168
  type IAMAccessRequestsConfig = {
2113
2169
  create: (request: AccessRequestCreate) => Promise<{
2114
2170
  request: AccessRequestResult;
2115
2171
  created: boolean;
2116
2172
  }>;
2117
2173
  };
2118
- type AccessRequestSubmit = {
2119
- subject: AccessChange["subject"];
2120
- subjectType: SubjectType;
2121
- targetType: EntitlementType;
2122
- target: AccessChange["target"];
2123
- operation: "grant" | "revoke";
2124
- justification?: string;
2125
- };
2126
2174
  type IAMEntitlementRequestUrlContext = {
2127
2175
  request: Request;
2128
2176
  tenantId?: string;
@@ -2818,6 +2866,68 @@ interface SessionStore<TExtended = object> {
2818
2866
  */
2819
2867
  delete(sid: string): Promise<void>;
2820
2868
  }
2869
+ type DisplayCookieAttributes = {
2870
+ path: string;
2871
+ domain?: string;
2872
+ secure: boolean;
2873
+ sameSite: "Strict" | "Lax";
2874
+ };
2875
+ type DisplayCookieCandidate = ParsedDisplayCookie & {
2876
+ kind: "session" | "discovered";
2877
+ /** Authoritative session-window expiry from the peer session record. */
2878
+ sessionExpiresAt?: Date;
2879
+ live: boolean;
2880
+ };
2881
+ type DisplayCookieTrim = (candidates: DisplayCookieCandidate[], options: {
2882
+ max: number;
2883
+ maxDiscovered: number;
2884
+ }) => DisplayCookieCandidate[];
2885
+ /** Non-HttpOnly on purpose: browser UI reads this cookie. The server never trusts it. */
2886
+ declare function formatDisplaySetCookie(name: string, value: string, expires: Date, attr: DisplayCookieAttributes): string;
2887
+ declare function formatDisplayClearCookie(name: string, attr: DisplayCookieAttributes): string;
2888
+ /**
2889
+ * Clear-on-touch for the disabled state: emit a `Max-Age=0` clear only when the browser still
2890
+ * holds a profile cookie (even an undecodable one). Runs on every authenticated request, so it
2891
+ * is a raw substring probe, not a parse — a false positive (another cookie name sharing the
2892
+ * suffix) only emits one harmless clear.
2893
+ */
2894
+ declare function planDisplayCookieClear(cookieHeader: string | null | undefined, cookiesPrefix: string, attr: DisplayCookieAttributes): string[];
2895
+ /**
2896
+ * Pick survivors. `ordered` is live sessions newest first followed by discovered hints newest
2897
+ * first. The two kinds have independent caps, and the session cookie being written is always kept.
2898
+ */
2899
+ declare function selectDisplayCookies(ordered: DisplayCookieCandidate[], currentName: string, max: number, maxDiscovered: number, trim?: DisplayCookieTrim): DisplayCookieCandidate[];
2900
+ declare function planDisplayCookieHeaders(input: {
2901
+ cookieHeader: string | null | undefined;
2902
+ sessionStore: SessionStore | undefined;
2903
+ cookiesPrefix: string;
2904
+ authType: "sso" | "ciam";
2905
+ tenantId?: string;
2906
+ expiresAt: Date;
2907
+ user: object;
2908
+ projector?: (user: object) => unknown;
2909
+ displayCookie?: DisplayCookieConfig;
2910
+ trim?: DisplayCookieTrim;
2911
+ attr: DisplayCookieAttributes;
2912
+ }): Promise<string[]>;
2913
+ type DiscoveredTenantCookie = {
2914
+ tenantId: string;
2915
+ tenantName?: string;
2916
+ };
2917
+ /**
2918
+ * Plans session-less tenant hints after an App-owned directory lookup. It never queries the
2919
+ * directory, session store, or another tenant runtime. The hints are browser-forgeable UI metadata.
2920
+ */
2921
+ declare function planDiscoveredTenantCookies(input: {
2922
+ cookieHeader: string | null | undefined;
2923
+ tenants: DiscoveredTenantCookie[];
2924
+ authType: "sso" | "ciam";
2925
+ user: object;
2926
+ projector?: (user: object) => unknown;
2927
+ displayCookie?: DisplayCookieConfig;
2928
+ attr: DisplayCookieAttributes;
2929
+ now?: Date;
2930
+ }): string[];
2821
2931
  /**
2822
2932
  * What a login/logout `after*` hook may return:
2823
2933
  * - a `string` destination (validated against the same-origin safety floor),
@@ -2844,6 +2954,10 @@ type AfterLoginContext<
2844
2954
  > = {
2845
2955
  request: Request;
2846
2956
  context?: TCtx;
2957
+ /** Current Ops policy for App-invoked discovered-tenant cookie planning. */
2958
+ displayCookie?: DisplayCookieConfig;
2959
+ /** Effective attributes shared by SDK session/display cookies. */
2960
+ displayCookieAttributes: DisplayCookieAttributes;
2847
2961
  } & ({
2848
2962
  ok: true;
2849
2963
  user: TUser;
@@ -3056,6 +3170,11 @@ type SSOConfig<
3056
3170
  cookiesSecure?: boolean;
3057
3171
  cookiesSameSite?: "Strict" | "Lax";
3058
3172
  /**
3173
+ * Parent hostname shared by host-scoped tenants. Omit for host-only cookies.
3174
+ * ConfigSource-only; must match the App's host routing `baseDomain`.
3175
+ */
3176
+ cookiesDomain?: string;
3177
+ /**
3059
3178
  * Optional tenant/application id copied into server-side sessions.
3060
3179
  * Server integrations default this from the Ionite instance id.
3061
3180
  */
@@ -3116,6 +3235,28 @@ type SSOConfig<
3116
3235
  * @default 86400
3117
3236
  */
3118
3237
  sessionWindowSeconds?: number;
3238
+ /**
3239
+ * Browser-readable display cookie beside the opaque session cookie. ConfigSource-only.
3240
+ * Off unless `enabled` is true. The server never reads this cookie to authenticate.
3241
+ */
3242
+ displayCookie?: DisplayCookieConfig;
3243
+ /**
3244
+ * What `GET ${basePath}/auth/user` returns. ConfigSource-only.
3245
+ * `full` is the verified user, `display` is the {@link displayUser} projection, `off` is 404.
3246
+ * @default 'full'
3247
+ */
3248
+ userEndpoint?: UserEndpointPolicy;
3249
+ /**
3250
+ * Code-only projection of the full user into the display cookie and the `display` user endpoint.
3251
+ * Omitted: name, email, and avatar. Cannot override a disabled {@link displayCookie}.
3252
+ */
3253
+ displayUser?: (user: WorkforceUser) => unknown;
3254
+ /**
3255
+ * Code-only cap trim. Candidates are live sessions newest first, then discovered hints newest
3256
+ * first. `max` and `maxDiscovered` are enforced independently after the hook; the session cookie
3257
+ * being written is kept even if this hook omits it.
3258
+ */
3259
+ trimDisplayCookies?: DisplayCookieTrim;
3119
3260
  } & SSOHandlerConfig;
3120
3261
  type StateCookie = {
3121
3262
  state: string;
@@ -4152,6 +4293,33 @@ type CIAMConfig<
4152
4293
  */
4153
4294
  cookiesSameSite?: "Strict" | "Lax";
4154
4295
  /**
4296
+ * Parent hostname shared by host-scoped tenants. Omit for host-only cookies.
4297
+ * ConfigSource-only; must match the App's host routing `baseDomain`.
4298
+ */
4299
+ cookiesDomain?: string;
4300
+ /**
4301
+ * Browser-readable display cookie beside the opaque customer session cookie. ConfigSource-only.
4302
+ * Off unless `enabled` is true. The server never reads this cookie to authenticate.
4303
+ */
4304
+ displayCookie?: DisplayCookieConfig;
4305
+ /**
4306
+ * What `GET ${basePath}/auth/customer` returns. ConfigSource-only.
4307
+ * `full` is the verified customer, `display` is the {@link displayUser} projection, `off` is 404.
4308
+ * @default 'full'
4309
+ */
4310
+ userEndpoint?: UserEndpointPolicy;
4311
+ /**
4312
+ * Code-only projection of the full customer into the display cookie and the `display` customer
4313
+ * endpoint. Omitted: name, email, and avatar. Cannot override a disabled {@link displayCookie}.
4314
+ */
4315
+ displayUser?: (user: Customer) => unknown;
4316
+ /**
4317
+ * Code-only cap trim. Candidates are live sessions newest first, then discovered hints newest
4318
+ * first. `max` and `maxDiscovered` are enforced independently after the hook; the session cookie
4319
+ * being written is kept even if this hook omits it.
4320
+ */
4321
+ trimDisplayCookies?: DisplayCookieTrim;
4322
+ /**
4155
4323
  * Optional tenant/application id copied into server-side sessions.
4156
4324
  * Server integrations default this from the Ionite instance id.
4157
4325
  */
@@ -4224,6 +4392,8 @@ type CIAM<
4224
4392
  resolveCustomer: (request: Request) => Promise<IdentityResolution<Customer>>;
4225
4393
  logout: (request: Request) => Promise<Response>;
4226
4394
  handler: (request: Request) => Promise<Response>;
4395
+ /** `GET ${basePath}/auth/customer`, including the Ops `userEndpoint` policy and display-cookie sync. */
4396
+ customerHandler: (request: Request) => Promise<Response>;
4227
4397
  /**
4228
4398
  * Returns the sanitized, ordered list of enabled customer-login providers
4229
4399
  * for the given request origin (never includes secrets).
@@ -5154,6 +5324,10 @@ type Authz = {
5154
5324
  entitlements: {
5155
5325
  list(options?: ListOptions): Promise<ListResult<Entitlement>>;
5156
5326
  };
5327
+ /** Durable catalog authority, when wired. Used by explicit app-owned entitlement lifecycles. */
5328
+ readonly catalogStore?: AccessCatalogStore;
5329
+ /** Durable direct-grant authority, when wired. Used by explicit app-owned grant lifecycles. */
5330
+ readonly accessStore?: AccessAssignmentStore;
5157
5331
  /** The wired closure index powering `has*`, when the app provided one via stores. */
5158
5332
  accessIndex?: AccessIndex;
5159
5333
  has(subject: AccessRef<BaseUser>, targetType: OaaAccessTargetType, target: AccessRef<Group2 | Role2 | Permission>, resource: AccessRef<Resource> | undefined, subjectType: SubjectType): Promise<AuthzDecision>;
@@ -5462,6 +5636,45 @@ declare function generateLfvEd25519KeyPair(kid: string): Promise<{
5462
5636
  privateJwk: LfvEd25519PrivateJwk;
5463
5637
  publicJwks: LfvJwks;
5464
5638
  }>;
5639
+ type SigningKey = {
5640
+ kid: string;
5641
+ secret: string;
5642
+ };
5643
+ type SigningKeyRing = {
5644
+ current(): SigningKey;
5645
+ find(kid: string): SigningKey | undefined;
5646
+ };
5647
+ type StaticSigningKeyRingDocument = {
5648
+ active: string;
5649
+ keys: Record<string, string>;
5650
+ };
5651
+ /**
5652
+ * Builds an immutable key ring from a vault-secret document.
5653
+ *
5654
+ * Every replica must receive the same document. Rotate without invalidating live JWTs by adding the
5655
+ * next key, changing `active`, and retaining the previous key until the maximum token TTL has
5656
+ * elapsed. Serverless Apps should cache the parsed ring for a warm instance and replace it when
5657
+ * their secret subscription changes instead of reading the vault on every request.
5658
+ */
5659
+ declare function staticSigningKeyRing(document: StaticSigningKeyRingDocument): SigningKeyRing;
5660
+ /**
5661
+ * Signs a short-lived HS256 JWT. Keep its payload to routing selectors and derive identity,
5662
+ * authorization, and current profile data from the authoritative session. Additional JWT state
5663
+ * shares the selector's rotation and expiry lifecycle and disappears when its verification key is
5664
+ * retired.
5665
+ */
5666
+ declare function signCompactJwt(payload: Record<string, unknown>, ring: SigningKeyRing, options: {
5667
+ ttlSeconds: number;
5668
+ }): Promise<string>;
5669
+ /**
5670
+ * Verifies an HS256 JWT against all non-retired keys addressable by `kid`.
5671
+ *
5672
+ * Malformed, expired, unknown-key, and invalid-signature tokens return `null`; operational errors
5673
+ * from a dynamic key ring still surface. WebCrypto performs the MAC verification without a
5674
+ * JavaScript-level timing-sensitive comparison. `iat`/`exp` are checked with a 60-second clock-skew
5675
+ * tolerance; size `ttlSeconds` for the artifact itself, not for that tolerance.
5676
+ */
5677
+ declare function verifyCompactJwt(token: string, ring: SigningKeyRing): Promise<Record<string, unknown> | null>;
5465
5678
  type JWK = {
5466
5679
  kty: string;
5467
5680
  kid: string;
@@ -5746,4 +5959,59 @@ type VerifyUserOptions = {
5746
5959
  * does not match, or the token is expired.
5747
5960
  */
5748
5961
  declare function verifyUser(jwt: string, options: VerifyUserOptions): Promise<WorkforceUser>;
5749
- export { AccessRequestCreate, AccessRequestResult, AccessRequestSubmit, AfterLoginContext, AfterLoginHook, AfterLogoutContext, AfterLogoutHook, AssertTrustedIdTokenClaimsOptions, BeforeLoginContext, BeforeLoginHook, BeforeLogoutContext, BeforeLogoutHook, CACHE_BOUNDS, CIAM, CIAMConfig, CIAMConfigFromCode, CIAMProviderBranding, CIAMProviderColors, CIAMProviderConfig, CIAMProviderDescriptor, CIAMProviderType, CIAMValidators, CIAM_PROVIDER_PRESETS, CatalogAdjacencyCache, CatalogView, CreateGroupOptions, CreateUserOptions, GroupsInboundHandlerConfig, IAM, IAMAccessRequestsConfig, IAMConfig, IAMDiscoveryConfig, IAMDiscoveryContext, IAMDiscoveryHandlerConfig, IAMGroupsInbound, IAMGroupsOutbound, IAMHandlerConfig, IAMInboundUserContext, IAMInboundUsersConfig, IAMUsersInbound, IAMValidators, InMemoryTenantStore, JWKS, ReconcileStores, RedirectContext, RedirectPolicy, RedirectResult, RedirectRule, RedirectRuleContext, RedirectVerdict, ReferencedDefinitions, ResolvedCacheConfig, ResolvedJwksCacheConfig, ResolvedSessionCacheConfig, ResolvedSessionReadCacheConfig, SSO, SSOConfig, SSOHandlerConfig, SSOValidators, ScimAuthenticationScheme, ScimError, ScimListResponse, ScimResourceType, ScimResourceTypeSchemaExtension, ScimResult, ScimSchemaAttributeDefinition, ScimSchemaDefinition, ScimServiceProviderConfig, SessionDiscoveryOptions, SessionResponse, StateCookie, UsersInboundHandlerConfig, VerifyIdTokenOptions, VerifyLogoutTokenOptions, VerifyUserOptions, allowHosts, allowOrigins, allowRelativePaths, allowSameOrigin, assertSubjectTypeAssignable, assertTrustedIdTokenClaims, baseCustomerToScim, baseUserToScimUser, baseWorkloadToScim, blockDangerousUrls, buildAuthorizationUrl, buildLfvSigningInput, callback, captureRedirect, ciam, clearDiscoveryCache, clearJwksCache, collectReferencedDefinitions, configureJwksCache, defaultRedirectPolicies, discoverOidcEndpoints, discoverSessionRecords, discoverSessions, entitlementToScimGroup, exchangeAuthorizationCode, expandRoot, fetchUserInfo, generateAppleClientSecret, generateLfvEd25519KeyPair, getCachedVerificationKey, getCustomer, getDiscoveredSessionUsers, getJwks, getProviderPreset, getPublicKeyForKid, getPublicKeyFromJwks, getUser, getVerificationKeyForKid, has, hasAll2 as hasAll, hasAllScope, hasAny2 as hasAny, hasAnyScope, hasGroup2 as hasGroup, hasPermission2 as hasPermission, hasRole2 as hasRole, hasScope, iam, initiateLogin, isRedirectAllowed, listSsoClientIdsFromCookies, normalizeOidcIssuer, orderedEnabledProviders, parseLfvJwks, pkceChallengeFromVerifier, reconcileSubjectAccess, resolveAfterRedirect, resolveCacheConfig, resolveCapturedRedirect, resolveCiamProvider, resolveCustomer, resolveJwkForKid, resolveJwksCacheConfig, resolveProviderBranding, resolveRedirect, resolveSessionCacheConfig, resolveUser, sameOriginRedirectRules, sendTenantWebhook, setDiscoveryClock, setJwksClock, setJwksRetry, signLfvPayload, sso, stringifyLfvJwks, verifyIdToken, verifyLfvSignature, verifyLogoutToken, verifyUser, withSetCookies };
5962
+ declare const TENANT_OWNER_PERMISSION = "tenant.owner";
5963
+ /**
5964
+ * Catalog row for the shared owner permission. The `id` is fixed to {@link TENANT_OWNER_PERMISSION}
5965
+ * because `resolveTenantOwner`, `materializeTenantOwnerEntitlement`, and `getOwnedTenantIds` all
5966
+ * address that id — an app that renames it must also thread `ownerPermission` through every helper.
5967
+ * Presentation fields are overridable defaults.
5968
+ */
5969
+ declare function tenantOwnerPermission(overrides?: Partial<Omit<Permission, "id">>): Permission;
5970
+ declare function tenantResourceId(tenantId: string): string;
5971
+ declare function tenantOwnerEntitlementId(tenantId: string): string;
5972
+ type TenantAccessSessionKind = "sso" | "customer" | "owner";
5973
+ type TenantAccessSession<Kind extends TenantAccessSessionKind = TenantAccessSessionKind> = {
5974
+ id: string;
5975
+ email?: string;
5976
+ name?: string;
5977
+ kind: Kind;
5978
+ };
5979
+ type TenantAccessDenialReason = "not_found" | "forbidden" | "unavailable" | "unauthenticated";
5980
+ type TenantAccessDenial = {
5981
+ allow: false;
5982
+ reason: TenantAccessDenialReason;
5983
+ response(): Response;
5984
+ };
5985
+ type TenantAccessResult<Kind extends TenantAccessSessionKind = TenantAccessSessionKind> = {
5986
+ allow: true;
5987
+ session: TenantAccessSession<Kind>;
5988
+ } | TenantAccessDenial;
5989
+ type ResolveTenantSessionOptions = {
5990
+ rootIon: Ionite;
5991
+ tenantIon: Ionite | undefined;
5992
+ tenantId: string;
5993
+ permission?: string;
5994
+ allowTenantCustomer?: boolean;
5995
+ ownerPermission?: string;
5996
+ };
5997
+ type ResolveTenantOwnerOptions = {
5998
+ rootIon: Ionite;
5999
+ tenantId: string;
6000
+ ownerPermission?: string;
6001
+ };
6002
+ declare function resolveTenantOwner(request: Request, options: ResolveTenantOwnerOptions): Promise<TenantAccessResult<"owner">>;
6003
+ declare function resolveTenantSession(request: Request, options: ResolveTenantSessionOptions & {
6004
+ allowTenantCustomer: true;
6005
+ }): Promise<TenantAccessResult>;
6006
+ declare function resolveTenantSession(request: Request, options: ResolveTenantSessionOptions & {
6007
+ allowTenantCustomer?: false;
6008
+ }): Promise<TenantAccessResult<"sso" | "owner">>;
6009
+ declare function getOwnedTenantIds(rootIon: Ionite, customerId: string): Promise<string[]>;
6010
+ type TenantAccessLoginUrlOptions = {
6011
+ tenantIon: Ionite | undefined;
6012
+ fallbackPath: string;
6013
+ redirectTo: string;
6014
+ tenantIonBasePath?: (tenantId: string) => string;
6015
+ };
6016
+ declare function tenantAccessLoginUrl(tenantId: string, options: TenantAccessLoginUrlOptions): string;
6017
+ export { AccessRequestCreate, AccessRequestResult, AfterLoginContext, AfterLoginHook, AfterLogoutContext, AfterLogoutHook, AssertTrustedIdTokenClaimsOptions, BeforeLoginContext, BeforeLoginHook, BeforeLogoutContext, BeforeLogoutHook, CACHE_BOUNDS, CIAM, CIAMConfig, CIAMConfigFromCode, CIAMProviderBranding, CIAMProviderColors, CIAMProviderConfig, CIAMProviderDescriptor, CIAMProviderType, CIAMValidators, CIAM_PROVIDER_PRESETS, CatalogAdjacencyCache, CatalogView, CreateGroupOptions, CreateUserOptions, DiscoveredTenantCookie, DisplayCookieAttributes, DisplayCookieCandidate, DisplayCookieTrim, GroupsInboundHandlerConfig, IAM, IAMAccessRequestsConfig, IAMConfig, IAMDiscoveryConfig, IAMDiscoveryContext, IAMDiscoveryHandlerConfig, IAMGroupsInbound, IAMGroupsOutbound, IAMHandlerConfig, IAMInboundUserContext, IAMInboundUsersConfig, IAMUsersInbound, IAMValidators, InMemoryTenantStore, JWKS, ReconcileStores, RedirectContext, RedirectPolicy, RedirectResult, RedirectRule, RedirectRuleContext, RedirectVerdict, ReferencedDefinitions, ResolveTenantOwnerOptions, ResolveTenantSessionOptions, ResolvedCacheConfig, ResolvedJwksCacheConfig, ResolvedSessionCacheConfig, ResolvedSessionReadCacheConfig, SSO, SSOConfig, SSOHandlerConfig, SSOValidators, ScimAuthenticationScheme, ScimError, ScimListResponse, ScimResourceType, ScimResourceTypeSchemaExtension, ScimResult, ScimSchemaAttributeDefinition, ScimSchemaDefinition, ScimServiceProviderConfig, SessionDiscoveryOptions, SessionResponse, SigningKey, SigningKeyRing, StateCookie, StaticSigningKeyRingDocument, TENANT_OWNER_PERMISSION, TenantAccessDenial, TenantAccessDenialReason, TenantAccessLoginUrlOptions, TenantAccessResult, TenantAccessSession, TenantAccessSessionKind, UsersInboundHandlerConfig, VerifyIdTokenOptions, VerifyLogoutTokenOptions, VerifyUserOptions, allowHosts, allowOrigins, allowRelativePaths, allowSameOrigin, assertSubjectTypeAssignable, assertTrustedIdTokenClaims, baseCustomerToScim, baseUserToScimUser, baseWorkloadToScim, blockDangerousUrls, buildAuthorizationUrl, buildLfvSigningInput, callback, captureRedirect, ciam, clearDiscoveryCache, clearJwksCache, collectReferencedDefinitions, configureJwksCache, defaultRedirectPolicies, discoverOidcEndpoints, discoverSessionRecords, discoverSessions, entitlementToScimGroup, exchangeAuthorizationCode, expandRoot, fetchUserInfo, formatDisplayClearCookie, formatDisplaySetCookie, generateAppleClientSecret, generateLfvEd25519KeyPair, getCachedVerificationKey, getCustomer, getDiscoveredSessionUsers, getJwks, getOwnedTenantIds, getProviderPreset, getPublicKeyForKid, getPublicKeyFromJwks, getUser, getVerificationKeyForKid, has, hasAll2 as hasAll, hasAllScope, hasAny2 as hasAny, hasAnyScope, hasGroup2 as hasGroup, hasPermission2 as hasPermission, hasRole2 as hasRole, hasScope, iam, initiateLogin, isRedirectAllowed, listSsoClientIdsFromCookies, normalizeOidcIssuer, orderedEnabledProviders, parseLfvJwks, pkceChallengeFromVerifier, planDiscoveredTenantCookies, planDisplayCookieClear, planDisplayCookieHeaders, reconcileSubjectAccess, resolveAfterRedirect, resolveCacheConfig, resolveCapturedRedirect, resolveCiamProvider, resolveCustomer, resolveJwkForKid, resolveJwksCacheConfig, resolveProviderBranding, resolveRedirect, resolveSessionCacheConfig, resolveTenantOwner, resolveTenantSession, resolveUser, sameOriginRedirectRules, selectDisplayCookies, sendTenantWebhook, setDiscoveryClock, setJwksClock, setJwksRetry, signCompactJwt, signLfvPayload, sso, staticSigningKeyRing, stringifyLfvJwks, tenantAccessLoginUrl, tenantOwnerEntitlementId, tenantOwnerPermission, tenantResourceId, verifyCompactJwt, verifyIdToken, verifyLfvSignature, verifyLogoutToken, verifyUser, withSetCookies };