@enterprisestandard/core 0.0.11-beta.20260319.1 → 0.0.12

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
@@ -2180,15 +2180,7 @@ declare class MultipleTenantsForUserError extends Error {
2180
2180
  readonly tenantIds: string[];
2181
2181
  constructor(userId: string, tenantIds: string[], options?: ErrorOptions);
2182
2182
  }
2183
- declare const UserToSingleTenant: {
2184
- readonly kind: "single";
2185
- };
2186
- type UserToSingleTenant = typeof UserToSingleTenant;
2187
- declare const AllowUserWithMultipleTenants: {
2188
- readonly kind: "multiple";
2189
- };
2190
- type AllowUserWithMultipleTenants = typeof AllowUserWithMultipleTenants;
2191
- type UserTenantMapping = UserToSingleTenant | AllowUserWithMultipleTenants;
2183
+ type UserMode = "singleTenantOnly" | "multipleTenantsPerUser";
2192
2184
  type TenantValidators = {
2193
2185
  upsertTenantRequest: StandardSchemaV17<unknown, UpsertTenantRequest>;
2194
2186
  upsertTenantResponse?: StandardSchemaV17<unknown, UpsertTenantResponse>;
@@ -2294,23 +2286,23 @@ type TenantStoreWithESOptions<TExtended extends object = Record<string, never>>
2294
2286
  type TenantMetadataRecord = Omit<TenantBaseRecord, "tenantId" | "config" | "configSource" | "status" | "createdAt" | "updatedAt">;
2295
2287
  type TenantExtendedUpsertFields<TExtended extends object> = string extends keyof TExtended ? unknown : Partial<TExtended>;
2296
2288
  type TenantStoreUpsertRecord<TExtended extends object = Record<string, never>> = Pick<TenantBaseRecord, "tenantId" | "configSource"> & Partial<TenantMetadataRecord> & Partial<Pick<TenantBaseRecord, "status" | "createdAt" | "updatedAt">> & TenantExtendedUpsertFields<TExtended>;
2297
- type TenantUserRegistration<TMapping extends UserTenantMapping = UserTenantMapping> = {
2298
- userTenantMapping: TMapping;
2289
+ type TenantUserRegistration<TMode extends UserMode = UserMode> = {
2290
+ userMode: TMode;
2299
2291
  registerUserTenantId?(userId: string, tenantId: string | null | undefined): void | Promise<void>;
2300
2292
  };
2301
2293
  type TenantStoreBase<
2302
- TMapping extends UserTenantMapping = UserToSingleTenant,
2294
+ TMode extends UserMode = "singleTenantOnly",
2303
2295
  TExtended extends object = Record<string, never>
2304
- > = TenantUserRegistration<TMapping> & {
2296
+ > = TenantUserRegistration<TMode> & {
2305
2297
  get(tenantId: string): Promise<StoredTenant<TExtended> | null>;
2306
2298
  list(options?: TenantListOptions): Promise<ListResult<StoredTenant<TExtended>>>;
2307
2299
  upsert(tenant: TenantStoreUpsertRecord<TExtended>): Promise<StoredTenant<TExtended>>;
2308
2300
  delete(tenantId: string): Promise<void>;
2309
2301
  };
2310
2302
  type TenantLookupMethods<
2311
- TMapping extends UserTenantMapping,
2303
+ TMode extends UserMode,
2312
2304
  TExtended extends object
2313
- > = TMapping extends UserToSingleTenant ? {
2305
+ > = TMode extends "singleTenantOnly" ? {
2314
2306
  findTenantByUserId(userId: string): Promise<StoredTenant<TExtended> | null>;
2315
2307
  findTenantsByUserId?: never;
2316
2308
  } : {
@@ -2318,36 +2310,36 @@ type TenantLookupMethods<
2318
2310
  findTenantsByUserId(userId: string): Promise<StoredTenant<TExtended>[]>;
2319
2311
  };
2320
2312
  type TenantStore<
2321
- TMapping extends UserTenantMapping = UserToSingleTenant,
2313
+ TMode extends UserMode = "singleTenantOnly",
2322
2314
  TExtended extends object = Record<string, never>
2323
- > = TenantStoreBase<TMapping, TExtended> & TenantLookupMethods<TMapping, TExtended>;
2315
+ > = TenantStoreBase<TMode, TExtended> & TenantLookupMethods<TMode, TExtended>;
2324
2316
  type TenantStoreWithES<
2325
- TMapping extends UserTenantMapping = UserToSingleTenant,
2317
+ TMode extends UserMode = "singleTenantOnly",
2326
2318
  TExtended extends object = Record<string, never>
2327
- > = TenantStore<TMapping, TExtended> & {
2319
+ > = TenantStore<TMode, TExtended> & {
2328
2320
  ttl: number;
2329
2321
  getEs(tenantId: string): Promise<EnterpriseStandard | null>;
2330
2322
  getCachedTenantIds(): string[];
2331
2323
  };
2332
2324
  type InMemoryTenantStoreOptions<
2333
- TMapping extends UserTenantMapping = UserToSingleTenant,
2325
+ TMode extends UserMode = "singleTenantOnly",
2334
2326
  TExtended extends object = Record<string, never>
2335
2327
  > = TenantStoreWithESOptions<TExtended> & {
2336
- userTenantMapping?: TMapping;
2328
+ userMode: TMode;
2337
2329
  };
2338
2330
  declare class InMemoryTenantStore<
2339
- TMapping extends UserTenantMapping = UserToSingleTenant,
2331
+ TMode extends UserMode = "singleTenantOnly",
2340
2332
  TExtended extends object = Record<string, never>
2341
2333
  > {
2342
2334
  private tenants;
2343
2335
  private tenantEsMap;
2344
2336
  private userTenantIds;
2345
2337
  readonly ttl: number;
2346
- readonly userTenantMapping: TMapping;
2338
+ readonly userMode: TMode;
2347
2339
  private readonly createEs?;
2348
- readonly findTenantByUserId: TMapping extends UserToSingleTenant ? (userId: string) => Promise<StoredTenant<TExtended> | null> : never;
2349
- readonly findTenantsByUserId: TMapping extends AllowUserWithMultipleTenants ? (userId: string) => Promise<StoredTenant<TExtended>[]> : never;
2350
- constructor(options?: InMemoryTenantStoreOptions<TMapping, TExtended>);
2340
+ readonly findTenantByUserId: TMode extends "singleTenantOnly" ? (userId: string) => Promise<StoredTenant<TExtended> | null> : never;
2341
+ readonly findTenantsByUserId: TMode extends "multipleTenantsPerUser" ? (userId: string) => Promise<StoredTenant<TExtended>[]> : never;
2342
+ constructor(options: InMemoryTenantStoreOptions<TMode, TExtended>);
2351
2343
  get(tenantId: string): Promise<StoredTenant<TExtended> | null>;
2352
2344
  list(options?: TenantListOptions): Promise<ListResult<StoredTenant<TExtended>>>;
2353
2345
  upsert(tenant: TenantStoreUpsertRecord<TExtended>): Promise<StoredTenant<TExtended>>;
@@ -3021,4 +3013,4 @@ declare function parseJsonc<T>(content: string): T;
3021
3013
  * @returns A promise that resolves when the service is ready.
3022
3014
  */
3023
3015
  declare function waitOn(url: string, test?: (resp: Response) => boolean | Promise<boolean>, pingInterval?: number, warnInterval?: number, timeout?: number): Promise<void>;
3024
- export { workloadTokenResponseSchema, withValidate, waitOn, version, validationFailureResponse, userSchema, tokenResponseSchema, stripJsonComments, silentLogger, setActiveSession, serializeESConfig, sendTenantWebhook, parseJsonc, oidcCallbackSchema, normalizeTenantRoutingStrategy, normalizeTenantPathNamespace, must, mergeConfig, matchTenantPath, listSsoClientIdsFromCookies, list, jwtAssertionClaimsSchema, infoLogger, idTokenClaimsSchema, groupResourceSchema, getActiveSession, findTenantFromStateParam, defaultLogger, decodeUser, debugLogger, consoleLogger, clearActiveSession, claimsToUser, buildTenantPath, X509Certificate, WorkloadValidators, WorkloadTokenStore, WorkloadTokenResponse, WorkloadIncomingOutgoing, WorkloadIdentity, WorkloadConfigMap, WorkloadConfig, WorkloadClient, Workload, VaultSecretsConfig, ValidateResult, UsersInboundHandlerConfig, UserToSingleTenant, UserTenantMapping, UserStore, UserSortOptions, UserSortField, UserListOptions, User2 as User, UpsertTenantResponse, UpsertTenantRequest, TokenValidationResult, TokenResponse, TenantWebhookPayload, TenantValidators, TenantUserRegistration, TenantStoreWithESOptions, TenantStoreWithES, TenantStoreUpsertRecord, TenantStore, TenantStatus, TenantSortOptions, TenantSortField, TenantSecretsConfig, TenantRoutingStrategy, TenantRequestError, TenantPathRoutingStrategy, TenantPathNamespace, TenantPathMatch, TenantListOptions, TenantJwtRoutingStrategy, TenantEsFactory, TenantConfigSourceInput, TenantConfigEnv, StoredUser, StoredTenantRecord, StoredTenant, StoredGroup, StateCookie, StandardSchemaWithValidate, SortDirection, SessionStore, Session, ServerOnlyWorkloadConfig, SecretsValidators, SecretsSourceType, SecretsSourceMap, SecretsSourceConfig, SecretsSource, SecretsOperationOptions, SecretsModuleConfig, Secrets, SecretRequestSeverity, SecretLifecycleRequest, Secret, User as ScimUser, ScimResult, ScimListResponse, ScimError, SSOValidators, SSOHandlerConfig, SSOConfig, SSO, Role, ResolvedLfvSecretsConfig, RemoteConfig, Photo, PhoneNumber, OidcCallbackParams, Name, MultipleTenantsForUserError, MetaData, MagicLinkStore, MagicLink, LoginConfig, Logger, ListResult, LfvSecretsConfig, JwtBearerWorkloadConfig, JWTAssertionClaims, InMemoryTenantStoreOptions, InMemoryTenantStore, IdTokenClaims, IAMValidators, IAMUsersInbound, IAMHandlerConfig, IAMGroupsOutbound, IAMGroupsInbound, IAMConfig, IAM, GroupsInboundHandlerConfig, GroupStore, GroupSortOptions, GroupSortField, GroupResource, GroupMember, GroupListOptions, Group, GcpSecretsConfig, FrameworkWorkloadIncomingOutgoing, FrameworkWorkloadConfig, FrameworkSecretsSourceConfig, FrameworkSecretsModuleConfig, FrameworkConfig, EnvironmentType, EnterpriseUser, EnterpriseStandardFromConfig, EnterpriseStandardBase, EnterpriseStandard, EnterpriseExtension, Email, ESValidators, ESRoutingOptions, ESRouteModule, ESRouteFilterResult, ESResolvedRoute, ESModuleFromConfig, ESConfigChangeResult, ESConfigChangeOptions, ESConfigChangeCallback, ESConfig, DevSecretsConfig, DEFAULT_TENANT_UI_NAMESPACE, DEFAULT_TENANT_API_NAMESPACE, CreateUserOptions, CreateTenantResponse, CreateTenantRequest, CreateGroupOptions, ConfigSourceType, ConfigSource, ClientCredentialsWorkloadConfig, CachedWorkloadToken, CIAMValidators, CIAMConfigFromCode, CIAMConfig, CIAM, BaseUser, AzureSecretsConfig, AwsSecretsConfig, AwsAuthMethod, ApplicationValidators, AllowUserWithMultipleTenants, Address };
3016
+ export { workloadTokenResponseSchema, withValidate, waitOn, version, validationFailureResponse, userSchema, tokenResponseSchema, stripJsonComments, silentLogger, setActiveSession, serializeESConfig, sendTenantWebhook, parseJsonc, oidcCallbackSchema, normalizeTenantRoutingStrategy, normalizeTenantPathNamespace, must, mergeConfig, matchTenantPath, listSsoClientIdsFromCookies, list, jwtAssertionClaimsSchema, infoLogger, idTokenClaimsSchema, groupResourceSchema, getActiveSession, findTenantFromStateParam, defaultLogger, decodeUser, debugLogger, consoleLogger, clearActiveSession, claimsToUser, buildTenantPath, X509Certificate, WorkloadValidators, WorkloadTokenStore, WorkloadTokenResponse, WorkloadIncomingOutgoing, WorkloadIdentity, WorkloadConfigMap, WorkloadConfig, WorkloadClient, Workload, VaultSecretsConfig, ValidateResult, UsersInboundHandlerConfig, UserStore, UserSortOptions, UserSortField, UserMode, UserListOptions, User2 as User, UpsertTenantResponse, UpsertTenantRequest, TokenValidationResult, TokenResponse, TenantWebhookPayload, TenantValidators, TenantUserRegistration, TenantStoreWithESOptions, TenantStoreWithES, TenantStoreUpsertRecord, TenantStore, TenantStatus, TenantSortOptions, TenantSortField, TenantSecretsConfig, TenantRoutingStrategy, TenantRequestError, TenantPathRoutingStrategy, TenantPathNamespace, TenantPathMatch, TenantListOptions, TenantJwtRoutingStrategy, TenantEsFactory, TenantConfigSourceInput, TenantConfigEnv, StoredUser, StoredTenantRecord, StoredTenant, StoredGroup, StateCookie, StandardSchemaWithValidate, SortDirection, SessionStore, Session, ServerOnlyWorkloadConfig, SecretsValidators, SecretsSourceType, SecretsSourceMap, SecretsSourceConfig, SecretsSource, SecretsOperationOptions, SecretsModuleConfig, Secrets, SecretRequestSeverity, SecretLifecycleRequest, Secret, User as ScimUser, ScimResult, ScimListResponse, ScimError, SSOValidators, SSOHandlerConfig, SSOConfig, SSO, Role, ResolvedLfvSecretsConfig, RemoteConfig, Photo, PhoneNumber, OidcCallbackParams, Name, MultipleTenantsForUserError, MetaData, MagicLinkStore, MagicLink, LoginConfig, Logger, ListResult, LfvSecretsConfig, JwtBearerWorkloadConfig, JWTAssertionClaims, InMemoryTenantStoreOptions, InMemoryTenantStore, IdTokenClaims, IAMValidators, IAMUsersInbound, IAMHandlerConfig, IAMGroupsOutbound, IAMGroupsInbound, IAMConfig, IAM, GroupsInboundHandlerConfig, GroupStore, GroupSortOptions, GroupSortField, GroupResource, GroupMember, GroupListOptions, Group, GcpSecretsConfig, FrameworkWorkloadIncomingOutgoing, FrameworkWorkloadConfig, FrameworkSecretsSourceConfig, FrameworkSecretsModuleConfig, FrameworkConfig, EnvironmentType, EnterpriseUser, EnterpriseStandardFromConfig, EnterpriseStandardBase, EnterpriseStandard, EnterpriseExtension, Email, ESValidators, ESRoutingOptions, ESRouteModule, ESRouteFilterResult, ESResolvedRoute, ESModuleFromConfig, ESConfigChangeResult, ESConfigChangeOptions, ESConfigChangeCallback, ESConfig, DevSecretsConfig, DEFAULT_TENANT_UI_NAMESPACE, DEFAULT_TENANT_API_NAMESPACE, CreateUserOptions, CreateTenantResponse, CreateTenantRequest, CreateGroupOptions, ConfigSourceType, ConfigSource, ClientCredentialsWorkloadConfig, CachedWorkloadToken, CIAMValidators, CIAMConfigFromCode, CIAMConfig, CIAM, BaseUser, AzureSecretsConfig, AwsSecretsConfig, AwsAuthMethod, ApplicationValidators, Address };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{I as z,a as f0,b as x0,c as A0,d as Q0,e as X0,f as Z0,g as G0,h as R0,i as T0,j as Y0,k as M0,l as c0,m as y0,n as z0,o as B0,p as H0,q as N0,t as W0,u as C0,v as _0,w as K0,x as F0}from"./shared/core-gqcvxn3w.js";var V="0.0.11-beta.20260319.1";var E=["sessionStore","userStore","groupStore","tokenStore","magicLinkStore"];function C(L){if(L===null||typeof L!=="object")return L;let $={};for(let[J,D]of Object.entries(L)){if(E.includes(J)||J==="validators")continue;$[J]=D!==null&&typeof D==="object"&&!Array.isArray(D)&&Object.getPrototypeOf(D)===Object.prototype?C(D):D}return $}function j(L){return C(L)}function y(L,$,J,D){let f=$.length,Q=D??L,x=Q>0?Math.floor(J/Q)+1:1,A=Q>0?Math.ceil(L/Q):0;return{total:L,count:f,items:$,size:Q,page:x,pages:A}}class H extends Error{constructor(L,$){super(L,$);this.name="TenantRequestError",Object.setPrototypeOf(this,H.prototype)}}class N extends Error{userId;tenantIds;constructor(L,$,J){super(`Multiple tenants found for user id "${L}"`,J);this.name="MultipleTenantsForUserError",this.userId=L,this.tenantIds=$,Object.setPrototypeOf(this,N.prototype)}}var M={kind:"single"},S={kind:"multiple"},B=Number.POSITIVE_INFINITY;class _{tenants=new Map;tenantEsMap=new Map;userTenantIds=new Map;ttl;userTenantMapping;createEs;findTenantByUserId;findTenantsByUserId;constructor(L={}){if(this.ttl=I(L.ttl),this.userTenantMapping=L.userTenantMapping??M,this.createEs=L.createEs,this.userTenantMapping.kind===M.kind){this.findTenantByUserId=this.findSingleTenantByUserId.bind(this),this.findTenantsByUserId=void 0;return}this.findTenantByUserId=void 0,this.findTenantsByUserId=this.findMultipleTenantsByUserId.bind(this)}async get(L){return this.tenants.get(L)??null}async list(L){let $=Array.from(this.tenants.values()),J=Math.max(0,L?.start??0),D=L?.limit,f=L?.sort;if(f?.length)$=[...$].sort((Z,R)=>{for(let{field:G,direction:q}of f){let w=Z[G],U=R[G],c=O(w,U);if(c!==0)return q==="desc"?-c:c}return 0});let Q=$.length,x=D!=null?J+D:void 0,A=$.slice(J,x);return y(Q,A,J,D)}async upsert(L){let $=new Date,J=this.tenants.get(L.tenantId),D={...J??{},...L,companyId:L.companyId??J?.companyId??"",companyName:L.companyName??J?.companyName??"",environmentType:L.environmentType??J?.environmentType??"DEV",email:L.email??J?.email,webhookUrl:L.webhookUrl??J?.webhookUrl,callbackUrl:L.callbackUrl??J?.callbackUrl,tenantUrl:L.tenantUrl??J?.tenantUrl,status:L.status??J?.status??"completed",createdAt:L.createdAt??J?.createdAt??$,updatedAt:L.updatedAt??$};return this.tenants.set(D.tenantId,D),this.tenantEsMap.delete(D.tenantId),D}async delete(L){this.tenantEsMap.delete(L),this.tenants.delete(L)}async getEs(L){let $=await this.get(L);if(!$)throw Error(`Tenant "${L}" not found`);if(!this.createEs)throw Error("InMemoryTenantStore requires options.createEs to use getEs()");if(this.ttl===0)return this.createEs(z($));let J=Date.now(),D=this.tenantEsMap.get(L);if(D&&D.expiresAt>J)return D.es;if(D)this.tenantEsMap.delete(L);let f=this.createEs(z($));return this.tenantEsMap.set(L,{es:f,expiresAt:P(J,this.ttl)}),f}getCachedTenantIds(){if(this.ttl===0)return[];let L=Date.now();for(let[$,J]of this.tenantEsMap.entries())if(J.expiresAt<=L)this.tenantEsMap.delete($);return Array.from(this.tenantEsMap.keys())}async registerUserTenantId(L,$){if(!L)return;let J=g($);if(this.userTenantMapping.kind===M.kind){this.userTenantIds.set(L,new Set([J]));return}let D=this.userTenantIds.get(L);if(D){D.add(J);return}this.userTenantIds.set(L,new Set([J]))}async findSingleTenantByUserId(L){return(await this.resolveTenantsByUserId(L))[0]??null}async findMultipleTenantsByUserId(L){return this.resolveTenantsByUserId(L)}async resolveTenantsByUserId(L){let $=this.userTenantIds.get(L);if(!$||$.size===0)return[];let J=$.has(null),D=Array.from($).filter((x)=>x!=null);if(D.length===0)return[];let f=await Promise.all(D.map(async(x)=>({tenantId:x,tenant:await this.get(x)}))),Q=f.filter((x)=>x.tenant!=null).map((x)=>x.tenantId);if(Q.length===0){if(J)this.userTenantIds.set(L,new Set([null]));else this.userTenantIds.delete(L);return[]}if(Q.length!==D.length){let x=J?[null,...Q]:Q;this.userTenantIds.set(L,new Set(x))}return f.map((x)=>x.tenant).filter((x)=>x!=null)}}function O(L,$){let J=L===void 0||L===null,D=$===void 0||$===null;if(J&&D)return 0;if(J)return 1;if(D)return-1;if(L instanceof Date&&$ instanceof Date)return L.getTime()-$.getTime();let f=String(L),Q=String($);return f.localeCompare(Q)}function g(L){if(typeof L!=="string")return null;return L.trim()||null}function I(L){if(L===void 0)return B;if(L<=0)return L===0?0:B;return L}function P(L,$){if(!Number.isFinite($))return B;return L+$}function p(L,$,J){return(async()=>{try{let D=await fetch(L,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($)});if(!D.ok)J.error(`Failed to send webhook update: ${D.status} ${D.statusText}`)}catch(D){J.error("Failed to send webhook update:",D)}})()}async function m(L,$,J){return p(L,$,J)}var h={beforeTenantSegments:["ui"]},b={beforeTenantSegments:["api"]};function K(L){return{segments:W(L?.segments)}}function W(L){return(L??[]).map(($)=>$.trim()).filter(Boolean)}function o(L){let $=L.trim();if(!$)return"/";let J=$.replace(/\\/g,"/").replace(/\/+/g,"/");return J.startsWith("/")?J:`/${J}`}function F(L){return o(L).split("/").filter(Boolean)}function T(L){return{beforeTenantSegments:W(L?.beforeTenantSegments),afterTenantSegments:W(L?.afterTenantSegments)}}function n(L){if(!L||L.type===void 0||L.type==="path"){let J=L;return{type:"path",ui:T(J?.ui),api:T(J?.api)}}let $=L;return{...$,ui:K($.ui),api:K($.api)}}function v(L,$){let J=T($),D=J.beforeTenantSegments??[],f=J.afterTenantSegments??[],Q=F(L),x=D.length+1+f.length;if(Q.length<x)return null;for(let G=0;G<D.length;G++)if(Q[G]!==D[G])return null;let A=D.length,Z=Q[A];if(!Z)return null;for(let G=0;G<f.length;G++)if(Q[A+1+G]!==f[G])return null;let R=Q.slice(A+1+f.length);return{tenantId:decodeURIComponent(Z),restSegments:R,restPath:R.length>0?`/${R.join("/")}`:"/"}}function d(L,$="/",J){let D=T(J),f=D.beforeTenantSegments??[],Q=D.afterTenantSegments??[],x=F($),A=[...f,encodeURIComponent(L),...Q,...x];return A.length>0?`/${A.join("/")}`:"/"}function X(L,$,J,D,f){if(L===void 0||L===null){if(J)D.push({message:`${$} is required`,path:f});return}if(typeof L!=="string"){D.push({message:`${$} must be a string`,path:f});return}return L}function Y(L,$,J,D){if(L===void 0||L===null)return;if(typeof L!=="boolean"){J.push({message:`${$} must be a boolean`,path:D});return}return L}function r(L,$,J){if(L===void 0||L===null)return;if(typeof L!=="object"||L===null){$.push({message:"name must be an object",path:J});return}let D=L,f={};return f.formatted=X(D.formatted,"formatted",!1,$,[...J,"formatted"]),f.familyName=X(D.familyName,"familyName",!1,$,[...J,"familyName"]),f.givenName=X(D.givenName,"givenName",!1,$,[...J,"givenName"]),f.middleName=X(D.middleName,"middleName",!1,$,[...J,"middleName"]),f.honorificPrefix=X(D.honorificPrefix,"honorificPrefix",!1,$,[...J,"honorificPrefix"]),f.honorificSuffix=X(D.honorificSuffix,"honorificSuffix",!1,$,[...J,"honorificSuffix"]),f}function l(L,$,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){$.push({message:"emails must be an array",path:J});return}let D=[];for(let f=0;f<L.length;f++){let Q=L[f],x=[...J,f];if(typeof Q!=="object"||Q===null){$.push({message:"email must be an object",path:x});continue}let A=Q,Z=X(A.value,"value",!0,$,[...x,"value"]);if(Z)D.push({value:Z,display:X(A.display,"display",!1,$,[...x,"display"]),type:X(A.type,"type",!1,$,[...x,"type"]),primary:Y(A.primary,"primary",$,[...x,"primary"])})}return D.length>0?D:void 0}function t(L,$,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){$.push({message:"phoneNumbers must be an array",path:J});return}let D=[];for(let f=0;f<L.length;f++){let Q=L[f],x=[...J,f];if(typeof Q!=="object"||Q===null){$.push({message:"phoneNumber must be an object",path:x});continue}let A=Q,Z=X(A.value,"value",!0,$,[...x,"value"]);if(Z)D.push({value:Z,display:X(A.display,"display",!1,$,[...x,"display"]),type:X(A.type,"type",!1,$,[...x,"type"]),primary:Y(A.primary,"primary",$,[...x,"primary"])})}return D.length>0?D:void 0}function i(L,$,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){$.push({message:"addresses must be an array",path:J});return}let D=[];for(let f=0;f<L.length;f++){let Q=L[f],x=[...J,f];if(typeof Q!=="object"||Q===null){$.push({message:"address must be an object",path:x});continue}let A=Q;D.push({formatted:X(A.formatted,"formatted",!1,$,[...x,"formatted"]),streetAddress:X(A.streetAddress,"streetAddress",!1,$,[...x,"streetAddress"]),locality:X(A.locality,"locality",!1,$,[...x,"locality"]),region:X(A.region,"region",!1,$,[...x,"region"]),postalCode:X(A.postalCode,"postalCode",!1,$,[...x,"postalCode"]),country:X(A.country,"country",!1,$,[...x,"country"]),type:X(A.type,"type",!1,$,[...x,"type"]),primary:Y(A.primary,"primary",$,[...x,"primary"])})}return D.length>0?D:void 0}function u(L,$,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){$.push({message:"groups must be an array",path:J});return}let D=[];for(let f=0;f<L.length;f++){let Q=L[f],x=[...J,f];if(typeof Q!=="object"||Q===null){$.push({message:"group must be an object",path:x});continue}let A=Q,Z=X(A.value,"value",!0,$,[...x,"value"]);if(Z)D.push({value:Z,$ref:X(A.$ref,"$ref",!1,$,[...x,"$ref"]),display:X(A.display,"display",!1,$,[...x,"display"]),type:X(A.type,"type",!1,$,[...x,"type"])})}return D.length>0?D:void 0}function a(L,$,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){$.push({message:"roles must be an array",path:J});return}let D=[];for(let f=0;f<L.length;f++){let Q=L[f],x=[...J,f];if(typeof Q!=="object"||Q===null){$.push({message:"role must be an object",path:x});continue}let A=Q,Z=X(A.value,"value",!0,$,[...x,"value"]);if(Z)D.push({value:Z,display:X(A.display,"display",!1,$,[...x,"display"]),type:X(A.type,"type",!1,$,[...x,"type"]),primary:Y(A.primary,"primary",$,[...x,"primary"])})}return D.length>0?D:void 0}function e(L,$,J){if(L===void 0||L===null)return;if(typeof L!=="object"||L===null){$.push({message:"Enterprise User extension must be an object",path:J});return}let D=L,f={};if(f.employeeNumber=X(D.employeeNumber,"employeeNumber",!1,$,[...J,"employeeNumber"]),f.costCenter=X(D.costCenter,"costCenter",!1,$,[...J,"costCenter"]),f.organization=X(D.organization,"organization",!1,$,[...J,"organization"]),f.division=X(D.division,"division",!1,$,[...J,"division"]),f.department=X(D.department,"department",!1,$,[...J,"department"]),D.manager!==void 0&&D.manager!==null)if(typeof D.manager!=="object"||D.manager===null)$.push({message:"manager must be an object",path:[...J,"manager"]});else{let Q=D.manager;f.manager={value:X(Q.value,"value",!1,$,[...J,"manager","value"]),$ref:X(Q.$ref,"$ref",!1,$,[...J,"manager","$ref"]),displayName:X(Q.displayName,"displayName",!1,$,[...J,"manager","displayName"])}}return f}function s(L){return{"~standard":{version:1,vendor:L,validate:($)=>{if(typeof $!=="object"||$===null)return{issues:[{message:"Expected an object"}]};let J=$,D=[],f={},Q=X(J.userName,"userName",!0,D,["userName"]);if(!Q)return{issues:D};f.userName=Q,f.id=X(J.id,"id",!1,D,["id"]),f.externalId=X(J.externalId,"externalId",!1,D,["externalId"]),f.displayName=X(J.displayName,"displayName",!1,D,["displayName"]),f.nickName=X(J.nickName,"nickName",!1,D,["nickName"]),f.profileUrl=X(J.profileUrl,"profileUrl",!1,D,["profileUrl"]),f.title=X(J.title,"title",!1,D,["title"]),f.userType=X(J.userType,"userType",!1,D,["userType"]),f.preferredLanguage=X(J.preferredLanguage,"preferredLanguage",!1,D,["preferredLanguage"]),f.locale=X(J.locale,"locale",!1,D,["locale"]),f.timezone=X(J.timezone,"timezone",!1,D,["timezone"]),f.password=X(J.password,"password",!1,D,["password"]),f.active=Y(J.active,"active",D,["active"]),f.name=r(J.name,D,["name"]),f.emails=l(J.emails,D,["emails"]),f.phoneNumbers=t(J.phoneNumbers,D,["phoneNumbers"]),f.addresses=i(J.addresses,D,["addresses"]),f.groups=u(J.groups,D,["groups"]),f.roles=a(J.roles,D,["roles"]);let x="urn:ietf:params:scim:schemas:extension:enterprise:2.0:User";if(J[x]!==void 0)f[x]=e(J[x],D,[x]);if(J.schemas!==void 0)if(Array.isArray(J.schemas))f.schemas=J.schemas.filter((A)=>typeof A==="string");else D.push({message:"schemas must be an array",path:["schemas"]});if(J.meta!==void 0)if(typeof J.meta==="object"&&J.meta!==null){let A=J.meta;f.meta={resourceType:typeof A.resourceType==="string"?A.resourceType:void 0,created:typeof A.created==="string"?A.created:void 0,lastModified:typeof A.lastModified==="string"?A.lastModified:void 0,location:typeof A.location==="string"?A.location:void 0,version:typeof A.version==="string"?A.version:void 0}}else D.push({message:"meta must be an object",path:["meta"]});if(D.length>0)return{issues:D};return{value:f}}}}}function J0(L,$,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){$.push({message:"members must be an array",path:J});return}let D=[];for(let f=0;f<L.length;f++){let Q=L[f],x=[...J,f];if(typeof Q!=="object"||Q===null){$.push({message:"member must be an object",path:x});continue}let A=Q,Z=X(A.value,"value",!0,$,[...x,"value"]);if(Z){let R=X(A.type,"type",!1,$,[...x,"type"]);D.push({value:Z,$ref:X(A.$ref,"$ref",!1,$,[...x,"$ref"]),display:X(A.display,"display",!1,$,[...x,"display"]),type:R==="User"||R==="Group"?R:void 0})}}return D.length>0?D:void 0}function L0(L){return{"~standard":{version:1,vendor:L,validate:($)=>{if(typeof $!=="object"||$===null)return{issues:[{message:"Expected an object"}]};let J=$,D=[],f={},Q=X(J.displayName,"displayName",!0,D,["displayName"]);if(!Q)return{issues:D};if(f.displayName=Q,f.id=X(J.id,"id",!1,D,["id"]),f.externalId=X(J.externalId,"externalId",!1,D,["externalId"]),f.members=J0(J.members,D,["members"]),J.schemas!==void 0)if(Array.isArray(J.schemas))f.schemas=J.schemas.filter((x)=>typeof x==="string");else D.push({message:"schemas must be an array",path:["schemas"]});if(J.meta!==void 0)if(typeof J.meta==="object"&&J.meta!==null){let x=J.meta;f.meta={resourceType:typeof x.resourceType==="string"?x.resourceType:void 0,created:typeof x.created==="string"?x.created:void 0,lastModified:typeof x.lastModified==="string"?x.lastModified:void 0,location:typeof x.location==="string"?x.location:void 0,version:typeof x.version==="string"?x.version:void 0}}else D.push({message:"meta must be an object",path:["meta"]});if(D.length>0)return{issues:D};return{value:f}}}}}function D0(L){return{"~standard":{version:1,vendor:L,validate:($)=>{if(typeof $!=="object"||$===null)return{issues:[{message:"Expected an object"}]};let J=$,D=[],f={...J},Q=["iss","sub"];for(let Z of Q)if(Z in J){if(typeof J[Z]!=="string")D.push({message:`${Z} must be a string`,path:[Z]})}else D.push({message:`${Z} is required`,path:[Z]});if("aud"in J&&J.aud!==void 0){let Z=J.aud;if(typeof Z!=="string"&&!Array.isArray(Z))D.push({message:"aud must be a string or array of strings",path:["aud"]});else if(Array.isArray(Z)&&!Z.every((R)=>typeof R==="string"))D.push({message:"aud array must contain only strings",path:["aud"]})}let x=["jti","scope"];for(let Z of x)if(Z in J&&J[Z]!==void 0){if(typeof J[Z]!=="string")D.push({message:`${Z} must be a string`,path:[Z]})}let A=["exp","iat"];for(let Z of A)if(Z in J){if(typeof J[Z]!=="number")D.push({message:`${Z} must be a number`,path:[Z]})}else D.push({message:`${Z} is required`,path:[Z]});if(D.length>0)return{issues:D};return{value:f}}}}}function $0(L){return{"~standard":{version:1,vendor:L,validate:($)=>{if(typeof $!=="object"||$===null)return{issues:[{message:"Expected an object"}]};let J=$,D=[],f={};if("access_token"in J)if(typeof J.access_token==="string")f.access_token=J.access_token;else D.push({message:"access_token must be a string",path:["access_token"]});else D.push({message:"access_token is required",path:["access_token"]});if("token_type"in J)if(typeof J.token_type==="string")f.token_type=J.token_type;else D.push({message:"token_type must be a string",path:["token_type"]});else D.push({message:"token_type is required",path:["token_type"]});if("scope"in J)if(typeof J.scope==="string"||J.scope===void 0)f.scope=J.scope;else D.push({message:"scope must be a string",path:["scope"]});if("refresh_token"in J)if(typeof J.refresh_token==="string"||J.refresh_token===void 0)f.refresh_token=J.refresh_token;else D.push({message:"refresh_token must be a string",path:["refresh_token"]});if("expires"in J)if(typeof J.expires==="string"||J.expires===void 0)f.expires=J.expires;else D.push({message:"expires must be a string",path:["expires"]});if("expires_in"in J)if(typeof J.expires_in==="number"||J.expires_in===void 0)f.expires_in=J.expires_in;else D.push({message:"expires_in must be a number",path:["expires_in"]});if(D.length>0)return{issues:D};return{value:f}}}}}export{$0 as workloadTokenResponseSchema,Q0 as withValidate,Y0 as waitOn,V as version,Z0 as validationFailureResponse,s as userSchema,x0 as tokenResponseSchema,R0 as stripJsonComments,z0 as silentLogger,C0 as setActiveSession,j as serializeESConfig,m as sendTenantWebhook,T0 as parseJsonc,f0 as oidcCallbackSchema,n as normalizeTenantRoutingStrategy,T as normalizeTenantPathNamespace,X0 as must,G0 as mergeConfig,v as matchTenantPath,K0 as listSsoClientIdsFromCookies,y as list,D0 as jwtAssertionClaimsSchema,B0 as infoLogger,A0 as idTokenClaimsSchema,L0 as groupResourceSchema,W0 as getActiveSession,F0 as findTenantFromStateParam,y0 as defaultLogger,c0 as decodeUser,H0 as debugLogger,N0 as consoleLogger,_0 as clearActiveSession,M0 as claimsToUser,d as buildTenantPath,M as UserToSingleTenant,H as TenantRequestError,N as MultipleTenantsForUserError,_ as InMemoryTenantStore,h as DEFAULT_TENANT_UI_NAMESPACE,b as DEFAULT_TENANT_API_NAMESPACE,S as AllowUserWithMultipleTenants};
1
+ import{I as B,a as D0,b as T0,c as $0,d as f0,e as x0,f as A0,g as Q0,h as X0,i as Z0,j as G0,k as R0,l as Y0,m as c0,n as y0,o as z0,p as B0,q as H0,t as N0,u as W0,v as C0,w as M0,x as _0}from"./shared/core-gqcvxn3w.js";var k="0.0.12";var V=["sessionStore","userStore","groupStore","tokenStore","magicLinkStore"];function C(L){if(L===null||typeof L!=="object")return L;let T={};for(let[J,D]of Object.entries(L)){if(V.includes(J)||J==="validators")continue;T[J]=D!==null&&typeof D==="object"&&!Array.isArray(D)&&Object.getPrototypeOf(D)===Object.prototype?C(D):D}return T}function E(L){return C(L)}function z(L,T,J,D){let $=T.length,A=D??L,f=A>0?Math.floor(J/A)+1:1,x=A>0?Math.ceil(L/A):0;return{total:L,count:$,items:T,size:A,page:f,pages:x}}class N extends Error{constructor(L,T){super(L,T);this.name="TenantRequestError",Object.setPrototypeOf(this,N.prototype)}}class c extends Error{userId;tenantIds;constructor(L,T,J){super(`Multiple tenants found for user id "${L}"`,J);this.name="MultipleTenantsForUserError",this.userId=L,this.tenantIds=T,Object.setPrototypeOf(this,c.prototype)}}var H=Number.POSITIVE_INFINITY;class M{tenants=new Map;tenantEsMap=new Map;userTenantIds=new Map;ttl;userMode;createEs;findTenantByUserId;findTenantsByUserId;constructor(L){if(this.ttl=O(L.ttl),this.userMode=L.userMode,this.createEs=L.createEs,this.userMode==="singleTenantOnly"){this.findTenantByUserId=this.findSingleTenantByUserId.bind(this),this.findTenantsByUserId=void 0;return}this.findTenantByUserId=void 0,this.findTenantsByUserId=this.findMultipleTenantsByUserId.bind(this)}async get(L){return this.tenants.get(L)??null}async list(L){let T=Array.from(this.tenants.values()),J=Math.max(0,L?.start??0),D=L?.limit,$=L?.sort;if($?.length)T=[...T].sort((X,G)=>{for(let{field:Z,direction:q}of $){let F=X[Z],U=G[Z],y=j(F,U);if(y!==0)return q==="desc"?-y:y}return 0});let A=T.length,f=D!=null?J+D:void 0,x=T.slice(J,f);return z(A,x,J,D)}async upsert(L){let T=new Date,J=this.tenants.get(L.tenantId),D={...J??{},...L,companyId:L.companyId??J?.companyId??"",companyName:L.companyName??J?.companyName??"",environmentType:L.environmentType??J?.environmentType??"DEV",email:L.email??J?.email,webhookUrl:L.webhookUrl??J?.webhookUrl,callbackUrl:L.callbackUrl??J?.callbackUrl,tenantUrl:L.tenantUrl??J?.tenantUrl,status:L.status??J?.status??"completed",createdAt:L.createdAt??J?.createdAt??T,updatedAt:L.updatedAt??T};return this.tenants.set(D.tenantId,D),this.tenantEsMap.delete(D.tenantId),D}async delete(L){this.tenantEsMap.delete(L),this.tenants.delete(L)}async getEs(L){let T=await this.get(L);if(!T)throw Error(`Tenant "${L}" not found`);if(!this.createEs)throw Error("InMemoryTenantStore requires options.createEs to use getEs()");if(this.ttl===0)return this.createEs(B(T));let J=Date.now(),D=this.tenantEsMap.get(L);if(D&&D.expiresAt>J)return D.es;if(D)this.tenantEsMap.delete(L);let $=this.createEs(B(T));return this.tenantEsMap.set(L,{es:$,expiresAt:g(J,this.ttl)}),$}getCachedTenantIds(){if(this.ttl===0)return[];let L=Date.now();for(let[T,J]of this.tenantEsMap.entries())if(J.expiresAt<=L)this.tenantEsMap.delete(T);return Array.from(this.tenantEsMap.keys())}async registerUserTenantId(L,T){if(!L)return;let J=S(T);if(this.userMode==="singleTenantOnly"){this.userTenantIds.set(L,new Set([J]));return}let D=this.userTenantIds.get(L);if(D){D.add(J);return}this.userTenantIds.set(L,new Set([J]))}async findSingleTenantByUserId(L){let T=await this.resolveTenantsByUserId(L);if(T.length>1)throw new c(L,T.map((J)=>J.tenantId));return T[0]??null}async findMultipleTenantsByUserId(L){return this.resolveTenantsByUserId(L)}async resolveTenantsByUserId(L){let T=this.userTenantIds.get(L);if(!T||T.size===0)return[];let J=T.has(null),D=Array.from(T).filter((f)=>f!=null);if(D.length===0)return[];let $=await Promise.all(D.map(async(f)=>({tenantId:f,tenant:await this.get(f)}))),A=$.filter((f)=>f.tenant!=null).map((f)=>f.tenantId);if(A.length===0){if(J)this.userTenantIds.set(L,new Set([null]));else this.userTenantIds.delete(L);return[]}if(A.length!==D.length){let f=J?[null,...A]:A;this.userTenantIds.set(L,new Set(f))}return $.map((f)=>f.tenant).filter((f)=>f!=null)}}function j(L,T){let J=L===void 0||L===null,D=T===void 0||T===null;if(J&&D)return 0;if(J)return 1;if(D)return-1;if(L instanceof Date&&T instanceof Date)return L.getTime()-T.getTime();let $=String(L),A=String(T);return $.localeCompare(A)}function S(L){if(typeof L!=="string")return null;return L.trim()||null}function O(L){if(L===void 0)return H;if(L<=0)return L===0?0:H;return L}function g(L,T){if(!Number.isFinite(T))return H;return L+T}function I(L,T,J){return(async()=>{try{let D=await fetch(L,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(T)});if(!D.ok)J.error(`Failed to send webhook update: ${D.status} ${D.statusText}`)}catch(D){J.error("Failed to send webhook update:",D)}})()}async function P(L,T,J){return I(L,T,J)}var p={beforeTenantSegments:["ui"]},m={beforeTenantSegments:["api"]};function _(L){return{segments:W(L?.segments)}}function W(L){return(L??[]).map((T)=>T.trim()).filter(Boolean)}function h(L){let T=L.trim();if(!T)return"/";let J=T.replace(/\\/g,"/").replace(/\/+/g,"/");return J.startsWith("/")?J:`/${J}`}function K(L){return h(L).split("/").filter(Boolean)}function R(L){return{beforeTenantSegments:W(L?.beforeTenantSegments),afterTenantSegments:W(L?.afterTenantSegments)}}function b(L){if(!L||L.type===void 0||L.type==="path"){let J=L;return{type:"path",ui:R(J?.ui),api:R(J?.api)}}let T=L;return{...T,ui:_(T.ui),api:_(T.api)}}function o(L,T){let J=R(T),D=J.beforeTenantSegments??[],$=J.afterTenantSegments??[],A=K(L),f=D.length+1+$.length;if(A.length<f)return null;for(let Z=0;Z<D.length;Z++)if(A[Z]!==D[Z])return null;let x=D.length,X=A[x];if(!X)return null;for(let Z=0;Z<$.length;Z++)if(A[x+1+Z]!==$[Z])return null;let G=A.slice(x+1+$.length);return{tenantId:decodeURIComponent(X),restSegments:G,restPath:G.length>0?`/${G.join("/")}`:"/"}}function n(L,T="/",J){let D=R(J),$=D.beforeTenantSegments??[],A=D.afterTenantSegments??[],f=K(T),x=[...$,encodeURIComponent(L),...A,...f];return x.length>0?`/${x.join("/")}`:"/"}function Q(L,T,J,D,$){if(L===void 0||L===null){if(J)D.push({message:`${T} is required`,path:$});return}if(typeof L!=="string"){D.push({message:`${T} must be a string`,path:$});return}return L}function Y(L,T,J,D){if(L===void 0||L===null)return;if(typeof L!=="boolean"){J.push({message:`${T} must be a boolean`,path:D});return}return L}function v(L,T,J){if(L===void 0||L===null)return;if(typeof L!=="object"||L===null){T.push({message:"name must be an object",path:J});return}let D=L,$={};return $.formatted=Q(D.formatted,"formatted",!1,T,[...J,"formatted"]),$.familyName=Q(D.familyName,"familyName",!1,T,[...J,"familyName"]),$.givenName=Q(D.givenName,"givenName",!1,T,[...J,"givenName"]),$.middleName=Q(D.middleName,"middleName",!1,T,[...J,"middleName"]),$.honorificPrefix=Q(D.honorificPrefix,"honorificPrefix",!1,T,[...J,"honorificPrefix"]),$.honorificSuffix=Q(D.honorificSuffix,"honorificSuffix",!1,T,[...J,"honorificSuffix"]),$}function d(L,T,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){T.push({message:"emails must be an array",path:J});return}let D=[];for(let $=0;$<L.length;$++){let A=L[$],f=[...J,$];if(typeof A!=="object"||A===null){T.push({message:"email must be an object",path:f});continue}let x=A,X=Q(x.value,"value",!0,T,[...f,"value"]);if(X)D.push({value:X,display:Q(x.display,"display",!1,T,[...f,"display"]),type:Q(x.type,"type",!1,T,[...f,"type"]),primary:Y(x.primary,"primary",T,[...f,"primary"])})}return D.length>0?D:void 0}function r(L,T,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){T.push({message:"phoneNumbers must be an array",path:J});return}let D=[];for(let $=0;$<L.length;$++){let A=L[$],f=[...J,$];if(typeof A!=="object"||A===null){T.push({message:"phoneNumber must be an object",path:f});continue}let x=A,X=Q(x.value,"value",!0,T,[...f,"value"]);if(X)D.push({value:X,display:Q(x.display,"display",!1,T,[...f,"display"]),type:Q(x.type,"type",!1,T,[...f,"type"]),primary:Y(x.primary,"primary",T,[...f,"primary"])})}return D.length>0?D:void 0}function l(L,T,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){T.push({message:"addresses must be an array",path:J});return}let D=[];for(let $=0;$<L.length;$++){let A=L[$],f=[...J,$];if(typeof A!=="object"||A===null){T.push({message:"address must be an object",path:f});continue}let x=A;D.push({formatted:Q(x.formatted,"formatted",!1,T,[...f,"formatted"]),streetAddress:Q(x.streetAddress,"streetAddress",!1,T,[...f,"streetAddress"]),locality:Q(x.locality,"locality",!1,T,[...f,"locality"]),region:Q(x.region,"region",!1,T,[...f,"region"]),postalCode:Q(x.postalCode,"postalCode",!1,T,[...f,"postalCode"]),country:Q(x.country,"country",!1,T,[...f,"country"]),type:Q(x.type,"type",!1,T,[...f,"type"]),primary:Y(x.primary,"primary",T,[...f,"primary"])})}return D.length>0?D:void 0}function t(L,T,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){T.push({message:"groups must be an array",path:J});return}let D=[];for(let $=0;$<L.length;$++){let A=L[$],f=[...J,$];if(typeof A!=="object"||A===null){T.push({message:"group must be an object",path:f});continue}let x=A,X=Q(x.value,"value",!0,T,[...f,"value"]);if(X)D.push({value:X,$ref:Q(x.$ref,"$ref",!1,T,[...f,"$ref"]),display:Q(x.display,"display",!1,T,[...f,"display"]),type:Q(x.type,"type",!1,T,[...f,"type"])})}return D.length>0?D:void 0}function i(L,T,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){T.push({message:"roles must be an array",path:J});return}let D=[];for(let $=0;$<L.length;$++){let A=L[$],f=[...J,$];if(typeof A!=="object"||A===null){T.push({message:"role must be an object",path:f});continue}let x=A,X=Q(x.value,"value",!0,T,[...f,"value"]);if(X)D.push({value:X,display:Q(x.display,"display",!1,T,[...f,"display"]),type:Q(x.type,"type",!1,T,[...f,"type"]),primary:Y(x.primary,"primary",T,[...f,"primary"])})}return D.length>0?D:void 0}function u(L,T,J){if(L===void 0||L===null)return;if(typeof L!=="object"||L===null){T.push({message:"Enterprise User extension must be an object",path:J});return}let D=L,$={};if($.employeeNumber=Q(D.employeeNumber,"employeeNumber",!1,T,[...J,"employeeNumber"]),$.costCenter=Q(D.costCenter,"costCenter",!1,T,[...J,"costCenter"]),$.organization=Q(D.organization,"organization",!1,T,[...J,"organization"]),$.division=Q(D.division,"division",!1,T,[...J,"division"]),$.department=Q(D.department,"department",!1,T,[...J,"department"]),D.manager!==void 0&&D.manager!==null)if(typeof D.manager!=="object"||D.manager===null)T.push({message:"manager must be an object",path:[...J,"manager"]});else{let A=D.manager;$.manager={value:Q(A.value,"value",!1,T,[...J,"manager","value"]),$ref:Q(A.$ref,"$ref",!1,T,[...J,"manager","$ref"]),displayName:Q(A.displayName,"displayName",!1,T,[...J,"manager","displayName"])}}return $}function a(L){return{"~standard":{version:1,vendor:L,validate:(T)=>{if(typeof T!=="object"||T===null)return{issues:[{message:"Expected an object"}]};let J=T,D=[],$={},A=Q(J.userName,"userName",!0,D,["userName"]);if(!A)return{issues:D};$.userName=A,$.id=Q(J.id,"id",!1,D,["id"]),$.externalId=Q(J.externalId,"externalId",!1,D,["externalId"]),$.displayName=Q(J.displayName,"displayName",!1,D,["displayName"]),$.nickName=Q(J.nickName,"nickName",!1,D,["nickName"]),$.profileUrl=Q(J.profileUrl,"profileUrl",!1,D,["profileUrl"]),$.title=Q(J.title,"title",!1,D,["title"]),$.userType=Q(J.userType,"userType",!1,D,["userType"]),$.preferredLanguage=Q(J.preferredLanguage,"preferredLanguage",!1,D,["preferredLanguage"]),$.locale=Q(J.locale,"locale",!1,D,["locale"]),$.timezone=Q(J.timezone,"timezone",!1,D,["timezone"]),$.password=Q(J.password,"password",!1,D,["password"]),$.active=Y(J.active,"active",D,["active"]),$.name=v(J.name,D,["name"]),$.emails=d(J.emails,D,["emails"]),$.phoneNumbers=r(J.phoneNumbers,D,["phoneNumbers"]),$.addresses=l(J.addresses,D,["addresses"]),$.groups=t(J.groups,D,["groups"]),$.roles=i(J.roles,D,["roles"]);let f="urn:ietf:params:scim:schemas:extension:enterprise:2.0:User";if(J[f]!==void 0)$[f]=u(J[f],D,[f]);if(J.schemas!==void 0)if(Array.isArray(J.schemas))$.schemas=J.schemas.filter((x)=>typeof x==="string");else D.push({message:"schemas must be an array",path:["schemas"]});if(J.meta!==void 0)if(typeof J.meta==="object"&&J.meta!==null){let x=J.meta;$.meta={resourceType:typeof x.resourceType==="string"?x.resourceType:void 0,created:typeof x.created==="string"?x.created:void 0,lastModified:typeof x.lastModified==="string"?x.lastModified:void 0,location:typeof x.location==="string"?x.location:void 0,version:typeof x.version==="string"?x.version:void 0}}else D.push({message:"meta must be an object",path:["meta"]});if(D.length>0)return{issues:D};return{value:$}}}}}function e(L,T,J){if(L===void 0||L===null)return;if(!Array.isArray(L)){T.push({message:"members must be an array",path:J});return}let D=[];for(let $=0;$<L.length;$++){let A=L[$],f=[...J,$];if(typeof A!=="object"||A===null){T.push({message:"member must be an object",path:f});continue}let x=A,X=Q(x.value,"value",!0,T,[...f,"value"]);if(X){let G=Q(x.type,"type",!1,T,[...f,"type"]);D.push({value:X,$ref:Q(x.$ref,"$ref",!1,T,[...f,"$ref"]),display:Q(x.display,"display",!1,T,[...f,"display"]),type:G==="User"||G==="Group"?G:void 0})}}return D.length>0?D:void 0}function s(L){return{"~standard":{version:1,vendor:L,validate:(T)=>{if(typeof T!=="object"||T===null)return{issues:[{message:"Expected an object"}]};let J=T,D=[],$={},A=Q(J.displayName,"displayName",!0,D,["displayName"]);if(!A)return{issues:D};if($.displayName=A,$.id=Q(J.id,"id",!1,D,["id"]),$.externalId=Q(J.externalId,"externalId",!1,D,["externalId"]),$.members=e(J.members,D,["members"]),J.schemas!==void 0)if(Array.isArray(J.schemas))$.schemas=J.schemas.filter((f)=>typeof f==="string");else D.push({message:"schemas must be an array",path:["schemas"]});if(J.meta!==void 0)if(typeof J.meta==="object"&&J.meta!==null){let f=J.meta;$.meta={resourceType:typeof f.resourceType==="string"?f.resourceType:void 0,created:typeof f.created==="string"?f.created:void 0,lastModified:typeof f.lastModified==="string"?f.lastModified:void 0,location:typeof f.location==="string"?f.location:void 0,version:typeof f.version==="string"?f.version:void 0}}else D.push({message:"meta must be an object",path:["meta"]});if(D.length>0)return{issues:D};return{value:$}}}}}function J0(L){return{"~standard":{version:1,vendor:L,validate:(T)=>{if(typeof T!=="object"||T===null)return{issues:[{message:"Expected an object"}]};let J=T,D=[],$={...J},A=["iss","sub"];for(let X of A)if(X in J){if(typeof J[X]!=="string")D.push({message:`${X} must be a string`,path:[X]})}else D.push({message:`${X} is required`,path:[X]});if("aud"in J&&J.aud!==void 0){let X=J.aud;if(typeof X!=="string"&&!Array.isArray(X))D.push({message:"aud must be a string or array of strings",path:["aud"]});else if(Array.isArray(X)&&!X.every((G)=>typeof G==="string"))D.push({message:"aud array must contain only strings",path:["aud"]})}let f=["jti","scope"];for(let X of f)if(X in J&&J[X]!==void 0){if(typeof J[X]!=="string")D.push({message:`${X} must be a string`,path:[X]})}let x=["exp","iat"];for(let X of x)if(X in J){if(typeof J[X]!=="number")D.push({message:`${X} must be a number`,path:[X]})}else D.push({message:`${X} is required`,path:[X]});if(D.length>0)return{issues:D};return{value:$}}}}}function L0(L){return{"~standard":{version:1,vendor:L,validate:(T)=>{if(typeof T!=="object"||T===null)return{issues:[{message:"Expected an object"}]};let J=T,D=[],$={};if("access_token"in J)if(typeof J.access_token==="string")$.access_token=J.access_token;else D.push({message:"access_token must be a string",path:["access_token"]});else D.push({message:"access_token is required",path:["access_token"]});if("token_type"in J)if(typeof J.token_type==="string")$.token_type=J.token_type;else D.push({message:"token_type must be a string",path:["token_type"]});else D.push({message:"token_type is required",path:["token_type"]});if("scope"in J)if(typeof J.scope==="string"||J.scope===void 0)$.scope=J.scope;else D.push({message:"scope must be a string",path:["scope"]});if("refresh_token"in J)if(typeof J.refresh_token==="string"||J.refresh_token===void 0)$.refresh_token=J.refresh_token;else D.push({message:"refresh_token must be a string",path:["refresh_token"]});if("expires"in J)if(typeof J.expires==="string"||J.expires===void 0)$.expires=J.expires;else D.push({message:"expires must be a string",path:["expires"]});if("expires_in"in J)if(typeof J.expires_in==="number"||J.expires_in===void 0)$.expires_in=J.expires_in;else D.push({message:"expires_in must be a number",path:["expires_in"]});if(D.length>0)return{issues:D};return{value:$}}}}}export{L0 as workloadTokenResponseSchema,f0 as withValidate,G0 as waitOn,k as version,A0 as validationFailureResponse,a as userSchema,T0 as tokenResponseSchema,X0 as stripJsonComments,y0 as silentLogger,W0 as setActiveSession,E as serializeESConfig,P as sendTenantWebhook,Z0 as parseJsonc,D0 as oidcCallbackSchema,b as normalizeTenantRoutingStrategy,R as normalizeTenantPathNamespace,x0 as must,Q0 as mergeConfig,o as matchTenantPath,M0 as listSsoClientIdsFromCookies,z as list,J0 as jwtAssertionClaimsSchema,z0 as infoLogger,$0 as idTokenClaimsSchema,s as groupResourceSchema,N0 as getActiveSession,_0 as findTenantFromStateParam,c0 as defaultLogger,Y0 as decodeUser,B0 as debugLogger,H0 as consoleLogger,C0 as clearActiveSession,R0 as claimsToUser,n as buildTenantPath,N as TenantRequestError,c as MultipleTenantsForUserError,M as InMemoryTenantStore,p as DEFAULT_TENANT_UI_NAMESPACE,m as DEFAULT_TENANT_API_NAMESPACE};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enterprisestandard/core",
3
- "version": "0.0.11-beta.20260319.1",
3
+ "version": "0.0.12",
4
4
  "description": "Enterprise Standard Core (Server-only)",
5
5
  "private": false,
6
6
  "author": "enterprisestandard",
@@ -27,7 +27,7 @@
27
27
  }
28
28
  },
29
29
  "peerDependencies": {
30
- "@enterprisestandard/zod": "0.0.11-beta.20260319.1",
31
- "@enterprisestandard/valibot": "0.0.11-beta.20260319.1"
30
+ "@enterprisestandard/zod": "^0.0.12",
31
+ "@enterprisestandard/valibot": "^0.0.12"
32
32
  }
33
33
  }