@securitydept/client-angular 0.3.0-beta.5 → 0.3.0-beta.6

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.
@@ -1,7 +1,8 @@
1
1
  import { InjectionToken, makeEnvironmentProviders, inject, DestroyRef, Injector, Optional } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
- import { createSecuritydeptDestroyRef, SecuritydeptDestroyRef, SecuritydeptInjector, readSecuritydeptRouteMetadata, RouteCompositionRequirementPlanner, PipelineOutcome, injectRequirementPlannerHost, RequirementPlannerHost, ENVIRONMENT_TOKEN, writeSecuritydeptRouteMetadata, provideRequirementPlannerHost, UriReferenceStringSchema, validateTraitInput, throwValidationClientError, RouterNavigationMode, UriReferenceString, TransportErrorCode, ClientError, ClientErrorSource, ClientErrorKind, getSecuritydeptProviderToken, createProviderIfTokenMissing, ROUTER_TRAIT_TOKEN, TRANSPORT_TRAIT_TOKEN, notMissingProvider, SYMBOL_OBSERVABLE } from '@securitydept/client';
3
+ import { createSecuritydeptDestroyRef, SecuritydeptDestroyRef, SecuritydeptInjector, readSecuritydeptRouteMetadata, RouteCompositionRequirementPlanner, PipelineOutcome, injectRequirementPlannerHost, RequirementPlannerHost, ENVIRONMENT_TOKEN, writeSecuritydeptRouteMetadata, provideRequirementPlannerHost, UriReferenceStringSchema, validateTraitInput, throwValidationClientError, RouterNavigationMode, ClientError, ClientErrorKind, UriReferenceString, TransportErrorCode, ClientErrorSource, getSecuritydeptProviderToken, createProviderIfTokenMissing, ROUTER_TRAIT_TOKEN, TRANSPORT_TRAIT_TOKEN, notMissingProvider, SYMBOL_OBSERVABLE } from '@securitydept/client';
4
4
  import { HttpErrorResponse, HttpClient } from '@angular/common/http';
5
+ import { createRouterForNativeWeb } from '@securitydept/client/web';
5
6
  import { type } from 'arktype';
6
7
  import { takeUntil, from, firstValueFrom } from 'rxjs';
7
8
  import { toSignal, rxResource } from '@angular/core/rxjs-interop';
@@ -312,7 +313,10 @@ const ResolvedRouterForAngularCreateOptionsSchema = type({
312
313
  *
313
314
  * @example
314
315
  * ```ts
315
- * const routerTrait = createRouterForAngular({ router: inject(Router) });
316
+ * const routerTrait = createRouterForAngular({
317
+ * router: inject(Router),
318
+ * location: window.location,
319
+ * });
316
320
  * ```
317
321
  */
318
322
  function createRouterForAngular(options) {
@@ -337,12 +341,25 @@ function createRouterForAngular(options) {
337
341
  }),
338
342
  });
339
343
  const { router } = resolvedCreateOptions;
344
+ const nativeWebRouter = createRouterForNativeWeb(projectNativeWebRouterCreateOptions(options));
340
345
  return {
341
346
  currentUrl() {
342
347
  const currentUrl = resolvedCreateOptions.currentUrl;
343
348
  return currentUrl == null ? null : UriReferenceString.parse(currentUrl);
344
349
  },
345
350
  async navigate(request) {
351
+ if (request.mode === RouterNavigationMode.External) {
352
+ if (!nativeWebRouter) {
353
+ throw new ClientError({
354
+ kind: ClientErrorKind.Configuration,
355
+ code: "client_angular.router.native_web_router_unavailable",
356
+ message: "Angular router cannot perform external navigation without a native web router",
357
+ source: "client-angular.router",
358
+ });
359
+ }
360
+ await nativeWebRouter.navigate(request);
361
+ return;
362
+ }
346
363
  await router.navigateByUrl(request.url.toString(), {
347
364
  replaceUrl: request.mode === RouterNavigationMode.Replace,
348
365
  state: request.state,
@@ -350,6 +367,18 @@ function createRouterForAngular(options) {
350
367
  },
351
368
  };
352
369
  }
370
+ function projectNativeWebRouterCreateOptions(options) {
371
+ return {
372
+ ...(Object.hasOwn(options, "navigation")
373
+ ? { navigation: options.navigation }
374
+ : {}),
375
+ ...(Object.hasOwn(options, "location")
376
+ ? { location: options.location }
377
+ : {}),
378
+ ...(Object.hasOwn(options, "history") ? { history: options.history } : {}),
379
+ ...(Object.hasOwn(options, "window") ? { window: options.window } : {}),
380
+ };
381
+ }
353
382
 
354
383
  const BaseTransportForAngularCreateOptionsSchema = type({
355
384
  httpClient: {
@@ -1 +1 @@
1
- {"version":3,"file":"securitydept-client-angular.mjs","sources":["../../src/lib/injection.ts","../../src/lib/auth-coordination/route-metadata.ts","../../src/lib/auth-coordination/route-guard.ts","../../src/lib/auth-coordination/secure-routes.ts","../../src/lib/router.ts","../../src/lib/transport.ts","../../src/lib/environment.ts","../../src/lib/interop.ts","../../src/public-api.ts","../../src/securitydept-client-angular.ts"],"sourcesContent":["import {\n\tDestroyRef,\n\ttype EnvironmentProviders,\n\tInjectionToken,\n\tinject,\n\tmakeEnvironmentProviders,\n} from \"@angular/core\";\nimport {\n\tcreateSecuritydeptDestroyRef,\n\tSecuritydeptDestroyRef,\n\tSecuritydeptInjector,\n\ttype SecuritydeptProvider,\n} from \"@securitydept/client\";\n\nexport const SECURITYDEPT_INJECTOR = new InjectionToken<SecuritydeptInjector>(\n\t\"SECURITYDEPT_INJECTOR\",\n);\n\nexport interface ProvideSecuritydeptOptions {\n\treadonly providers?: readonly SecuritydeptProvider[];\n\treadonly autoCreateDestroyRef?: boolean;\n}\n\nexport function provideSecuritydept(\n\toptions: ProvideSecuritydeptOptions = {},\n): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: SECURITYDEPT_INJECTOR,\n\t\t\tuseFactory: (): SecuritydeptInjector => {\n\t\t\t\tconst parentInjector =\n\t\t\t\t\tinject(SECURITYDEPT_INJECTOR, {\n\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\tskipSelf: true,\n\t\t\t\t\t}) ?? undefined;\n\t\t\t\tconst angularDestroyRef = inject(DestroyRef);\n\t\t\t\tconst securitydeptDestroyRef =\n\t\t\t\t\toptions.autoCreateDestroyRef === false\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: createSecuritydeptDestroyRef();\n\t\t\t\tif (securitydeptDestroyRef) {\n\t\t\t\t\tangularDestroyRef.onDestroy(() => securitydeptDestroyRef.dispose());\n\t\t\t\t}\n\n\t\t\t\tconst providers = [\n\t\t\t\t\t...(options.providers ?? []),\n\t\t\t\t\t...(securitydeptDestroyRef\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tprovide: SecuritydeptDestroyRef,\n\t\t\t\t\t\t\t\t\tuseValue: securitydeptDestroyRef,\n\t\t\t\t\t\t\t\t} satisfies SecuritydeptProvider,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t];\n\t\t\t\treturn parentInjector\n\t\t\t\t\t? SecuritydeptInjector.fromParentInjector(parentInjector, providers)\n\t\t\t\t\t: SecuritydeptInjector.resolveAndCreate(providers);\n\t\t\t},\n\t\t},\n\t]);\n}\n","// Angular route metadata projection\n//\n// Canonical import path:\n// import { projectAngularRouteSegments } from \"@securitydept/client-angular\"\n//\n// Reads serializable auth requirement metadata declared in Angular route\n// `data` and projects a matched route chain (`pathFromRoot`) into the SDK's\n// framework-agnostic `RouteTreeSegment[]`. Composition folding is owned by the\n// `RouteCompositionRequirementPlanner`, so this layer only extracts per-segment\n// declarations.\n//\n// Route metadata storage is owned by `@securitydept/client`\n// ({@link readSecuritydeptRouteMetadata} / {@link writeSecuritydeptRouteMetadata}).\n//\n// Architecture boundary:\n// - Does NOT own auth enforcement, planner logic, or navigation.\n// - Does NOT carry token-set-specific mapping or policy.\n// - Framework-specific (Angular Router types) but requirement-system-agnostic.\n//\n// Stability: provisional\n\nimport { type ActivatedRouteSnapshot } from \"@angular/router\";\nimport {\n\ttype AuthRequirement,\n\ttype RouteTreeSegment,\n\treadSecuritydeptRouteMetadata,\n} from \"@securitydept/client\";\n\n/**\n * Resolved route `data` for a segment: static `routeConfig.data` merged with\n * snapshot `data` (snapshot wins on key collision).\n */\nexport function routeDataFromSegment(\n\tsegment: ActivatedRouteSnapshot,\n): Record<string, unknown> {\n\treturn {\n\t\t...(segment.routeConfig?.data ?? {}),\n\t\t...segment.data,\n\t};\n}\n\n/**\n * Project the `pathFromRoot` of an `ActivatedRouteSnapshot` into the SDK's\n * `RouteTreeSegment[]` chain (root -> leaf).\n *\n * Each segment carries its declared requirements and composition strategy;\n * inherit/merge/replace folding is applied later by the\n * `RouteCompositionRequirementPlanner`.\n *\n * Segments without a `routeConfig` (e.g. the root) get routeId `\"__root__\"`;\n * empty-path segments get `\"__index__\"`.\n */\nexport function projectAngularRouteSegments<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n>(leafRoute: ActivatedRouteSnapshot): RouteTreeSegment<TAuthRequirement>[] {\n\tconst chain = leafRoute.pathFromRoot ?? [leafRoute];\n\treturn chain.map((segment) => segmentToTreeNode<TAuthRequirement>(segment));\n}\n\nfunction segmentToTreeNode<TAuthRequirement extends AuthRequirement>(\n\tsegment: ActivatedRouteSnapshot,\n): RouteTreeSegment<TAuthRequirement> {\n\tconst metadata = readSecuritydeptRouteMetadata<TAuthRequirement>(\n\t\trouteDataFromSegment(segment),\n\t);\n\tconst requirements = metadata?.requirements ? [...metadata.requirements] : [];\n\tconst composition = metadata?.composition;\n\treturn composition\n\t\t? { routeId: resolveRouteId(segment), requirements, composition }\n\t\t: { routeId: resolveRouteId(segment), requirements };\n}\n\nfunction resolveRouteId(segment: ActivatedRouteSnapshot): string {\n\tif (!segment.routeConfig) {\n\t\treturn \"__root__\";\n\t}\n\tconst path = segment.routeConfig.path;\n\tif (path === undefined || path === null || path === \"\") {\n\t\treturn \"__index__\";\n\t}\n\treturn path;\n}\n","// Angular route guards — bridge to RouteCompositionRequirementPlanner\n//\n// Canonical import path:\n// import {\n// createAngularCanActivate,\n// createAngularCanActivateChild,\n// } from \"@securitydept/client-angular\"\n//\n// Produces Angular `CanActivateFn` / `CanActivateChildFn` guards that project\n// the matched route chain into `RouteTreeSegment[]`, run the SDK's\n// `RouteCompositionRequirementPlanner` against the nearest\n// `RequirementPlannerHost` resolved from the current Securitydept injector,\n// and map the pipeline result onto Angular's guard return contract (`true` /\n// `false` / `UrlTree`).\n//\n// Injection-context discipline: DI reads (host, Router) happen synchronously at\n// guard entry, before any `await`. Behaviour that needs DI services should be\n// provided through `provideSecuritydept({ providers: [...] })`, not inline\n// callbacks that call `inject()` here.\n//\n// Architecture boundary:\n// - Does NOT own behaviour (checkAuthenticated / onUnauthenticated) — that is\n// resolved through the RequirementPlannerHost chain.\n// - Does NOT carry token-set-specific mapping or policy.\n//\n// Stability: provisional\n\nimport { inject } from \"@angular/core\";\nimport {\n\ttype ActivatedRouteSnapshot,\n\ttype CanActivateChildFn,\n\ttype CanActivateFn,\n\tRouter,\n\ttype RouterStateSnapshot,\n\ttype UrlTree,\n} from \"@angular/router\";\nimport {\n\ttype AuthRequirement,\n\tENVIRONMENT_TOKEN,\n\tinjectRequirementPlannerHost,\n\tPipelineOutcome,\n\tREQUIREMENT_PLANNER_HOST,\n\ttype RequirementBehaviourWithRouteContext,\n\tRequirementPlannerHost,\n\ttype RequirementPlannerHostBehaviour,\n\ttype RouteBehaviourContextExtra,\n\tRouteCompositionRequirementPlanner,\n} from \"@securitydept/client\";\nimport { SECURITYDEPT_INJECTOR } from \"../injection\";\nimport { projectAngularRouteSegments } from \"./route-metadata\";\n\nexport interface CreateAngularGuardWithPlannerHostOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> {\n\t/**\n\t * Explicit planner host. When omitted, the guard uses the nearest\n\t * {@link REQUIREMENT_PLANNER_HOST} from the Securitydept injector, falling\n\t * back to an empty host only when no provider exists.\n\t */\n\treadonly plannerHost: RequirementPlannerHost<TBehaviour>;\n\treadonly behaviour?: never;\n}\n\nexport interface CreateAngularGuardWithBehaviourOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> {\n\treadonly plannerHost?: never;\n\treadonly behaviour?: RequirementPlannerHostBehaviour<\n\t\tTAuthRequirement,\n\t\tRouteBehaviourContextExtra,\n\t\tTBehaviour\n\t>;\n}\n\n/** Options shared by {@link createAngularCanActivate} and its child variant. */\nexport type CreateAngularGuardOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> =\n\t| CreateAngularGuardWithPlannerHostOptions<TAuthRequirement, TBehaviour>\n\t| CreateAngularGuardWithBehaviourOptions<TAuthRequirement, TBehaviour>;\n\nasync function runRouteGuard<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\troute: ActivatedRouteSnapshot,\n\tstate: RouterStateSnapshot,\n\thost: RequirementPlannerHost<TBehaviour>,\n\trouter: Router,\n): Promise<boolean | UrlTree> {\n\tconst segments = projectAngularRouteSegments<TAuthRequirement>(route);\n\tconst planner = RouteCompositionRequirementPlanner.fromRouteSegments(\n\t\thost,\n\t\tsegments,\n\t\t{ url: state.url },\n\t);\n\tconst result = await planner.runUntilSettled();\n\tswitch (result.outcome) {\n\t\tcase PipelineOutcome.Settled:\n\t\t\treturn true;\n\t\tcase PipelineOutcome.Blocked:\n\t\t\treturn false;\n\t\tcase PipelineOutcome.Redirect:\n\t\t\treturn router.parseUrl(result.location);\n\t}\n}\n\n/**\n * Create a `CanActivateFn` bridging the route chain to the requirement\n * planner pipeline.\n */\nexport function createAngularCanActivate<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\toptions?: CreateAngularGuardOptions<TAuthRequirement, TBehaviour>,\n): CanActivateFn {\n\treturn (route, state) => {\n\t\tconst securitydeptInjector = inject(SECURITYDEPT_INJECTOR, {\n\t\t\toptional: true,\n\t\t});\n\t\tconst parentHost = securitydeptInjector\n\t\t\t? injectRequirementPlannerHost<\n\t\t\t\t\tTAuthRequirement,\n\t\t\t\t\tRouteBehaviourContextExtra,\n\t\t\t\t\tTBehaviour\n\t\t\t\t>({ injector: securitydeptInjector })\n\t\t\t: null;\n\t\tconst host =\n\t\t\toptions?.plannerHost ??\n\t\t\t(options?.behaviour\n\t\t\t\t? RequirementPlannerHost.fromBehaviour(\n\t\t\t\t\t\ttypeof options.behaviour === \"function\"\n\t\t\t\t\t\t\t? options.behaviour()\n\t\t\t\t\t\t\t: options.behaviour,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparent: parentHost ?? undefined,\n\t\t\t\t\t\t\tenvironment:\n\t\t\t\t\t\t\t\tsecuritydeptInjector?.get(ENVIRONMENT_TOKEN, null) ?? undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: parentHost) ??\n\t\t\tRequirementPlannerHost.fromBehaviour({} as TBehaviour);\n\t\tconst router = inject(Router);\n\t\treturn runRouteGuard<TAuthRequirement, TBehaviour>(\n\t\t\troute,\n\t\t\tstate,\n\t\t\thost,\n\t\t\trouter,\n\t\t);\n\t};\n}\n\n/**\n * Create a `CanActivateChildFn` bridging the child route chain to the\n * requirement planner pipeline.\n */\nexport function createAngularCanActivateChild<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\toptions?: CreateAngularGuardOptions<TAuthRequirement, TBehaviour>,\n): CanActivateChildFn {\n\treturn (childRoute, state) => {\n\t\tconst injector = inject(SECURITYDEPT_INJECTOR, {\n\t\t\toptional: true,\n\t\t});\n\t\tconst parentHost = injector\n\t\t\t? injectRequirementPlannerHost<\n\t\t\t\t\tTAuthRequirement,\n\t\t\t\t\tRouteBehaviourContextExtra,\n\t\t\t\t\tTBehaviour\n\t\t\t\t>({ injector })\n\t\t\t: null;\n\t\tconst host =\n\t\t\toptions?.plannerHost ??\n\t\t\t(options?.behaviour\n\t\t\t\t? RequirementPlannerHost.fromBehaviour(\n\t\t\t\t\t\ttypeof options.behaviour === \"function\"\n\t\t\t\t\t\t\t? options.behaviour()\n\t\t\t\t\t\t\t: options.behaviour,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparent: parentHost ?? undefined,\n\t\t\t\t\t\t\tenvironment: injector?.get(ENVIRONMENT_TOKEN, null) ?? undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: parentHost) ??\n\t\t\tRequirementPlannerHost.fromBehaviour({} as TBehaviour);\n\t\tconst router = inject(Router);\n\t\treturn runRouteGuard<TAuthRequirement, TBehaviour>(\n\t\t\tchildRoute,\n\t\t\tstate,\n\t\t\thost,\n\t\t\trouter,\n\t\t);\n\t};\n}\n","// Angular secure route helpers — declarative route assembly\n//\n// Canonical import path:\n// import { secureRoute, secureRouteRoot } from \"@securitydept/client-angular\"\n//\n// Two composable helpers for wiring auth requirements onto Angular routes:\n// - secureRoute: writes requirement metadata into route `data` ONLY.\n// - secureRouteRoot: writes metadata AND attaches the canActivate /\n// canActivateChild guards (and, optionally, a scoped\n// RequirementPlannerHost provider).\n//\n// The split lets a single guarded root route cover a whole subtree: child\n// segments declare their own requirements via `secureRoute`, and the root's\n// canActivateChild folds the full chain through the planner.\n//\n// Architecture boundary:\n// - Does NOT own behaviour or token-set-specific policy.\n// - Delegates enforcement to createAngularCanActivate/Child.\n//\n// Stability: provisional\n\nimport { type Route } from \"@angular/router\";\nimport {\n\ttype AuthRequirement,\n\tprovideRequirementPlannerHost,\n\ttype RequirementBehaviourWithRouteContext,\n\ttype RequirementPlannerHost,\n\ttype RequirementPlannerHostBehaviour,\n\ttype RequirementsComposition,\n\ttype RouteBehaviourContextExtra,\n\ttype SecuritydeptRouteMetadata,\n\twriteSecuritydeptRouteMetadata,\n} from \"@securitydept/client\";\nimport { provideSecuritydept } from \"../injection\";\nimport {\n\tcreateAngularCanActivate,\n\tcreateAngularCanActivateChild,\n} from \"./route-guard\";\n\nexport interface SecureRouteSecurityOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> {\n\t/** Auth requirements declared on this route segment. */\n\trequirements?: readonly TAuthRequirement[];\n\t/** Composition strategy against the inherited chain (default: `merge`). */\n\tcomposition?: RequirementsComposition;\n\t/**\n\t * Explicit planner host for the guards on a root route. When omitted, the\n\t * guard resolves the nearest host from DI (or a self-managed default).\n\t */\n\tplannerHost?: RequirementPlannerHost<TBehaviour>;\n\t/**\n\t * Behaviour to provide as a scoped {@link RequirementPlannerHost} at the\n\t * root route. Mounted via `provideSecuritydept({ providers: [...] })`.\n\t */\n\tbehaviour?: RequirementPlannerHostBehaviour<\n\t\tTAuthRequirement,\n\t\tRouteBehaviourContextExtra,\n\t\tTBehaviour\n\t>;\n}\n\n/** Additional route config merged into the produced {@link Route}. */\nexport type SecureRouteConfig = Omit<Route, \"path\">;\n\nfunction writeRequirementData<TAuthRequirement extends AuthRequirement>(\n\tsecurity: SecureRouteSecurityOptions<TAuthRequirement>,\n\tbase: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n\tconst patch: SecuritydeptRouteMetadata<TAuthRequirement> = {};\n\tif (security.requirements !== undefined) {\n\t\tpatch.requirements = security.requirements;\n\t}\n\tif (security.composition !== undefined) {\n\t\tpatch.composition = security.composition;\n\t}\n\tif (Object.keys(patch).length === 0) {\n\t\treturn { ...(base ?? {}) };\n\t}\n\treturn writeSecuritydeptRouteMetadata(base, patch);\n}\n\n/**\n * Declare a secure route segment: writes requirement metadata into route\n * `data` only. No guard is attached — a guarded ancestor (see\n * {@link secureRouteRoot}) enforces the folded chain.\n */\nexport function secureRoute<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\tpath: string,\n\tsecurity: SecureRouteSecurityOptions<TAuthRequirement, TBehaviour>,\n\trouteOptions?: SecureRouteConfig,\n): Route {\n\treturn {\n\t\t...routeOptions,\n\t\tpath,\n\t\tdata: writeRequirementData(security, routeOptions?.data),\n\t};\n}\n\n/**\n * Declare a guarded root route: writes requirement metadata AND attaches\n * `canActivate` + `canActivateChild` guards bound to the requirement planner.\n *\n * When `security.behaviour` is set, a scoped {@link RequirementPlannerHost}\n * provider is mounted so descendant guards inherit it through DI.\n */\nexport function secureRouteRoot<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\tpath: string,\n\tsecurity: SecureRouteSecurityOptions<TAuthRequirement, TBehaviour>,\n\trouteOptions?: SecureRouteConfig,\n): Route {\n\tconst guardOptions = security.plannerHost\n\t\t? { plannerHost: security.plannerHost }\n\t\t: undefined;\n\tconst providers = security.behaviour\n\t\t? [\n\t\t\t\t...(routeOptions?.providers ?? []),\n\t\t\t\tprovideSecuritydept({\n\t\t\t\t\tproviders: [\n\t\t\t\t\t\tprovideRequirementPlannerHost<\n\t\t\t\t\t\t\tTAuthRequirement,\n\t\t\t\t\t\t\tRouteBehaviourContextExtra,\n\t\t\t\t\t\t\tTBehaviour\n\t\t\t\t\t\t>(security.behaviour),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t]\n\t\t: routeOptions?.providers;\n\tconst route: Route = {\n\t\t...routeOptions,\n\t\tpath,\n\t\tdata: writeRequirementData(security, routeOptions?.data),\n\t\tcanActivate: [\n\t\t\t...(routeOptions?.canActivate ?? []),\n\t\t\tcreateAngularCanActivate<TAuthRequirement, TBehaviour>(guardOptions),\n\t\t],\n\t\tcanActivateChild: [\n\t\t\t...(routeOptions?.canActivateChild ?? []),\n\t\t\tcreateAngularCanActivateChild<TAuthRequirement, TBehaviour>(guardOptions),\n\t\t],\n\t};\n\tif (providers) {\n\t\troute.providers = providers;\n\t}\n\treturn route;\n}\n","// Angular Router trait adapter\n//\n// Canonical import path:\n// import { createRouterForAngular } from \"@securitydept/client-angular\"\n//\n// Projects an Angular `Router` (or any navigation-capable object) onto the\n// framework-agnostic `RouterTrait` (currentUrl + navigate) from\n// `@securitydept/client`. Adopters use this to give SDK primitives a way to\n// read the current URL and start navigations without depending on Angular.\n//\n// Architecture boundary:\n// - Does NOT own the Angular router, guards, or navigation lifecycle.\n// - Does NOT read auth requirements or run planners (see route-guard.ts).\n// - Does NOT carry token-set-specific mapping or policy.\n//\n// Stability: provisional\n\nimport {\n\ttype EnvironmentValidators,\n\tRouterNavigationMode,\n\ttype RouterNavigationRequest,\n\ttype RouterTrait,\n\tthrowValidationClientError,\n\tUriReferenceString,\n\tUriReferenceStringSchema,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"@securitydept/client\";\nimport { type as defineType } from \"arktype\";\n\n/**\n * Minimal navigation surface required from an Angular `Router`.\n *\n * The real `@angular/router` `Router` satisfies this shape, so adopters pass\n * their injected `Router` directly.\n */\nexport interface AngularRouterNavigationLike {\n\turl?: string;\n\tnavigateByUrl(\n\t\turl: string,\n\t\toptions?: { replaceUrl?: boolean; state?: unknown },\n\t): Promise<boolean> | boolean;\n}\n\n/** Options for {@link createRouterForAngular}. */\nexport interface CreateRouterForAngularOptions {\n\t/** The Angular `Router` (or a compatible navigation object). */\n\trouter: AngularRouterNavigationLike;\n\t/** Override the current URL. Defaults to `router.url`. */\n\tcurrentUrl?: string | null;\n}\n\nexport interface ResolvedRouterForAngularCreateOptions {\n\trouter: AngularRouterNavigationLike;\n\tcurrentUrl: string | null;\n}\n\nexport const AngularRouterNavigationLikeSchema = defineType({\n\turl: \"string?\",\n\tnavigateByUrl: \"Function\",\n});\n\nconst ResolvedRouterForAngularCreateOptionsSchema = defineType({\n\trouter: AngularRouterNavigationLikeSchema,\n\tcurrentUrl: UriReferenceStringSchema.or(\"null\"),\n});\n\n/**\n * Create a {@link RouterTrait} backed by an Angular `Router`.\n *\n * @example\n * ```ts\n * const routerTrait = createRouterForAngular({ router: inject(Router) });\n * ```\n */\nexport function createRouterForAngular(\n\toptions: CreateRouterForAngularOptions &\n\t\tWithTraitInputValidator<Pick<EnvironmentValidators, \"router\">>,\n): RouterTrait {\n\tconst routerInput = options.router as\n\t\t| AngularRouterNavigationLike\n\t\t| null\n\t\t| undefined;\n\tconst resolvedCreateOptions: ResolvedRouterForAngularCreateOptions = {\n\t\trouter: options.router,\n\t\tget currentUrl() {\n\t\t\treturn Object.hasOwn(options, \"currentUrl\")\n\t\t\t\t? (options.currentUrl ?? null)\n\t\t\t\t: (routerInput?.url ?? null);\n\t\t},\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: ResolvedRouterForAngularCreateOptionsSchema,\n\t\tvalidator: options.validators?.router,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: \"client_angular.router.invalid_router_options\",\n\t\t\t\tsource: \"client-angular\",\n\t\t\t\tmessagePrefix:\n\t\t\t\t\t\"createRouterForAngular could not validate routerForAngularCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst { router } = resolvedCreateOptions;\n\treturn {\n\t\tcurrentUrl() {\n\t\t\tconst currentUrl = resolvedCreateOptions.currentUrl;\n\t\t\treturn currentUrl == null ? null : UriReferenceString.parse(currentUrl);\n\t\t},\n\t\tasync navigate(request: RouterNavigationRequest) {\n\t\t\tawait router.navigateByUrl(request.url.toString(), {\n\t\t\t\treplaceUrl: request.mode === RouterNavigationMode.Replace,\n\t\t\t\tstate: request.state,\n\t\t\t});\n\t\t},\n\t};\n}\n","import {\n\ttype HttpResponse as AngularHttpResponse,\n\tHttpErrorResponse,\n\ttype HttpHeaders,\n} from \"@angular/common/http\";\nimport {\n\ttype BaseTransportTrait,\n\ttype CancellationTokenTrait,\n\tClientError,\n\tClientErrorKind,\n\tClientErrorSource,\n\ttype HttpRequest,\n\ttype HttpResponse,\n\ttype TraitInputValidator,\n\tTransportErrorCode,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"@securitydept/client\";\nimport { type as defineType } from \"arktype\";\nimport { firstValueFrom, from, type Observable, takeUntil } from \"rxjs\";\n\nexport interface AngularHttpClientLike {\n\trequest(\n\t\tmethod: string,\n\t\turl: string,\n\t\toptions: {\n\t\t\tbody?: unknown;\n\t\t\theaders?: Record<string, string>;\n\t\t\tobserve: \"response\";\n\t\t\tresponseType: \"text\";\n\t\t},\n\t): Observable<AngularHttpResponse<string>>;\n}\n\nexport interface BaseTransportForAngularCreateOptions {\n\thttpClient: AngularHttpClientLike;\n\tbaseUrl?: string | URL;\n}\n\nexport const BaseTransportForAngularCreateOptionsSchema = defineType({\n\thttpClient: {\n\t\trequest: \"Function\",\n\t},\n\tbaseUrl: \"unknown\",\n});\n\nexport function createBaseTransportForAngular(\n\toptions: BaseTransportForAngularCreateOptions &\n\t\tWithTraitInputValidator<TraitInputValidator>,\n): BaseTransportTrait {\n\tconst resolvedCreateOptions = {\n\t\thttpClient: options.httpClient,\n\t\tbaseUrl: options.baseUrl,\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: BaseTransportForAngularCreateOptionsSchema,\n\t\tvalidator: options.validators,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: TransportErrorCode.InvalidAngularOptions,\n\t\t\t\tsource: \"client-angular\",\n\t\t\t\tmessagePrefix:\n\t\t\t\t\t\"createBaseTransportForAngular could not validate transportForAngularCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst { httpClient, baseUrl } = resolvedCreateOptions;\n\n\treturn {\n\t\tasync execute(request: HttpRequest): Promise<HttpResponse> {\n\t\t\tconst requestUrl = baseUrl\n\t\t\t\t? new URL(request.url, baseUrl).toString()\n\t\t\t\t: request.url;\n\t\t\tconst requestOptions = {\n\t\t\t\theaders: request.headers,\n\t\t\t\tobserve: \"response\" as const,\n\t\t\t\tresponseType: \"text\" as const,\n\t\t\t\t...(request.body !== undefined &&\n\t\t\t\trequest.method !== \"GET\" &&\n\t\t\t\trequest.method !== \"HEAD\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tbody:\n\t\t\t\t\t\t\t\ttypeof request.body === \"string\"\n\t\t\t\t\t\t\t\t\t? request.body\n\t\t\t\t\t\t\t\t\t: JSON.stringify(request.body),\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst responseSource = request.cancellationToken\n\t\t\t\t\t? httpClient\n\t\t\t\t\t\t\t.request(request.method, requestUrl, requestOptions)\n\t\t\t\t\t\t\t.pipe(takeUntil(from(request.cancellationToken)))\n\t\t\t\t\t: httpClient.request(request.method, requestUrl, requestOptions);\n\t\t\t\tconst response = await firstValueFrom(responseSource);\n\t\t\t\ttry {\n\t\t\t\t\treturn angularResponseToHttpResponse(response);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new ClientError({\n\t\t\t\t\t\tkind: ClientErrorKind.Protocol,\n\t\t\t\t\t\tmessage: \"The HTTP response body could not be decoded\",\n\t\t\t\t\t\tcode: TransportErrorCode.ResponseDecodeFailed,\n\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof HttpErrorResponse && error.status !== 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn angularErrorResponseToHttpResponse(error);\n\t\t\t\t\t} catch (decodeError) {\n\t\t\t\t\t\tthrow new ClientError({\n\t\t\t\t\t\t\tkind: ClientErrorKind.Protocol,\n\t\t\t\t\t\t\tmessage: \"The HTTP response body could not be decoded\",\n\t\t\t\t\t\t\tcode: TransportErrorCode.ResponseDecodeFailed,\n\t\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\t\tcause: decodeError,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst normalized = normalizeAngularTransportError(\n\t\t\t\t\trequest.cancellationToken,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t\tif (normalized instanceof ClientError) {\n\t\t\t\t\tthrow normalized;\n\t\t\t\t}\n\t\t\t\tthrow new ClientError({\n\t\t\t\t\tkind: ClientErrorKind.Transport,\n\t\t\t\t\tmessage: \"The HTTP request could not reach the remote service\",\n\t\t\t\t\tcode: TransportErrorCode.RequestFailed,\n\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\tretryable: true,\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction angularResponseToHttpResponse(\n\tresponse: AngularHttpResponse<string>,\n): HttpResponse {\n\treturn {\n\t\tstatus: response.status,\n\t\theaders: angularHeadersToRecord(response.headers),\n\t\tbody: parseAngularResponseBody(\n\t\t\tresponse.status,\n\t\t\tresponse.headers,\n\t\t\tresponse.body,\n\t\t),\n\t};\n}\n\nfunction angularErrorResponseToHttpResponse(\n\terror: HttpErrorResponse,\n): HttpResponse {\n\treturn {\n\t\tstatus: error.status,\n\t\theaders: angularHeadersToRecord(error.headers),\n\t\tbody: parseAngularResponseBody(error.status, error.headers, error.error),\n\t};\n}\n\nfunction angularHeadersToRecord(headers: HttpHeaders): Record<string, string> {\n\tconst responseHeaders: Record<string, string> = {};\n\tfor (const key of headers.keys()) {\n\t\tconst value = headers.get(key);\n\t\tif (value !== null) {\n\t\t\tresponseHeaders[key] = value;\n\t\t}\n\t}\n\treturn responseHeaders;\n}\n\nfunction parseAngularResponseBody(\n\tstatus: number,\n\theaders: HttpHeaders,\n\tbody: unknown,\n): unknown {\n\tconst contentType = headers.get(\"content-type\");\n\tif (contentType?.includes(\"application/json\") && typeof body === \"string\") {\n\t\treturn body.length > 0 ? JSON.parse(body) : undefined;\n\t}\n\tif (status !== 302 && status !== 303 && status !== 301) {\n\t\treturn body;\n\t}\n\treturn undefined;\n}\n\nfunction normalizeAngularTransportError(\n\ttoken: CancellationTokenTrait | undefined,\n\terror: unknown,\n): unknown {\n\tif (!token?.isCancellationRequested) {\n\t\treturn error;\n\t}\n\treturn token.cancellationError ?? error;\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport {\n\tDestroyRef,\n\tInjectionToken,\n\tInjector,\n\tOptional,\n\ttype Provider,\n} from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport {\n\tcreateProviderIfTokenMissing,\n\tcreateSecuritydeptDestroyRef,\n\ttype FoundationEnvironment,\n\tgetSecuritydeptProviderToken,\n\tnotMissingProvider,\n\tROUTER_TRAIT_TOKEN,\n\tSecuritydeptDestroyRef,\n\ttype SecuritydeptProvider,\n\tTRANSPORT_TRAIT_TOKEN,\n} from \"@securitydept/client\";\nimport {\n\ttype ProvideSecuritydeptOptions,\n\tSECURITYDEPT_INJECTOR,\n} from \"./injection\";\nimport {\n\ttype CreateRouterForAngularOptions,\n\tcreateRouterForAngular,\n} from \"./router\";\nimport {\n\ttype BaseTransportForAngularCreateOptions,\n\tcreateBaseTransportForAngular,\n} from \"./transport\";\n\nexport const ENVIRONMENT = new InjectionToken<FoundationEnvironment>(\n\t\"ENVIRONMENT\",\n);\n\nexport const ENVIRONMENT_PROVIDER = new InjectionToken<SecuritydeptProvider>(\n\t\"ENVIRONMENT_PROVIDER\",\n);\n\nexport type EnvironmentCreatorOptions = {\n\tproviders?: readonly SecuritydeptProvider[];\n};\n\nexport type EnvironmentCreator<\n\tTOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n> = (options: TOptions) => TEnvironment;\n\nexport type CreateEnvironmentForAngularOptions<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n> = Omit<\n\tTBaseOptions,\n\t| \"providers\"\n\t| \"routerForAngularCreateOptions\"\n\t| \"transportForAngularCreateOptions\"\n\t| \"injectorForAngularProvider\"\n\t| \"createBaseEnvironment\"\n> & {\n\tcreateBaseEnvironment: EnvironmentCreator<TBaseOptions, TEnvironment>;\n\trouterForAngularCreateOptions: CreateRouterForAngularOptions;\n\ttransportForAngularCreateOptions: BaseTransportForAngularCreateOptions;\n\tinjectorForAngularProvider?: Injector;\n\tproviders?: readonly SecuritydeptProvider[];\n};\n\nexport type ProvideEnvironmentOptions<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n> = Omit<\n\tCreateEnvironmentForAngularOptions<TBaseOptions, TEnvironment>,\n\t| \"routerForAngularCreateOptions\"\n\t| \"transportForAngularCreateOptions\"\n\t| \"injectorForAngularProvider\"\n\t| \"providers\"\n> &\n\tProvideSecuritydeptOptions & {\n\t\trouterForAngularCreateOptions?: Partial<CreateRouterForAngularOptions>;\n\t\ttransportForAngularCreateOptions?: Partial<BaseTransportForAngularCreateOptions>;\n\t};\n\nexport function createEnvironmentForAngular<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n>(\n\toptions: CreateEnvironmentForAngularOptions<TBaseOptions, TEnvironment>,\n): TEnvironment {\n\tconst {\n\t\tcreateBaseEnvironment,\n\t\trouterForAngularCreateOptions,\n\t\ttransportForAngularCreateOptions,\n\t\tinjectorForAngularProvider,\n\t\tproviders = [],\n\t\t...baseOptions\n\t} = options;\n\tconst externalProviderTokens = new Set(\n\t\tproviders.map((provider) => getSecuritydeptProviderToken(provider)),\n\t);\n\tconst angularProviders: SecuritydeptProvider[] = [\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tROUTER_TRAIT_TOKEN,\n\t\t\t() => ({\n\t\t\t\tprovide: ROUTER_TRAIT_TOKEN,\n\t\t\t\tuseValue: createRouterForAngular(routerForAngularCreateOptions),\n\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tTRANSPORT_TRAIT_TOKEN,\n\t\t\t() => ({\n\t\t\t\tprovide: TRANSPORT_TRAIT_TOKEN,\n\t\t\t\tuseValue: createBaseTransportForAngular(\n\t\t\t\t\ttransportForAngularCreateOptions,\n\t\t\t\t),\n\t\t\t}),\n\t\t),\n\t\tinjectorForAngularProvider\n\t\t\t? createProviderIfTokenMissing(externalProviderTokens, Injector, () => ({\n\t\t\t\t\tprovide: Injector,\n\t\t\t\t\tuseValue: injectorForAngularProvider,\n\t\t\t\t}))\n\t\t\t: null,\n\t].filter(notMissingProvider) as SecuritydeptProvider[];\n\n\treturn createBaseEnvironment({\n\t\t...(baseOptions as unknown as Omit<TBaseOptions, \"providers\">),\n\t\tproviders: [...angularProviders, ...providers],\n\t} as unknown as TBaseOptions);\n}\n\nexport function provideEnvironment<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n>(options: ProvideEnvironmentOptions<TBaseOptions, TEnvironment>): Provider[] {\n\treturn [\n\t\t{\n\t\t\tprovide: ENVIRONMENT,\n\t\t\tuseFactory: (\n\t\t\t\trouter: Router,\n\t\t\t\thttpClient: HttpClient,\n\t\t\t\tinjector: Injector,\n\t\t\t\tdestroyRef: DestroyRef,\n\t\t\t\tproviders: readonly SecuritydeptProvider[] | null,\n\t\t\t) => {\n\t\t\t\tconst {\n\t\t\t\t\tautoCreateDestroyRef,\n\t\t\t\t\tproviders: optionProviders,\n\t\t\t\t\t...environmentOptions\n\t\t\t\t} = options;\n\t\t\t\tconst securitydeptDestroyRef =\n\t\t\t\t\tautoCreateDestroyRef === false\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: createSecuritydeptDestroyRef();\n\t\t\t\tif (securitydeptDestroyRef) {\n\t\t\t\t\tdestroyRef.onDestroy(() => securitydeptDestroyRef.dispose());\n\t\t\t\t}\n\t\t\t\tconst environmentProviders = [\n\t\t\t\t\t...(optionProviders ?? []),\n\t\t\t\t\t...(providers ?? []),\n\t\t\t\t\t...(securitydeptDestroyRef\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tprovide: SecuritydeptDestroyRef,\n\t\t\t\t\t\t\t\t\tuseValue: securitydeptDestroyRef,\n\t\t\t\t\t\t\t\t} satisfies SecuritydeptProvider,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t];\n\t\t\t\treturn createEnvironmentForAngular({\n\t\t\t\t\t...environmentOptions,\n\t\t\t\t\trouterForAngularCreateOptions: {\n\t\t\t\t\t\trouter,\n\t\t\t\t\t\t...environmentOptions.routerForAngularCreateOptions,\n\t\t\t\t\t},\n\t\t\t\t\ttransportForAngularCreateOptions: {\n\t\t\t\t\t\thttpClient,\n\t\t\t\t\t\t...environmentOptions.transportForAngularCreateOptions,\n\t\t\t\t\t},\n\t\t\t\t\tinjectorForAngularProvider: injector,\n\t\t\t\t\tproviders: environmentProviders,\n\t\t\t\t} as unknown as CreateEnvironmentForAngularOptions<\n\t\t\t\t\tTBaseOptions,\n\t\t\t\t\tTEnvironment\n\t\t\t\t>);\n\t\t\t},\n\t\t\tdeps: [\n\t\t\t\tRouter,\n\t\t\t\tHttpClient,\n\t\t\t\tInjector,\n\t\t\t\tDestroyRef,\n\t\t\t\t[new Optional(), ENVIRONMENT_PROVIDER],\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tprovide: SECURITYDEPT_INJECTOR,\n\t\t\tuseFactory: (environment: FoundationEnvironment) => environment.injector,\n\t\t\tdeps: [ENVIRONMENT],\n\t\t},\n\t];\n}\n\nexport function provideEnvironmentProvider(\n\tprovider: SecuritydeptProvider,\n): Provider {\n\treturn {\n\t\tprovide: ENVIRONMENT_PROVIDER,\n\t\tuseValue: provider,\n\t\tmulti: true,\n\t};\n}\n","import { type Signal } from \"@angular/core\";\nimport {\n\trxResource,\n\ttype ToSignalOptions,\n\ttoSignal,\n} from \"@angular/core/rxjs-interop\";\nimport {\n\ttype InteropObservableTrait,\n\tSYMBOL_OBSERVABLE,\n} from \"@securitydept/client\";\n\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n): Signal<T | undefined>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T | undefined>> & {\n\t\tinitialValue?: undefined;\n\t\trequireSync?: false;\n\t},\n): Signal<T | undefined>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T | null>> & {\n\t\tinitialValue?: null;\n\t\trequireSync?: false;\n\t},\n): Signal<T | null>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T>> & {\n\t\tinitialValue?: undefined;\n\t\trequireSync: true;\n\t},\n): Signal<T>;\nexport function toNgSignal<T, const U extends T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T | U>> & {\n\t\tinitialValue: U;\n\t\trequireSync?: false;\n\t},\n): Signal<T | U>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions?: ToSignalOptions<T | undefined>,\n): Signal<T | undefined> {\n\treturn toSignal(source[SYMBOL_OBSERVABLE](), options as never) as Signal<\n\t\tT | undefined\n\t>;\n}\n\nexport const toNgResource = rxResource;\n","/*\n * Public API Surface of @securitydept/client-angular\n */\n\nexport * from \"./lib/auth-coordination\";\nexport * from \"./lib/environment\";\nexport * from \"./lib/injection\";\nexport * from \"./lib/interop\";\nexport * from \"./lib/router\";\nexport * from \"./lib/transport\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["defineType"],"mappings":";;;;;;;;MAca,qBAAqB,GAAG,IAAI,cAAc,CACtD,uBAAuB;AAQlB,SAAU,mBAAmB,CAClC,OAAA,GAAsC,EAAE,EAAA;AAExC,IAAA,OAAO,wBAAwB,CAAC;AAC/B,QAAA;AACC,YAAA,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,MAA2B;AACtC,gBAAA,MAAM,cAAc,GACnB,MAAM,CAAC,qBAAqB,EAAE;AAC7B,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,QAAQ,EAAE,IAAI;iBACd,CAAC,IAAI,SAAS;AAChB,gBAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,gBAAA,MAAM,sBAAsB,GAC3B,OAAO,CAAC,oBAAoB,KAAK;AAChC,sBAAE;sBACA,4BAA4B,EAAE;gBAClC,IAAI,sBAAsB,EAAE;oBAC3B,iBAAiB,CAAC,SAAS,CAAC,MAAM,sBAAsB,CAAC,OAAO,EAAE,CAAC;gBACpE;AAEA,gBAAA,MAAM,SAAS,GAAG;AACjB,oBAAA,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;AAC5B,oBAAA,IAAI;AACH,0BAAE;AACA,4BAAA;AACC,gCAAA,OAAO,EAAE,sBAAsB;AAC/B,gCAAA,QAAQ,EAAE,sBAAsB;AACD,6BAAA;AAChC;0BACA,EAAE,CAAC;iBACN;AACD,gBAAA,OAAO;sBACJ,oBAAoB,CAAC,kBAAkB,CAAC,cAAc,EAAE,SAAS;AACnE,sBAAE,oBAAoB,CAAC,gBAAgB,CAAC,SAAS,CAAC;YACpD,CAAC;AACD,SAAA;AACD,KAAA,CAAC;AACH;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;;;AAGG;AACG,SAAU,oBAAoB,CACnC,OAA+B,EAAA;IAE/B,OAAO;QACN,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QACpC,GAAG,OAAO,CAAC,IAAI;KACf;AACF;AAEA;;;;;;;;;;AAUG;AACG,SAAU,2BAA2B,CAEzC,SAAiC,EAAA;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC;AACnD,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,iBAAiB,CAAmB,OAAO,CAAC,CAAC;AAC5E;AAEA,SAAS,iBAAiB,CACzB,OAA+B,EAAA;IAE/B,MAAM,QAAQ,GAAG,6BAA6B,CAC7C,oBAAoB,CAAC,OAAO,CAAC,CAC7B;AACD,IAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE;AAC7E,IAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW;AACzC,IAAA,OAAO;AACN,UAAE,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,WAAW;UAC7D,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE;AACtD;AAEA,SAAS,cAAc,CAAC,OAA+B,EAAA;AACtD,IAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACzB,QAAA,OAAO,UAAU;IAClB;AACA,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI;AACrC,IAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACvD,QAAA,OAAO,WAAW;IACnB;AACA,IAAA,OAAO,IAAI;AACZ;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiEA,eAAe,aAAa,CAM3B,KAA6B,EAC7B,KAA0B,EAC1B,IAAwC,EACxC,MAAc,EAAA;AAEd,IAAA,MAAM,QAAQ,GAAG,2BAA2B,CAAmB,KAAK,CAAC;AACrE,IAAA,MAAM,OAAO,GAAG,kCAAkC,CAAC,iBAAiB,CACnE,IAAI,EACJ,QAAQ,EACR,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAClB;AACD,IAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE;AAC9C,IAAA,QAAQ,MAAM,CAAC,OAAO;QACrB,KAAK,eAAe,CAAC,OAAO;AAC3B,YAAA,OAAO,IAAI;QACZ,KAAK,eAAe,CAAC,OAAO;AAC3B,YAAA,OAAO,KAAK;QACb,KAAK,eAAe,CAAC,QAAQ;YAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAE1C;AAEA;;;AAGG;AACG,SAAU,wBAAwB,CAMvC,OAAiE,EAAA;AAEjE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,KAAI;AACvB,QAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC1D,YAAA,QAAQ,EAAE,IAAI;AACd,SAAA,CAAC;QACF,MAAM,UAAU,GAAG;cAChB,4BAA4B,CAI3B,EAAE,QAAQ,EAAE,oBAAoB,EAAE;cACnC,IAAI;AACP,QAAA,MAAM,IAAI,GACT,OAAO,EAAE,WAAW;aACnB,OAAO,EAAE;kBACP,sBAAsB,CAAC,aAAa,CACpC,OAAO,OAAO,CAAC,SAAS,KAAK;AAC5B,sBAAE,OAAO,CAAC,SAAS;AACnB,sBAAE,OAAO,CAAC,SAAS,EACpB;oBACC,MAAM,EAAE,UAAU,IAAI,SAAS;oBAC/B,WAAW,EACV,oBAAoB,EAAE,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,SAAS;iBAChE;kBAED,UAAU,CAAC;AACd,YAAA,sBAAsB,CAAC,aAAa,CAAC,EAAgB,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,OAAO,aAAa,CACnB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,CACN;AACF,IAAA,CAAC;AACF;AAEA;;;AAGG;AACG,SAAU,6BAA6B,CAM5C,OAAiE,EAAA;AAEjE,IAAA,OAAO,CAAC,UAAU,EAAE,KAAK,KAAI;AAC5B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC9C,YAAA,QAAQ,EAAE,IAAI;AACd,SAAA,CAAC;QACF,MAAM,UAAU,GAAG;AAClB,cAAE,4BAA4B,CAI3B,EAAE,QAAQ,EAAE;cACb,IAAI;AACP,QAAA,MAAM,IAAI,GACT,OAAO,EAAE,WAAW;aACnB,OAAO,EAAE;kBACP,sBAAsB,CAAC,aAAa,CACpC,OAAO,OAAO,CAAC,SAAS,KAAK;AAC5B,sBAAE,OAAO,CAAC,SAAS;AACnB,sBAAE,OAAO,CAAC,SAAS,EACpB;oBACC,MAAM,EAAE,UAAU,IAAI,SAAS;oBAC/B,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,SAAS;iBAChE;kBAED,UAAU,CAAC;AACd,YAAA,sBAAsB,CAAC,aAAa,CAAC,EAAgB,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,OAAO,aAAa,CACnB,UAAU,EACV,KAAK,EACL,IAAI,EACJ,MAAM,CACN;AACF,IAAA,CAAC;AACF;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiDA,SAAS,oBAAoB,CAC5B,QAAsD,EACtD,IAAyC,EAAA;IAEzC,MAAM,KAAK,GAAgD,EAAE;AAC7D,IAAA,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;AACxC,QAAA,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY;IAC3C;AACA,IAAA,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;AACvC,QAAA,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW;IACzC;IACA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE;IAC3B;AACA,IAAA,OAAO,8BAA8B,CAAC,IAAI,EAAE,KAAK,CAAC;AACnD;AAEA;;;;AAIG;SACa,WAAW,CAM1B,IAAY,EACZ,QAAkE,EAClE,YAAgC,EAAA;IAEhC,OAAO;AACN,QAAA,GAAG,YAAY;QACf,IAAI;QACJ,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC;KACxD;AACF;AAEA;;;;;;AAMG;SACa,eAAe,CAM9B,IAAY,EACZ,QAAkE,EAClE,YAAgC,EAAA;AAEhC,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC7B,UAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW;UACnC,SAAS;AACZ,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC1B,UAAE;AACA,YAAA,IAAI,YAAY,EAAE,SAAS,IAAI,EAAE,CAAC;AAClC,YAAA,mBAAmB,CAAC;AACnB,gBAAA,SAAS,EAAE;AACV,oBAAA,6BAA6B,CAI3B,QAAQ,CAAC,SAAS,CAAC;AACrB,iBAAA;aACD,CAAC;AACF;AACF,UAAE,YAAY,EAAE,SAAS;AAC1B,IAAA,MAAM,KAAK,GAAU;AACpB,QAAA,GAAG,YAAY;QACf,IAAI;QACJ,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC;AACxD,QAAA,WAAW,EAAE;AACZ,YAAA,IAAI,YAAY,EAAE,WAAW,IAAI,EAAE,CAAC;YACpC,wBAAwB,CAA+B,YAAY,CAAC;AACpE,SAAA;AACD,QAAA,gBAAgB,EAAE;AACjB,YAAA,IAAI,YAAY,EAAE,gBAAgB,IAAI,EAAE,CAAC;YACzC,6BAA6B,CAA+B,YAAY,CAAC;AACzE,SAAA;KACD;IACD,IAAI,SAAS,EAAE;AACd,QAAA,KAAK,CAAC,SAAS,GAAG,SAAS;IAC5B;AACA,IAAA,OAAO,KAAK;AACb;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA0CO,MAAM,iCAAiC,GAAGA,IAAU,CAAC;AAC3D,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,aAAa,EAAE,UAAU;AACzB,CAAA;AAED,MAAM,2CAA2C,GAAGA,IAAU,CAAC;AAC9D,IAAA,MAAM,EAAE,iCAAiC;AACzC,IAAA,UAAU,EAAE,wBAAwB,CAAC,EAAE,CAAC,MAAM,CAAC;AAC/C,CAAA,CAAC;AAEF;;;;;;;AAOG;AACG,SAAU,sBAAsB,CACrC,OAC+D,EAAA;AAE/D,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAGhB;AACZ,IAAA,MAAM,qBAAqB,GAA0C;QACpE,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,QAAA,IAAI,UAAU,GAAA;AACb,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY;AACzC,mBAAG,OAAO,CAAC,UAAU,IAAI,IAAI;mBAC1B,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC;QAC9B,CAAC;KACD;AACD,IAAA,kBAAkB,CAAC;AAClB,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,aAAa,EAAE,2CAA2C;AAC1D,QAAA,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM;AACrC,QAAA,SAAS,EAAE,CAAC,OAAO,KAClB,0BAA0B,CAAC;AAC1B,YAAA,IAAI,EAAE,8CAA8C;AACpD,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,aAAa,EACZ,yEAAyE;YAC1E,OAAO;SACP,CAAC;AACH,KAAA,CAAC;AACF,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,qBAAqB;IACxC,OAAO;QACN,UAAU,GAAA;AACT,YAAA,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU;AACnD,YAAA,OAAO,UAAU,IAAI,IAAI,GAAG,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;QACxE,CAAC;QACD,MAAM,QAAQ,CAAC,OAAgC,EAAA;YAC9C,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAClD,gBAAA,UAAU,EAAE,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,OAAO;gBACzD,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,aAAA,CAAC;QACH,CAAC;KACD;AACF;;AC7EO,MAAM,0CAA0C,GAAGA,IAAU,CAAC;AACpE,IAAA,UAAU,EAAE;AACX,QAAA,OAAO,EAAE,UAAU;AACnB,KAAA;AACD,IAAA,OAAO,EAAE,SAAS;AAClB,CAAA;AAEK,SAAU,6BAA6B,CAC5C,OAC6C,EAAA;AAE7C,IAAA,MAAM,qBAAqB,GAAG;QAC7B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;KACxB;AACD,IAAA,kBAAkB,CAAC;AAClB,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,aAAa,EAAE,0CAA0C;QACzD,SAAS,EAAE,OAAO,CAAC,UAAU;AAC7B,QAAA,SAAS,EAAE,CAAC,OAAO,KAClB,0BAA0B,CAAC;YAC1B,IAAI,EAAE,kBAAkB,CAAC,qBAAqB;AAC9C,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,aAAa,EACZ,mFAAmF;YACpF,OAAO;SACP,CAAC;AACH,KAAA,CAAC;AACF,IAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,qBAAqB;IAErD,OAAO;QACN,MAAM,OAAO,CAAC,OAAoB,EAAA;YACjC,MAAM,UAAU,GAAG;AAClB,kBAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ;AACxC,kBAAE,OAAO,CAAC,GAAG;AACd,YAAA,MAAM,cAAc,GAAG;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;AACxB,gBAAA,OAAO,EAAE,UAAmB;AAC5B,gBAAA,YAAY,EAAE,MAAe;AAC7B,gBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;oBAC9B,OAAO,CAAC,MAAM,KAAK,KAAK;oBACxB,OAAO,CAAC,MAAM,KAAK;AAClB,sBAAE;AACA,wBAAA,IAAI,EACH,OAAO,OAAO,CAAC,IAAI,KAAK;8BACrB,OAAO,CAAC;8BACR,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;AAChC;sBACA,EAAE,CAAC;aACN;AAED,YAAA,IAAI;AACH,gBAAA,MAAM,cAAc,GAAG,OAAO,CAAC;AAC9B,sBAAE;yBACC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc;yBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAClD,sBAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC;AACjE,gBAAA,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC;AACrD,gBAAA,IAAI;AACH,oBAAA,OAAO,6BAA6B,CAAC,QAAQ,CAAC;gBAC/C;gBAAE,OAAO,KAAK,EAAE;oBACf,MAAM,IAAI,WAAW,CAAC;wBACrB,IAAI,EAAE,eAAe,CAAC,QAAQ;AAC9B,wBAAA,OAAO,EAAE,6CAA6C;wBACtD,IAAI,EAAE,kBAAkB,CAAC,oBAAoB;wBAC7C,MAAM,EAAE,iBAAiB,CAAC,SAAS;AACnC,wBAAA,KAAK,EAAE,KAAK;AACZ,qBAAA,CAAC;gBACH;YACD;YAAE,OAAO,KAAK,EAAE;gBACf,IAAI,KAAK,YAAY,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7D,oBAAA,IAAI;AACH,wBAAA,OAAO,kCAAkC,CAAC,KAAK,CAAC;oBACjD;oBAAE,OAAO,WAAW,EAAE;wBACrB,MAAM,IAAI,WAAW,CAAC;4BACrB,IAAI,EAAE,eAAe,CAAC,QAAQ;AAC9B,4BAAA,OAAO,EAAE,6CAA6C;4BACtD,IAAI,EAAE,kBAAkB,CAAC,oBAAoB;4BAC7C,MAAM,EAAE,iBAAiB,CAAC,SAAS;AACnC,4BAAA,KAAK,EAAE,WAAW;AAClB,yBAAA,CAAC;oBACH;gBACD;gBACA,MAAM,UAAU,GAAG,8BAA8B,CAChD,OAAO,CAAC,iBAAiB,EACzB,KAAK,CACL;AACD,gBAAA,IAAI,UAAU,YAAY,WAAW,EAAE;AACtC,oBAAA,MAAM,UAAU;gBACjB;gBACA,MAAM,IAAI,WAAW,CAAC;oBACrB,IAAI,EAAE,eAAe,CAAC,SAAS;AAC/B,oBAAA,OAAO,EAAE,qDAAqD;oBAC9D,IAAI,EAAE,kBAAkB,CAAC,aAAa;oBACtC,MAAM,EAAE,iBAAiB,CAAC,SAAS;AACnC,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,KAAK,EAAE,KAAK;AACZ,iBAAA,CAAC;YACH;QACD,CAAC;KACD;AACF;AAEA,SAAS,6BAA6B,CACrC,QAAqC,EAAA;IAErC,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,MAAM;AACvB,QAAA,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC;AACjD,QAAA,IAAI,EAAE,wBAAwB,CAC7B,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,IAAI,CACb;KACD;AACF;AAEA,SAAS,kCAAkC,CAC1C,KAAwB,EAAA;IAExB,OAAO;QACN,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,QAAA,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,EAAE,wBAAwB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;KACxE;AACF;AAEA,SAAS,sBAAsB,CAAC,OAAoB,EAAA;IACnD,MAAM,eAAe,GAA2B,EAAE;IAClD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AACnB,YAAA,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK;QAC7B;IACD;AACA,IAAA,OAAO,eAAe;AACvB;AAEA,SAAS,wBAAwB,CAChC,MAAc,EACd,OAAoB,EACpB,IAAa,EAAA;IAEb,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAC/C,IAAA,IAAI,WAAW,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1E,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS;IACtD;AACA,IAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;AACvD,QAAA,OAAO,IAAI;IACZ;AACA,IAAA,OAAO,SAAS;AACjB;AAEA,SAAS,8BAA8B,CACtC,KAAyC,EACzC,KAAc,EAAA;AAEd,IAAA,IAAI,CAAC,KAAK,EAAE,uBAAuB,EAAE;AACpC,QAAA,OAAO,KAAK;IACb;AACA,IAAA,OAAO,KAAK,CAAC,iBAAiB,IAAI,KAAK;AACxC;;MCxKa,WAAW,GAAG,IAAI,cAAc,CAC5C,aAAa;MAGD,oBAAoB,GAAG,IAAI,cAAc,CACrD,sBAAsB;AA6CjB,SAAU,2BAA2B,CAI1C,OAAuE,EAAA;AAEvE,IAAA,MAAM,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,gCAAgC,EAChC,0BAA0B,EAC1B,SAAS,GAAG,EAAE,EACd,GAAG,WAAW,EACd,GAAG,OAAO;IACX,MAAM,sBAAsB,GAAG,IAAI,GAAG,CACrC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CACnE;AACD,IAAA,MAAM,gBAAgB,GAA2B;QAChD,4BAA4B,CAC3B,sBAAsB,EACtB,kBAAkB,EAClB,OAAO;AACN,YAAA,OAAO,EAAE,kBAAkB;AAC3B,YAAA,QAAQ,EAAE,sBAAsB,CAAC,6BAA6B,CAAC;AAC/D,SAAA,CAAC,CACF;QACD,4BAA4B,CAC3B,sBAAsB,EACtB,qBAAqB,EACrB,OAAO;AACN,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE,6BAA6B,CACtC,gCAAgC,CAChC;AACD,SAAA,CAAC,CACF;QACD;cACG,4BAA4B,CAAC,sBAAsB,EAAE,QAAQ,EAAE,OAAO;AACtE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,aAAA,CAAC;AACH,cAAE,IAAI;AACP,KAAA,CAAC,MAAM,CAAC,kBAAkB,CAA2B;AAEtD,IAAA,OAAO,qBAAqB,CAAC;AAC5B,QAAA,GAAI,WAA0D;AAC9D,QAAA,SAAS,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,SAAS,CAAC;AACnB,KAAA,CAAC;AAC9B;AAEM,SAAU,kBAAkB,CAGhC,OAA8D,EAAA;IAC/D,OAAO;AACN,QAAA;AACC,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,UAAU,EAAE,CACX,MAAc,EACd,UAAsB,EACtB,QAAkB,EAClB,UAAsB,EACtB,SAAiD,KAC9C;AACH,gBAAA,MAAM,EACL,oBAAoB,EACpB,SAAS,EAAE,eAAe,EAC1B,GAAG,kBAAkB,EACrB,GAAG,OAAO;AACX,gBAAA,MAAM,sBAAsB,GAC3B,oBAAoB,KAAK;AACxB,sBAAE;sBACA,4BAA4B,EAAE;gBAClC,IAAI,sBAAsB,EAAE;oBAC3B,UAAU,CAAC,SAAS,CAAC,MAAM,sBAAsB,CAAC,OAAO,EAAE,CAAC;gBAC7D;AACA,gBAAA,MAAM,oBAAoB,GAAG;AAC5B,oBAAA,IAAI,eAAe,IAAI,EAAE,CAAC;AAC1B,oBAAA,IAAI,SAAS,IAAI,EAAE,CAAC;AACpB,oBAAA,IAAI;AACH,0BAAE;AACA,4BAAA;AACC,gCAAA,OAAO,EAAE,sBAAsB;AAC/B,gCAAA,QAAQ,EAAE,sBAAsB;AACD,6BAAA;AAChC;0BACA,EAAE,CAAC;iBACN;AACD,gBAAA,OAAO,2BAA2B,CAAC;AAClC,oBAAA,GAAG,kBAAkB;AACrB,oBAAA,6BAA6B,EAAE;wBAC9B,MAAM;wBACN,GAAG,kBAAkB,CAAC,6BAA6B;AACnD,qBAAA;AACD,oBAAA,gCAAgC,EAAE;wBACjC,UAAU;wBACV,GAAG,kBAAkB,CAAC,gCAAgC;AACtD,qBAAA;AACD,oBAAA,0BAA0B,EAAE,QAAQ;AACpC,oBAAA,SAAS,EAAE,oBAAoB;AAI/B,iBAAA,CAAC;YACH,CAAC;AACD,YAAA,IAAI,EAAE;gBACL,MAAM;gBACN,UAAU;gBACV,QAAQ;gBACR,UAAU;AACV,gBAAA,CAAC,IAAI,QAAQ,EAAE,EAAE,oBAAoB,CAAC;AACtC,aAAA;AACD,SAAA;AACD,QAAA;AACC,YAAA,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,CAAC,WAAkC,KAAK,WAAW,CAAC,QAAQ;YACxE,IAAI,EAAE,CAAC,WAAW,CAAC;AACnB,SAAA;KACD;AACF;AAEM,SAAU,0BAA0B,CACzC,QAA8B,EAAA;IAE9B,OAAO;AACN,QAAA,OAAO,EAAE,oBAAoB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,KAAK,EAAE,IAAI;KACX;AACF;;AC1KM,SAAU,UAAU,CACzB,MAAiC,EACjC,OAAwC,EAAA;IAExC,OAAO,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAgB,CAE5D;AACF;AAEO,MAAM,YAAY,GAAG;;ACnD5B;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"securitydept-client-angular.mjs","sources":["../../src/lib/injection.ts","../../src/lib/auth-coordination/route-metadata.ts","../../src/lib/auth-coordination/route-guard.ts","../../src/lib/auth-coordination/secure-routes.ts","../../src/lib/router.ts","../../src/lib/transport.ts","../../src/lib/environment.ts","../../src/lib/interop.ts","../../src/public-api.ts","../../src/securitydept-client-angular.ts"],"sourcesContent":["import {\n\tDestroyRef,\n\ttype EnvironmentProviders,\n\tInjectionToken,\n\tinject,\n\tmakeEnvironmentProviders,\n} from \"@angular/core\";\nimport {\n\tcreateSecuritydeptDestroyRef,\n\tSecuritydeptDestroyRef,\n\tSecuritydeptInjector,\n\ttype SecuritydeptProvider,\n} from \"@securitydept/client\";\n\nexport const SECURITYDEPT_INJECTOR = new InjectionToken<SecuritydeptInjector>(\n\t\"SECURITYDEPT_INJECTOR\",\n);\n\nexport interface ProvideSecuritydeptOptions {\n\treadonly providers?: readonly SecuritydeptProvider[];\n\treadonly autoCreateDestroyRef?: boolean;\n}\n\nexport function provideSecuritydept(\n\toptions: ProvideSecuritydeptOptions = {},\n): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: SECURITYDEPT_INJECTOR,\n\t\t\tuseFactory: (): SecuritydeptInjector => {\n\t\t\t\tconst parentInjector =\n\t\t\t\t\tinject(SECURITYDEPT_INJECTOR, {\n\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\tskipSelf: true,\n\t\t\t\t\t}) ?? undefined;\n\t\t\t\tconst angularDestroyRef = inject(DestroyRef);\n\t\t\t\tconst securitydeptDestroyRef =\n\t\t\t\t\toptions.autoCreateDestroyRef === false\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: createSecuritydeptDestroyRef();\n\t\t\t\tif (securitydeptDestroyRef) {\n\t\t\t\t\tangularDestroyRef.onDestroy(() => securitydeptDestroyRef.dispose());\n\t\t\t\t}\n\n\t\t\t\tconst providers = [\n\t\t\t\t\t...(options.providers ?? []),\n\t\t\t\t\t...(securitydeptDestroyRef\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tprovide: SecuritydeptDestroyRef,\n\t\t\t\t\t\t\t\t\tuseValue: securitydeptDestroyRef,\n\t\t\t\t\t\t\t\t} satisfies SecuritydeptProvider,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t];\n\t\t\t\treturn parentInjector\n\t\t\t\t\t? SecuritydeptInjector.fromParentInjector(parentInjector, providers)\n\t\t\t\t\t: SecuritydeptInjector.resolveAndCreate(providers);\n\t\t\t},\n\t\t},\n\t]);\n}\n","// Angular route metadata projection\n//\n// Canonical import path:\n// import { projectAngularRouteSegments } from \"@securitydept/client-angular\"\n//\n// Reads serializable auth requirement metadata declared in Angular route\n// `data` and projects a matched route chain (`pathFromRoot`) into the SDK's\n// framework-agnostic `RouteTreeSegment[]`. Composition folding is owned by the\n// `RouteCompositionRequirementPlanner`, so this layer only extracts per-segment\n// declarations.\n//\n// Route metadata storage is owned by `@securitydept/client`\n// ({@link readSecuritydeptRouteMetadata} / {@link writeSecuritydeptRouteMetadata}).\n//\n// Architecture boundary:\n// - Does NOT own auth enforcement, planner logic, or navigation.\n// - Does NOT carry token-set-specific mapping or policy.\n// - Framework-specific (Angular Router types) but requirement-system-agnostic.\n//\n// Stability: provisional\n\nimport { type ActivatedRouteSnapshot } from \"@angular/router\";\nimport {\n\ttype AuthRequirement,\n\ttype RouteTreeSegment,\n\treadSecuritydeptRouteMetadata,\n} from \"@securitydept/client\";\n\n/**\n * Resolved route `data` for a segment: static `routeConfig.data` merged with\n * snapshot `data` (snapshot wins on key collision).\n */\nexport function routeDataFromSegment(\n\tsegment: ActivatedRouteSnapshot,\n): Record<string, unknown> {\n\treturn {\n\t\t...(segment.routeConfig?.data ?? {}),\n\t\t...segment.data,\n\t};\n}\n\n/**\n * Project the `pathFromRoot` of an `ActivatedRouteSnapshot` into the SDK's\n * `RouteTreeSegment[]` chain (root -> leaf).\n *\n * Each segment carries its declared requirements and composition strategy;\n * inherit/merge/replace folding is applied later by the\n * `RouteCompositionRequirementPlanner`.\n *\n * Segments without a `routeConfig` (e.g. the root) get routeId `\"__root__\"`;\n * empty-path segments get `\"__index__\"`.\n */\nexport function projectAngularRouteSegments<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n>(leafRoute: ActivatedRouteSnapshot): RouteTreeSegment<TAuthRequirement>[] {\n\tconst chain = leafRoute.pathFromRoot ?? [leafRoute];\n\treturn chain.map((segment) => segmentToTreeNode<TAuthRequirement>(segment));\n}\n\nfunction segmentToTreeNode<TAuthRequirement extends AuthRequirement>(\n\tsegment: ActivatedRouteSnapshot,\n): RouteTreeSegment<TAuthRequirement> {\n\tconst metadata = readSecuritydeptRouteMetadata<TAuthRequirement>(\n\t\trouteDataFromSegment(segment),\n\t);\n\tconst requirements = metadata?.requirements ? [...metadata.requirements] : [];\n\tconst composition = metadata?.composition;\n\treturn composition\n\t\t? { routeId: resolveRouteId(segment), requirements, composition }\n\t\t: { routeId: resolveRouteId(segment), requirements };\n}\n\nfunction resolveRouteId(segment: ActivatedRouteSnapshot): string {\n\tif (!segment.routeConfig) {\n\t\treturn \"__root__\";\n\t}\n\tconst path = segment.routeConfig.path;\n\tif (path === undefined || path === null || path === \"\") {\n\t\treturn \"__index__\";\n\t}\n\treturn path;\n}\n","// Angular route guards — bridge to RouteCompositionRequirementPlanner\n//\n// Canonical import path:\n// import {\n// createAngularCanActivate,\n// createAngularCanActivateChild,\n// } from \"@securitydept/client-angular\"\n//\n// Produces Angular `CanActivateFn` / `CanActivateChildFn` guards that project\n// the matched route chain into `RouteTreeSegment[]`, run the SDK's\n// `RouteCompositionRequirementPlanner` against the nearest\n// `RequirementPlannerHost` resolved from the current Securitydept injector,\n// and map the pipeline result onto Angular's guard return contract (`true` /\n// `false` / `UrlTree`).\n//\n// Injection-context discipline: DI reads (host, Router) happen synchronously at\n// guard entry, before any `await`. Behaviour that needs DI services should be\n// provided through `provideSecuritydept({ providers: [...] })`, not inline\n// callbacks that call `inject()` here.\n//\n// Architecture boundary:\n// - Does NOT own behaviour (checkAuthenticated / onUnauthenticated) — that is\n// resolved through the RequirementPlannerHost chain.\n// - Does NOT carry token-set-specific mapping or policy.\n//\n// Stability: provisional\n\nimport { inject } from \"@angular/core\";\nimport {\n\ttype ActivatedRouteSnapshot,\n\ttype CanActivateChildFn,\n\ttype CanActivateFn,\n\tRouter,\n\ttype RouterStateSnapshot,\n\ttype UrlTree,\n} from \"@angular/router\";\nimport {\n\ttype AuthRequirement,\n\tENVIRONMENT_TOKEN,\n\tinjectRequirementPlannerHost,\n\tPipelineOutcome,\n\tREQUIREMENT_PLANNER_HOST,\n\ttype RequirementBehaviourWithRouteContext,\n\tRequirementPlannerHost,\n\ttype RequirementPlannerHostBehaviour,\n\ttype RouteBehaviourContextExtra,\n\tRouteCompositionRequirementPlanner,\n} from \"@securitydept/client\";\nimport { SECURITYDEPT_INJECTOR } from \"../injection\";\nimport { projectAngularRouteSegments } from \"./route-metadata\";\n\nexport interface CreateAngularGuardWithPlannerHostOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> {\n\t/**\n\t * Explicit planner host. When omitted, the guard uses the nearest\n\t * {@link REQUIREMENT_PLANNER_HOST} from the Securitydept injector, falling\n\t * back to an empty host only when no provider exists.\n\t */\n\treadonly plannerHost: RequirementPlannerHost<TBehaviour>;\n\treadonly behaviour?: never;\n}\n\nexport interface CreateAngularGuardWithBehaviourOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> {\n\treadonly plannerHost?: never;\n\treadonly behaviour?: RequirementPlannerHostBehaviour<\n\t\tTAuthRequirement,\n\t\tRouteBehaviourContextExtra,\n\t\tTBehaviour\n\t>;\n}\n\n/** Options shared by {@link createAngularCanActivate} and its child variant. */\nexport type CreateAngularGuardOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> =\n\t| CreateAngularGuardWithPlannerHostOptions<TAuthRequirement, TBehaviour>\n\t| CreateAngularGuardWithBehaviourOptions<TAuthRequirement, TBehaviour>;\n\nasync function runRouteGuard<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\troute: ActivatedRouteSnapshot,\n\tstate: RouterStateSnapshot,\n\thost: RequirementPlannerHost<TBehaviour>,\n\trouter: Router,\n): Promise<boolean | UrlTree> {\n\tconst segments = projectAngularRouteSegments<TAuthRequirement>(route);\n\tconst planner = RouteCompositionRequirementPlanner.fromRouteSegments(\n\t\thost,\n\t\tsegments,\n\t\t{ url: state.url },\n\t);\n\tconst result = await planner.runUntilSettled();\n\tswitch (result.outcome) {\n\t\tcase PipelineOutcome.Settled:\n\t\t\treturn true;\n\t\tcase PipelineOutcome.Blocked:\n\t\t\treturn false;\n\t\tcase PipelineOutcome.Redirect:\n\t\t\treturn router.parseUrl(result.location);\n\t}\n}\n\n/**\n * Create a `CanActivateFn` bridging the route chain to the requirement\n * planner pipeline.\n */\nexport function createAngularCanActivate<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\toptions?: CreateAngularGuardOptions<TAuthRequirement, TBehaviour>,\n): CanActivateFn {\n\treturn (route, state) => {\n\t\tconst securitydeptInjector = inject(SECURITYDEPT_INJECTOR, {\n\t\t\toptional: true,\n\t\t});\n\t\tconst parentHost = securitydeptInjector\n\t\t\t? injectRequirementPlannerHost<\n\t\t\t\t\tTAuthRequirement,\n\t\t\t\t\tRouteBehaviourContextExtra,\n\t\t\t\t\tTBehaviour\n\t\t\t\t>({ injector: securitydeptInjector })\n\t\t\t: null;\n\t\tconst host =\n\t\t\toptions?.plannerHost ??\n\t\t\t(options?.behaviour\n\t\t\t\t? RequirementPlannerHost.fromBehaviour(\n\t\t\t\t\t\ttypeof options.behaviour === \"function\"\n\t\t\t\t\t\t\t? options.behaviour()\n\t\t\t\t\t\t\t: options.behaviour,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparent: parentHost ?? undefined,\n\t\t\t\t\t\t\tenvironment:\n\t\t\t\t\t\t\t\tsecuritydeptInjector?.get(ENVIRONMENT_TOKEN, null) ?? undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: parentHost) ??\n\t\t\tRequirementPlannerHost.fromBehaviour({} as TBehaviour);\n\t\tconst router = inject(Router);\n\t\treturn runRouteGuard<TAuthRequirement, TBehaviour>(\n\t\t\troute,\n\t\t\tstate,\n\t\t\thost,\n\t\t\trouter,\n\t\t);\n\t};\n}\n\n/**\n * Create a `CanActivateChildFn` bridging the child route chain to the\n * requirement planner pipeline.\n */\nexport function createAngularCanActivateChild<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\toptions?: CreateAngularGuardOptions<TAuthRequirement, TBehaviour>,\n): CanActivateChildFn {\n\treturn (childRoute, state) => {\n\t\tconst injector = inject(SECURITYDEPT_INJECTOR, {\n\t\t\toptional: true,\n\t\t});\n\t\tconst parentHost = injector\n\t\t\t? injectRequirementPlannerHost<\n\t\t\t\t\tTAuthRequirement,\n\t\t\t\t\tRouteBehaviourContextExtra,\n\t\t\t\t\tTBehaviour\n\t\t\t\t>({ injector })\n\t\t\t: null;\n\t\tconst host =\n\t\t\toptions?.plannerHost ??\n\t\t\t(options?.behaviour\n\t\t\t\t? RequirementPlannerHost.fromBehaviour(\n\t\t\t\t\t\ttypeof options.behaviour === \"function\"\n\t\t\t\t\t\t\t? options.behaviour()\n\t\t\t\t\t\t\t: options.behaviour,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparent: parentHost ?? undefined,\n\t\t\t\t\t\t\tenvironment: injector?.get(ENVIRONMENT_TOKEN, null) ?? undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: parentHost) ??\n\t\t\tRequirementPlannerHost.fromBehaviour({} as TBehaviour);\n\t\tconst router = inject(Router);\n\t\treturn runRouteGuard<TAuthRequirement, TBehaviour>(\n\t\t\tchildRoute,\n\t\t\tstate,\n\t\t\thost,\n\t\t\trouter,\n\t\t);\n\t};\n}\n","// Angular secure route helpers — declarative route assembly\n//\n// Canonical import path:\n// import { secureRoute, secureRouteRoot } from \"@securitydept/client-angular\"\n//\n// Two composable helpers for wiring auth requirements onto Angular routes:\n// - secureRoute: writes requirement metadata into route `data` ONLY.\n// - secureRouteRoot: writes metadata AND attaches the canActivate /\n// canActivateChild guards (and, optionally, a scoped\n// RequirementPlannerHost provider).\n//\n// The split lets a single guarded root route cover a whole subtree: child\n// segments declare their own requirements via `secureRoute`, and the root's\n// canActivateChild folds the full chain through the planner.\n//\n// Architecture boundary:\n// - Does NOT own behaviour or token-set-specific policy.\n// - Delegates enforcement to createAngularCanActivate/Child.\n//\n// Stability: provisional\n\nimport { type Route } from \"@angular/router\";\nimport {\n\ttype AuthRequirement,\n\tprovideRequirementPlannerHost,\n\ttype RequirementBehaviourWithRouteContext,\n\ttype RequirementPlannerHost,\n\ttype RequirementPlannerHostBehaviour,\n\ttype RequirementsComposition,\n\ttype RouteBehaviourContextExtra,\n\ttype SecuritydeptRouteMetadata,\n\twriteSecuritydeptRouteMetadata,\n} from \"@securitydept/client\";\nimport { provideSecuritydept } from \"../injection\";\nimport {\n\tcreateAngularCanActivate,\n\tcreateAngularCanActivateChild,\n} from \"./route-guard\";\n\nexport interface SecureRouteSecurityOptions<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n> {\n\t/** Auth requirements declared on this route segment. */\n\trequirements?: readonly TAuthRequirement[];\n\t/** Composition strategy against the inherited chain (default: `merge`). */\n\tcomposition?: RequirementsComposition;\n\t/**\n\t * Explicit planner host for the guards on a root route. When omitted, the\n\t * guard resolves the nearest host from DI (or a self-managed default).\n\t */\n\tplannerHost?: RequirementPlannerHost<TBehaviour>;\n\t/**\n\t * Behaviour to provide as a scoped {@link RequirementPlannerHost} at the\n\t * root route. Mounted via `provideSecuritydept({ providers: [...] })`.\n\t */\n\tbehaviour?: RequirementPlannerHostBehaviour<\n\t\tTAuthRequirement,\n\t\tRouteBehaviourContextExtra,\n\t\tTBehaviour\n\t>;\n}\n\n/** Additional route config merged into the produced {@link Route}. */\nexport type SecureRouteConfig = Omit<Route, \"path\">;\n\nfunction writeRequirementData<TAuthRequirement extends AuthRequirement>(\n\tsecurity: SecureRouteSecurityOptions<TAuthRequirement>,\n\tbase: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n\tconst patch: SecuritydeptRouteMetadata<TAuthRequirement> = {};\n\tif (security.requirements !== undefined) {\n\t\tpatch.requirements = security.requirements;\n\t}\n\tif (security.composition !== undefined) {\n\t\tpatch.composition = security.composition;\n\t}\n\tif (Object.keys(patch).length === 0) {\n\t\treturn { ...(base ?? {}) };\n\t}\n\treturn writeSecuritydeptRouteMetadata(base, patch);\n}\n\n/**\n * Declare a secure route segment: writes requirement metadata into route\n * `data` only. No guard is attached — a guarded ancestor (see\n * {@link secureRouteRoot}) enforces the folded chain.\n */\nexport function secureRoute<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\tpath: string,\n\tsecurity: SecureRouteSecurityOptions<TAuthRequirement, TBehaviour>,\n\trouteOptions?: SecureRouteConfig,\n): Route {\n\treturn {\n\t\t...routeOptions,\n\t\tpath,\n\t\tdata: writeRequirementData(security, routeOptions?.data),\n\t};\n}\n\n/**\n * Declare a guarded root route: writes requirement metadata AND attaches\n * `canActivate` + `canActivateChild` guards bound to the requirement planner.\n *\n * When `security.behaviour` is set, a scoped {@link RequirementPlannerHost}\n * provider is mounted so descendant guards inherit it through DI.\n */\nexport function secureRouteRoot<\n\tTAuthRequirement extends AuthRequirement = AuthRequirement,\n\tTBehaviour extends Partial<\n\t\tRequirementBehaviourWithRouteContext<TAuthRequirement>\n\t> = Partial<RequirementBehaviourWithRouteContext<TAuthRequirement>>,\n>(\n\tpath: string,\n\tsecurity: SecureRouteSecurityOptions<TAuthRequirement, TBehaviour>,\n\trouteOptions?: SecureRouteConfig,\n): Route {\n\tconst guardOptions = security.plannerHost\n\t\t? { plannerHost: security.plannerHost }\n\t\t: undefined;\n\tconst providers = security.behaviour\n\t\t? [\n\t\t\t\t...(routeOptions?.providers ?? []),\n\t\t\t\tprovideSecuritydept({\n\t\t\t\t\tproviders: [\n\t\t\t\t\t\tprovideRequirementPlannerHost<\n\t\t\t\t\t\t\tTAuthRequirement,\n\t\t\t\t\t\t\tRouteBehaviourContextExtra,\n\t\t\t\t\t\t\tTBehaviour\n\t\t\t\t\t\t>(security.behaviour),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t]\n\t\t: routeOptions?.providers;\n\tconst route: Route = {\n\t\t...routeOptions,\n\t\tpath,\n\t\tdata: writeRequirementData(security, routeOptions?.data),\n\t\tcanActivate: [\n\t\t\t...(routeOptions?.canActivate ?? []),\n\t\t\tcreateAngularCanActivate<TAuthRequirement, TBehaviour>(guardOptions),\n\t\t],\n\t\tcanActivateChild: [\n\t\t\t...(routeOptions?.canActivateChild ?? []),\n\t\t\tcreateAngularCanActivateChild<TAuthRequirement, TBehaviour>(guardOptions),\n\t\t],\n\t};\n\tif (providers) {\n\t\troute.providers = providers;\n\t}\n\treturn route;\n}\n","// Angular Router trait adapter\n//\n// Canonical import path:\n// import { createRouterForAngular } from \"@securitydept/client-angular\"\n//\n// Projects an Angular `Router` (or any navigation-capable object) onto the\n// framework-agnostic `RouterTrait` (currentUrl + navigate) from\n// `@securitydept/client`. Adopters use this to give SDK primitives a way to\n// read the current URL and start navigations without depending on Angular.\n//\n// Architecture boundary:\n// - Does NOT own the Angular router, guards, or navigation lifecycle.\n// - Does NOT read auth requirements or run planners (see route-guard.ts).\n// - Does NOT carry token-set-specific mapping or policy.\n//\n// Stability: provisional\n\nimport {\n\tClientError,\n\tClientErrorKind,\n\ttype EnvironmentValidators,\n\tRouterNavigationMode,\n\ttype RouterNavigationRequest,\n\ttype RouterTrait,\n\tthrowValidationClientError,\n\tUriReferenceString,\n\tUriReferenceStringSchema,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"@securitydept/client\";\nimport {\n\tcreateRouterForNativeWeb,\n\ttype RouterForNativeWebCreateOptions,\n} from \"@securitydept/client/web\";\nimport { type as defineType } from \"arktype\";\n\n/**\n * Minimal navigation surface required from an Angular `Router`.\n *\n * The real `@angular/router` `Router` satisfies this shape, so adopters pass\n * their injected `Router` directly.\n */\nexport interface AngularRouterNavigationLike {\n\turl?: string;\n\tnavigateByUrl(\n\t\turl: string,\n\t\toptions?: { replaceUrl?: boolean; state?: unknown },\n\t): Promise<boolean> | boolean;\n}\n\n/** Options for {@link createRouterForAngular}. */\nexport interface CreateRouterForAngularOptions\n\textends RouterForNativeWebCreateOptions {\n\t/** The Angular `Router` (or a compatible navigation object). */\n\trouter: AngularRouterNavigationLike;\n\t/** Override the current URL. Defaults to `router.url`. */\n\tcurrentUrl?: string | null;\n}\n\nexport interface ResolvedRouterForAngularCreateOptions {\n\trouter: AngularRouterNavigationLike;\n\tcurrentUrl: string | null;\n}\n\nexport const AngularRouterNavigationLikeSchema = defineType({\n\turl: \"string?\",\n\tnavigateByUrl: \"Function\",\n});\n\nconst ResolvedRouterForAngularCreateOptionsSchema = defineType({\n\trouter: AngularRouterNavigationLikeSchema,\n\tcurrentUrl: UriReferenceStringSchema.or(\"null\"),\n});\n\n/**\n * Create a {@link RouterTrait} backed by an Angular `Router`.\n *\n * @example\n * ```ts\n * const routerTrait = createRouterForAngular({\n * router: inject(Router),\n * location: window.location,\n * });\n * ```\n */\nexport function createRouterForAngular(\n\toptions: CreateRouterForAngularOptions &\n\t\tWithTraitInputValidator<Pick<EnvironmentValidators, \"router\">>,\n): RouterTrait {\n\tconst routerInput = options.router as\n\t\t| AngularRouterNavigationLike\n\t\t| null\n\t\t| undefined;\n\tconst resolvedCreateOptions: ResolvedRouterForAngularCreateOptions = {\n\t\trouter: options.router,\n\t\tget currentUrl() {\n\t\t\treturn Object.hasOwn(options, \"currentUrl\")\n\t\t\t\t? (options.currentUrl ?? null)\n\t\t\t\t: (routerInput?.url ?? null);\n\t\t},\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: ResolvedRouterForAngularCreateOptionsSchema,\n\t\tvalidator: options.validators?.router,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: \"client_angular.router.invalid_router_options\",\n\t\t\t\tsource: \"client-angular\",\n\t\t\t\tmessagePrefix:\n\t\t\t\t\t\"createRouterForAngular could not validate routerForAngularCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst { router } = resolvedCreateOptions;\n\tconst nativeWebRouter = createRouterForNativeWeb(\n\t\tprojectNativeWebRouterCreateOptions(options),\n\t);\n\treturn {\n\t\tcurrentUrl() {\n\t\t\tconst currentUrl = resolvedCreateOptions.currentUrl;\n\t\t\treturn currentUrl == null ? null : UriReferenceString.parse(currentUrl);\n\t\t},\n\t\tasync navigate(request: RouterNavigationRequest) {\n\t\t\tif (request.mode === RouterNavigationMode.External) {\n\t\t\t\tif (!nativeWebRouter) {\n\t\t\t\t\tthrow new ClientError({\n\t\t\t\t\t\tkind: ClientErrorKind.Configuration,\n\t\t\t\t\t\tcode: \"client_angular.router.native_web_router_unavailable\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Angular router cannot perform external navigation without a native web router\",\n\t\t\t\t\t\tsource: \"client-angular.router\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait nativeWebRouter.navigate(request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait router.navigateByUrl(request.url.toString(), {\n\t\t\t\treplaceUrl: request.mode === RouterNavigationMode.Replace,\n\t\t\t\tstate: request.state,\n\t\t\t});\n\t\t},\n\t};\n}\n\nfunction projectNativeWebRouterCreateOptions(\n\toptions: CreateRouterForAngularOptions,\n): RouterForNativeWebCreateOptions {\n\treturn {\n\t\t...(Object.hasOwn(options, \"navigation\")\n\t\t\t? { navigation: options.navigation }\n\t\t\t: {}),\n\t\t...(Object.hasOwn(options, \"location\")\n\t\t\t? { location: options.location }\n\t\t\t: {}),\n\t\t...(Object.hasOwn(options, \"history\") ? { history: options.history } : {}),\n\t\t...(Object.hasOwn(options, \"window\") ? { window: options.window } : {}),\n\t};\n}\n","import {\n\ttype HttpResponse as AngularHttpResponse,\n\tHttpErrorResponse,\n\ttype HttpHeaders,\n} from \"@angular/common/http\";\nimport {\n\ttype BaseTransportTrait,\n\ttype CancellationTokenTrait,\n\tClientError,\n\tClientErrorKind,\n\tClientErrorSource,\n\ttype HttpRequest,\n\ttype HttpResponse,\n\ttype TraitInputValidator,\n\tTransportErrorCode,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"@securitydept/client\";\nimport { type as defineType } from \"arktype\";\nimport { firstValueFrom, from, type Observable, takeUntil } from \"rxjs\";\n\nexport interface AngularHttpClientLike {\n\trequest(\n\t\tmethod: string,\n\t\turl: string,\n\t\toptions: {\n\t\t\tbody?: unknown;\n\t\t\theaders?: Record<string, string>;\n\t\t\tobserve: \"response\";\n\t\t\tresponseType: \"text\";\n\t\t},\n\t): Observable<AngularHttpResponse<string>>;\n}\n\nexport interface BaseTransportForAngularCreateOptions {\n\thttpClient: AngularHttpClientLike;\n\tbaseUrl?: string | URL;\n}\n\nexport const BaseTransportForAngularCreateOptionsSchema = defineType({\n\thttpClient: {\n\t\trequest: \"Function\",\n\t},\n\tbaseUrl: \"unknown\",\n});\n\nexport function createBaseTransportForAngular(\n\toptions: BaseTransportForAngularCreateOptions &\n\t\tWithTraitInputValidator<TraitInputValidator>,\n): BaseTransportTrait {\n\tconst resolvedCreateOptions = {\n\t\thttpClient: options.httpClient,\n\t\tbaseUrl: options.baseUrl,\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: BaseTransportForAngularCreateOptionsSchema,\n\t\tvalidator: options.validators,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: TransportErrorCode.InvalidAngularOptions,\n\t\t\t\tsource: \"client-angular\",\n\t\t\t\tmessagePrefix:\n\t\t\t\t\t\"createBaseTransportForAngular could not validate transportForAngularCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst { httpClient, baseUrl } = resolvedCreateOptions;\n\n\treturn {\n\t\tasync execute(request: HttpRequest): Promise<HttpResponse> {\n\t\t\tconst requestUrl = baseUrl\n\t\t\t\t? new URL(request.url, baseUrl).toString()\n\t\t\t\t: request.url;\n\t\t\tconst requestOptions = {\n\t\t\t\theaders: request.headers,\n\t\t\t\tobserve: \"response\" as const,\n\t\t\t\tresponseType: \"text\" as const,\n\t\t\t\t...(request.body !== undefined &&\n\t\t\t\trequest.method !== \"GET\" &&\n\t\t\t\trequest.method !== \"HEAD\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tbody:\n\t\t\t\t\t\t\t\ttypeof request.body === \"string\"\n\t\t\t\t\t\t\t\t\t? request.body\n\t\t\t\t\t\t\t\t\t: JSON.stringify(request.body),\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst responseSource = request.cancellationToken\n\t\t\t\t\t? httpClient\n\t\t\t\t\t\t\t.request(request.method, requestUrl, requestOptions)\n\t\t\t\t\t\t\t.pipe(takeUntil(from(request.cancellationToken)))\n\t\t\t\t\t: httpClient.request(request.method, requestUrl, requestOptions);\n\t\t\t\tconst response = await firstValueFrom(responseSource);\n\t\t\t\ttry {\n\t\t\t\t\treturn angularResponseToHttpResponse(response);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new ClientError({\n\t\t\t\t\t\tkind: ClientErrorKind.Protocol,\n\t\t\t\t\t\tmessage: \"The HTTP response body could not be decoded\",\n\t\t\t\t\t\tcode: TransportErrorCode.ResponseDecodeFailed,\n\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof HttpErrorResponse && error.status !== 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn angularErrorResponseToHttpResponse(error);\n\t\t\t\t\t} catch (decodeError) {\n\t\t\t\t\t\tthrow new ClientError({\n\t\t\t\t\t\t\tkind: ClientErrorKind.Protocol,\n\t\t\t\t\t\t\tmessage: \"The HTTP response body could not be decoded\",\n\t\t\t\t\t\t\tcode: TransportErrorCode.ResponseDecodeFailed,\n\t\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\t\tcause: decodeError,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst normalized = normalizeAngularTransportError(\n\t\t\t\t\trequest.cancellationToken,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t\tif (normalized instanceof ClientError) {\n\t\t\t\t\tthrow normalized;\n\t\t\t\t}\n\t\t\t\tthrow new ClientError({\n\t\t\t\t\tkind: ClientErrorKind.Transport,\n\t\t\t\t\tmessage: \"The HTTP request could not reach the remote service\",\n\t\t\t\t\tcode: TransportErrorCode.RequestFailed,\n\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\tretryable: true,\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction angularResponseToHttpResponse(\n\tresponse: AngularHttpResponse<string>,\n): HttpResponse {\n\treturn {\n\t\tstatus: response.status,\n\t\theaders: angularHeadersToRecord(response.headers),\n\t\tbody: parseAngularResponseBody(\n\t\t\tresponse.status,\n\t\t\tresponse.headers,\n\t\t\tresponse.body,\n\t\t),\n\t};\n}\n\nfunction angularErrorResponseToHttpResponse(\n\terror: HttpErrorResponse,\n): HttpResponse {\n\treturn {\n\t\tstatus: error.status,\n\t\theaders: angularHeadersToRecord(error.headers),\n\t\tbody: parseAngularResponseBody(error.status, error.headers, error.error),\n\t};\n}\n\nfunction angularHeadersToRecord(headers: HttpHeaders): Record<string, string> {\n\tconst responseHeaders: Record<string, string> = {};\n\tfor (const key of headers.keys()) {\n\t\tconst value = headers.get(key);\n\t\tif (value !== null) {\n\t\t\tresponseHeaders[key] = value;\n\t\t}\n\t}\n\treturn responseHeaders;\n}\n\nfunction parseAngularResponseBody(\n\tstatus: number,\n\theaders: HttpHeaders,\n\tbody: unknown,\n): unknown {\n\tconst contentType = headers.get(\"content-type\");\n\tif (contentType?.includes(\"application/json\") && typeof body === \"string\") {\n\t\treturn body.length > 0 ? JSON.parse(body) : undefined;\n\t}\n\tif (status !== 302 && status !== 303 && status !== 301) {\n\t\treturn body;\n\t}\n\treturn undefined;\n}\n\nfunction normalizeAngularTransportError(\n\ttoken: CancellationTokenTrait | undefined,\n\terror: unknown,\n): unknown {\n\tif (!token?.isCancellationRequested) {\n\t\treturn error;\n\t}\n\treturn token.cancellationError ?? error;\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport {\n\tDestroyRef,\n\tInjectionToken,\n\tInjector,\n\tOptional,\n\ttype Provider,\n} from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport {\n\tcreateProviderIfTokenMissing,\n\tcreateSecuritydeptDestroyRef,\n\ttype FoundationEnvironment,\n\tgetSecuritydeptProviderToken,\n\tnotMissingProvider,\n\tROUTER_TRAIT_TOKEN,\n\tSecuritydeptDestroyRef,\n\ttype SecuritydeptProvider,\n\tTRANSPORT_TRAIT_TOKEN,\n} from \"@securitydept/client\";\nimport {\n\ttype ProvideSecuritydeptOptions,\n\tSECURITYDEPT_INJECTOR,\n} from \"./injection\";\nimport {\n\ttype CreateRouterForAngularOptions,\n\tcreateRouterForAngular,\n} from \"./router\";\nimport {\n\ttype BaseTransportForAngularCreateOptions,\n\tcreateBaseTransportForAngular,\n} from \"./transport\";\n\nexport const ENVIRONMENT = new InjectionToken<FoundationEnvironment>(\n\t\"ENVIRONMENT\",\n);\n\nexport const ENVIRONMENT_PROVIDER = new InjectionToken<SecuritydeptProvider>(\n\t\"ENVIRONMENT_PROVIDER\",\n);\n\nexport type EnvironmentCreatorOptions = {\n\tproviders?: readonly SecuritydeptProvider[];\n};\n\nexport type EnvironmentCreator<\n\tTOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n> = (options: TOptions) => TEnvironment;\n\nexport type CreateEnvironmentForAngularOptions<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n> = Omit<\n\tTBaseOptions,\n\t| \"providers\"\n\t| \"routerForAngularCreateOptions\"\n\t| \"transportForAngularCreateOptions\"\n\t| \"injectorForAngularProvider\"\n\t| \"createBaseEnvironment\"\n> & {\n\tcreateBaseEnvironment: EnvironmentCreator<TBaseOptions, TEnvironment>;\n\trouterForAngularCreateOptions: CreateRouterForAngularOptions;\n\ttransportForAngularCreateOptions: BaseTransportForAngularCreateOptions;\n\tinjectorForAngularProvider?: Injector;\n\tproviders?: readonly SecuritydeptProvider[];\n};\n\nexport type ProvideEnvironmentOptions<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n> = Omit<\n\tCreateEnvironmentForAngularOptions<TBaseOptions, TEnvironment>,\n\t| \"routerForAngularCreateOptions\"\n\t| \"transportForAngularCreateOptions\"\n\t| \"injectorForAngularProvider\"\n\t| \"providers\"\n> &\n\tProvideSecuritydeptOptions & {\n\t\trouterForAngularCreateOptions?: Partial<CreateRouterForAngularOptions>;\n\t\ttransportForAngularCreateOptions?: Partial<BaseTransportForAngularCreateOptions>;\n\t};\n\nexport function createEnvironmentForAngular<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n>(\n\toptions: CreateEnvironmentForAngularOptions<TBaseOptions, TEnvironment>,\n): TEnvironment {\n\tconst {\n\t\tcreateBaseEnvironment,\n\t\trouterForAngularCreateOptions,\n\t\ttransportForAngularCreateOptions,\n\t\tinjectorForAngularProvider,\n\t\tproviders = [],\n\t\t...baseOptions\n\t} = options;\n\tconst externalProviderTokens = new Set(\n\t\tproviders.map((provider) => getSecuritydeptProviderToken(provider)),\n\t);\n\tconst angularProviders: SecuritydeptProvider[] = [\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tROUTER_TRAIT_TOKEN,\n\t\t\t() => ({\n\t\t\t\tprovide: ROUTER_TRAIT_TOKEN,\n\t\t\t\tuseValue: createRouterForAngular(routerForAngularCreateOptions),\n\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tTRANSPORT_TRAIT_TOKEN,\n\t\t\t() => ({\n\t\t\t\tprovide: TRANSPORT_TRAIT_TOKEN,\n\t\t\t\tuseValue: createBaseTransportForAngular(\n\t\t\t\t\ttransportForAngularCreateOptions,\n\t\t\t\t),\n\t\t\t}),\n\t\t),\n\t\tinjectorForAngularProvider\n\t\t\t? createProviderIfTokenMissing(externalProviderTokens, Injector, () => ({\n\t\t\t\t\tprovide: Injector,\n\t\t\t\t\tuseValue: injectorForAngularProvider,\n\t\t\t\t}))\n\t\t\t: null,\n\t].filter(notMissingProvider) as SecuritydeptProvider[];\n\n\treturn createBaseEnvironment({\n\t\t...(baseOptions as unknown as Omit<TBaseOptions, \"providers\">),\n\t\tproviders: [...angularProviders, ...providers],\n\t} as unknown as TBaseOptions);\n}\n\nexport function provideEnvironment<\n\tTBaseOptions extends EnvironmentCreatorOptions,\n\tTEnvironment extends FoundationEnvironment,\n>(options: ProvideEnvironmentOptions<TBaseOptions, TEnvironment>): Provider[] {\n\treturn [\n\t\t{\n\t\t\tprovide: ENVIRONMENT,\n\t\t\tuseFactory: (\n\t\t\t\trouter: Router,\n\t\t\t\thttpClient: HttpClient,\n\t\t\t\tinjector: Injector,\n\t\t\t\tdestroyRef: DestroyRef,\n\t\t\t\tproviders: readonly SecuritydeptProvider[] | null,\n\t\t\t) => {\n\t\t\t\tconst {\n\t\t\t\t\tautoCreateDestroyRef,\n\t\t\t\t\tproviders: optionProviders,\n\t\t\t\t\t...environmentOptions\n\t\t\t\t} = options;\n\t\t\t\tconst securitydeptDestroyRef =\n\t\t\t\t\tautoCreateDestroyRef === false\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: createSecuritydeptDestroyRef();\n\t\t\t\tif (securitydeptDestroyRef) {\n\t\t\t\t\tdestroyRef.onDestroy(() => securitydeptDestroyRef.dispose());\n\t\t\t\t}\n\t\t\t\tconst environmentProviders = [\n\t\t\t\t\t...(optionProviders ?? []),\n\t\t\t\t\t...(providers ?? []),\n\t\t\t\t\t...(securitydeptDestroyRef\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tprovide: SecuritydeptDestroyRef,\n\t\t\t\t\t\t\t\t\tuseValue: securitydeptDestroyRef,\n\t\t\t\t\t\t\t\t} satisfies SecuritydeptProvider,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t];\n\t\t\t\treturn createEnvironmentForAngular({\n\t\t\t\t\t...environmentOptions,\n\t\t\t\t\trouterForAngularCreateOptions: {\n\t\t\t\t\t\trouter,\n\t\t\t\t\t\t...environmentOptions.routerForAngularCreateOptions,\n\t\t\t\t\t},\n\t\t\t\t\ttransportForAngularCreateOptions: {\n\t\t\t\t\t\thttpClient,\n\t\t\t\t\t\t...environmentOptions.transportForAngularCreateOptions,\n\t\t\t\t\t},\n\t\t\t\t\tinjectorForAngularProvider: injector,\n\t\t\t\t\tproviders: environmentProviders,\n\t\t\t\t} as unknown as CreateEnvironmentForAngularOptions<\n\t\t\t\t\tTBaseOptions,\n\t\t\t\t\tTEnvironment\n\t\t\t\t>);\n\t\t\t},\n\t\t\tdeps: [\n\t\t\t\tRouter,\n\t\t\t\tHttpClient,\n\t\t\t\tInjector,\n\t\t\t\tDestroyRef,\n\t\t\t\t[new Optional(), ENVIRONMENT_PROVIDER],\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tprovide: SECURITYDEPT_INJECTOR,\n\t\t\tuseFactory: (environment: FoundationEnvironment) => environment.injector,\n\t\t\tdeps: [ENVIRONMENT],\n\t\t},\n\t];\n}\n\nexport function provideEnvironmentProvider(\n\tprovider: SecuritydeptProvider,\n): Provider {\n\treturn {\n\t\tprovide: ENVIRONMENT_PROVIDER,\n\t\tuseValue: provider,\n\t\tmulti: true,\n\t};\n}\n","import { type Signal } from \"@angular/core\";\nimport {\n\trxResource,\n\ttype ToSignalOptions,\n\ttoSignal,\n} from \"@angular/core/rxjs-interop\";\nimport {\n\ttype InteropObservableTrait,\n\tSYMBOL_OBSERVABLE,\n} from \"@securitydept/client\";\n\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n): Signal<T | undefined>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T | undefined>> & {\n\t\tinitialValue?: undefined;\n\t\trequireSync?: false;\n\t},\n): Signal<T | undefined>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T | null>> & {\n\t\tinitialValue?: null;\n\t\trequireSync?: false;\n\t},\n): Signal<T | null>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T>> & {\n\t\tinitialValue?: undefined;\n\t\trequireSync: true;\n\t},\n): Signal<T>;\nexport function toNgSignal<T, const U extends T>(\n\tsource: InteropObservableTrait<T>,\n\toptions: NoInfer<ToSignalOptions<T | U>> & {\n\t\tinitialValue: U;\n\t\trequireSync?: false;\n\t},\n): Signal<T | U>;\nexport function toNgSignal<T>(\n\tsource: InteropObservableTrait<T>,\n\toptions?: ToSignalOptions<T | undefined>,\n): Signal<T | undefined> {\n\treturn toSignal(source[SYMBOL_OBSERVABLE](), options as never) as Signal<\n\t\tT | undefined\n\t>;\n}\n\nexport const toNgResource = rxResource;\n","/*\n * Public API Surface of @securitydept/client-angular\n */\n\nexport * from \"./lib/auth-coordination\";\nexport * from \"./lib/environment\";\nexport * from \"./lib/injection\";\nexport * from \"./lib/interop\";\nexport * from \"./lib/router\";\nexport * from \"./lib/transport\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["defineType"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@securitydept/client-angular",
3
- "version": "0.3.0-beta.5",
3
+ "version": "0.3.0-beta.6",
4
4
  "description": "Client Angular of the SecurityDept TypeScript SDK, a layered authentication and authorization toolkit built as reusable Rust crates, a TypeScript client SDK workspace, and reference server/web apps.",
5
5
  "author": "Zhou Yeheng <root@aitiotekt.com>",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  "@angular/core": ">=19.0.0",
46
46
  "@angular/router": ">=19.0.0",
47
47
  "rxjs": ">=7.0.0",
48
- "@securitydept/client": "0.3.0-beta.5"
48
+ "@securitydept/client": "0.3.0-beta.6"
49
49
  },
50
50
  "module": "fesm2022/securitydept-client-angular.mjs",
51
51
  "typings": "types/securitydept-client-angular.d.ts",
@@ -2,6 +2,7 @@ import { CanActivateFn, CanActivateChildFn, ActivatedRouteSnapshot, Route } from
2
2
  import { AuthRequirement, RequirementBehaviourWithRouteContext, RequirementPlannerHost, RequirementPlannerHostBehaviour, RouteBehaviourContextExtra, RouteTreeSegment, RequirementsComposition, SecuritydeptProvider, SecuritydeptInjector, WithTraitInputValidator, EnvironmentValidators, RouterTrait, TraitInputValidator, BaseTransportTrait, FoundationEnvironment, InteropObservableTrait } from '@securitydept/client';
3
3
  import { InjectionToken, EnvironmentProviders, Injector, Provider, Signal } from '@angular/core';
4
4
  import * as arktype_internal_variants_object_ts from 'arktype/internal/variants/object.ts';
5
+ import { RouterForNativeWebCreateOptions } from '@securitydept/client/web';
5
6
  import { HttpResponse } from '@angular/common/http';
6
7
  import { Observable } from 'rxjs';
7
8
  import { rxResource, ToSignalOptions } from '@angular/core/rxjs-interop';
@@ -104,7 +105,7 @@ interface AngularRouterNavigationLike {
104
105
  }): Promise<boolean> | boolean;
105
106
  }
106
107
  /** Options for {@link createRouterForAngular}. */
107
- interface CreateRouterForAngularOptions {
108
+ interface CreateRouterForAngularOptions extends RouterForNativeWebCreateOptions {
108
109
  /** The Angular `Router` (or a compatible navigation object). */
109
110
  router: AngularRouterNavigationLike;
110
111
  /** Override the current URL. Defaults to `router.url`. */
@@ -123,7 +124,10 @@ declare const AngularRouterNavigationLikeSchema: arktype_internal_variants_objec
123
124
  *
124
125
  * @example
125
126
  * ```ts
126
- * const routerTrait = createRouterForAngular({ router: inject(Router) });
127
+ * const routerTrait = createRouterForAngular({
128
+ * router: inject(Router),
129
+ * location: window.location,
130
+ * });
127
131
  * ```
128
132
  */
129
133
  declare function createRouterForAngular(options: CreateRouterForAngularOptions & WithTraitInputValidator<Pick<EnvironmentValidators, "router">>): RouterTrait;
@@ -1 +1 @@
1
- {"version":3,"file":"securitydept-client-angular.d.ts","sources":["../../src/lib/auth-coordination/route-guard.ts","../../src/lib/auth-coordination/route-metadata.ts","../../src/lib/auth-coordination/secure-routes.ts","../../src/lib/injection.ts","../../src/lib/router.ts","../../src/lib/transport.ts","../../src/lib/environment.ts","../../src/lib/interop.ts"],"mappings":"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","names":["AngularHttpResponse"]}
1
+ {"version":3,"file":"securitydept-client-angular.d.ts","sources":["../../src/lib/auth-coordination/route-guard.ts","../../src/lib/auth-coordination/route-metadata.ts","../../src/lib/auth-coordination/secure-routes.ts","../../src/lib/injection.ts","../../src/lib/router.ts","../../src/lib/transport.ts","../../src/lib/environment.ts","../../src/lib/interop.ts"],"mappings":"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","names":["AngularHttpResponse"]}