@securitydept/client 0.3.0-beta.6 → 0.3.0-beta.7

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,4 +1,4 @@
1
- import { A as RxEventSubject, F as SYMBOL_DISPOSE, G as UserRecovery, H as ClientErrorKind, M as isInteropObservableTrait, U as ClientErrorSource, V as ClientError, j as SYMBOL_OBSERVABLE, k as RxEventStream } from "./rx-B3OU17wu.mjs";
1
+ import { A as RxEventSubject, F as SYMBOL_DISPOSE, H as ClientError, K as UserRecovery, M as isInteropObservableTrait, U as ClientErrorKind, W as ClientErrorSource, j as SYMBOL_OBSERVABLE, k as RxEventStream } from "./rx-DM6Ouv-m.mjs";
2
2
  import { v7 } from "uuid";
3
3
  import { InjectionToken, Injector, Optional, ReflectiveInjector } from "injection-js";
4
4
  import { EMPTY, from, fromEventPattern, map, merge, of } from "rxjs";
@@ -340,7 +340,9 @@ const SpanCreateOptionsSchema = type({
340
340
  const SpanTraitSchema = type({
341
341
  id: "string",
342
342
  fork: "Function",
343
- attributes: "object"
343
+ getAttributes: "Function",
344
+ getRootToNodePath: "Function",
345
+ getRootToNodeAttributes: "Function"
344
346
  });
345
347
  const SPAN_TRAIT_TOKEN = new SecuritydeptInjectionToken("SPAN_TRAIT_TOKEN");
346
348
  //#endregion
@@ -351,26 +353,63 @@ function createDefaultSpanId() {
351
353
  var DefaultSpan = class DefaultSpan {
352
354
  id;
353
355
  parent;
354
- _attributes;
356
+ _sharedAttributes;
357
+ _providerAttributes = /* @__PURE__ */ new Map();
355
358
  _idFactory;
356
- get attributes() {
357
- return this._attributes;
358
- }
359
359
  constructor(parent, idFactory, attributes) {
360
360
  this._idFactory = idFactory;
361
361
  this.id = idFactory();
362
362
  this.parent = parent;
363
- this._attributes = attributes;
363
+ this._sharedAttributes = attributes;
364
364
  }
365
365
  static root(options = {}) {
366
- return new DefaultSpan(void 0, options.idFactory ?? createDefaultSpanId, Object.freeze({ ...options.attributes ?? {} }));
366
+ return new DefaultSpan(void 0, options.idFactory ?? createDefaultSpanId, { ...options.attributes ?? {} });
367
367
  }
368
368
  fork(options = {}) {
369
- return new DefaultSpan(this, options.idFactory ?? this._idFactory, Object.freeze({ ...options.attributes }));
369
+ return new DefaultSpan(this, options.idFactory ?? this._idFactory, { ...options.attributes });
370
+ }
371
+ getAttributes(options) {
372
+ if (!options) return this._sharedAttributes;
373
+ const providerAttributes = this._providerAttributes.get(options.providerId) ?? {};
374
+ if (options.withShared === false) return providerAttributes;
375
+ return {
376
+ ...this._sharedAttributes,
377
+ ...providerAttributes
378
+ };
379
+ }
380
+ getRootToNodePath(options = {}) {
381
+ const path = [];
382
+ let current = options.skipSelf ? this.parent : this;
383
+ while (current) {
384
+ path.push(current);
385
+ current = current.parent;
386
+ }
387
+ return path.reverse();
388
+ }
389
+ getRootToNodeAttributes(options = {}) {
390
+ const path = this.getRootToNodePath({ skipSelf: options.skipSelf });
391
+ const frames = [];
392
+ for (const span of path) {
393
+ const attributes = options.providerId !== void 0 ? span.getAttributes({ providerId: options.providerId }) : span.getAttributes();
394
+ if (Object.keys(attributes).length === 0) continue;
395
+ frames.push({
396
+ spanId: span.id,
397
+ ...span.parent ? { parentSpanId: span.parent.id } : {},
398
+ attributes
399
+ });
400
+ }
401
+ return frames;
370
402
  }
371
- setAttributes(attributes) {
372
- this._attributes = Object.freeze({
373
- ...this._attributes,
403
+ setAttributes(attributes, options = {}) {
404
+ if (options.providerId === void 0) {
405
+ this._sharedAttributes = {
406
+ ...this._sharedAttributes,
407
+ ...attributes
408
+ };
409
+ return;
410
+ }
411
+ this._providerAttributes.set(options.providerId, {
412
+ ...this._providerAttributes.get(options.providerId),
374
413
  ...attributes
375
414
  });
376
415
  }
@@ -717,18 +756,15 @@ function createTracing(options) {
717
756
  })
718
757
  });
719
758
  const subject = new RxEventSubject();
720
- const events = subject;
721
- const subscriptions = [];
722
- for (const subscriber of resolvedCreateOptions.subscribers) subscriptions.push(events.subscribe({ next(event) {
723
- subscriber.record(event);
724
- } }));
759
+ let subscribers = resolvedCreateOptions.subscribers;
725
760
  return {
726
761
  record(event) {
762
+ for (const subscriber of subscribers) subscriber.record(event);
727
763
  subject.next(event);
728
764
  },
729
- events,
765
+ events: subject,
730
766
  dispose() {
731
- for (const subscription of subscriptions.splice(0)) subscription.unsubscribe();
767
+ subscribers = [];
732
768
  },
733
769
  [SYMBOL_DISPOSE]() {
734
770
  this.dispose();
@@ -749,6 +785,7 @@ const OperationTraceEventType = {
749
785
  Error: "operation.error",
750
786
  Ended: "operation.ended"
751
787
  };
788
+ const TRACING_SPAN_ATTRIBUTE_PROVIDER_ID = "@securitydept/client/tracing";
752
789
  const TracingTraitSchema = type({
753
790
  record: "Function",
754
791
  dispose: "Function",
@@ -947,6 +984,6 @@ function createFoundationEnvironmentUnit() {
947
984
  };
948
985
  }
949
986
  //#endregion
950
- export { appendOrReplaceCompatFragment as A, validateWithSchemaSync as B, IDLE_CALLBACK_TRAIT_TOKEN as C, RouterNavigationMode as D, RouterNavigationIntent as E, PopupAttachFailureReason as F, PARENT_INJECTOR_TOKEN as G, EventSourceKind as H, formatValidationFailure as I, SecurityDeptOptional as J, SecuritydeptInjector as K, throwValidationClientError as L, parseCompatFragment as M, takeCompatFragment as N, takeCompatFragmentFromRouter as O, POPUP_TRAIT_TOKEN as P, notMissingProvider as Q, validateTraitInput as R, SPAN_TRAIT_TOKEN as S, ROUTER_TRAIT_TOKEN as T, isEventStreamTrait as U, PAGE_LIFECYCLE_TRAIT_TOKEN as V, INJECTOR_TOKEN as W, createProviderIfTokenMissing as X, SecuritydeptInjectionToken as Y, getSecuritydeptProviderToken as Z, abortSignalToCancellationToken as _, TracingLevel as a, abortSignalToEventStream as b, PERSISTENT_STORAGE_TRAIT_TOKEN as c, StorageChangeEventOrigin as d, FetchTransportRedirectKind as f, createTimeForStd as g, TransportErrorCode as h, TRACING_TRAIT_TOKEN as i, isCompatFragmentBlock as j, SECURITYDEPT_COMPAT_FRAGMENT_VERSION as k, REALM_STORAGE_TRAIT_TOKEN as l, TRANSPORT_TRAIT_TOKEN as m, ENVIRONMENT_TOKEN as n, createTracing as o, createBaseTransportForStdFetch as p, toRuntimeInjector as q, OperationTraceEventType as r, createInMemoryRecordStore as s, createFoundationEnvironment as t, SESSION_STORAGE_TRAIT_TOKEN as u, cancellationTokenToAbortSignal as v, TIME_TRAIT_TOKEN as w, createRootSpan as x, normalizeAbortError as y, validateWithSchema as z };
987
+ export { notMissingProvider as $, SECURITYDEPT_COMPAT_FRAGMENT_VERSION as A, validateWithSchema as B, SPAN_TRAIT_TOKEN as C, RouterNavigationIntent as D, ROUTER_TRAIT_TOKEN as E, POPUP_TRAIT_TOKEN as F, INJECTOR_TOKEN as G, PAGE_LIFECYCLE_TRAIT_TOKEN as H, PopupAttachFailureReason as I, toRuntimeInjector as J, PARENT_INJECTOR_TOKEN as K, formatValidationFailure as L, isCompatFragmentBlock as M, parseCompatFragment as N, RouterNavigationMode as O, takeCompatFragment as P, getSecuritydeptProviderToken as Q, throwValidationClientError as R, createRootSpan as S, TIME_TRAIT_TOKEN as T, EventSourceKind as U, validateWithSchemaSync as V, isEventStreamTrait as W, SecuritydeptInjectionToken as X, SecurityDeptOptional as Y, createProviderIfTokenMissing as Z, createTimeForStd as _, TRACING_TRAIT_TOKEN as a, normalizeAbortError as b, createInMemoryRecordStore as c, SESSION_STORAGE_TRAIT_TOKEN as d, StorageChangeEventOrigin as f, TransportErrorCode as g, TRANSPORT_TRAIT_TOKEN as h, TRACING_SPAN_ATTRIBUTE_PROVIDER_ID as i, appendOrReplaceCompatFragment as j, takeCompatFragmentFromRouter as k, PERSISTENT_STORAGE_TRAIT_TOKEN as l, createBaseTransportForStdFetch as m, ENVIRONMENT_TOKEN as n, TracingLevel as o, FetchTransportRedirectKind as p, SecuritydeptInjector as q, OperationTraceEventType as r, createTracing as s, createFoundationEnvironment as t, REALM_STORAGE_TRAIT_TOKEN as u, abortSignalToCancellationToken as v, IDLE_CALLBACK_TRAIT_TOKEN as w, abortSignalToEventStream as x, cancellationTokenToAbortSignal as y, validateTraitInput as z };
951
988
 
952
- //# sourceMappingURL=create-99Ksgl_O.mjs.map
989
+ //# sourceMappingURL=create-i5VyYgN6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-i5VyYgN6.mjs","names":["RuntimeInjectionToken","RuntimeOptional","RuntimeInjector","RuntimeInjectionToken","defineType","defineType","defineType","defineType","defineType","defineType","uuidv7","defineType","defineType","defineType","defineType","defineType","defineType","defineType"],"sources":["../src/injection/types.ts","../src/injection/injector.ts","../src/events/types.ts","../src/page/index.ts","../src/validation/validator.ts","../src/popup/index.ts","../src/protocol/compat-fragment.ts","../src/router/router.ts","../src/scheduling/types.ts","../src/span/types.ts","../src/span/span.ts","../src/std/events/from-abort.ts","../src/std/cancellation/abort-signal.ts","../src/std/time.ts","../src/transport/types.ts","../src/std/transport/base-transport.ts","../src/storage/types.ts","../src/storage/memory-store.ts","../src/tracing/subscriber/types.ts","../src/tracing/create.ts","../src/tracing/types.ts","../src/environment/types.ts","../src/environment/create.ts"],"sourcesContent":["import {\n\tInjectionToken as RuntimeInjectionToken,\n\tOptional as RuntimeOptional,\n} from \"injection-js\";\n\nexport class SecuritydeptInjectionToken<T> extends RuntimeInjectionToken<T> {}\n\nexport type SecuritydeptAbstractType<T> = abstract new (...args: never[]) => T;\n\nexport type SecuritydeptDependencyToken<T> =\n\t| SecuritydeptInjectionToken<T>\n\t| SecuritydeptAbstractType<T>;\n\nexport type SecuritydeptTypeProvider<T> = SecuritydeptAbstractType<T>;\n\nexport const SecurityDeptOptional = RuntimeOptional;\n\nexport type SecuritydeptOptionalDependency<T> =\n\t| readonly [\n\t\t\tInstanceType<typeof SecurityDeptOptional>,\n\t\t\tSecuritydeptDependencyToken<T>,\n\t ]\n\t| readonly [\n\t\t\tSecuritydeptDependencyToken<T>,\n\t\t\tInstanceType<typeof SecurityDeptOptional>,\n\t ];\n\nexport type SecuritydeptDependencyDescriptor<T> =\n\t| SecuritydeptDependencyToken<T>\n\t| SecuritydeptOptionalDependency<T>;\n\nexport interface SecuritydeptValueProvider<T> {\n\tprovide: SecuritydeptDependencyToken<T>;\n\tuseValue: T;\n}\n\nexport interface SecuritydeptClassProvider<T> {\n\tprovide: SecuritydeptDependencyToken<T>;\n\tuseClass: SecuritydeptAbstractType<T>;\n\tdeps?: readonly SecuritydeptDependencyDescriptor<unknown>[];\n}\n\nexport interface SecuritydeptFactoryProvider<T> {\n\tprovide: SecuritydeptDependencyToken<T>;\n\tuseFactory: (...deps: never[]) => T;\n\tdeps?: readonly SecuritydeptDependencyDescriptor<unknown>[];\n}\n\nexport type WithTraitDeps<TDeps extends object> = TDeps;\n\nexport interface SecuritydeptExistingProvider<T> {\n\tprovide: SecuritydeptDependencyToken<T>;\n\tuseExisting: SecuritydeptDependencyToken<T>;\n}\n\nexport type SecuritydeptProvider<T = unknown> =\n\t| SecuritydeptTypeProvider<T>\n\t| SecuritydeptValueProvider<T>\n\t| SecuritydeptClassProvider<T>\n\t| SecuritydeptFactoryProvider<T>\n\t| SecuritydeptExistingProvider<T>;\n\nexport function getSecuritydeptProviderToken(\n\tprovider: SecuritydeptProvider,\n): SecuritydeptDependencyToken<unknown> {\n\tif (typeof provider === \"function\") {\n\t\treturn provider;\n\t}\n\treturn provider.provide;\n}\n\nexport function createProviderIfTokenMissing<\n\tTProvider extends SecuritydeptProvider,\n>(\n\tprovidedTokens: ReadonlySet<SecuritydeptDependencyToken<unknown>>,\n\ttoken: SecuritydeptDependencyToken<unknown>,\n\tcreateProvider: () => TProvider,\n): TProvider | null {\n\treturn providedTokens.has(token) ? null : createProvider();\n}\n\nexport function notMissingProvider(\n\tprovider: SecuritydeptProvider | null,\n): provider is SecuritydeptProvider {\n\treturn provider !== null;\n}\n\nexport interface SecuritydeptInjectorTrait {\n\tget<T>(token: SecuritydeptDependencyToken<T>): T;\n\tget<T>(token: SecuritydeptDependencyToken<T>, notFoundValue: T): T;\n}\n","import {\n\tReflectiveInjector,\n\tInjectionToken as RuntimeInjectionToken,\n\tInjector as RuntimeInjector,\n\ttype Provider as RuntimeProvider,\n} from \"injection-js\";\nimport {\n\ttype SecuritydeptAbstractType,\n\ttype SecuritydeptDependencyToken,\n\ttype SecuritydeptFactoryProvider,\n\tSecuritydeptInjectionToken,\n\ttype SecuritydeptInjectorTrait,\n\ttype SecuritydeptProvider,\n} from \"./types\";\n\ninterface NormalizedProviders {\n\tproviders: RuntimeProvider[];\n}\n\ntype RuntimeProviderToken<T> =\n\t| RuntimeInjectionToken<T>\n\t| SecuritydeptAbstractType<T>;\n\nexport class SecuritydeptInjector implements SecuritydeptInjectorTrait {\n\tstatic resolveAndCreate(\n\t\tproviders: readonly SecuritydeptProvider[],\n\t): SecuritydeptInjector {\n\t\tconst normalized = normalizeProviders([\n\t\t\t...providers,\n\t\t\tcreateInjectorSelfProvider(),\n\t\t]);\n\t\treturn getSecuritydeptInjectorFromRuntime(\n\t\t\tReflectiveInjector.resolveAndCreate(normalized.providers),\n\t\t);\n\t}\n\n\tstatic fromParentInjector(\n\t\tparent: SecuritydeptInjectorTrait,\n\t\tproviders: readonly SecuritydeptProvider[],\n\t): SecuritydeptInjector {\n\t\tconst normalized = normalizeProviders([\n\t\t\t{\n\t\t\t\tprovide: PARENT_INJECTOR_TOKEN,\n\t\t\t\tuseValue: parent,\n\t\t\t},\n\t\t\t...providers,\n\t\t\tcreateInjectorSelfProvider(),\n\t\t]);\n\t\treturn getSecuritydeptInjectorFromRuntime(\n\t\t\tReflectiveInjector.resolveAndCreate(\n\t\t\t\tnormalized.providers,\n\t\t\t\ttoRuntimeInjector(parent),\n\t\t\t),\n\t\t);\n\t}\n\n\tstatic fromRuntimeInjector(\n\t\truntimeInjector: RuntimeInjector,\n\t): SecuritydeptInjector {\n\t\treturn new SecuritydeptInjector(runtimeInjector);\n\t}\n\n\tprivate constructor(private readonly runtimeInjector: RuntimeInjector) {}\n\n\tget<T>(token: SecuritydeptDependencyToken<T>): T;\n\tget<T>(token: SecuritydeptDependencyToken<T>, notFoundValue: T): T;\n\tget<T>(token: SecuritydeptDependencyToken<T>, notFoundValue?: T): T {\n\t\ttry {\n\t\t\t// biome-ignore lint/complexity/noArguments: Overloads are more ergonomic for the common non-optional case.\n\t\t\tif (arguments.length === 1) {\n\t\t\t\treturn this.runtimeInjector.get(token as RuntimeProviderToken<T>);\n\t\t\t}\n\t\t\treturn this.runtimeInjector.get(\n\t\t\t\ttoken as RuntimeProviderToken<T>,\n\t\t\t\tnotFoundValue,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow createInjectorResolutionError(token, error);\n\t\t}\n\t}\n}\n\nexport const INJECTOR_TOKEN =\n\tnew SecuritydeptInjectionToken<SecuritydeptInjector>(\"INJECTOR_TOKEN\");\n\nexport const PARENT_INJECTOR_TOKEN =\n\tnew SecuritydeptInjectionToken<SecuritydeptInjectorTrait>(\n\t\t\"PARENT_INJECTOR_TOKEN\",\n\t);\n\nfunction normalizeProviders(\n\tproviders: readonly SecuritydeptProvider[],\n): NormalizedProviders {\n\tconst runtimeProviders = providers.map((provider) => {\n\t\tif (typeof provider === \"function\") {\n\t\t\treturn provider as RuntimeProvider;\n\t\t}\n\n\t\tif (\"useValue\" in provider) {\n\t\t\treturn {\n\t\t\t\tprovide: provider.provide,\n\t\t\t\tuseValue: provider.useValue,\n\t\t\t} satisfies RuntimeProvider;\n\t\t}\n\n\t\tif (\"useClass\" in provider) {\n\t\t\treturn {\n\t\t\t\tprovide: provider.provide,\n\t\t\t\tuseFactory: (...deps: unknown[]) =>\n\t\t\t\t\tnew (provider.useClass as new (...args: unknown[]) => unknown)(\n\t\t\t\t\t\t...deps,\n\t\t\t\t\t),\n\t\t\t\tdeps: provider.deps ? [...provider.deps] : undefined,\n\t\t\t} satisfies RuntimeProvider;\n\t\t}\n\n\t\tif (\"useExisting\" in provider) {\n\t\t\treturn {\n\t\t\t\tprovide: provider.provide,\n\t\t\t\tuseExisting: provider.useExisting,\n\t\t\t} satisfies RuntimeProvider;\n\t\t}\n\n\t\treturn {\n\t\t\tprovide: provider.provide,\n\t\t\tuseFactory: provider.useFactory,\n\t\t\tdeps: provider.deps ? [...provider.deps] : undefined,\n\t\t} satisfies RuntimeProvider;\n\t});\n\n\treturn {\n\t\tproviders: runtimeProviders,\n\t};\n}\n\nfunction createInjectorSelfProvider(): SecuritydeptFactoryProvider<SecuritydeptInjector> {\n\treturn {\n\t\tprovide: INJECTOR_TOKEN,\n\t\tuseFactory: (runtimeInjector: RuntimeInjector) =>\n\t\t\tSecuritydeptInjector.fromRuntimeInjector(runtimeInjector),\n\t\tdeps: [RuntimeInjector],\n\t};\n}\n\nfunction getSecuritydeptInjectorFromRuntime(\n\truntimeInjector: RuntimeInjector,\n): SecuritydeptInjector {\n\treturn runtimeInjector.get(\n\t\tINJECTOR_TOKEN as RuntimeProviderToken<SecuritydeptInjector>,\n\t);\n}\n\nclass SecuritydeptRuntimeParentAdapter extends RuntimeInjector {\n\tconstructor(private readonly parent: SecuritydeptInjectorTrait) {\n\t\tsuper();\n\t}\n\n\toverride get<T>(token: RuntimeProviderToken<T>): T;\n\toverride get<T>(token: RuntimeProviderToken<T>, notFoundValue: T): T;\n\toverride get<T>(token: RuntimeProviderToken<T>, notFoundValue?: T): T {\n\t\t// biome-ignore lint/complexity/noArguments: Overloads are more ergonomic for the common non-optional case.\n\t\tif (arguments.length === 1) {\n\t\t\treturn this.parent.get(token);\n\t\t}\n\t\treturn this.parent.get(token, notFoundValue as T);\n\t}\n}\n\nexport function toRuntimeInjector(\n\tparent: SecuritydeptInjectorTrait,\n): RuntimeInjector {\n\treturn new SecuritydeptRuntimeParentAdapter(parent);\n}\n\nfunction createInjectorResolutionError(\n\ttoken: SecuritydeptDependencyToken<unknown>,\n\terror: unknown,\n): Error {\n\tconst tokenLabel = describeDependencyToken(token);\n\tconst originalMessage =\n\t\terror instanceof Error ? error.message : String(error);\n\tconst message = /No provider/i.test(originalMessage)\n\t\t? `[SecuritydeptInjector] No provider found for ${tokenLabel}.`\n\t\t: `[SecuritydeptInjector] Failed to resolve ${tokenLabel}: ${originalMessage}`;\n\n\treturn new Error(message, {\n\t\tcause: error instanceof Error ? error : undefined,\n\t});\n}\n\nfunction describeDependencyToken(\n\ttoken: SecuritydeptDependencyToken<unknown>,\n): string {\n\tif (token instanceof RuntimeInjectionToken) {\n\t\treturn token.toString().replace(/^InjectionToken\\s+/, \"Token \");\n\t}\n\n\tif (typeof token === \"function\" && token.name) {\n\t\treturn token.name;\n\t}\n\n\treturn String(token);\n}\n","import { type as defineType } from \"arktype\";\n// --- Event system trait types ---\nimport {\n\ttype InteropObservableTrait,\n\tisInteropObservableTrait,\n\ttype SubscriptionTrait,\n} from \"../compat\";\n\n/** Subscription handle with explicit unsubscribe. */\nexport type EventSubscriptionTrait = SubscriptionTrait;\n\n/** Observer for event streams — mirrors the Observable observer pattern. */\nexport interface EventObserverTrait<T> {\n\tnext(value: T): void;\n\terror(error: unknown): void;\n\tcomplete(): void;\n}\n\n/** Read-only event stream — lazy push-based sequence. */\nexport interface EventStreamTrait<T> extends InteropObservableTrait<T> {\n\tsubscribe(observer: Partial<EventObserverTrait<T>>): EventSubscriptionTrait;\n}\n\nexport const EventStreamTraitSchema = defineType({\n\tsubscribe: \"Function\",\n});\n\n/** Hot event producer. */\nexport interface EventSubjectTrait<T> extends EventStreamTrait<T> {\n\tnext(value: T): void;\n\terror(error: unknown): void;\n\tcomplete(): void;\n}\n\nexport interface StateStreamTrait<T> extends EventSubjectTrait<T> {\n\tgetValue(): T;\n}\n\n// --- Event envelope ---\n\nexport const EventSourceKind = {\n\tUser: \"user\",\n\tTimer: \"timer\",\n\tHttp: \"http\",\n\tStorage: \"storage\",\n\tFramework: \"framework\",\n\tSystem: \"system\",\n} as const;\n\nexport type EventSourceKind =\n\t(typeof EventSourceKind)[keyof typeof EventSourceKind];\n\nexport type EventSource =\n\t| { kind: typeof EventSourceKind.User; actor?: string }\n\t| { kind: typeof EventSourceKind.Timer; timer: string }\n\t| { kind: typeof EventSourceKind.Http; requestId: string; endpoint?: string }\n\t| { kind: typeof EventSourceKind.Storage; operation: string }\n\t| { kind: typeof EventSourceKind.Framework; name: string }\n\t| { kind: typeof EventSourceKind.System; subsystem: string };\n\nexport interface RuntimeEventEnvelope<TType extends string, TPayload> {\n\tid: string;\n\ttype: TType;\n\tat: number;\n\tsource: EventSource;\n\tpayload: TPayload;\n}\n\nexport type EventOperatorFunction<T, R> = (\n\tstream: EventStreamTrait<T>,\n) => EventStreamTrait<R>;\n\nexport function isEventStreamTrait(\n\tvalue: unknown,\n): value is EventStreamTrait<unknown> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\ttypeof (value as EventStreamTrait<unknown>).subscribe === \"function\" &&\n\t\tisInteropObservableTrait(value)\n\t);\n}\n","import { type as defineType } from \"arktype\";\nimport { type EventStreamTrait, EventStreamTraitSchema } from \"../events/types\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\n\nexport interface PageLifecycleTrait<TResumeEvent = unknown> {\n\tresume: EventStreamTrait<TResumeEvent>;\n}\n\nexport const PageLifecycleTraitSchema = defineType({\n\tresume: EventStreamTraitSchema,\n});\n\nexport const PAGE_LIFECYCLE_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<PageLifecycleTrait | null>(\n\t\t\"PAGE_LIFECYCLE_TRAIT_TOKEN\",\n\t);\n","// @securitydept/client — Foundation validation baseline\n//\n// Provides a vendor-neutral validation entry aligned with @standard-schema/spec.\n// Any StandardSchemaV1-compatible schema (zod, valibot, arktype, etc.) can be\n// used as the validation contract.\n//\n// Design principles:\n// - The foundation owns the validate-and-interpret contract\n// - Individual SDK packages supply schemas that implement StandardSchemaV1\n// - Consumers never need to know which validation library produced the schema\n\nimport { type StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { ClientError, ClientErrorKind, UserRecovery } from \"../errors\";\n\n// ---------------------------------------------------------------------------\n// Result types\n// ---------------------------------------------------------------------------\n\n/**\n * Successful validation result.\n *\n * Contains the parsed, typed output value from the schema.\n */\nexport interface ValidationSuccess<T> {\n\treadonly success: true;\n\treadonly value: T;\n}\n\n/**\n * Failed validation result.\n *\n * Contains the list of issues reported by the schema.\n */\nexport interface ValidationFailure {\n\treadonly success: false;\n\treadonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n}\n\n/**\n * Discriminated union of validation outcomes.\n *\n * Consumers can narrow on `success` to access either the typed value\n * or the issue list.\n */\nexport type ValidationResult<T> = ValidationSuccess<T> | ValidationFailure;\n\nexport type TraitInputValidator = StandardSchemaV1<unknown, unknown>;\n\nexport type TraitInputBundledSchema = StandardSchemaV1<unknown, unknown>;\n\nexport interface WithTraitInputValidator<TValidator = TraitInputValidator> {\n\tvalidators?: TValidator;\n}\n\nexport interface ValidateTraitInputOptions {\n\tvalue: unknown;\n\tbundledSchema: TraitInputBundledSchema;\n\tvalidator?: TraitInputValidator;\n\toptional?: boolean;\n\tonInvalid(failure: ValidationFailure): never;\n}\n\nexport function formatValidationFailure(\n\tfailure: ValidationFailure | undefined,\n): string | null {\n\tif (!failure) {\n\t\treturn null;\n\t}\n\tconst summary = failure.issues\n\t\t.map((issue) =>\n\t\t\tissue.path && issue.path.length > 0\n\t\t\t\t? `${issue.path.join(\".\")}: ${issue.message}`\n\t\t\t\t: issue.message,\n\t\t)\n\t\t.join(\"; \");\n\treturn summary.length > 0 ? summary : null;\n}\n\nexport function throwValidationClientError(options: {\n\tcode: string;\n\tsource: string;\n\tmessagePrefix: string;\n\tfailure?: ValidationFailure;\n}): never {\n\tconst issueSummary = formatValidationFailure(options.failure);\n\tthrow new ClientError({\n\t\tkind: ClientErrorKind.Configuration,\n\t\tcode: options.code,\n\t\tmessage: issueSummary\n\t\t\t? `${options.messagePrefix}: ${issueSummary}.`\n\t\t\t: `${options.messagePrefix}.`,\n\t\trecovery: UserRecovery.RestartFlow,\n\t\tsource: options.source,\n\t\tcause: options.failure?.issues,\n\t});\n}\n\n// ---------------------------------------------------------------------------\n// Core validation function\n// ---------------------------------------------------------------------------\n\n/**\n * Validate an unknown input against a `@standard-schema`-compatible schema.\n *\n * This is the foundation-level entry point for SDK validation. It accepts\n * any schema implementing `StandardSchemaV1` and returns a discriminated\n * `ValidationResult`.\n *\n * @example\n * ```ts\n * import { validateWithSchema } from \"@securitydept/client\";\n * import { z } from \"zod\";\n *\n * const UserSchema = z.object({ name: z.string() });\n * const result = await validateWithSchema(UserSchema, { name: \"Alice\" });\n * if (result.success) {\n * console.log(result.value.name);\n * } else {\n * console.error(result.issues);\n * }\n * ```\n */\nexport async function validateWithSchema<I, O>(\n\tschema: StandardSchemaV1<I, O>,\n\tinput: unknown,\n): Promise<ValidationResult<O>> {\n\tconst result = await schema[\"~standard\"].validate(input);\n\tif (\"value\" in result) {\n\t\treturn { success: true, value: result.value };\n\t}\n\treturn { success: false, issues: result.issues };\n}\n\n/**\n * Validate an unknown input synchronously against a `@standard-schema`-compatible schema.\n *\n * Only use this when you know the schema's validate function returns synchronously.\n * Throws if the schema returns a Promise.\n */\nexport function validateWithSchemaSync<I, O>(\n\tschema: StandardSchemaV1<I, O>,\n\tinput: unknown,\n): ValidationResult<O> {\n\tconst result = schema[\"~standard\"].validate(input);\n\n\tif (result instanceof Promise) {\n\t\tthrow new Error(\n\t\t\t\"validateWithSchemaSync: schema returned a Promise. Use validateWithSchema instead.\",\n\t\t);\n\t}\n\n\tif (\"value\" in result) {\n\t\treturn { success: true, value: result.value };\n\t}\n\treturn { success: false, issues: result.issues };\n}\n\nexport function validateTraitInput(options: ValidateTraitInputOptions): void {\n\tif (\n\t\toptions.optional === true &&\n\t\t(options.value === undefined || options.value === null)\n\t) {\n\t\treturn;\n\t}\n\tconst validator = options.validator ?? options.bundledSchema;\n\tconst result = validateWithSchemaSync(validator, options.value);\n\tif (result.success) {\n\t\treturn;\n\t}\n\toptions.onInvalid(result);\n}\n","import { type as defineType } from \"arktype\";\nimport { type ClientError } from \"../errors\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\nimport {\n\ttype PopupClientWindowHandleTrait,\n\ttype PopupServerWindowHandleTrait,\n} from \"./handle\";\n\nexport {\n\tPopupErrorCode,\n\treadPopupErrorPresentationDescriptor,\n} from \"./errors\";\nexport {\n\tPopupClientWindowHandle,\n\ttype PopupClientWindowHandleTrait,\n\ttype PopupMessageChannelTrait,\n\tPopupServerWindowHandle,\n\ttype PopupServerWindowHandleTrait,\n\ttype PopupWindowHandleTrait,\n} from \"./handle\";\nexport {\n\ttype CreatePopupClientSessionOptions,\n\ttype CreatePopupServerSessionOptions,\n} from \"./session\";\n\nexport const PopupAttachFailureReason = {\n\tMissingOpener: \"missing_opener\",\n\tMissingOrigin: \"missing_origin\",\n} as const;\n\nexport type PopupAttachFailureReason =\n\t(typeof PopupAttachFailureReason)[keyof typeof PopupAttachFailureReason];\n\nexport interface PopupAttachSuccess {\n\tkind: \"success\";\n\thandle: PopupServerWindowHandleTrait;\n}\n\nexport interface PopupAttachFailure {\n\tkind: \"failure\";\n\treason: PopupAttachFailureReason;\n\terror: ClientError;\n}\n\nexport type PopupAttachResult = PopupAttachSuccess | PopupAttachFailure;\n\nexport interface PopupOpenOptions {\n\ttarget?: string;\n\twidth?: number;\n\theight?: number;\n\texpectedOrigin?: string;\n}\n\nexport interface PopupTrait {\n\topen(url: string, options?: PopupOpenOptions): PopupClientWindowHandleTrait;\n\tattach(): PopupAttachResult;\n}\n\nexport const PopupTraitSchema = defineType({\n\topen: \"Function\",\n\tattach: \"Function\",\n});\n\nexport const POPUP_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<PopupTrait | null>(\"POPUP_TRAIT_TOKEN\");\n","import { type UriFragmentPart } from \"../struct/uri-string\";\n\nexport const SECURITYDEPT_COMPAT_FRAGMENT_VERSION = \"v1\";\n\nexport type CompatFragmentParameters = Record<string, string>;\n\nexport interface CompatFragment {\n\tpayload: string;\n\tparameters: CompatFragmentParameters;\n}\n\nexport interface AppendOrReplaceCompatFragmentOptions {\n\tpayload: string | URLSearchParams | CompatFragmentParameters;\n}\n\nexport interface TakeCompatFragmentResult<T> {\n\tcompatFragment: CompatFragment | null;\n\tfragment: string;\n\turl: UpdatedUriFragment<T>;\n}\n\nexport interface TakeCompatFragmentOptions<T> {\n\tcondition?: (compatFragment: CompatFragment) => boolean;\n\tupdate: UpdateUriFragmentHash<T>;\n}\n\nexport interface AppendOrReplaceCompatFragmentResult<T> {\n\tfragment: string;\n\turl: UpdatedUriFragment<T>;\n}\n\nexport type UpdatedUriFragment<T> = T extends string ? string : T;\n\nexport type UpdateUriFragmentHash<T> = (\n\tinput: T,\n\thash: string,\n) => UpdatedUriFragment<T>;\n\nexport function appendOrReplaceCompatFragment<\n\tT extends string | UriFragmentPart,\n>(\n\tinput: T,\n\toptions: AppendOrReplaceCompatFragmentOptions,\n\tupdate: UpdateUriFragmentHash<T>,\n): AppendOrReplaceCompatFragmentResult<T> {\n\tconst blocks = splitFragmentBlocks(readUriFragmentHash(input));\n\tif (isCompatFragmentBlock(blocks.at(-1) ?? \"\")) {\n\t\tblocks.pop();\n\t}\n\tblocks.push(buildCompatFragmentBlock(options));\n\tconst fragment = joinFragmentBlocks(blocks);\n\treturn {\n\t\tfragment,\n\t\turl: update(input, fragment),\n\t};\n}\n\nexport function parseCompatFragment(\n\tinput: string | UriFragmentPart,\n): CompatFragment | null {\n\tconst fragment = readUriFragmentHash(input);\n\tconst block = splitFragmentBlocks(fragment).at(-1);\n\tif (!block || !isCompatFragmentBlock(block)) {\n\t\treturn null;\n\t}\n\n\tconst blockParameters = new URLSearchParams(block);\n\tblockParameters.delete(\"securitydept\");\n\tconst parameters: CompatFragmentParameters = {};\n\tblockParameters.forEach((value, key) => {\n\t\tparameters[key] = value;\n\t});\n\treturn {\n\t\tpayload: blockParameters.toString(),\n\t\tparameters,\n\t};\n}\n\nexport function takeCompatFragment<T extends string | UriFragmentPart>(\n\tinput: T,\n\toptions: TakeCompatFragmentOptions<T>,\n): TakeCompatFragmentResult<T> {\n\tconst currentFragment = readUriFragmentHash(input);\n\tconst blocks = splitFragmentBlocks(currentFragment);\n\tconst block = blocks.at(-1);\n\tif (!block || !isCompatFragmentBlock(block)) {\n\t\treturn {\n\t\t\tcompatFragment: null,\n\t\t\tfragment: currentFragment,\n\t\t\turl: input as UpdatedUriFragment<T>,\n\t\t};\n\t}\n\n\tconst compatFragment = parseCompatFragment(block);\n\tif (\n\t\t!compatFragment ||\n\t\t(options.condition && !options.condition(compatFragment))\n\t) {\n\t\treturn {\n\t\t\tcompatFragment: null,\n\t\t\tfragment: currentFragment,\n\t\t\turl: input as UpdatedUriFragment<T>,\n\t\t};\n\t}\n\tblocks.pop();\n\tconst fragment = joinFragmentBlocks(blocks);\n\treturn {\n\t\tcompatFragment,\n\t\tfragment,\n\t\turl: options.update(input, fragment),\n\t};\n}\n\nexport function isCompatFragmentBlock(block: string): boolean {\n\treturn (\n\t\tnew URLSearchParams(block.startsWith(\"#\") ? block.slice(1) : block).get(\n\t\t\t\"securitydept\",\n\t\t) === SECURITYDEPT_COMPAT_FRAGMENT_VERSION\n\t);\n}\n\nfunction readUriFragmentHash(input: string | UriFragmentPart): string {\n\tif (typeof input === \"string\") {\n\t\treturn input.startsWith(\"#\") ? input : `#${input}`;\n\t}\n\treturn input.hash;\n}\n\nfunction joinFragmentBlocks(blocks: string[]): string {\n\treturn blocks.length > 0 ? `#${blocks.join(\"#\")}` : \"\";\n}\n\nfunction splitFragmentBlocks(fragment: string): string[] {\n\t// Lone `#` is an empty hash-route block; distinct from no hash (`\"\"`).\n\tif (fragment === \"#\") {\n\t\treturn [\"\"];\n\t}\n\tconst normalized = fragment.startsWith(\"#\") ? fragment.slice(1) : fragment;\n\treturn normalized ? normalized.split(\"#\") : [];\n}\n\nfunction buildCompatFragmentBlock(\n\toptions: AppendOrReplaceCompatFragmentOptions,\n): string {\n\tconst block = new URLSearchParams();\n\tblock.set(\"securitydept\", SECURITYDEPT_COMPAT_FRAGMENT_VERSION);\n\tconst payload =\n\t\ttypeof options.payload === \"string\"\n\t\t\t? new URLSearchParams(\n\t\t\t\t\toptions.payload.startsWith(\"#\")\n\t\t\t\t\t\t? options.payload.slice(1)\n\t\t\t\t\t\t: options.payload,\n\t\t\t\t)\n\t\t\t: new URLSearchParams(options.payload);\n\tfor (const [key, value] of payload) {\n\t\tif (key !== \"securitydept\") {\n\t\t\tblock.append(key, value);\n\t\t}\n\t}\n\treturn block.toString();\n}\n","import { type as defineType } from \"arktype\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\nimport {\n\ttype CompatFragment,\n\ttakeCompatFragment,\n} from \"../protocol/compat-fragment\";\nimport { type UriReferenceString } from \"../struct/uri-string\";\n\nexport const RouterNavigationIntent = {\n\tAuthRedirect: \"auth_redirect\",\n\tPostAuthRedirect: \"post_auth_redirect\",\n\tCallbackCleanup: \"callback_cleanup\",\n\tExternalOpen: \"external_open\",\n} as const;\n\nexport type RouterNavigationIntent =\n\t(typeof RouterNavigationIntent)[keyof typeof RouterNavigationIntent];\n\nexport const RouterNavigationMode = {\n\tPush: \"push\",\n\tReplace: \"replace\",\n\tExternal: \"external\",\n} as const;\n\nexport type RouterNavigationMode =\n\t(typeof RouterNavigationMode)[keyof typeof RouterNavigationMode];\n\nexport interface RouterNavigationRequest {\n\turl: UriReferenceString;\n\tintent: RouterNavigationIntent;\n\tmode: RouterNavigationMode;\n\tstate?: unknown;\n}\n\nexport interface RouterTrait {\n\tcurrentUrl(): UriReferenceString | null;\n\tnavigate(request: RouterNavigationRequest): void | Promise<void>;\n}\n\nexport interface TakeCompatFragmentFromRouterOptions {\n\tcondition?: (compatFragment: CompatFragment) => boolean;\n}\n\nexport async function takeCompatFragmentFromRouter(\n\trouter: RouterTrait,\n\toptions: TakeCompatFragmentFromRouterOptions = {},\n): Promise<CompatFragment | null> {\n\tconst currentUrl = router.currentUrl();\n\n\tif (!currentUrl) {\n\t\treturn null;\n\t}\n\n\tconst { compatFragment, url: cleanedUrl } = takeCompatFragment(currentUrl, {\n\t\tcondition: options.condition,\n\t\tupdate: (ref, hash) => ref.setHash(hash),\n\t});\n\n\tif (!compatFragment) {\n\t\treturn null;\n\t}\n\n\tawait router.navigate({\n\t\turl: cleanedUrl,\n\t\tintent: RouterNavigationIntent.CallbackCleanup,\n\t\tmode: RouterNavigationMode.Replace,\n\t});\n\treturn compatFragment;\n}\n\nexport const RouterTraitSchema = defineType({\n\tcurrentUrl: \"Function\",\n\tnavigate: \"Function\",\n});\n\nexport const ROUTER_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<RouterTrait | null>(\"ROUTER_TRAIT_TOKEN\");\n","import { type as defineType } from \"arktype\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\n\n// --- Time capability abstraction ---\n\nexport interface TimestampProviderTrait {\n\t/** Return current epoch milliseconds. */\n\tnow(): number;\n}\n\n/** Injectable time capability for host timers and deterministic tests. */\nexport interface TimeTrait extends TimestampProviderTrait {\n\t/** Return current epoch milliseconds. */\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\nexport const TimeTraitSchema = defineType({\n\tnow: \"Function\",\n\tsetTimeout: \"Function\",\n\tclearTimeout: \"Function\",\n});\n\nexport const TIME_TRAIT_TOKEN = new SecuritydeptInjectionToken<TimeTrait>(\n\t\"TIME_TRAIT_TOKEN\",\n);\n\nexport const IDLE_CALLBACK_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<IdleCallbackTrait | null>(\n\t\t\"IDLE_CALLBACK_TRAIT_TOKEN\",\n\t);\n\n/** Injectable idle-callback capability for hosts that explicitly support it. */\nexport interface IdleCallbackTrait {\n\trequestIdleCallback(callback: () => void): unknown;\n\tcancelIdleCallback(handle: unknown): void;\n}\n\nexport const IdleCallbackTraitSchema = defineType({\n\trequestIdleCallback: \"Function\",\n\tcancelIdleCallback: \"Function\",\n});\n","import { type as defineType } from \"arktype\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\n\nexport interface SpanCreateOptions {\n\tidFactory?: () => string;\n\tattributes?: SpanAttributes;\n\tmutable?: false;\n}\n\nexport type SpanAttributeValue =\n\t| string\n\t| number\n\t| boolean\n\t| null\n\t| readonly SpanAttributeValue[]\n\t| { readonly [name: string]: SpanAttributeValue };\n\nexport type SpanAttributes = Readonly<Record<string, SpanAttributeValue>>;\n\nexport interface SpanAttributeReadOptions {\n\tproviderId: string;\n\twithShared?: boolean;\n}\n\nexport interface SpanPathOptions {\n\tskipSelf?: boolean;\n}\n\nexport interface SpanNodeAttributes {\n\treadonly spanId: string;\n\treadonly parentSpanId?: string;\n\treadonly attributes: SpanAttributes;\n}\n\nexport const SpanCreateOptionsSchema = defineType({\n\tidFactory: \"Function\",\n\tattributes: \"object\",\n});\n\nexport interface MutableSpanCreateOptions\n\textends Omit<SpanCreateOptions, \"mutable\"> {\n\tmutable: true;\n}\n\nexport interface SpanTrait {\n\treadonly id: string;\n\treadonly parent?: SpanTrait;\n\tgetAttributes(options?: SpanAttributeReadOptions): SpanAttributes;\n\tgetRootToNodePath(options?: SpanPathOptions): readonly SpanTrait[];\n\tgetRootToNodeAttributes(\n\t\toptions?: SpanPathOptions & { providerId?: string },\n\t): readonly SpanNodeAttributes[];\n\tfork(options: MutableSpanCreateOptions): MutableSpanTrait;\n\tfork(options?: SpanCreateOptions): SpanTrait;\n\tfork(\n\t\toptions?: SpanCreateOptions | MutableSpanCreateOptions,\n\t): SpanTrait | MutableSpanTrait;\n}\n\nexport interface MutableSpanTrait extends SpanTrait {\n\tsetAttributes(\n\t\tattributes: SpanAttributes,\n\t\toptions?: { providerId?: string },\n\t): void;\n}\n\nexport const SpanTraitSchema = defineType({\n\tid: \"string\",\n\tfork: \"Function\",\n\tgetAttributes: \"Function\",\n\tgetRootToNodePath: \"Function\",\n\tgetRootToNodeAttributes: \"Function\",\n});\n\nexport const SPAN_TRAIT_TOKEN = new SecuritydeptInjectionToken<SpanTrait>(\n\t\"SPAN_TRAIT_TOKEN\",\n);\n","import { v7 as uuidv7 } from \"uuid\";\nimport {\n\ttype TraitInputValidator,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"../validation\";\nimport {\n\ttype MutableSpanCreateOptions,\n\ttype MutableSpanTrait,\n\ttype SpanAttributeReadOptions,\n\ttype SpanAttributes,\n\ttype SpanCreateOptions,\n\tSpanCreateOptionsSchema,\n\ttype SpanNodeAttributes,\n\ttype SpanPathOptions,\n\ttype SpanTrait,\n} from \"./types\";\n\nfunction createDefaultSpanId(): string {\n\treturn `span_${uuidv7()}`;\n}\n\nclass DefaultSpan implements MutableSpanTrait {\n\treadonly id: string;\n\treadonly parent: SpanTrait | undefined;\n\tprotected _sharedAttributes: SpanAttributes;\n\tprotected readonly _providerAttributes = new Map<string, SpanAttributes>();\n\tprotected readonly _idFactory: () => string;\n\n\tprotected constructor(\n\t\tparent: SpanTrait | undefined,\n\t\tidFactory: () => string,\n\t\tattributes: SpanAttributes,\n\t) {\n\t\tthis._idFactory = idFactory;\n\t\tthis.id = idFactory();\n\t\tthis.parent = parent;\n\t\tthis._sharedAttributes = attributes;\n\t}\n\n\tstatic root(options: SpanCreateOptions = {}): SpanTrait {\n\t\treturn new DefaultSpan(\n\t\t\tundefined,\n\t\t\toptions.idFactory ?? createDefaultSpanId,\n\t\t\t{ ...(options.attributes ?? {}) },\n\t\t);\n\t}\n\n\tfork(options: MutableSpanCreateOptions): MutableSpanTrait;\n\tfork(options?: SpanCreateOptions): SpanTrait;\n\tfork(\n\t\toptions: SpanCreateOptions | MutableSpanCreateOptions = {},\n\t): SpanTrait | MutableSpanTrait {\n\t\treturn new DefaultSpan(this, options.idFactory ?? this._idFactory, {\n\t\t\t...options.attributes,\n\t\t});\n\t}\n\n\tgetAttributes(options?: SpanAttributeReadOptions): SpanAttributes {\n\t\tif (!options) {\n\t\t\treturn this._sharedAttributes;\n\t\t}\n\n\t\tconst providerAttributes =\n\t\t\tthis._providerAttributes.get(options.providerId) ?? {};\n\t\tif (options.withShared === false) {\n\t\t\treturn providerAttributes;\n\t\t}\n\t\treturn {\n\t\t\t...this._sharedAttributes,\n\t\t\t...providerAttributes,\n\t\t};\n\t}\n\n\tgetRootToNodePath(options: SpanPathOptions = {}): readonly SpanTrait[] {\n\t\tconst path: SpanTrait[] = [];\n\t\tlet current: SpanTrait | undefined = options.skipSelf ? this.parent : this;\n\t\twhile (current) {\n\t\t\tpath.push(current);\n\t\t\tcurrent = current.parent;\n\t\t}\n\t\treturn path.reverse();\n\t}\n\n\tgetRootToNodeAttributes(\n\t\toptions: SpanPathOptions & { providerId?: string } = {},\n\t): readonly SpanNodeAttributes[] {\n\t\tconst path = this.getRootToNodePath({ skipSelf: options.skipSelf });\n\t\tconst frames: SpanNodeAttributes[] = [];\n\t\tfor (const span of path) {\n\t\t\tconst attributes =\n\t\t\t\toptions.providerId !== undefined\n\t\t\t\t\t? span.getAttributes({ providerId: options.providerId })\n\t\t\t\t\t: span.getAttributes();\n\t\t\tif (Object.keys(attributes).length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tframes.push({\n\t\t\t\tspanId: span.id,\n\t\t\t\t...(span.parent ? { parentSpanId: span.parent.id } : {}),\n\t\t\t\tattributes,\n\t\t\t});\n\t\t}\n\t\treturn frames;\n\t}\n\n\tsetAttributes(\n\t\tattributes: SpanAttributes,\n\t\toptions: { providerId?: string } = {},\n\t): void {\n\t\tif (options.providerId === undefined) {\n\t\t\tthis._sharedAttributes = {\n\t\t\t\t...this._sharedAttributes,\n\t\t\t\t...attributes,\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tthis._providerAttributes.set(options.providerId, {\n\t\t\t...this._providerAttributes.get(options.providerId),\n\t\t\t...attributes,\n\t\t});\n\t}\n}\n\nexport function createRootSpan(\n\toptions: SpanCreateOptions &\n\t\tWithTraitInputValidator<TraitInputValidator> = {},\n): SpanTrait {\n\tconst { validators, ...resolvedOptions } = options;\n\tconst resolvedCreateOptions = {\n\t\tidFactory: resolvedOptions.idFactory ?? createDefaultSpanId,\n\t\tattributes: resolvedOptions.attributes ?? {},\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: SpanCreateOptionsSchema,\n\t\tvalidator: validators,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: \"span.invalid_options\",\n\t\t\t\tsource: \"span\",\n\t\t\t\tmessagePrefix: \"createRootSpan could not validate spanCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\treturn DefaultSpan.root(resolvedCreateOptions);\n}\n","import { EMPTY, fromEventPattern, map, merge, of } from \"rxjs\";\nimport { type EventStreamTrait } from \"../../events/types\";\nimport { RxEventStream } from \"../../rx\";\n\nexport type AbortSignalStdSource = Pick<AbortSignal, \"aborted\" | \"reason\"> & {\n\taddEventListener?: (type: \"abort\", listener: EventListener) => void;\n\tremoveEventListener?: (type: \"abort\", listener: EventListener) => void;\n};\n\n/**\n * Adapt an `AbortSignal`-like source into an event stream of abort reasons.\n */\nexport function abortSignalToEventStream(\n\tsignal: AbortSignalStdSource,\n): EventStreamTrait<unknown> {\n\treturn RxEventStream.fromObservableInput(\n\t\tmerge(\n\t\t\tsignal.aborted ? of(signal.reason) : EMPTY,\n\t\t\tfromEventPattern<Event>(\n\t\t\t\t(handler) => {\n\t\t\t\t\tsignal.addEventListener?.(\"abort\", handler);\n\t\t\t\t},\n\t\t\t\t(handler) => {\n\t\t\t\t\tsignal.removeEventListener?.(\"abort\", handler);\n\t\t\t\t},\n\t\t\t).pipe(map(() => signal.reason)),\n\t\t),\n\t);\n}\n","import { from, map } from \"rxjs\";\nimport { type CancellationTokenTrait } from \"../../cancellation\";\nimport { type CancellationTokenErrorData } from \"../../cancellation/types\";\nimport {\n\ttype DisposableTrait,\n\tSYMBOL_DISPOSE,\n\tSYMBOL_OBSERVABLE,\n} from \"../../compat\";\nimport { ClientError } from \"../../errors/client-error\";\nimport { ClientErrorKind, ClientErrorSource } from \"../../errors/types\";\nimport { abortSignalToEventStream } from \"../events\";\n\n/**\n * Bridge a web `AbortSignal` back into the foundation cancellation contract.\n *\n * This is the canonical consumer-side path for browser hosts that receive an\n * `AbortSignal` from framework/runtime APIs (for example React Query queryFns)\n * but need to call SDK surfaces that accept `CancellationTokenTrait`.\n */\nexport function abortSignalToCancellationToken(\n\tsignal: AbortSignal,\n): CancellationTokenTrait;\nexport function abortSignalToCancellationToken(signal?: undefined): undefined;\nexport function abortSignalToCancellationToken(\n\tsignal?: AbortSignal,\n): CancellationTokenTrait | undefined;\nexport function abortSignalToCancellationToken(\n\tsignal?: AbortSignal,\n): CancellationTokenTrait | undefined {\n\tif (!signal) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tget isCancellationRequested() {\n\t\t\treturn signal.aborted;\n\t\t},\n\t\tget reason() {\n\t\t\treturn signal.reason;\n\t\t},\n\t\tget cancellationError() {\n\t\t\treturn signal.aborted\n\t\t\t\t? new ClientError({\n\t\t\t\t\t\tkind: ClientErrorKind.Cancelled,\n\t\t\t\t\t\tmessage: \"Request was cancelled via AbortSignal\",\n\t\t\t\t\t\tcode: \"client.cancelled\",\n\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\tcause: signal.reason,\n\t\t\t\t\t})\n\t\t\t\t: undefined;\n\t\t},\n\t\tonCancellationRequested(\n\t\t\tlistener: (data: CancellationTokenErrorData) => void,\n\t\t) {\n\t\t\tconst subscription = abortSignalToEventStream(signal).subscribe({\n\t\t\t\tnext: (reason) =>\n\t\t\t\t\tlistener({\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tcancellationError: new ClientError({\n\t\t\t\t\t\t\tkind: ClientErrorKind.Cancelled,\n\t\t\t\t\t\t\tmessage: \"Request was cancelled via AbortSignal\",\n\t\t\t\t\t\t\tcode: \"client.cancelled\",\n\t\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\t\tcause: reason,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t},\n\t\t\t\t[SYMBOL_DISPOSE]: () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t[SYMBOL_OBSERVABLE]() {\n\t\t\treturn from(abortSignalToEventStream(signal)).pipe(\n\t\t\t\tmap((reason) => ({\n\t\t\t\t\treason,\n\t\t\t\t\tcancellationError: new ClientError({\n\t\t\t\t\t\tkind: ClientErrorKind.Cancelled,\n\t\t\t\t\t\tmessage: \"Request was cancelled via AbortSignal\",\n\t\t\t\t\t\tcode: \"client.cancelled\",\n\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\tcause: reason,\n\t\t\t\t\t}),\n\t\t\t\t})),\n\t\t\t);\n\t\t},\n\t\tthrowIfCancellationRequested() {\n\t\t\tif (signal.aborted) {\n\t\t\t\tthrow new ClientError({\n\t\t\t\t\tkind: ClientErrorKind.Cancelled,\n\t\t\t\t\tmessage: \"Request was cancelled via AbortSignal\",\n\t\t\t\t\tcode: \"client.cancelled\",\n\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\tcause: signal.reason,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport interface AbortSignalBridge extends DisposableTrait {\n\tsignal?: AbortSignal;\n}\n\n/**\n * Bridge foundation cancellation to `AbortSignal` without exposing\n * `AbortSignal` in core contracts.\n */\nexport function cancellationTokenToAbortSignal(\n\ttoken: CancellationTokenTrait,\n): AbortSignalBridge;\nexport function cancellationTokenToAbortSignal(token?: undefined): undefined;\nexport function cancellationTokenToAbortSignal(\n\ttoken?: CancellationTokenTrait,\n): AbortSignalBridge | undefined;\nexport function cancellationTokenToAbortSignal(\n\ttoken?: CancellationTokenTrait,\n): AbortSignalBridge | undefined {\n\tif (!token) {\n\t\treturn undefined;\n\t}\n\n\tconst controller = new AbortController();\n\n\tif (token.isCancellationRequested) {\n\t\tcontroller.abort(token.reason);\n\t}\n\n\tlet subscription: DisposableTrait | null = token.onCancellationRequested(\n\t\t({ reason }) => {\n\t\t\tcontroller.abort(reason);\n\t\t},\n\t);\n\n\tconst dispose = () => {\n\t\tif (subscription) {\n\t\t\tsubscription.dispose();\n\t\t\tsubscription = null;\n\t\t}\n\t};\n\n\treturn {\n\t\tsignal: controller.signal,\n\t\tdispose,\n\t\t[SYMBOL_DISPOSE]: dispose,\n\t};\n}\n\nexport function normalizeAbortError(\n\ttoken: CancellationTokenTrait | undefined,\n\terror: unknown,\n): unknown {\n\tif (!isAbortError(error) && !token?.isCancellationRequested) {\n\t\treturn error;\n\t}\n\n\tif (token?.cancellationError) {\n\t\treturn token.cancellationError;\n\t}\n\n\treturn new ClientError({\n\t\tkind: ClientErrorKind.Cancelled,\n\t\tmessage: \"HTTP request was cancelled\",\n\t\tcode: \"client.cancelled\",\n\t\tsource: ClientErrorSource.Transport,\n\t\tcause: token?.reason ?? error,\n\t});\n}\n\nfunction isAbortError(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"name\" in error &&\n\t\terror.name === \"AbortError\"\n\t);\n}\n","import { type as defineType } from \"arktype\";\nimport { type TimeTrait } from \"../scheduling/types\";\nimport {\n\ttype TraitInputValidator,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"../validation\";\n\nexport interface TimeTraitStdHost {\n\tDate: Pick<DateConstructor, \"now\">;\n\tsetTimeout(handler: () => void, delayMs: number): unknown;\n\tclearTimeout(handle: unknown): void;\n}\n\nexport const TimeTraitStdHostSchema = defineType({\n\tDate: defineType({\n\t\tnow: \"Function\",\n\t}),\n\tsetTimeout: \"Function\",\n\tclearTimeout: \"Function\",\n});\n\nexport interface TimeForStdCreateOptions {\n\thost?: TimeTraitStdHost;\n}\n\nconst TimeForStdCreateOptionsSchema = defineType({\n\thost: TimeTraitStdHostSchema,\n});\n\nexport function createTimeForStd(\n\toptions: TimeForStdCreateOptions &\n\t\tWithTraitInputValidator<TraitInputValidator> = {},\n): TimeTrait {\n\tconst { validators, ...createOptions } = options;\n\tconst resolvedCreateOptions = {\n\t\thost: createOptions.host ?? globalThis,\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: TimeForStdCreateOptionsSchema,\n\t\tvalidator: validators,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: \"time.invalid_std_options\",\n\t\t\t\tsource: \"time\",\n\t\t\t\tmessagePrefix:\n\t\t\t\t\t\"createTimeForStd could not validate timeForStdCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst host = resolvedCreateOptions.host;\n\n\treturn {\n\t\tnow: () => host.Date.now(),\n\t\tsetTimeout: (handler, delayMs) => host.setTimeout(handler, delayMs),\n\t\tclearTimeout: (handle) => host.clearTimeout(handle as number | undefined),\n\t};\n}\n","import { type as defineType } from \"arktype\";\nimport { type CancellationTokenTrait } from \"../cancellation/types\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\n\nexport const TransportErrorCode = {\n\tRequestFailed: \"transport.request_failed\",\n\tResponseDecodeFailed: \"transport.response_decode_failed\",\n\tInvalidStdFetchOptions: \"transport.invalid_std_fetch_options\",\n\tInvalidAngularOptions: \"transport.invalid_angular_options\",\n} as const;\n\nexport type TransportErrorCode =\n\t(typeof TransportErrorCode)[keyof typeof TransportErrorCode];\n\n// --- Transport abstraction ---\n\n/** Neutral HTTP request representation. */\nexport interface HttpRequest {\n\turl: string;\n\tmethod: string;\n\theaders: Record<string, string>;\n\tbody?: unknown;\n\tcancellationToken?: CancellationTokenTrait;\n}\n\n/** Neutral HTTP response representation. */\nexport interface HttpResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n\tbody?: unknown;\n}\n\nexport type HttpResponseJsonBody = Record<string, unknown>;\n\n/** Neutral request executor trait. */\nexport interface BaseTransportTrait {\n\texecute(request: HttpRequest): Promise<HttpResponse>;\n}\n\nexport const BaseTransportTraitSchema = defineType({\n\texecute: \"Function\",\n});\n\nexport const TRANSPORT_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<BaseTransportTrait>(\"TRANSPORT_TRAIT_TOKEN\");\n","import { type as defineType } from \"arktype\";\nimport { ClientError, ClientErrorKind, ClientErrorSource } from \"../../errors\";\nimport {\n\ttype BaseTransportTrait,\n\ttype HttpRequest,\n\ttype HttpResponse,\n\tTransportErrorCode,\n} from \"../../transport/types\";\nimport {\n\ttype TraitInputValidator,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"../../validation\";\nimport {\n\tcancellationTokenToAbortSignal,\n\tnormalizeAbortError,\n} from \"../cancellation/abort-signal\";\n\nexport const FetchTransportRedirectKind = {\n\tFollow: \"follow\",\n\tManual: \"manual\",\n} as const;\n\nexport type FetchTransportRedirectKind =\n\t(typeof FetchTransportRedirectKind)[keyof typeof FetchTransportRedirectKind];\n\nexport interface BaseTransportForStdFetchCreateOptions {\n\tredirect?: FetchTransportRedirectKind;\n\tfetch?: typeof fetch;\n\tbaseUrl?: string | URL;\n}\n\nexport const BaseTransportForStdFetchCreateOptionsSchema = defineType({\n\tredirect: '\"follow\" | \"manual\"',\n\tfetch: \"Function\",\n\tbaseUrl: \"unknown\",\n});\n\n/**\n * Default `BaseTransportTrait` backed by the global `fetch` API.\n *\n * The caller is responsible for ensuring `fetch` is available in the runtime.\n * No polyfill is injected.\n */\nexport function createBaseTransportForStdFetch(\n\toptions: BaseTransportForStdFetchCreateOptions &\n\t\tWithTraitInputValidator<TraitInputValidator> = {},\n): BaseTransportTrait {\n\tconst { validators, ...createOptions } = options;\n\tconst resolvedCreateOptions = {\n\t\tredirect: createOptions.redirect ?? FetchTransportRedirectKind.Manual,\n\t\tfetch: createOptions.fetch ?? fetch,\n\t\tbaseUrl: createOptions.baseUrl,\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: BaseTransportForStdFetchCreateOptionsSchema,\n\t\tvalidator: validators,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: TransportErrorCode.InvalidStdFetchOptions,\n\t\t\t\tsource: \"transport\",\n\t\t\t\tmessagePrefix:\n\t\t\t\t\t\"createBaseTransportForStdFetch could not validate transportForStdFetchCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst redirect = resolvedCreateOptions.redirect;\n\tconst fetchImpl = resolvedCreateOptions.fetch;\n\tconst baseUrl = resolvedCreateOptions.baseUrl;\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 abortBridge = cancellationTokenToAbortSignal(\n\t\t\t\trequest.cancellationToken,\n\t\t\t);\n\t\t\tconst init: RequestInit = {\n\t\t\t\tmethod: request.method,\n\t\t\t\theaders: request.headers,\n\t\t\t\tredirect,\n\t\t\t\tsignal: abortBridge?.signal,\n\t\t\t};\n\n\t\t\tif (\n\t\t\t\trequest.body !== undefined &&\n\t\t\t\trequest.method !== \"GET\" &&\n\t\t\t\trequest.method !== \"HEAD\"\n\t\t\t) {\n\t\t\t\tinit.body =\n\t\t\t\t\ttypeof request.body === \"string\"\n\t\t\t\t\t\t? request.body\n\t\t\t\t\t\t: JSON.stringify(request.body);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tlet res: Response;\n\t\t\t\ttry {\n\t\t\t\t\tres = await fetchImpl(requestUrl, init);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst normalized = normalizeAbortError(\n\t\t\t\t\t\trequest.cancellationToken,\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t\tif (normalized instanceof ClientError) {\n\t\t\t\t\t\tthrow normalized;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new ClientError({\n\t\t\t\t\t\tkind: ClientErrorKind.Transport,\n\t\t\t\t\t\tmessage: \"The HTTP request could not reach the remote service\",\n\t\t\t\t\t\tcode: TransportErrorCode.RequestFailed,\n\t\t\t\t\t\tsource: ClientErrorSource.Transport,\n\t\t\t\t\t\tretryable: true,\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst responseHeaders: Record<string, string> = {};\n\t\t\t\tres.headers.forEach((value, key) => {\n\t\t\t\t\tresponseHeaders[key] = value;\n\t\t\t\t});\n\n\t\t\t\tlet body: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tconst contentType = res.headers.get(\"content-type\");\n\t\t\t\t\tif (contentType?.includes(\"application/json\")) {\n\t\t\t\t\t\tbody = await res.json();\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tres.status !== 302 &&\n\t\t\t\t\t\tres.status !== 303 &&\n\t\t\t\t\t\tres.status !== 301\n\t\t\t\t\t) {\n\t\t\t\t\t\tbody = await res.text();\n\t\t\t\t\t}\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\n\t\t\t\treturn {\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\theaders: responseHeaders,\n\t\t\t\t\tbody,\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\tabortBridge?.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n","import { type as defineType } from \"arktype\";\nimport { type EventStreamTrait } from \"../events\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\n\n// --- Storage abstractions ---\n\nexport const StorageChangeEventOrigin = {\n\tLocal: \"local\",\n\tExternal: \"external\",\n} as const;\n\nexport type StorageChangeEventOrigin =\n\t(typeof StorageChangeEventOrigin)[keyof typeof StorageChangeEventOrigin];\n\nexport interface StorageChangeEvent {\n\treadonly origin: StorageChangeEventOrigin;\n\treadonly key: string | null;\n\treadonly oldValue: string | null;\n\treadonly newValue: string | null;\n}\n\n/** Low-level key-value storage trait. */\nexport interface StorageTrait {\n\treadonly storageEvent?: EventStreamTrait<StorageChangeEvent>;\n\tget(key: string): string | null | Promise<string | null>;\n\tset(key: string, value: string): void | Promise<void>;\n\t/**\n\t * Atomically read and remove a record within the store's consistency domain.\n\t */\n\ttake?(key: string): string | null | Promise<string | null>;\n\tremove(key: string): void | Promise<void>;\n}\n\n/** Storage whose operations complete synchronously in the current realm. */\nexport interface SyncStorageTrait extends StorageTrait {\n\tget(key: string): string | null;\n\tset(key: string, value: string): void;\n\ttake?(key: string): string | null;\n\tremove(key: string): void;\n}\n\nexport const StorageTraitSchema = defineType({\n\t\"storageEvent?\": {\n\t\tsubscribe: \"Function\",\n\t},\n\tget: \"Function\",\n\tset: \"Function\",\n\ttake: \"Function?\",\n\tremove: \"Function\",\n});\n\nexport const REALM_STORAGE_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<SyncStorageTrait>(\"REALM_STORAGE_TRAIT_TOKEN\");\n\nexport const PERSISTENT_STORAGE_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<StorageTrait | null>(\n\t\t\"PERSISTENT_STORAGE_TRAIT_TOKEN\",\n\t);\n\nexport const SESSION_STORAGE_TRAIT_TOKEN =\n\tnew SecuritydeptInjectionToken<StorageTrait | null>(\n\t\t\"SESSION_STORAGE_TRAIT_TOKEN\",\n\t);\n\n/** Serialization codec for typed values. */\nexport interface Codec<T> {\n\tencode(value: T): string;\n\tdecode(raw: string): T;\n}\n\n/** Semantic store for long-lived auth state. */\nexport interface PersistentAuthStore<T> {\n\tload(): Promise<T | null>;\n\tsave(value: T): Promise<void>;\n\tclear(): Promise<void>;\n}\n\n/** Semantic store for recoverable state (survives page reload). */\nexport interface RecoverableStateStore<T> {\n\tload(): Promise<T | null>;\n\tsave(value: T): Promise<void>;\n\tclear(): Promise<void>;\n}\n\n/** Semantic store for ephemeral flow state (one-time-use). */\nexport interface EphemeralFlowStore<T> {\n\tload(): Promise<T | null>;\n\tsave(value: T): Promise<void>;\n\tconsume(): Promise<T | null>;\n\tclear(): Promise<void>;\n}\n\n/** Semantic store for keyed ephemeral flow state (one-time-use per key). */\nexport interface KeyedEphemeralFlowStore<T> {\n\tload(key: string): Promise<T | null>;\n\tsave(key: string, value: T): Promise<void>;\n\ttake(key: string): Promise<T | null>;\n\tclear(key: string): Promise<void>;\n}\n\n/** Versioned storage envelope — first-version migration support. */\nexport interface StoredEnvelope<T> {\n\tversion: number;\n\tstoredAt: number;\n\texpiresAt?: number;\n\tvalue: T;\n}\n","import { RxEventSubject } from \"../rx/event\";\nimport {\n\ttype StorageChangeEvent,\n\tStorageChangeEventOrigin,\n\ttype SyncStorageTrait,\n} from \"./types\";\n\n/** In-memory `SyncStorageTrait` — useful for realm state, tests, and SSR. */\nexport function createInMemoryRecordStore(): SyncStorageTrait {\n\tconst store = new Map<string, string>();\n\tconst storageEvent = new RxEventSubject<StorageChangeEvent>();\n\n\treturn {\n\t\tstorageEvent,\n\t\tget(key: string): string | null {\n\t\t\treturn store.get(key) ?? null;\n\t\t},\n\t\tset(key: string, value: string): void {\n\t\t\tconst oldValue = store.get(key) ?? null;\n\t\t\tstore.set(key, value);\n\t\t\tstorageEvent.next({\n\t\t\t\torigin: StorageChangeEventOrigin.Local,\n\t\t\t\tkey,\n\t\t\t\toldValue,\n\t\t\t\tnewValue: value,\n\t\t\t});\n\t\t},\n\t\ttake(key: string): string | null {\n\t\t\tconst value = store.get(key) ?? null;\n\t\t\tif (value !== null) {\n\t\t\t\tstore.delete(key);\n\t\t\t\tstorageEvent.next({\n\t\t\t\t\torigin: StorageChangeEventOrigin.Local,\n\t\t\t\t\tkey,\n\t\t\t\t\toldValue: value,\n\t\t\t\t\tnewValue: null,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tremove(key: string): void {\n\t\t\tconst oldValue = store.get(key) ?? null;\n\t\t\tif (oldValue !== null) {\n\t\t\t\tstore.delete(key);\n\t\t\t\tstorageEvent.next({\n\t\t\t\t\torigin: StorageChangeEventOrigin.Local,\n\t\t\t\t\tkey,\n\t\t\t\t\toldValue,\n\t\t\t\t\tnewValue: null,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t};\n}\n","import { type as defineType } from \"arktype\";\nimport { type TracingEvent } from \"../types\";\n\nexport interface TracingSubscriberTrait {\n\trecord(event: TracingEvent): void;\n}\n\nexport const TracingSubscriberTraitSchema = defineType({\n\trecord: \"Function\",\n});\n","import { type as defineType } from \"arktype\";\nimport { SYMBOL_DISPOSE } from \"../compat\";\nimport { RxEventSubject } from \"../rx/event\";\nimport {\n\ttype TraitInputValidator,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n\ttype WithTraitInputValidator,\n} from \"../validation\";\nimport {\n\ttype TracingSubscriberTrait,\n\tTracingSubscriberTraitSchema,\n} from \"./subscriber/types\";\nimport { type TracingEvent, type TracingTrait } from \"./types\";\n\nexport interface TracingCreateOptions {\n\tsubscribers?: readonly TracingSubscriberTrait[];\n}\n\nexport const TracingCreateOptionsSchema = defineType({\n\tsubscribers: TracingSubscriberTraitSchema.array(),\n});\n\nexport function createTracing(\n\toptions?: TracingCreateOptions & WithTraitInputValidator<TraitInputValidator>,\n): TracingTrait {\n\tconst { validators, ...resolvedOptions } = options ?? {};\n\tconst resolvedCreateOptions = {\n\t\tsubscribers: resolvedOptions.subscribers ?? [],\n\t};\n\tvalidateTraitInput({\n\t\tvalue: resolvedCreateOptions,\n\t\tbundledSchema: TracingCreateOptionsSchema,\n\t\tvalidator: validators,\n\t\tonInvalid: (failure) =>\n\t\t\tthrowValidationClientError({\n\t\t\t\tcode: \"tracing.invalid_options\",\n\t\t\t\tsource: \"tracing\",\n\t\t\t\tmessagePrefix: \"createTracing could not validate tracingCreateOptions\",\n\t\t\t\tfailure,\n\t\t\t}),\n\t});\n\tconst subject = new RxEventSubject<TracingEvent>();\n\tlet subscribers = resolvedCreateOptions.subscribers;\n\n\treturn {\n\t\trecord(event) {\n\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\tsubscriber.record(event);\n\t\t\t}\n\t\t\tsubject.next(event);\n\t\t},\n\t\tevents: subject,\n\t\tdispose() {\n\t\t\tsubscribers = [];\n\t\t},\n\t\t[SYMBOL_DISPOSE]() {\n\t\t\tthis.dispose();\n\t\t},\n\t};\n}\n","import { type as defineType } from \"arktype\";\nimport { type DisposableTrait } from \"../compat\";\nimport { type EventStreamTrait, EventStreamTraitSchema } from \"../events/types\";\nimport { SecuritydeptInjectionToken } from \"../injection\";\nimport {\n\ttype MutableSpanTrait,\n\ttype SpanAttributes,\n\ttype SpanTrait,\n} from \"../span/types\";\n\n// --- Tracing and observability ---\n\nexport const TracingLevel = {\n\tDebug: \"debug\",\n\tInfo: \"info\",\n\tWarn: \"warn\",\n\tError: \"error\",\n} as const;\n\nexport type TracingLevel = (typeof TracingLevel)[keyof typeof TracingLevel];\n\nexport const OperationTraceEventType = {\n\tStarted: \"operation.started\",\n\tEvent: \"operation.event\",\n\tError: \"operation.error\",\n\tEnded: \"operation.ended\",\n} as const;\n\nexport type OperationTraceEventType =\n\t(typeof OperationTraceEventType)[keyof typeof OperationTraceEventType];\n\nexport const TRACING_SPAN_ATTRIBUTE_PROVIDER_ID =\n\t\"@securitydept/client/tracing\";\n\nexport interface OperationSpanTrait {\n\treadonly span: MutableSpanTrait;\n\tsetTraceAttributes(attributes: SpanAttributes): void;\n\taddEvent(type: string, attributes?: SpanAttributes): void;\n\trecordError(error: unknown, attributes?: SpanAttributes): void;\n}\n\nexport interface TracingEvent {\n\tname: string;\n\tat: number;\n\tspan: SpanTrait;\n\tlevel: TracingLevel;\n\ttarget: string;\n\tfields?: SpanAttributes;\n}\n\nexport interface TracingTrait extends DisposableTrait {\n\trecord(event: TracingEvent): void;\n\treadonly events: EventStreamTrait<TracingEvent>;\n}\n\nexport const TracingTraitSchema = defineType({\n\trecord: \"Function\",\n\tdispose: \"Function\",\n\tevents: EventStreamTraitSchema,\n});\n\nexport const TRACING_TRAIT_TOKEN = new SecuritydeptInjectionToken<TracingTrait>(\n\t\"TRACING_TRAIT_TOKEN\",\n);\n","import {\n\tSecuritydeptInjectionToken,\n\ttype SecuritydeptInjector,\n} from \"../injection\";\nimport { type PageLifecycleTrait } from \"../page\";\nimport { type PopupTrait } from \"../popup\";\nimport { type RouterTrait } from \"../router\";\nimport { type IdleCallbackTrait, type TimeTrait } from \"../scheduling/types\";\nimport { type SpanTrait } from \"../span/types\";\nimport { type StorageTrait, type SyncStorageTrait } from \"../storage/types\";\nimport { type TracingTrait } from \"../tracing/types\";\nimport { type BaseTransportTrait } from \"../transport/types\";\nimport { type TraitInputValidator } from \"../validation\";\n\n/**\n * Foundation dependency environment injected into client-side auth runtimes\n * via explicit wiring at the composition root.\n *\n * `transport`, `time`, `realmStorage`, `span`, and `tracing` are the required baseline\n * capabilities. Optional page/router/popup/storage traits stay explicit.\n * Raw host-material inputs such as `window`, `location`, or browser storage\n * handles are intentionally outside this contract and should be resolved by\n * host-specific creators before a `FoundationEnvironment` is assembled.\n */\nexport interface FoundationEnvironment {\n\tinjector: SecuritydeptInjector;\n\ttransport: BaseTransportTrait;\n\ttime: TimeTrait;\n\trealmStorage: SyncStorageTrait;\n\tidleCallback?: IdleCallbackTrait;\n\tpersistentStorage?: StorageTrait;\n\tsessionStorage?: StorageTrait;\n\tspan: SpanTrait;\n\ttracing: TracingTrait;\n\trouter?: RouterTrait;\n\tpageLifecycle?: PageLifecycleTrait;\n\tpopup?: PopupTrait;\n}\n\nexport interface ServiceWorkerEnvironment extends FoundationEnvironment {}\n\nexport const ENVIRONMENT_TOKEN =\n\tnew SecuritydeptInjectionToken<FoundationEnvironment>(\"ENVIRONMENT_TOKEN\");\n\nexport interface EnvironmentValidators {\n\ttransport?: TraitInputValidator;\n\ttransportForStdFetchCreateOptions?: TraitInputValidator;\n\ttime?: TraitInputValidator;\n\ttimeForStdCreateOptions?: TraitInputValidator;\n\trealmStorage?: TraitInputValidator;\n\tidleCallback?: TraitInputValidator;\n\tpersistentStorage?: TraitInputValidator;\n\tsessionStorage?: TraitInputValidator;\n\tspan?: TraitInputValidator;\n\tspanCreateOptions?: TraitInputValidator;\n\ttracing?: TraitInputValidator;\n\ttracingCreateOptions?: TraitInputValidator;\n\trouter?: TraitInputValidator;\n\tpageLifecycle?: TraitInputValidator;\n\tpopup?: TraitInputValidator;\n}\n","import {\n\tcreateProviderIfTokenMissing,\n\tgetSecuritydeptProviderToken,\n\tINJECTOR_TOKEN,\n\tnotMissingProvider,\n\ttype SecuritydeptDependencyDescriptor,\n\ttype SecuritydeptFactoryProvider,\n\tSecuritydeptInjector,\n\ttype SecuritydeptProvider,\n\ttype SecuritydeptValueProvider,\n} from \"../injection\";\nimport {\n\tPAGE_LIFECYCLE_TRAIT_TOKEN,\n\ttype PageLifecycleTrait,\n\tPageLifecycleTraitSchema,\n} from \"../page\";\nimport { POPUP_TRAIT_TOKEN, type PopupTrait, PopupTraitSchema } from \"../popup\";\nimport {\n\tROUTER_TRAIT_TOKEN,\n\ttype RouterTrait,\n\tRouterTraitSchema,\n} from \"../router\";\nimport {\n\tIDLE_CALLBACK_TRAIT_TOKEN,\n\ttype IdleCallbackTrait,\n\tIdleCallbackTraitSchema,\n\tTIME_TRAIT_TOKEN,\n\ttype TimeTrait,\n\tTimeTraitSchema,\n} from \"../scheduling/types\";\nimport { createRootSpan } from \"../span\";\nimport {\n\tSPAN_TRAIT_TOKEN,\n\ttype SpanCreateOptions,\n\ttype SpanTrait,\n\tSpanTraitSchema,\n} from \"../span/types\";\nimport { createBaseTransportForStdFetch, createTimeForStd } from \"../std/index\";\nimport { type TimeForStdCreateOptions } from \"../std/time\";\nimport { type BaseTransportForStdFetchCreateOptions } from \"../std/transport\";\nimport { createInMemoryRecordStore } from \"../storage/memory-store\";\nimport {\n\tPERSISTENT_STORAGE_TRAIT_TOKEN,\n\tREALM_STORAGE_TRAIT_TOKEN,\n\tSESSION_STORAGE_TRAIT_TOKEN,\n\ttype StorageTrait,\n\tStorageTraitSchema,\n\ttype SyncStorageTrait,\n} from \"../storage/types\";\nimport { createTracing } from \"../tracing\";\nimport { type TracingCreateOptions } from \"../tracing/create\";\nimport {\n\tTRACING_TRAIT_TOKEN,\n\ttype TracingTrait,\n\tTracingTraitSchema,\n} from \"../tracing/types\";\nimport {\n\ttype BaseTransportTrait,\n\tBaseTransportTraitSchema,\n\tTRANSPORT_TRAIT_TOKEN,\n} from \"../transport/types\";\nimport {\n\ttype TraitInputBundledSchema,\n\tthrowValidationClientError,\n\tvalidateTraitInput,\n} from \"../validation\";\nimport {\n\tENVIRONMENT_TOKEN,\n\ttype EnvironmentValidators,\n\ttype FoundationEnvironment,\n} from \"./types\";\n\nexport interface CreateFoundationEnvironmentOptions {\n\tproviders?: readonly SecuritydeptProvider[];\n\ttransport?: BaseTransportTrait;\n\ttransportForStdFetchCreateOptions?: BaseTransportForStdFetchCreateOptions;\n\ttime?: TimeTrait;\n\ttimeForStdCreateOptions?: TimeForStdCreateOptions;\n\trealmStorage?: SyncStorageTrait;\n\tspan?: SpanTrait;\n\tspanCreateOptions?: SpanCreateOptions;\n\ttracing?: TracingTrait;\n\ttracingCreateOptions?: TracingCreateOptions;\n\tidleCallback?: IdleCallbackTrait | null;\n\tpersistentStorage?: StorageTrait | null;\n\tsessionStorage?: StorageTrait | null;\n\trouter?: RouterTrait | null;\n\tpageLifecycle?: PageLifecycleTrait | null;\n\tpopup?: PopupTrait | null;\n\tvalidators?: EnvironmentValidators;\n}\n\n/**\n * Create a `FoundationEnvironment` from explicit trait units and defaults.\n *\n * This helper owns foundation-wide baseline resolution and trait-graph wiring.\n *\n * It may resolve:\n * - public std adapters such as\n * `transportForStdFetchCreateOptions -> transport` and `timeForStdCreateOptions -> time`\n * - public hostless baseline constructors such as\n * `spanCreateOptions -> span` and `tracingCreateOptions -> tracing`\n *\n * Host-material discovery such as resolving `window`, `location`, `history`,\n * or browser storage handles belongs to explicit host adapters such as\n * `@securitydept/client/web`, which must first resolve those inputs into\n * concrete traits before calling this helper.\n */\nexport function createFoundationEnvironment(\n\toverrides: CreateFoundationEnvironmentOptions,\n): FoundationEnvironment {\n\tconst providers = overrides.providers ?? [];\n\tconst externalProviderTokens = new Set(\n\t\tproviders.map((provider) => getSecuritydeptProviderToken(provider)),\n\t);\n\tif (externalProviderTokens.has(ENVIRONMENT_TOKEN)) {\n\t\tthrowValidationClientError({\n\t\t\tcode: \"environment.foundation_provider_reserved\",\n\t\t\tsource: \"environment\",\n\t\t\tmessagePrefix:\n\t\t\t\t\"createFoundationEnvironment does not allow overriding ENVIRONMENT_TOKEN\",\n\t\t});\n\t}\n\tconst injector = SecuritydeptInjector.resolveAndCreate([\n\t\t...createBuiltInTraitUnits(overrides, externalProviderTokens),\n\t\t...providers,\n\t\tcreateFoundationEnvironmentUnit(),\n\t]);\n\treturn injector.get(ENVIRONMENT_TOKEN);\n}\n\nfunction createBuiltInTraitUnits(\n\toverrides: CreateFoundationEnvironmentOptions,\n\texternalProviderTokens: ReadonlySet<\n\t\tSecuritydeptValueProvider<unknown>[\"provide\"]\n\t>,\n): SecuritydeptProvider[] {\n\tconst builtInTraitUnits: Array<SecuritydeptProvider | null> = [\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tTRANSPORT_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: TRANSPORT_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"transport\",\n\t\t\t\t\tbundledSchema: BaseTransportTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.transport,\n\t\t\t\t\tcreateValue: () =>\n\t\t\t\t\t\toverrides.transport ??\n\t\t\t\t\t\tcreateBaseTransportForStdFetch({\n\t\t\t\t\t\t\t...overrides.transportForStdFetchCreateOptions,\n\t\t\t\t\t\t\tvalidators:\n\t\t\t\t\t\t\t\toverrides.validators?.transportForStdFetchCreateOptions,\n\t\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(externalProviderTokens, TIME_TRAIT_TOKEN, () =>\n\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\ttoken: TIME_TRAIT_TOKEN,\n\t\t\t\ttraitName: \"time\",\n\t\t\t\tbundledSchema: TimeTraitSchema,\n\t\t\t\tvalidator: overrides.validators?.time,\n\t\t\t\tcreateValue: () =>\n\t\t\t\t\toverrides.time ??\n\t\t\t\t\tcreateTimeForStd({\n\t\t\t\t\t\t...overrides.timeForStdCreateOptions,\n\t\t\t\t\t\tvalidators: overrides.validators?.timeForStdCreateOptions,\n\t\t\t\t\t}),\n\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tREALM_STORAGE_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: REALM_STORAGE_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"realmStorage\",\n\t\t\t\t\tbundledSchema: StorageTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.realmStorage,\n\t\t\t\t\tcreateValue: () =>\n\t\t\t\t\t\toverrides.realmStorage ?? createInMemoryRecordStore(),\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(externalProviderTokens, SPAN_TRAIT_TOKEN, () =>\n\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\ttoken: SPAN_TRAIT_TOKEN,\n\t\t\t\ttraitName: \"span\",\n\t\t\t\tbundledSchema: SpanTraitSchema,\n\t\t\t\tvalidator: overrides.validators?.span,\n\t\t\t\tcreateValue: () =>\n\t\t\t\t\toverrides.span ??\n\t\t\t\t\tcreateRootSpan({\n\t\t\t\t\t\t...overrides.spanCreateOptions,\n\t\t\t\t\t\tvalidators: overrides.validators?.spanCreateOptions,\n\t\t\t\t\t}),\n\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tTRACING_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: TRACING_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"tracing\",\n\t\t\t\t\tbundledSchema: TracingTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.tracing,\n\t\t\t\t\tcreateValue: () =>\n\t\t\t\t\t\toverrides.tracing ??\n\t\t\t\t\t\tcreateTracing({\n\t\t\t\t\t\t\t...overrides.tracingCreateOptions,\n\t\t\t\t\t\t\tvalidators: overrides.validators?.tracingCreateOptions,\n\t\t\t\t\t\t}),\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tIDLE_CALLBACK_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: IDLE_CALLBACK_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"idleCallback\",\n\t\t\t\t\tbundledSchema: IdleCallbackTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.idleCallback,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tcreateValue: () => overrides.idleCallback ?? null,\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tPERSISTENT_STORAGE_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: PERSISTENT_STORAGE_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"persistentStorage\",\n\t\t\t\t\tbundledSchema: StorageTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.persistentStorage,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tcreateValue: () => overrides.persistentStorage ?? null,\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tSESSION_STORAGE_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: SESSION_STORAGE_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"sessionStorage\",\n\t\t\t\t\tbundledSchema: StorageTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.sessionStorage,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tcreateValue: () => overrides.sessionStorage ?? null,\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tROUTER_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: ROUTER_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"router\",\n\t\t\t\t\tbundledSchema: RouterTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.router,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tcreateValue: () => overrides.router ?? null,\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tPAGE_LIFECYCLE_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: PAGE_LIFECYCLE_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"pageLifecycle\",\n\t\t\t\t\tbundledSchema: PageLifecycleTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.pageLifecycle,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tcreateValue: () => overrides.pageLifecycle ?? null,\n\t\t\t\t}),\n\t\t),\n\t\tcreateProviderIfTokenMissing(\n\t\t\texternalProviderTokens,\n\t\t\tPOPUP_TRAIT_TOKEN,\n\t\t\t() =>\n\t\t\t\tcreateBuiltInTraitUnit({\n\t\t\t\t\ttoken: POPUP_TRAIT_TOKEN,\n\t\t\t\t\ttraitName: \"popup\",\n\t\t\t\t\tbundledSchema: PopupTraitSchema,\n\t\t\t\t\tvalidator: overrides.validators?.popup,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tcreateValue: () => overrides.popup ?? null,\n\t\t\t\t}),\n\t\t),\n\t];\n\n\treturn builtInTraitUnits.filter(notMissingProvider);\n}\n\nfunction createBuiltInTraitUnit<T>(options: {\n\ttoken: SecuritydeptValueProvider<T>[\"provide\"];\n\ttraitName: string;\n\tbundledSchema: TraitInputBundledSchema;\n\tvalidator: EnvironmentValidators[keyof EnvironmentValidators];\n\tdeps?: readonly SecuritydeptDependencyDescriptor<unknown>[];\n\toptional?: boolean;\n\tcreateValue(...deps: readonly unknown[]): T;\n}): SecuritydeptFactoryProvider<T> {\n\treturn {\n\t\tprovide: options.token,\n\t\tuseFactory: ((...deps: readonly unknown[]) => {\n\t\t\tconst value = options.createValue(...deps);\n\t\t\tvalidateTraitInput({\n\t\t\t\tvalue: value,\n\t\t\t\tbundledSchema: options.bundledSchema,\n\t\t\t\tvalidator: options.validator,\n\t\t\t\toptional: options.optional,\n\t\t\t\tonInvalid: (failure) =>\n\t\t\t\t\tthrowValidationClientError({\n\t\t\t\t\t\tcode: \"environment.trait_validation_failed\",\n\t\t\t\t\t\tsource: \"environment\",\n\t\t\t\t\t\tmessagePrefix: `${\"createFoundationEnvironment\"} could not validate ${options.traitName}`,\n\t\t\t\t\t\tfailure: failure,\n\t\t\t\t\t}),\n\t\t\t});\n\t\t\treturn value;\n\t\t}) as (...deps: never[]) => T,\n\t\tdeps: options.deps,\n\t};\n}\n\nfunction createFoundationEnvironmentUnit(): SecuritydeptFactoryProvider<FoundationEnvironment> {\n\treturn {\n\t\tprovide: ENVIRONMENT_TOKEN,\n\t\tuseFactory: ((\n\t\t\tinjector: SecuritydeptInjector,\n\t\t\ttransport: BaseTransportTrait,\n\t\t\ttime: TimeTrait,\n\t\t\trealmStorage: SyncStorageTrait,\n\t\t\tspan: SpanTrait,\n\t\t\ttracing: TracingTrait,\n\t\t\tidleCallback: IdleCallbackTrait | null,\n\t\t\tpersistentStorage: StorageTrait | null,\n\t\t\tsessionStorage: StorageTrait | null,\n\t\t\trouter: RouterTrait | null,\n\t\t\tpageLifecycle: PageLifecycleTrait | null,\n\t\t\tpopup: PopupTrait | null,\n\t\t) => {\n\t\t\treturn {\n\t\t\t\tinjector,\n\t\t\t\ttransport,\n\t\t\t\ttime,\n\t\t\t\trealmStorage,\n\t\t\t\tidleCallback: idleCallback ?? undefined,\n\t\t\t\tpersistentStorage: persistentStorage ?? undefined,\n\t\t\t\tsessionStorage: sessionStorage ?? undefined,\n\t\t\t\tspan,\n\t\t\t\ttracing,\n\t\t\t\trouter: router ?? undefined,\n\t\t\t\tpageLifecycle: pageLifecycle ?? undefined,\n\t\t\t\tpopup: popup ?? undefined,\n\t\t\t} satisfies FoundationEnvironment;\n\t\t}) as (...deps: never[]) => FoundationEnvironment,\n\t\tdeps: [\n\t\t\tINJECTOR_TOKEN,\n\t\t\tTRANSPORT_TRAIT_TOKEN,\n\t\t\tTIME_TRAIT_TOKEN,\n\t\t\tREALM_STORAGE_TRAIT_TOKEN,\n\t\t\tSPAN_TRAIT_TOKEN,\n\t\t\tTRACING_TRAIT_TOKEN,\n\t\t\tIDLE_CALLBACK_TRAIT_TOKEN,\n\t\t\tPERSISTENT_STORAGE_TRAIT_TOKEN,\n\t\t\tSESSION_STORAGE_TRAIT_TOKEN,\n\t\t\tROUTER_TRAIT_TOKEN,\n\t\t\tPAGE_LIFECYCLE_TRAIT_TOKEN,\n\t\t\tPOPUP_TRAIT_TOKEN,\n\t\t],\n\t};\n}\n"],"mappings":"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"}
@@ -1,7 +1,14 @@
1
- import { A as RxEventSubject, D as RxStateSignal, F as SYMBOL_DISPOSE, G as UserRecovery, H as ClientErrorKind, V as ClientError, W as ErrorPresentationTone, h as createAsyncSchedulerWithTimestampProvider } from "./rx-B3OU17wu.mjs";
2
- import { B as validateWithSchemaSync } from "./create-99Ksgl_O.mjs";
1
+ import { A as RxEventSubject, D as RxStateSignal, F as SYMBOL_DISPOSE, G as ErrorPresentationTone, H as ClientError, K as UserRecovery, U as ClientErrorKind, h as createAsyncSchedulerWithTimestampProvider } from "./rx-DM6Ouv-m.mjs";
2
+ import { V as validateWithSchemaSync } from "./create-i5VyYgN6.mjs";
3
3
  import { BehaviorSubject, ReplaySubject, Subject, catchError, delayWhen, distinctUntilChanged, exhaustMap, filter, from, map, merge, of, shareReplay, take, takeUntil, timeout, timer } from "rxjs";
4
4
  import { type } from "arktype";
5
+ //#region src/span/attributes.ts
6
+ const SpanSharedAttributeName = {
7
+ ClientName: "client.name",
8
+ ClientId: "client.id",
9
+ OperationName: "operation.name"
10
+ };
11
+ //#endregion
5
12
  //#region src/errors/presentation-descriptor.ts
6
13
  const DEFAULT_RECOVERY_LABELS = {
7
14
  [UserRecovery.None]: "",
@@ -10,35 +17,48 @@ const DEFAULT_RECOVERY_LABELS = {
10
17
  [UserRecovery.Reauthenticate]: "Sign in again",
11
18
  [UserRecovery.ContactSupport]: "Contact support"
12
19
  };
13
- const userRecoveryValues = new Set(Object.values(UserRecovery));
14
- const clientErrorKindValues = new Set(Object.values(ClientErrorKind));
20
+ const formatClientErrorContext = (context) => {
21
+ let clientName;
22
+ let clientId;
23
+ let operationName;
24
+ for (const frame of context) {
25
+ const frameClientName = frame.attributes[SpanSharedAttributeName.ClientName];
26
+ const frameClientId = frame.attributes[SpanSharedAttributeName.ClientId];
27
+ const frameOperationName = frame.attributes[SpanSharedAttributeName.OperationName];
28
+ if (typeof frameClientName === "string") clientName = frameClientName;
29
+ if (typeof frameClientId === "string") clientId = frameClientId;
30
+ if (typeof frameOperationName === "string") operationName = frameOperationName;
31
+ }
32
+ return [clientName ?? clientId, operationName].filter((value) => Boolean(value)).join(" · ") || void 0;
33
+ };
15
34
  function readErrorPresentationDescriptor(error, options = {}) {
16
- const clientError = error instanceof ClientError ? error : coerceClientErrorLike(error);
17
- if (!clientError) return {
35
+ if (!(error instanceof ClientError)) return {
18
36
  code: null,
19
- kind: null,
20
37
  title: options.fallbackTitle ?? "Operation failed",
21
38
  description: options.fallbackDescription ?? "An unexpected error prevented the operation from completing.",
22
39
  recovery: UserRecovery.None,
23
- retryable: false,
24
40
  tone: ErrorPresentationTone.Danger,
25
41
  primaryAction: null
26
42
  };
43
+ const clientError = error;
27
44
  const code = clientError.presentation?.code ?? clientError.code;
28
45
  const codePresentation = code ? options.codePresentations?.[code] : void 0;
29
46
  const recovery = clientError.presentation?.recovery ?? codePresentation?.recovery ?? clientError.recovery;
30
47
  const generic = readGenericPresentation(clientError.kind);
31
- return {
48
+ const descriptor = {
32
49
  code,
33
- kind: clientError.kind,
34
- source: clientError.source,
35
50
  title: codePresentation?.title ?? generic.title,
36
51
  description: clientError.presentation?.message ?? codePresentation?.description ?? generic.description,
37
52
  recovery,
38
- retryable: clientError.retryable,
39
53
  tone: codePresentation?.tone ?? readClientErrorTone(clientError.kind, recovery),
40
54
  primaryAction: readPrimaryAction(recovery, options)
41
55
  };
56
+ if (!clientError.spanContext || options.contextFormatter === null) return descriptor;
57
+ const contextLabel = (options.contextFormatter ?? formatClientErrorContext)(clientError.spanContext);
58
+ return contextLabel ? {
59
+ ...descriptor,
60
+ title: `${contextLabel}: ${descriptor.title}`
61
+ } : descriptor;
42
62
  }
43
63
  function readGenericPresentation(kind) {
44
64
  switch (kind) {
@@ -93,22 +113,6 @@ function readClientErrorTone(kind, recovery) {
93
113
  if (kind === ClientErrorKind.Unauthenticated || kind === ClientErrorKind.Timeout || kind === ClientErrorKind.Transport || kind === ClientErrorKind.Server || recovery === UserRecovery.Retry || recovery === UserRecovery.RestartFlow || recovery === UserRecovery.Reauthenticate) return ErrorPresentationTone.Warning;
94
114
  return ErrorPresentationTone.Danger;
95
115
  }
96
- function coerceClientErrorLike(error) {
97
- if (typeof error !== "object" || error === null) return null;
98
- const candidate = error;
99
- if (typeof candidate.kind !== "string" || !clientErrorKindValues.has(candidate.kind)) return null;
100
- return {
101
- code: typeof candidate.code === "string" ? candidate.code : null,
102
- kind: candidate.kind,
103
- recovery: typeof candidate.recovery === "string" && userRecoveryValues.has(candidate.recovery) ? candidate.recovery : UserRecovery.None,
104
- retryable: candidate.retryable === true,
105
- source: typeof candidate.source === "string" ? candidate.source : void 0,
106
- presentation: isErrorPresentation(candidate.presentation) ? candidate.presentation : void 0
107
- };
108
- }
109
- function isErrorPresentation(value) {
110
- return typeof value === "object" && value !== null && typeof value.code === "string" && typeof value.message === "string" && typeof value.recovery === "string" && userRecoveryValues.has(value.recovery);
111
- }
112
116
  function readPrimaryAction(recovery, options) {
113
117
  if (recovery === UserRecovery.None) return null;
114
118
  const label = options.recoveryLabels?.[recovery] ?? DEFAULT_RECOVERY_LABELS[recovery];
@@ -629,6 +633,6 @@ var PopupServerWindowHandle = class {
629
633
  }
630
634
  };
631
635
  //#endregion
632
- export { createJsonRpcServerAndClient as a, createSignal as c, createJsonRpcServer as i, readonlySignal as l, PopupServerWindowHandle as n, PopupErrorCode as o, createJsonRpcClient as r, readPopupErrorPresentationDescriptor as s, PopupClientWindowHandle as t, readErrorPresentationDescriptor as u };
636
+ export { createJsonRpcServerAndClient as a, createSignal as c, readErrorPresentationDescriptor as d, SpanSharedAttributeName as f, createJsonRpcServer as i, readonlySignal as l, PopupServerWindowHandle as n, PopupErrorCode as o, createJsonRpcClient as r, readPopupErrorPresentationDescriptor as s, PopupClientWindowHandle as t, formatClientErrorContext as u };
633
637
 
634
- //# sourceMappingURL=handle-TnxwtQ4T.mjs.map
638
+ //# sourceMappingURL=handle-DwMgqe7R.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-DwMgqe7R.mjs","names":["UserRecoveryValue","ClientErrorKindValue","defineType"],"sources":["../src/span/attributes.ts","../src/errors/presentation-descriptor.ts","../src/signals/signal.ts","../src/popup/errors.ts","../src/protocol/json-rpc/types.ts","../src/protocol/json-rpc/create.ts","../src/popup/session.ts","../src/popup/handle.ts"],"sourcesContent":["export const SpanSharedAttributeName = {\n\tClientName: \"client.name\",\n\tClientId: \"client.id\",\n\tOperationName: \"operation.name\",\n} as const;\n\nexport type SpanSharedAttributeName =\n\t(typeof SpanSharedAttributeName)[keyof typeof SpanSharedAttributeName];\n","import { SpanSharedAttributeName } from \"../span/attributes\";\nimport { ClientError } from \"./client-error\";\nimport {\n\ttype ClientErrorContextFormatter,\n\ttype ClientErrorKind,\n\tClientErrorKind as ClientErrorKindValue,\n\ttype ErrorPresentationDescriptor,\n\tErrorPresentationTone,\n\ttype ErrorRecoveryActionDescriptor,\n\ttype ReadErrorPresentationDescriptorOptions,\n\ttype UserRecovery,\n\tUserRecovery as UserRecoveryValue,\n} from \"./types\";\n\nconst DEFAULT_RECOVERY_LABELS: Record<UserRecovery, string> = {\n\t[UserRecoveryValue.None]: \"\",\n\t[UserRecoveryValue.Retry]: \"Try again\",\n\t[UserRecoveryValue.RestartFlow]: \"Restart flow\",\n\t[UserRecoveryValue.Reauthenticate]: \"Sign in again\",\n\t[UserRecoveryValue.ContactSupport]: \"Contact support\",\n};\n\nexport const formatClientErrorContext: ClientErrorContextFormatter = (\n\tcontext,\n) => {\n\tlet clientName: string | undefined;\n\tlet clientId: string | undefined;\n\tlet operationName: string | undefined;\n\tfor (const frame of context) {\n\t\tconst frameClientName =\n\t\t\tframe.attributes[SpanSharedAttributeName.ClientName];\n\t\tconst frameClientId = frame.attributes[SpanSharedAttributeName.ClientId];\n\t\tconst frameOperationName =\n\t\t\tframe.attributes[SpanSharedAttributeName.OperationName];\n\t\tif (typeof frameClientName === \"string\") {\n\t\t\tclientName = frameClientName;\n\t\t}\n\t\tif (typeof frameClientId === \"string\") {\n\t\t\tclientId = frameClientId;\n\t\t}\n\t\tif (typeof frameOperationName === \"string\") {\n\t\t\toperationName = frameOperationName;\n\t\t}\n\t}\n\tconst contextLabel = [clientName ?? clientId, operationName]\n\t\t.filter((value): value is string => Boolean(value))\n\t\t.join(\" · \");\n\treturn contextLabel || undefined;\n};\n\nexport function readErrorPresentationDescriptor(\n\terror: unknown,\n\toptions: ReadErrorPresentationDescriptorOptions = {},\n): ErrorPresentationDescriptor {\n\tif (!(error instanceof ClientError)) {\n\t\treturn {\n\t\t\tcode: null,\n\t\t\ttitle: options.fallbackTitle ?? \"Operation failed\",\n\t\t\tdescription:\n\t\t\t\toptions.fallbackDescription ??\n\t\t\t\t\"An unexpected error prevented the operation from completing.\",\n\t\t\trecovery: UserRecoveryValue.None,\n\t\t\ttone: ErrorPresentationTone.Danger,\n\t\t\tprimaryAction: null,\n\t\t};\n\t}\n\tconst clientError = error;\n\n\tconst code = clientError.presentation?.code ?? clientError.code;\n\tconst codePresentation = code ? options.codePresentations?.[code] : undefined;\n\tconst recovery =\n\t\tclientError.presentation?.recovery ??\n\t\tcodePresentation?.recovery ??\n\t\tclientError.recovery;\n\tconst generic = readGenericPresentation(clientError.kind);\n\n\tconst descriptor: ErrorPresentationDescriptor = {\n\t\tcode,\n\t\ttitle: codePresentation?.title ?? generic.title,\n\t\tdescription:\n\t\t\tclientError.presentation?.message ??\n\t\t\tcodePresentation?.description ??\n\t\t\tgeneric.description,\n\t\trecovery,\n\t\ttone:\n\t\t\tcodePresentation?.tone ?? readClientErrorTone(clientError.kind, recovery),\n\t\tprimaryAction: readPrimaryAction(recovery, options),\n\t};\n\tif (!clientError.spanContext || options.contextFormatter === null) {\n\t\treturn descriptor;\n\t}\n\tconst contextLabel = (options.contextFormatter ?? formatClientErrorContext)(\n\t\tclientError.spanContext,\n\t);\n\treturn contextLabel\n\t\t? { ...descriptor, title: `${contextLabel}: ${descriptor.title}` }\n\t\t: descriptor;\n}\n\nfunction readGenericPresentation(kind: ClientErrorKind | null): {\n\ttitle: string;\n\tdescription: string;\n} {\n\tswitch (kind) {\n\t\tcase ClientErrorKindValue.Unauthenticated:\n\t\t\treturn {\n\t\t\t\ttitle: \"Authentication required\",\n\t\t\t\tdescription: \"Sign in again to continue.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Unauthorized:\n\t\t\treturn {\n\t\t\t\ttitle: \"Access denied\",\n\t\t\t\tdescription: \"You do not have permission to complete this operation.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Cancelled:\n\t\t\treturn {\n\t\t\t\ttitle: \"Operation cancelled\",\n\t\t\t\tdescription: \"The operation was cancelled before it completed.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Timeout:\n\t\t\treturn {\n\t\t\t\ttitle: \"Request timed out\",\n\t\t\t\tdescription: \"The operation did not complete in time.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Configuration:\n\t\t\treturn {\n\t\t\t\ttitle: \"Configuration error\",\n\t\t\t\tdescription: \"The client is not configured to complete this operation.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Storage:\n\t\t\treturn {\n\t\t\t\ttitle: \"Storage failed\",\n\t\t\t\tdescription: \"The client could not access required stored data.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Transport:\n\t\t\treturn {\n\t\t\t\ttitle: \"Network request failed\",\n\t\t\t\tdescription: \"The client could not reach the service.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Server:\n\t\t\treturn {\n\t\t\t\ttitle: \"Server request failed\",\n\t\t\t\tdescription: \"The service could not complete the request.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Protocol:\n\t\t\treturn {\n\t\t\t\ttitle: \"Invalid response\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"The service response did not satisfy the expected protocol.\",\n\t\t\t};\n\t\tcase ClientErrorKindValue.Authorization:\n\t\t\treturn {\n\t\t\t\ttitle: \"Authorization failed\",\n\t\t\t\tdescription: \"The authorization flow could not be completed.\",\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttitle: \"Operation failed\",\n\t\t\t\tdescription: \"The operation could not be completed.\",\n\t\t\t};\n\t}\n}\n\nfunction readClientErrorTone(\n\tkind: ClientErrorKind | null,\n\trecovery: UserRecovery,\n) {\n\tif (kind === ClientErrorKindValue.Cancelled) {\n\t\treturn ErrorPresentationTone.Neutral;\n\t}\n\tif (\n\t\tkind === ClientErrorKindValue.Unauthenticated ||\n\t\tkind === ClientErrorKindValue.Timeout ||\n\t\tkind === ClientErrorKindValue.Transport ||\n\t\tkind === ClientErrorKindValue.Server ||\n\t\trecovery === UserRecoveryValue.Retry ||\n\t\trecovery === UserRecoveryValue.RestartFlow ||\n\t\trecovery === UserRecoveryValue.Reauthenticate\n\t) {\n\t\treturn ErrorPresentationTone.Warning;\n\t}\n\treturn ErrorPresentationTone.Danger;\n}\n\nfunction readPrimaryAction(\n\trecovery: UserRecovery,\n\toptions: ReadErrorPresentationDescriptorOptions,\n): ErrorRecoveryActionDescriptor | null {\n\tif (recovery === UserRecoveryValue.None) {\n\t\treturn null;\n\t}\n\tconst label =\n\t\toptions.recoveryLabels?.[recovery] ?? DEFAULT_RECOVERY_LABELS[recovery];\n\tif (!label) {\n\t\treturn null;\n\t}\n\treturn {\n\t\trecovery,\n\t\tlabel,\n\t\thref: options.recoveryLinks?.[recovery] ?? null,\n\t};\n}\n","import { SYMBOL_OBSERVABLE } from \"../compat\";\nimport { RxStateSignal } from \"../rx/signal\";\nimport {\n\ttype ReadableSignalTrait,\n\ttype SignalOptions,\n\ttype WritableSignalTrait,\n} from \"./types\";\n\n/**\n * Minimal writable signal implementation.\n * `set()` always publishes a write. Equality-based value-version suppression is\n * handled by the underlying Rx signal for computed dependency validation.\n */\nexport function createSignal<T>(\n\tinitial: T,\n\toptions?: SignalOptions<T>,\n): WritableSignalTrait<T> {\n\treturn RxStateSignal.fromInitialValue(initial, options);\n}\n\n/**\n * Create a read-only view of a writable signal.\n */\nexport function readonlySignal<T>(\n\tsignal: WritableSignalTrait<T>,\n): ReadableSignalTrait<T> {\n\treturn signal;\n}\n\nexport function isSignalTrait<T>(obj: unknown): obj is ReadableSignalTrait<T> {\n\treturn (\n\t\ttypeof obj === \"object\" &&\n\t\tobj !== null &&\n\t\ttypeof (obj as ReadableSignalTrait<T>).equals === \"function\" &&\n\t\ttypeof (obj as ReadableSignalTrait<T>).get === \"function\" &&\n\t\ttypeof (obj as ReadableSignalTrait<T>).watchStream === \"function\" &&\n\t\ttypeof (obj as ReadableSignalTrait<T>)[SYMBOL_OBSERVABLE] === \"function\"\n\t);\n}\n","export const PopupErrorCode = {\n\tBlocked: \"popup.blocked\",\n\tClosed: \"popup.closed_by_user\",\n} as const;\n\nexport type PopupErrorCode =\n\t(typeof PopupErrorCode)[keyof typeof PopupErrorCode];\n\nexport function readPopupErrorPresentationDescriptor(\n\terror: unknown,\n\toptions: ReadErrorPresentationDescriptorOptions = {},\n): ErrorPresentationDescriptor {\n\treturn readErrorPresentationDescriptor(error, {\n\t\t...options,\n\t\tcodePresentations: {\n\t\t\t[PopupErrorCode.Blocked]: {\n\t\t\t\ttitle: \"Popup was blocked\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"The browser blocked the popup window. Allow popups for this site, then try again.\",\n\t\t\t\trecovery: UserRecovery.Retry,\n\t\t\t\ttone: ErrorPresentationTone.Warning,\n\t\t\t},\n\t\t\t[PopupErrorCode.Closed]: {\n\t\t\t\ttitle: \"Popup was closed\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"The popup window was closed before the operation completed. Start the flow again.\",\n\t\t\t\trecovery: UserRecovery.RestartFlow,\n\t\t\t\ttone: ErrorPresentationTone.Warning,\n\t\t\t},\n\t\t\t...options.codePresentations,\n\t\t},\n\t});\n}\n\nimport {\n\ttype ErrorPresentationDescriptor,\n\tErrorPresentationTone,\n\ttype ReadErrorPresentationDescriptorOptions,\n\treadErrorPresentationDescriptor,\n\tUserRecovery,\n} from \"../errors\";\n","import { type as defineType } from \"arktype\";\nimport { type DisposableTrait } from \"../../compat\";\nimport { type EventStreamTrait } from \"../../events\";\nimport { type TimeTrait } from \"../../scheduling/types\";\n\nexport const JsonRpcIdSchema = defineType(\"string | number\");\n\nexport type JsonRpcId = typeof JsonRpcIdSchema.infer;\n\nexport const JsonRpcErrorPayloadSchema = defineType({\n\tcode: \"number\",\n\tmessage: \"string\",\n\tdata: \"unknown?\",\n});\n\nexport type JsonRpcErrorPayload = typeof JsonRpcErrorPayloadSchema.infer;\n\nexport const JsonRpcRequestMessageSchema = defineType({\n\tjsonrpc: '\"2.0\"',\n\tid: JsonRpcIdSchema,\n\tmethod: \"string\",\n\tparams: \"unknown?\",\n});\n\nexport type JsonRpcRequestMessage = typeof JsonRpcRequestMessageSchema.infer;\n\nexport const JsonRpcNotificationMessageSchema = defineType({\n\tjsonrpc: '\"2.0\"',\n\tmethod: \"string\",\n\tparams: \"unknown?\",\n});\n\nexport type JsonRpcNotificationMessage =\n\ttypeof JsonRpcNotificationMessageSchema.infer;\n\nexport const JsonRpcSuccessResponseMessageSchema = defineType({\n\tjsonrpc: '\"2.0\"',\n\tid: JsonRpcIdSchema,\n\tresult: \"unknown\",\n});\n\nexport type JsonRpcSuccessResponseMessage =\n\ttypeof JsonRpcSuccessResponseMessageSchema.infer;\n\nexport const JsonRpcErrorResponseMessageSchema = defineType({\n\tjsonrpc: '\"2.0\"',\n\tid: JsonRpcIdSchema,\n\terror: JsonRpcErrorPayloadSchema,\n});\n\nexport type JsonRpcErrorResponseMessage =\n\ttypeof JsonRpcErrorResponseMessageSchema.infer;\n\nexport const JsonRpcMessageSchema = JsonRpcRequestMessageSchema.or(\n\tJsonRpcNotificationMessageSchema,\n)\n\t.or(JsonRpcSuccessResponseMessageSchema)\n\t.or(JsonRpcErrorResponseMessageSchema);\n\nexport type JsonRpcMessage = typeof JsonRpcMessageSchema.infer;\n\nexport interface JsonRpcRequestEvent {\n\tid: JsonRpcId;\n\tmethod: string;\n\tparams?: unknown;\n}\n\nexport interface JsonRpcNotificationEvent {\n\tmethod: string;\n\tparams?: unknown;\n}\n\nexport interface JsonRpcRequestOptions {\n\ttimeoutMs?: number;\n}\n\nexport interface JsonRpcSendOptions {\n\tsend(message: JsonRpcMessage): void;\n}\n\nexport interface CreateJsonRpcClientOptions extends JsonRpcSendOptions {\n\ttime: TimeTrait;\n\tdefaultRequestTimeoutMs?: number;\n}\n\nexport interface CreateJsonRpcServerOptions extends JsonRpcSendOptions {}\n\nexport interface CreateJsonRpcServerAndClientOptions\n\textends JsonRpcSendOptions {\n\ttime: TimeTrait;\n\tdefaultRequestTimeoutMs?: number;\n}\n\nexport interface JsonRpcClientTrait extends DisposableTrait {\n\treadonly onNotification: EventStreamTrait<JsonRpcNotificationEvent>;\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions?: JsonRpcRequestOptions,\n\t): Promise<TResult>;\n\tnotify(method: string, params?: unknown): void;\n\treceive(message: unknown): void;\n\trejectAllPendingRequests(reason: unknown): void;\n}\n\nexport interface JsonRpcServerTrait extends DisposableTrait {\n\treadonly onRequest: EventStreamTrait<JsonRpcRequestEvent>;\n\treadonly onNotification: EventStreamTrait<JsonRpcNotificationEvent>;\n\tnotify(method: string, params?: unknown): void;\n\treceive(message: unknown): void;\n\trespondSuccess(id: JsonRpcId, result: unknown): void;\n\trespondError(id: JsonRpcId, error: JsonRpcErrorPayload): void;\n}\n\nexport interface JsonRpcServerAndClientTrait\n\textends JsonRpcClientTrait,\n\t\tJsonRpcServerTrait {}\n","import { SYMBOL_DISPOSE } from \"../../compat\";\nimport { type EventStreamTrait } from \"../../events\";\nimport { RxEventSubject } from \"../../rx/event\";\nimport { validateWithSchemaSync } from \"../../validation\";\nimport {\n\ttype CreateJsonRpcClientOptions,\n\ttype CreateJsonRpcServerAndClientOptions,\n\ttype CreateJsonRpcServerOptions,\n\ttype JsonRpcClientTrait,\n\ttype JsonRpcErrorPayload,\n\ttype JsonRpcErrorResponseMessage,\n\ttype JsonRpcId,\n\ttype JsonRpcMessage,\n\tJsonRpcMessageSchema,\n\ttype JsonRpcNotificationEvent,\n\ttype JsonRpcNotificationMessage,\n\ttype JsonRpcRequestEvent,\n\ttype JsonRpcRequestMessage,\n\ttype JsonRpcRequestOptions,\n\ttype JsonRpcServerAndClientTrait,\n\ttype JsonRpcServerTrait,\n\ttype JsonRpcSuccessResponseMessage,\n} from \"./types\";\n\ntype JsonRpcResponseMessage =\n\t| JsonRpcSuccessResponseMessage\n\t| JsonRpcErrorResponseMessage;\n\ninterface PendingRequest {\n\tmethod: string;\n\treject(reason: unknown): void;\n\tresolve(value: unknown): void;\n\ttimeoutHandle?: unknown;\n}\n\nexport function createJsonRpcClient(\n\toptions: CreateJsonRpcClientOptions,\n): JsonRpcClientTrait {\n\treturn new JsonRpcClient(options);\n}\n\nexport function createJsonRpcServer(\n\toptions: CreateJsonRpcServerOptions,\n): JsonRpcServerTrait {\n\treturn new JsonRpcServer(options);\n}\n\nexport function createJsonRpcServerAndClient(\n\toptions: CreateJsonRpcServerAndClientOptions,\n): JsonRpcServerAndClientTrait {\n\treturn new JsonRpcServerAndClient(options);\n}\n\nclass JsonRpcClient implements JsonRpcClientTrait {\n\treadonly onNotification: EventStreamTrait<JsonRpcNotificationEvent>;\n\n\tprivate readonly notificationSubject =\n\t\tnew RxEventSubject<JsonRpcNotificationEvent>();\n\tprivate readonly pendingRequests = new Map<JsonRpcId, PendingRequest>();\n\tprivate disposed = false;\n\tprivate nextRequestId = 1;\n\n\tconstructor(private readonly options: CreateJsonRpcClientOptions) {\n\t\tthis.onNotification = this.notificationSubject;\n\t}\n\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\trequestOptions: JsonRpcRequestOptions = {},\n\t): Promise<TResult> {\n\t\tif (this.disposed) {\n\t\t\treturn Promise.reject(createJsonRpcDisposedError(\"client\"));\n\t\t}\n\n\t\tconst id = this.nextRequestId++;\n\t\tconst timeoutMs =\n\t\t\trequestOptions.timeoutMs ?? this.options.defaultRequestTimeoutMs;\n\n\t\treturn new Promise<TResult>((resolve, reject) => {\n\t\t\tconst pendingRequest: PendingRequest = {\n\t\t\t\tmethod,\n\t\t\t\treject,\n\t\t\t\tresolve,\n\t\t\t};\n\n\t\t\tif (timeoutMs !== undefined) {\n\t\t\t\tpendingRequest.timeoutHandle = this.options.time.setTimeout(() => {\n\t\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\t\treject(new Error(`JSON-RPC request timed out for ${method}.`));\n\t\t\t\t}, timeoutMs);\n\t\t\t}\n\n\t\t\tthis.pendingRequests.set(id, pendingRequest);\n\n\t\t\ttry {\n\t\t\t\tthis.options.send({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tmethod,\n\t\t\t\t\tparams,\n\t\t\t\t} satisfies JsonRpcRequestMessage);\n\t\t\t} catch (error) {\n\t\t\t\tthis.clearPendingRequest(id);\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tnotify(method: string, params?: unknown): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options.send({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tmethod,\n\t\t\tparams,\n\t\t} satisfies JsonRpcNotificationMessage);\n\t}\n\n\treceive(message: unknown): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const parsedMessage of parseIncomingMessages(message)) {\n\t\t\tif (isJsonRpcResponseMessage(parsedMessage)) {\n\t\t\t\tthis.resolvePendingRequest(parsedMessage);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isJsonRpcNotificationMessage(parsedMessage)) {\n\t\t\t\tthis.notificationSubject.next({\n\t\t\t\t\tmethod: parsedMessage.method,\n\t\t\t\t\tparams: parsedMessage.params,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\trejectAllPendingRequests(reason: unknown): void {\n\t\tfor (const [id, pendingRequest] of this.pendingRequests) {\n\t\t\tthis.clearPendingRequest(id);\n\t\t\tpendingRequest.reject(reason);\n\t\t}\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.disposed = true;\n\t\tthis.rejectAllPendingRequests(new Error(\"JSON-RPC client disposed.\"));\n\t\tthis.notificationSubject.complete();\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n\n\tprivate resolvePendingRequest(message: JsonRpcResponseMessage): void {\n\t\tconst pendingRequest = this.pendingRequests.get(message.id);\n\t\tif (!pendingRequest) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearPendingRequest(message.id);\n\n\t\tif (\"error\" in message) {\n\t\t\tpendingRequest.reject(\n\t\t\t\tnew Error(\n\t\t\t\t\t`JSON-RPC request failed for ${pendingRequest.method}: ${message.error.message}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tpendingRequest.resolve(message.result);\n\t}\n\n\tprivate clearPendingRequest(id: JsonRpcId): void {\n\t\tconst pendingRequest = this.pendingRequests.get(id);\n\t\tif (!pendingRequest) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (pendingRequest.timeoutHandle !== undefined) {\n\t\t\tthis.options.time.clearTimeout(pendingRequest.timeoutHandle);\n\t\t}\n\n\t\tthis.pendingRequests.delete(id);\n\t}\n}\n\nclass JsonRpcServer implements JsonRpcServerTrait {\n\treadonly onRequest: EventStreamTrait<JsonRpcRequestEvent>;\n\treadonly onNotification: EventStreamTrait<JsonRpcNotificationEvent>;\n\n\tprivate readonly requestSubject = new RxEventSubject<JsonRpcRequestEvent>();\n\tprivate readonly notificationSubject =\n\t\tnew RxEventSubject<JsonRpcNotificationEvent>();\n\tprivate disposed = false;\n\n\tconstructor(private readonly options: CreateJsonRpcServerOptions) {\n\t\tthis.onRequest = this.requestSubject;\n\t\tthis.onNotification = this.notificationSubject;\n\t}\n\n\tnotify(method: string, params?: unknown): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options.send({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tmethod,\n\t\t\tparams,\n\t\t} satisfies JsonRpcNotificationMessage);\n\t}\n\n\treceive(message: unknown): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const parsedMessage of parseIncomingMessages(message)) {\n\t\t\tif (isJsonRpcRequestMessage(parsedMessage)) {\n\t\t\t\tthis.requestSubject.next({\n\t\t\t\t\tid: parsedMessage.id,\n\t\t\t\t\tmethod: parsedMessage.method,\n\t\t\t\t\tparams: parsedMessage.params,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isJsonRpcNotificationMessage(parsedMessage)) {\n\t\t\t\tthis.notificationSubject.next({\n\t\t\t\t\tmethod: parsedMessage.method,\n\t\t\t\t\tparams: parsedMessage.params,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\trespondSuccess(id: JsonRpcId, result: unknown): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options.send({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid,\n\t\t\tresult,\n\t\t} satisfies JsonRpcSuccessResponseMessage);\n\t}\n\n\trespondError(id: JsonRpcId, error: JsonRpcErrorPayload): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options.send({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid,\n\t\t\terror,\n\t\t} satisfies JsonRpcErrorResponseMessage);\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.disposed = true;\n\t\tthis.requestSubject.complete();\n\t\tthis.notificationSubject.complete();\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n\nclass JsonRpcServerAndClient implements JsonRpcServerAndClientTrait {\n\treadonly onNotification: EventStreamTrait<JsonRpcNotificationEvent>;\n\treadonly onRequest: EventStreamTrait<JsonRpcRequestEvent>;\n\n\tprivate readonly client: JsonRpcClient;\n\tprivate readonly server: JsonRpcServer;\n\tprivate disposed = false;\n\n\tconstructor(options: CreateJsonRpcServerAndClientOptions) {\n\t\tthis.client = new JsonRpcClient(options);\n\t\tthis.server = new JsonRpcServer(options);\n\t\tthis.onNotification = this.server.onNotification;\n\t\tthis.onRequest = this.server.onRequest;\n\t}\n\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions?: JsonRpcRequestOptions,\n\t): Promise<TResult> {\n\t\treturn this.client.request<TResult>(method, params, options);\n\t}\n\n\tnotify(method: string, params?: unknown): void {\n\t\tthis.client.notify(method, params);\n\t}\n\n\treceive(message: unknown): void {\n\t\tfor (const parsedMessage of parseIncomingMessages(message)) {\n\t\t\tif (isJsonRpcResponseMessage(parsedMessage)) {\n\t\t\t\tthis.client.receive(parsedMessage);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.server.receive(parsedMessage);\n\t\t}\n\t}\n\n\trejectAllPendingRequests(reason: unknown): void {\n\t\tthis.client.rejectAllPendingRequests(reason);\n\t}\n\n\trespondSuccess(id: JsonRpcId, result: unknown): void {\n\t\tthis.server.respondSuccess(id, result);\n\t}\n\n\trespondError(id: JsonRpcId, error: JsonRpcErrorPayload): void {\n\t\tthis.server.respondError(id, error);\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.disposed = true;\n\t\tthis.client.dispose();\n\t\tthis.server.dispose();\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n\nfunction parseIncomingMessages(message: unknown): JsonRpcMessage[] {\n\tif (!Array.isArray(message)) {\n\t\treturn parseJsonRpcMessage(message);\n\t}\n\n\tconst parsedMessages: JsonRpcMessage[] = [];\n\tfor (const entry of message) {\n\t\tparsedMessages.push(...parseJsonRpcMessage(entry));\n\t}\n\treturn parsedMessages;\n}\n\nfunction parseJsonRpcMessage(message: unknown): JsonRpcMessage[] {\n\tconst result = validateWithSchemaSync(JsonRpcMessageSchema, message);\n\treturn result.success ? [result.value] : [];\n}\n\nfunction isJsonRpcRequestMessage(\n\tmessage: JsonRpcMessage,\n): message is JsonRpcRequestMessage {\n\treturn \"method\" in message && \"id\" in message;\n}\n\nfunction isJsonRpcResponseMessage(\n\tmessage: JsonRpcMessage,\n): message is JsonRpcResponseMessage {\n\treturn \"id\" in message && !(\"method\" in message);\n}\n\nfunction isJsonRpcNotificationMessage(\n\tmessage: JsonRpcMessage,\n): message is JsonRpcNotificationMessage {\n\treturn \"method\" in message && !(\"id\" in message);\n}\n\nfunction createJsonRpcDisposedError(role: \"client\" | \"server\"): Error {\n\treturn new Error(`JSON-RPC ${role} disposed.`);\n}\n","import {\n\tBehaviorSubject,\n\tcatchError,\n\tdelayWhen,\n\tdistinctUntilChanged,\n\texhaustMap,\n\tfilter,\n\tfrom,\n\tmap,\n\tmerge,\n\tof,\n\tReplaySubject,\n\tSubject,\n\tshareReplay,\n\ttake,\n\ttakeUntil,\n\ttimeout,\n\ttimer,\n} from \"rxjs\";\nimport { SYMBOL_DISPOSE } from \"../compat\";\nimport { ClientError, ClientErrorKind, UserRecovery } from \"../errors\";\nimport { type EventStreamTrait } from \"../events\";\nimport {\n\ttype JsonRpcClientTrait,\n\ttype JsonRpcNotificationEvent,\n\ttype JsonRpcServerTrait,\n} from \"../protocol/json-rpc\";\nimport { createAsyncSchedulerWithTimestampProvider } from \"../rx\";\nimport { type TimeTrait } from \"../scheduling/types\";\nimport { createSignal } from \"../signals\";\nimport { PopupErrorCode } from \"./errors\";\n\nexport const PopupSessionControlMethod = {\n\tReady: \"securitydept.popup.session.ready\",\n\tPing: \"securitydept.popup.session.ping\",\n\tPong: \"securitydept.popup.session.pong\",\n} as const;\n\nconst DEFAULT_READY_TIMEOUT_MS = 10_000;\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 5_000;\nconst DEFAULT_HEARTBEAT_TIMEOUT_MS = 15_000;\n\nexport interface CreatePopupClientSessionOptions {\n\tjsonRpc: JsonRpcClientTrait;\n\ttime: TimeTrait;\n\tclosedStream: EventStreamTrait<boolean>;\n\treadyTimeoutMs?: number;\n\theartbeatIntervalMs?: number;\n\theartbeatTimeoutMs?: number;\n}\n\nexport interface CreatePopupServerSessionOptions {\n\tjsonRpc: JsonRpcServerTrait;\n}\n\nexport class PopupClientSession {\n\treadonly failure = createSignal<ClientError | null>(null);\n\treadonly isActive = createSignal(false);\n\n\tprivate readonly init$ = new ReplaySubject<true>();\n\tprivate readonly destroyed = createSignal<boolean>(false);\n\tprivate readonly destroyed$ = from(this.destroyed).pipe(\n\t\tdistinctUntilChanged(),\n\t\tfilter(Boolean),\n\t\tshareReplay(1),\n\t);\n\n\tconstructor(options: CreatePopupClientSessionOptions) {\n\t\tconst timestampScheduler = createAsyncSchedulerWithTimestampProvider(\n\t\t\toptions.time,\n\t\t);\n\t\tconst ready$ = new Subject<boolean>();\n\t\tconst pong$ = new Subject<boolean>();\n\t\tconst closed$ = from(options.closedStream).pipe(filter(Boolean));\n\n\t\tconst ping$ = merge(\n\t\t\tready$.pipe(filter(Boolean)),\n\t\t\tpong$.pipe(filter(Boolean)),\n\t\t).pipe(\n\t\t\tdelayWhen(() =>\n\t\t\t\ttimer(\n\t\t\t\t\toptions.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS,\n\t\t\t\t\ttimestampScheduler,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\t\tfrom(this.init$)\n\t\t\t.pipe(\n\t\t\t\texhaustMap(() =>\n\t\t\t\t\tfrom(options.jsonRpc.onNotification).pipe(\n\t\t\t\t\t\tfilter(function isReadyNotification(event): event is {\n\t\t\t\t\t\t\tmethod: typeof PopupSessionControlMethod.Ready;\n\t\t\t\t\t\t} {\n\t\t\t\t\t\t\treturn event.method === PopupSessionControlMethod.Ready;\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttake(1),\n\t\t\t\t\t\ttimeout({\n\t\t\t\t\t\t\teach: options.readyTimeoutMs ?? DEFAULT_READY_TIMEOUT_MS,\n\t\t\t\t\t\t\tscheduler: timestampScheduler,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tmap(() => true),\n\t\t\t\t\t\tcatchError(() => of(false)),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\ttakeUntil(this.destroyed$),\n\t\t\t)\n\t\t\t.subscribe(ready$);\n\n\t\tping$\n\t\t\t.pipe(\n\t\t\t\texhaustMap(() =>\n\t\t\t\t\tfrom(options.jsonRpc.onNotification).pipe(\n\t\t\t\t\t\tfilter(function isPongNotification(event): event is {\n\t\t\t\t\t\t\tmethod: typeof PopupSessionControlMethod.Pong;\n\t\t\t\t\t\t} {\n\t\t\t\t\t\t\treturn event.method === PopupSessionControlMethod.Pong;\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttake(1),\n\t\t\t\t\t\ttimeout({\n\t\t\t\t\t\t\tfirst: options.heartbeatTimeoutMs ?? DEFAULT_HEARTBEAT_TIMEOUT_MS,\n\t\t\t\t\t\t\tscheduler: timestampScheduler,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tmap(() => true),\n\t\t\t\t\t\tcatchError(() => of(false)),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\ttakeUntil(this.destroyed$),\n\t\t\t)\n\t\t\t.subscribe(pong$);\n\n\t\tmerge(\n\t\t\tclosed$.pipe(\n\t\t\t\tmap(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tnew ClientError({\n\t\t\t\t\t\t\tkind: ClientErrorKind.Authorization,\n\t\t\t\t\t\t\tcode: PopupErrorCode.Closed,\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Popup window was closed before completing the login flow.\",\n\t\t\t\t\t\t\trecovery: UserRecovery.RestartFlow,\n\t\t\t\t\t\t\tsource: \"popup\",\n\t\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t\tready$.pipe(\n\t\t\t\tmap((success) =>\n\t\t\t\t\t!success\n\t\t\t\t\t\t? new ClientError({\n\t\t\t\t\t\t\t\tkind: ClientErrorKind.Protocol,\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\t\"Did not receive ready notification from popup within the expected time.\",\n\t\t\t\t\t\t\t\trecovery: UserRecovery.RestartFlow,\n\t\t\t\t\t\t\t\tsource: \"popup\",\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t),\n\t\t\tpong$.pipe(\n\t\t\t\tmap((success) =>\n\t\t\t\t\t!success\n\t\t\t\t\t\t? new ClientError({\n\t\t\t\t\t\t\t\tkind: ClientErrorKind.Protocol,\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\t\"Did not receive pong notification from popup within the expected time.\",\n\t\t\t\t\t\t\t\trecovery: UserRecovery.RestartFlow,\n\t\t\t\t\t\t\t\tsource: \"popup\",\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.destroyed$),\n\t\t\t\tshareReplay({\n\t\t\t\t\tbufferSize: 1,\n\t\t\t\t\trefCount: false,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe((error) => this.failure.set(error));\n\n\t\tmerge(\n\t\t\tclosed$.pipe(map(() => false)),\n\t\t\tready$.pipe(map(Boolean)),\n\t\t\tpong$.pipe(map(Boolean)),\n\t\t)\n\t\t\t.pipe(takeUntil(this.destroyed$))\n\t\t\t.subscribe((nextIsActive) => {\n\t\t\t\tthis.isActive.set(nextIsActive);\n\t\t\t});\n\t}\n\n\tinit(): void {\n\t\tthis.init$.next(true);\n\t}\n\n\tdispose(): void {\n\t\tthis.destroyed.set(true);\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n\nexport class PopupServerSession {\n\tprivate readonly init$ = new ReplaySubject<true>();\n\tprivate readonly destroyed$$ = new BehaviorSubject<boolean>(false);\n\tprivate readonly destroyed$ = this.destroyed$$.pipe(\n\t\tdistinctUntilChanged(),\n\t\tfilter(Boolean),\n\t\tshareReplay(1),\n\t);\n\n\tconstructor(options: CreatePopupServerSessionOptions) {\n\t\tconst ready$ = from(this.init$);\n\t\tconst ping$ = from(options.jsonRpc.onNotification).pipe(\n\t\t\tfilter(function isPing(event) {\n\t\t\t\treturn event.method === PopupSessionControlMethod.Ping;\n\t\t\t}),\n\t\t);\n\t\tconst pong$ = ping$;\n\n\t\tmerge(\n\t\t\tready$.pipe(\n\t\t\t\tmap(function createReadyNotify(): JsonRpcNotificationEvent {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmethod: PopupSessionControlMethod.Ready,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t),\n\t\t\tpong$.pipe(\n\t\t\t\tmap(function createPongNotify(): JsonRpcNotificationEvent {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmethod: PopupSessionControlMethod.Pong,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.destroyed$))\n\t\t\t.subscribe((event) => {\n\t\t\t\toptions.jsonRpc.notify(event.method, event.params);\n\t\t\t});\n\t}\n\n\tinit(): void {\n\t\tthis.init$.next(true);\n\t}\n\n\tdispose(): void {\n\t\tthis.destroyed$$.next(true);\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n","import { type DisposableTrait, SYMBOL_DISPOSE } from \"../compat\";\nimport { type ClientError } from \"../errors\";\nimport {\n\ttype EventStreamTrait,\n\ttype EventSubjectTrait,\n\ttype EventSubscriptionTrait,\n} from \"../events\";\nimport {\n\tcreateJsonRpcClient,\n\tcreateJsonRpcServer,\n\ttype JsonRpcClientTrait,\n\ttype JsonRpcMessage,\n\ttype JsonRpcNotificationEvent,\n\ttype JsonRpcRequestEvent,\n\ttype JsonRpcRequestOptions,\n\ttype JsonRpcServerTrait,\n} from \"../protocol/json-rpc\";\nimport { type TimeTrait } from \"../scheduling/types\";\nimport { type ReadableSignalTrait } from \"../signals\";\nimport { PopupClientSession, PopupServerSession } from \"./session\";\n\nexport interface PopupMessageChannelTrait<\n\tTOutgoing = unknown,\n\tTIncoming = unknown,\n> {\n\toutgoing: EventSubjectTrait<TOutgoing>;\n\tincoming: EventStreamTrait<TIncoming>;\n}\n\nexport interface PopupWindowHandleTrait extends DisposableTrait {\n\tmessaging: PopupMessageChannelTrait;\n\treadonly onNotification: EventStreamTrait<JsonRpcNotificationEvent>;\n\tclose(): void;\n\tdispose(): void;\n\tnotify(method: string, params?: unknown): Promise<void>;\n}\n\nexport interface PopupClientWindowHandleTrait extends PopupWindowHandleTrait {\n\treadonly failure: ReadableSignalTrait<ClientError | null>;\n\treadonly isActive: ReadableSignalTrait<boolean>;\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions?: JsonRpcRequestOptions,\n\t): Promise<TResult>;\n}\n\nexport interface PopupServerWindowHandleTrait extends PopupWindowHandleTrait {}\n\nexport interface PopupClientWindowHandleOptions {\n\tclose(): void;\n\tmessaging: PopupMessageChannelTrait<JsonRpcMessage, unknown>;\n\ttime: TimeTrait;\n\tclosedStream: EventStreamTrait<boolean>;\n}\n\nexport interface PopupServerWindowHandleOptions {\n\tclose(): void;\n\tmessaging: PopupMessageChannelTrait<JsonRpcMessage, unknown>;\n}\n\n/**\n * popup opener\n */\nexport class PopupClientWindowHandle implements PopupClientWindowHandleTrait {\n\treadonly messaging: PopupMessageChannelTrait<JsonRpcMessage, unknown>;\n\tprivate disposed = false;\n\tprivate readonly jsonRpc: JsonRpcClientTrait;\n\tprivate readonly session: PopupClientSession;\n\tprivate readonly incomingSubscription: EventSubscriptionTrait;\n\tprivate readonly closePopup: () => void;\n\n\tconstructor(options: PopupClientWindowHandleOptions) {\n\t\tthis.messaging = options.messaging;\n\t\tthis.closePopup = options.close;\n\t\tthis.jsonRpc = createJsonRpcClient({\n\t\t\tsend: (message) => {\n\t\t\t\toptions.messaging.outgoing.next(message);\n\t\t\t},\n\t\t\ttime: options.time,\n\t\t});\n\t\tthis.session = new PopupClientSession({\n\t\t\tjsonRpc: this.jsonRpc,\n\t\t\ttime: options.time,\n\t\t\tclosedStream: options.closedStream,\n\t\t});\n\t\tthis.incomingSubscription = options.messaging.incoming.subscribe({\n\t\t\tnext: (message) => {\n\t\t\t\tthis.jsonRpc.receive(message);\n\t\t\t},\n\t\t});\n\t\tthis.session.init();\n\t}\n\n\tget onNotification(): EventStreamTrait<JsonRpcNotificationEvent> {\n\t\treturn this.jsonRpc.onNotification;\n\t}\n\n\tget failure(): ReadableSignalTrait<ClientError | null> {\n\t\treturn this.session.failure;\n\t}\n\n\tget isActive(): ReadableSignalTrait<boolean> {\n\t\treturn this.session.isActive;\n\t}\n\n\tasync notify(method: string, params?: unknown): Promise<void> {\n\t\tthis.jsonRpc.notify(method, params);\n\t}\n\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions?: JsonRpcRequestOptions,\n\t): Promise<TResult> {\n\t\treturn this.jsonRpc.request(method, params, options);\n\t}\n\n\tclose(): void {\n\t\tthis.closePopup();\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.disposed = true;\n\t\tthis.session.dispose();\n\t\tthis.jsonRpc.dispose();\n\t\tthis.incomingSubscription.unsubscribe();\n\t\tthis.messaging.outgoing.complete();\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n\n/**\n * popup target\n */\nexport class PopupServerWindowHandle implements PopupServerWindowHandleTrait {\n\treadonly messaging: PopupMessageChannelTrait<JsonRpcMessage, unknown>;\n\tprivate disposed = false;\n\tprivate readonly jsonRpc: JsonRpcServerTrait;\n\tprivate readonly session: PopupServerSession;\n\tprivate readonly incomingSubscription: EventSubscriptionTrait;\n\tprivate readonly closePopup: () => void;\n\n\tconstructor(options: PopupServerWindowHandleOptions) {\n\t\tthis.messaging = options.messaging;\n\t\tthis.closePopup = options.close;\n\t\tthis.jsonRpc = createJsonRpcServer({\n\t\t\tsend: (message) => {\n\t\t\t\toptions.messaging.outgoing.next(message);\n\t\t\t},\n\t\t});\n\t\tthis.session = new PopupServerSession({ jsonRpc: this.jsonRpc });\n\t\tthis.incomingSubscription = options.messaging.incoming.subscribe({\n\t\t\tnext: (message) => {\n\t\t\t\tthis.jsonRpc.receive(message);\n\t\t\t},\n\t\t});\n\t\tthis.session.init();\n\t}\n\n\tget onNotification(): EventStreamTrait<JsonRpcNotificationEvent> {\n\t\treturn this.jsonRpc.onNotification;\n\t}\n\n\tget onRequest(): EventStreamTrait<JsonRpcRequestEvent> {\n\t\treturn this.jsonRpc.onRequest;\n\t}\n\n\tnotify(method: string, params?: unknown): Promise<void> {\n\t\tthis.jsonRpc.notify(method, params);\n\t\treturn Promise.resolve();\n\t}\n\n\tclose(): void {\n\t\tthis.closePopup();\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.disposed = true;\n\t\tthis.session.dispose();\n\t\tthis.jsonRpc.dispose();\n\t\tthis.incomingSubscription.unsubscribe();\n\t\tthis.messaging.outgoing.complete();\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n"],"mappings":";;;;;AAAA,MAAa,0BAA0B;CACtC,YAAY;CACZ,UAAU;CACV,eAAe;AAChB;;;ACUA,MAAM,0BAAwD;EAC5DA,aAAkB,OAAO;EACzBA,aAAkB,QAAQ;EAC1BA,aAAkB,cAAc;EAChCA,aAAkB,iBAAiB;EACnCA,aAAkB,iBAAiB;AACrC;AAEA,MAAa,4BACZ,YACI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,KAAK,MAAM,SAAS,SAAS;EAC5B,MAAM,kBACL,MAAM,WAAW,wBAAwB;EAC1C,MAAM,gBAAgB,MAAM,WAAW,wBAAwB;EAC/D,MAAM,qBACL,MAAM,WAAW,wBAAwB;EAC1C,IAAI,OAAO,oBAAoB,UAC9B,aAAa;EAEd,IAAI,OAAO,kBAAkB,UAC5B,WAAW;EAEZ,IAAI,OAAO,uBAAuB,UACjC,gBAAgB;CAElB;CAIA,OAHqB,CAAC,cAAc,UAAU,aAAa,CAAC,CAC1D,QAAQ,UAA2B,QAAQ,KAAK,CAAC,CAAC,CAClD,KAAK,KACW,KAAK,KAAA;AACxB;AAEA,SAAgB,gCACf,OACA,UAAkD,CAAC,GACrB;CAC9B,IAAI,EAAE,iBAAiB,cACtB,OAAO;EACN,MAAM;EACN,OAAO,QAAQ,iBAAiB;EAChC,aACC,QAAQ,uBACR;EACD,UAAUA,aAAkB;EAC5B,MAAM,sBAAsB;EAC5B,eAAe;CAChB;CAED,MAAM,cAAc;CAEpB,MAAM,OAAO,YAAY,cAAc,QAAQ,YAAY;CAC3D,MAAM,mBAAmB,OAAO,QAAQ,oBAAoB,QAAQ,KAAA;CACpE,MAAM,WACL,YAAY,cAAc,YAC1B,kBAAkB,YAClB,YAAY;CACb,MAAM,UAAU,wBAAwB,YAAY,IAAI;CAExD,MAAM,aAA0C;EAC/C;EACA,OAAO,kBAAkB,SAAS,QAAQ;EAC1C,aACC,YAAY,cAAc,WAC1B,kBAAkB,eAClB,QAAQ;EACT;EACA,MACC,kBAAkB,QAAQ,oBAAoB,YAAY,MAAM,QAAQ;EACzE,eAAe,kBAAkB,UAAU,OAAO;CACnD;CACA,IAAI,CAAC,YAAY,eAAe,QAAQ,qBAAqB,MAC5D,OAAO;CAER,MAAM,gBAAgB,QAAQ,oBAAoB,yBAAA,CACjD,YAAY,WACb;CACA,OAAO,eACJ;EAAE,GAAG;EAAY,OAAO,GAAG,aAAa,IAAI,WAAW;CAAQ,IAC/D;AACJ;AAEA,SAAS,wBAAwB,MAG/B;CACD,QAAQ,MAAR;EACC,KAAKC,gBAAqB,iBACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,cACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,WACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,SACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,eACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,SACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,WACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,QACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,KAAKA,gBAAqB,UACzB,OAAO;GACN,OAAO;GACP,aACC;EACF;EACD,KAAKA,gBAAqB,eACzB,OAAO;GACN,OAAO;GACP,aAAa;EACd;EACD,SACC,OAAO;GACN,OAAO;GACP,aAAa;EACd;CACF;AACD;AAEA,SAAS,oBACR,MACA,UACC;CACD,IAAI,SAASA,gBAAqB,WACjC,OAAO,sBAAsB;CAE9B,IACC,SAASA,gBAAqB,mBAC9B,SAASA,gBAAqB,WAC9B,SAASA,gBAAqB,aAC9B,SAASA,gBAAqB,UAC9B,aAAaD,aAAkB,SAC/B,aAAaA,aAAkB,eAC/B,aAAaA,aAAkB,gBAE/B,OAAO,sBAAsB;CAE9B,OAAO,sBAAsB;AAC9B;AAEA,SAAS,kBACR,UACA,SACuC;CACvC,IAAI,aAAaA,aAAkB,MAClC,OAAO;CAER,MAAM,QACL,QAAQ,iBAAiB,aAAa,wBAAwB;CAC/D,IAAI,CAAC,OACJ,OAAO;CAER,OAAO;EACN;EACA;EACA,MAAM,QAAQ,gBAAgB,aAAa;CAC5C;AACD;;;;;;;;AC5LA,SAAgB,aACf,SACA,SACyB;CACzB,OAAO,cAAc,iBAAiB,SAAS,OAAO;AACvD;;;;AAKA,SAAgB,eACf,QACyB;CACzB,OAAO;AACR;;;AC3BA,MAAa,iBAAiB;CAC7B,SAAS;CACT,QAAQ;AACT;AAKA,SAAgB,qCACf,OACA,UAAkD,CAAC,GACrB;CAC9B,OAAO,gCAAgC,OAAO;EAC7C,GAAG;EACH,mBAAmB;IACjB,eAAe,UAAU;IACzB,OAAO;IACP,aACC;IACD,UAAU,aAAa;IACvB,MAAM,sBAAsB;GAC7B;IACC,eAAe,SAAS;IACxB,OAAO;IACP,aACC;IACD,UAAU,aAAa;IACvB,MAAM,sBAAsB;GAC7B;GACA,GAAG,QAAQ;EACZ;CACD,CAAC;AACF;;;AC3BA,MAAa,kBAAkBE,KAAW,iBAAiB;AAI3D,MAAa,4BAA4BA,KAAW;CACnD,MAAM;CACN,SAAS;CACT,MAAM;AACP,CAAC;AAID,MAAa,8BAA8BA,KAAW;CACrD,SAAS;CACT,IAAI;CACJ,QAAQ;CACR,QAAQ;AACT,CAAC;AAID,MAAa,mCAAmCA,KAAW;CAC1D,SAAS;CACT,QAAQ;CACR,QAAQ;AACT,CAAC;AAKD,MAAa,sCAAsCA,KAAW;CAC7D,SAAS;CACT,IAAI;CACJ,QAAQ;AACT,CAAC;AAKD,MAAa,oCAAoCA,KAAW;CAC3D,SAAS;CACT,IAAI;CACJ,OAAO;AACR,CAAC;AAKD,MAAa,uBAAuB,4BAA4B,GAC/D,gCACD,CAAC,CACC,GAAG,mCAAmC,CAAC,CACvC,GAAG,iCAAiC;;;ACtBtC,SAAgB,oBACf,SACqB;CACrB,OAAO,IAAI,cAAc,OAAO;AACjC;AAEA,SAAgB,oBACf,SACqB;CACrB,OAAO,IAAI,cAAc,OAAO;AACjC;AAEA,SAAgB,6BACf,SAC8B;CAC9B,OAAO,IAAI,uBAAuB,OAAO;AAC1C;AAEA,IAAM,gBAAN,MAAkD;CASpB;CAR7B;CAEA,sBACC,IAAI,eAAyC;CAC9C,kCAAmC,IAAI,IAA+B;CACtE,WAAmB;CACnB,gBAAwB;CAExB,YAAY,SAAsD;EAArC,KAAA,UAAA;EAC5B,KAAK,iBAAiB,KAAK;CAC5B;CAEA,QACC,QACA,QACA,iBAAwC,CAAC,GACtB;EACnB,IAAI,KAAK,UACR,OAAO,QAAQ,OAAO,2BAA2B,QAAQ,CAAC;EAG3D,MAAM,KAAK,KAAK;EAChB,MAAM,YACL,eAAe,aAAa,KAAK,QAAQ;EAE1C,OAAO,IAAI,SAAkB,SAAS,WAAW;GAChD,MAAM,iBAAiC;IACtC;IACA;IACA;GACD;GAEA,IAAI,cAAc,KAAA,GACjB,eAAe,gBAAgB,KAAK,QAAQ,KAAK,iBAAiB;IACjE,KAAK,gBAAgB,OAAO,EAAE;IAC9B,uBAAO,IAAI,MAAM,kCAAkC,OAAO,EAAE,CAAC;GAC9D,GAAG,SAAS;GAGb,KAAK,gBAAgB,IAAI,IAAI,cAAc;GAE3C,IAAI;IACH,KAAK,QAAQ,KAAK;KACjB,SAAS;KACT;KACA;KACA;IACD,CAAiC;GAClC,SAAS,OAAO;IACf,KAAK,oBAAoB,EAAE;IAC3B,OAAO,KAAK;GACb;EACD,CAAC;CACF;CAEA,OAAO,QAAgB,QAAwB;EAC9C,IAAI,KAAK,UACR;EAED,KAAK,QAAQ,KAAK;GACjB,SAAS;GACT;GACA;EACD,CAAsC;CACvC;CAEA,QAAQ,SAAwB;EAC/B,IAAI,KAAK,UACR;EAGD,KAAK,MAAM,iBAAiB,sBAAsB,OAAO,GAAG;GAC3D,IAAI,yBAAyB,aAAa,GAAG;IAC5C,KAAK,sBAAsB,aAAa;IACxC;GACD;GAEA,IAAI,6BAA6B,aAAa,GAC7C,KAAK,oBAAoB,KAAK;IAC7B,QAAQ,cAAc;IACtB,QAAQ,cAAc;GACvB,CAAC;EAEH;CACD;CAEA,yBAAyB,QAAuB;EAC/C,KAAK,MAAM,CAAC,IAAI,mBAAmB,KAAK,iBAAiB;GACxD,KAAK,oBAAoB,EAAE;GAC3B,eAAe,OAAO,MAAM;EAC7B;CACD;CAEA,UAAgB;EACf,IAAI,KAAK,UACR;EAGD,KAAK,WAAW;EAChB,KAAK,yCAAyB,IAAI,MAAM,2BAA2B,CAAC;EACpE,KAAK,oBAAoB,SAAS;CACnC;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;CAEA,sBAA8B,SAAuC;EACpE,MAAM,iBAAiB,KAAK,gBAAgB,IAAI,QAAQ,EAAE;EAC1D,IAAI,CAAC,gBACJ;EAGD,KAAK,oBAAoB,QAAQ,EAAE;EAEnC,IAAI,WAAW,SAAS;GACvB,eAAe,uBACd,IAAI,MACH,+BAA+B,eAAe,OAAO,IAAI,QAAQ,MAAM,SACxE,CACD;GACA;EACD;EAEA,eAAe,QAAQ,QAAQ,MAAM;CACtC;CAEA,oBAA4B,IAAqB;EAChD,MAAM,iBAAiB,KAAK,gBAAgB,IAAI,EAAE;EAClD,IAAI,CAAC,gBACJ;EAGD,IAAI,eAAe,kBAAkB,KAAA,GACpC,KAAK,QAAQ,KAAK,aAAa,eAAe,aAAa;EAG5D,KAAK,gBAAgB,OAAO,EAAE;CAC/B;AACD;AAEA,IAAM,gBAAN,MAAkD;CASpB;CAR7B;CACA;CAEA,iBAAkC,IAAI,eAAoC;CAC1E,sBACC,IAAI,eAAyC;CAC9C,WAAmB;CAEnB,YAAY,SAAsD;EAArC,KAAA,UAAA;EAC5B,KAAK,YAAY,KAAK;EACtB,KAAK,iBAAiB,KAAK;CAC5B;CAEA,OAAO,QAAgB,QAAwB;EAC9C,IAAI,KAAK,UACR;EAED,KAAK,QAAQ,KAAK;GACjB,SAAS;GACT;GACA;EACD,CAAsC;CACvC;CAEA,QAAQ,SAAwB;EAC/B,IAAI,KAAK,UACR;EAGD,KAAK,MAAM,iBAAiB,sBAAsB,OAAO,GAAG;GAC3D,IAAI,wBAAwB,aAAa,GAAG;IAC3C,KAAK,eAAe,KAAK;KACxB,IAAI,cAAc;KAClB,QAAQ,cAAc;KACtB,QAAQ,cAAc;IACvB,CAAC;IACD;GACD;GAEA,IAAI,6BAA6B,aAAa,GAC7C,KAAK,oBAAoB,KAAK;IAC7B,QAAQ,cAAc;IACtB,QAAQ,cAAc;GACvB,CAAC;EAEH;CACD;CAEA,eAAe,IAAe,QAAuB;EACpD,IAAI,KAAK,UACR;EAED,KAAK,QAAQ,KAAK;GACjB,SAAS;GACT;GACA;EACD,CAAyC;CAC1C;CAEA,aAAa,IAAe,OAAkC;EAC7D,IAAI,KAAK,UACR;EAED,KAAK,QAAQ,KAAK;GACjB,SAAS;GACT;GACA;EACD,CAAuC;CACxC;CAEA,UAAgB;EACf,IAAI,KAAK,UACR;EAGD,KAAK,WAAW;EAChB,KAAK,eAAe,SAAS;EAC7B,KAAK,oBAAoB,SAAS;CACnC;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;AACD;AAEA,IAAM,yBAAN,MAAoE;CACnE;CACA;CAEA;CACA;CACA,WAAmB;CAEnB,YAAY,SAA8C;EACzD,KAAK,SAAS,IAAI,cAAc,OAAO;EACvC,KAAK,SAAS,IAAI,cAAc,OAAO;EACvC,KAAK,iBAAiB,KAAK,OAAO;EAClC,KAAK,YAAY,KAAK,OAAO;CAC9B;CAEA,QACC,QACA,QACA,SACmB;EACnB,OAAO,KAAK,OAAO,QAAiB,QAAQ,QAAQ,OAAO;CAC5D;CAEA,OAAO,QAAgB,QAAwB;EAC9C,KAAK,OAAO,OAAO,QAAQ,MAAM;CAClC;CAEA,QAAQ,SAAwB;EAC/B,KAAK,MAAM,iBAAiB,sBAAsB,OAAO,GAAG;GAC3D,IAAI,yBAAyB,aAAa,GAAG;IAC5C,KAAK,OAAO,QAAQ,aAAa;IACjC;GACD;GAEA,KAAK,OAAO,QAAQ,aAAa;EAClC;CACD;CAEA,yBAAyB,QAAuB;EAC/C,KAAK,OAAO,yBAAyB,MAAM;CAC5C;CAEA,eAAe,IAAe,QAAuB;EACpD,KAAK,OAAO,eAAe,IAAI,MAAM;CACtC;CAEA,aAAa,IAAe,OAAkC;EAC7D,KAAK,OAAO,aAAa,IAAI,KAAK;CACnC;CAEA,UAAgB;EACf,IAAI,KAAK,UACR;EAGD,KAAK,WAAW;EAChB,KAAK,OAAO,QAAQ;EACpB,KAAK,OAAO,QAAQ;CACrB;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;AACD;AAEA,SAAS,sBAAsB,SAAoC;CAClE,IAAI,CAAC,MAAM,QAAQ,OAAO,GACzB,OAAO,oBAAoB,OAAO;CAGnC,MAAM,iBAAmC,CAAC;CAC1C,KAAK,MAAM,SAAS,SACnB,eAAe,KAAK,GAAG,oBAAoB,KAAK,CAAC;CAElD,OAAO;AACR;AAEA,SAAS,oBAAoB,SAAoC;CAChE,MAAM,SAAS,uBAAuB,sBAAsB,OAAO;CACnE,OAAO,OAAO,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC;AAC3C;AAEA,SAAS,wBACR,SACmC;CACnC,OAAO,YAAY,WAAW,QAAQ;AACvC;AAEA,SAAS,yBACR,SACoC;CACpC,OAAO,QAAQ,WAAW,EAAE,YAAY;AACzC;AAEA,SAAS,6BACR,SACwC;CACxC,OAAO,YAAY,WAAW,EAAE,QAAQ;AACzC;AAEA,SAAS,2BAA2B,MAAkC;CACrE,uBAAO,IAAI,MAAM,YAAY,KAAK,WAAW;AAC9C;;;AC/VA,MAAa,4BAA4B;CACxC,OAAO;CACP,MAAM;CACN,MAAM;AACP;AAEA,MAAM,2BAA2B;AACjC,MAAM,gCAAgC;AACtC,MAAM,+BAA+B;AAerC,IAAa,qBAAb,MAAgC;CAC/B,UAAmB,aAAiC,IAAI;CACxD,WAAoB,aAAa,KAAK;CAEtC,QAAyB,IAAI,cAAoB;CACjD,YAA6B,aAAsB,KAAK;CACxD,aAA8B,KAAK,KAAK,SAAS,CAAC,CAAC,KAClD,qBAAqB,GACrB,OAAO,OAAO,GACd,YAAY,CAAC,CACd;CAEA,YAAY,SAA0C;EACrD,MAAM,qBAAqB,0CAC1B,QAAQ,IACT;EACA,MAAM,SAAS,IAAI,QAAiB;EACpC,MAAM,QAAQ,IAAI,QAAiB;EACnC,MAAM,UAAU,KAAK,QAAQ,YAAY,CAAC,CAAC,KAAK,OAAO,OAAO,CAAC;EAE/D,MAAM,QAAQ,MACb,OAAO,KAAK,OAAO,OAAO,CAAC,GAC3B,MAAM,KAAK,OAAO,OAAO,CAAC,CAC3B,CAAC,CAAC,KACD,gBACC,MACC,QAAQ,uBAAuB,+BAC/B,kBACD,CACD,CACD;EAEA,KAAK,KAAK,KAAK,CAAC,CACd,KACA,iBACC,KAAK,QAAQ,QAAQ,cAAc,CAAC,CAAC,KACpC,OAAO,SAAS,oBAAoB,OAElC;GACD,OAAO,MAAM,WAAW,0BAA0B;EACnD,CAAC,GACD,KAAK,CAAC,GACN,QAAQ;GACP,MAAM,QAAQ,kBAAkB;GAChC,WAAW;EACZ,CAAC,GACD,UAAU,IAAI,GACd,iBAAiB,GAAG,KAAK,CAAC,CAC3B,CACD,GACA,UAAU,KAAK,UAAU,CAC1B,CAAC,CACA,UAAU,MAAM;EAElB,MACE,KACA,iBACC,KAAK,QAAQ,QAAQ,cAAc,CAAC,CAAC,KACpC,OAAO,SAAS,mBAAmB,OAEjC;GACD,OAAO,MAAM,WAAW,0BAA0B;EACnD,CAAC,GACD,KAAK,CAAC,GACN,QAAQ;GACP,OAAO,QAAQ,sBAAsB;GACrC,WAAW;EACZ,CAAC,GACD,UAAU,IAAI,GACd,iBAAiB,GAAG,KAAK,CAAC,CAC3B,CACD,GACA,UAAU,KAAK,UAAU,CAC1B,CAAC,CACA,UAAU,KAAK;EAEjB,MACC,QAAQ,KACP,UAEE,IAAI,YAAY;GACf,MAAM,gBAAgB;GACtB,MAAM,eAAe;GACrB,SACC;GACD,UAAU,aAAa;GACvB,QAAQ;EACT,CAAC,CACH,CACD,GACA,OAAO,KACN,KAAK,YACJ,CAAC,UACE,IAAI,YAAY;GAChB,MAAM,gBAAgB;GACtB,SACC;GACD,UAAU,aAAa;GACvB,QAAQ;EACT,CAAC,IACA,IACJ,CACD,GACA,MAAM,KACL,KAAK,YACJ,CAAC,UACE,IAAI,YAAY;GAChB,MAAM,gBAAgB;GACtB,SACC;GACD,UAAU,aAAa;GACvB,QAAQ;EACT,CAAC,IACA,IACJ,CACD,CACD,CAAC,CACC,KACA,UAAU,KAAK,UAAU,GACzB,YAAY;GACX,YAAY;GACZ,UAAU;EACX,CAAC,CACF,CAAC,CACA,WAAW,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC;EAE9C,MACC,QAAQ,KAAK,UAAU,KAAK,CAAC,GAC7B,OAAO,KAAK,IAAI,OAAO,CAAC,GACxB,MAAM,KAAK,IAAI,OAAO,CAAC,CACxB,CAAC,CACC,KAAK,UAAU,KAAK,UAAU,CAAC,CAAC,CAChC,WAAW,iBAAiB;GAC5B,KAAK,SAAS,IAAI,YAAY;EAC/B,CAAC;CACH;CAEA,OAAa;EACZ,KAAK,MAAM,KAAK,IAAI;CACrB;CAEA,UAAgB;EACf,KAAK,UAAU,IAAI,IAAI;CACxB;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;AACD;AAEA,IAAa,qBAAb,MAAgC;CAC/B,QAAyB,IAAI,cAAoB;CACjD,cAA+B,IAAI,gBAAyB,KAAK;CACjE,aAA8B,KAAK,YAAY,KAC9C,qBAAqB,GACrB,OAAO,OAAO,GACd,YAAY,CAAC,CACd;CAEA,YAAY,SAA0C;EACrD,MAAM,SAAS,KAAK,KAAK,KAAK;EAM9B,MAAM,QALQ,KAAK,QAAQ,QAAQ,cAAc,CAAC,CAAC,KAClD,OAAO,SAAS,OAAO,OAAO;GAC7B,OAAO,MAAM,WAAW,0BAA0B;EACnD,CAAC,CAEgB;EAElB,MACC,OAAO,KACN,IAAI,SAAS,oBAA8C;GAC1D,OAAO,EACN,QAAQ,0BAA0B,MACnC;EACD,CAAC,CACF,GACA,MAAM,KACL,IAAI,SAAS,mBAA6C;GACzD,OAAO,EACN,QAAQ,0BAA0B,KACnC;EACD,CAAC,CACF,CACD,CAAC,CACC,KAAK,UAAU,KAAK,UAAU,CAAC,CAAC,CAChC,WAAW,UAAU;GACrB,QAAQ,QAAQ,OAAO,MAAM,QAAQ,MAAM,MAAM;EAClD,CAAC;CACH;CAEA,OAAa;EACZ,KAAK,MAAM,KAAK,IAAI;CACrB;CAEA,UAAgB;EACf,KAAK,YAAY,KAAK,IAAI;CAC3B;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;AACD;;;;;;AChMA,IAAa,0BAAb,MAA6E;CAC5E;CACA,WAAmB;CACnB;CACA;CACA;CACA;CAEA,YAAY,SAAyC;EACpD,KAAK,YAAY,QAAQ;EACzB,KAAK,aAAa,QAAQ;EAC1B,KAAK,UAAU,oBAAoB;GAClC,OAAO,YAAY;IAClB,QAAQ,UAAU,SAAS,KAAK,OAAO;GACxC;GACA,MAAM,QAAQ;EACf,CAAC;EACD,KAAK,UAAU,IAAI,mBAAmB;GACrC,SAAS,KAAK;GACd,MAAM,QAAQ;GACd,cAAc,QAAQ;EACvB,CAAC;EACD,KAAK,uBAAuB,QAAQ,UAAU,SAAS,UAAU,EAChE,OAAO,YAAY;GAClB,KAAK,QAAQ,QAAQ,OAAO;EAC7B,EACD,CAAC;EACD,KAAK,QAAQ,KAAK;CACnB;CAEA,IAAI,iBAA6D;EAChE,OAAO,KAAK,QAAQ;CACrB;CAEA,IAAI,UAAmD;EACtD,OAAO,KAAK,QAAQ;CACrB;CAEA,IAAI,WAAyC;EAC5C,OAAO,KAAK,QAAQ;CACrB;CAEA,MAAM,OAAO,QAAgB,QAAiC;EAC7D,KAAK,QAAQ,OAAO,QAAQ,MAAM;CACnC;CAEA,QACC,QACA,QACA,SACmB;EACnB,OAAO,KAAK,QAAQ,QAAQ,QAAQ,QAAQ,OAAO;CACpD;CAEA,QAAc;EACb,KAAK,WAAW;CACjB;CAEA,UAAgB;EACf,IAAI,KAAK,UACR;EAED,KAAK,WAAW;EAChB,KAAK,QAAQ,QAAQ;EACrB,KAAK,QAAQ,QAAQ;EACrB,KAAK,qBAAqB,YAAY;EACtC,KAAK,UAAU,SAAS,SAAS;CAClC;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;AACD;;;;AAKA,IAAa,0BAAb,MAA6E;CAC5E;CACA,WAAmB;CACnB;CACA;CACA;CACA;CAEA,YAAY,SAAyC;EACpD,KAAK,YAAY,QAAQ;EACzB,KAAK,aAAa,QAAQ;EAC1B,KAAK,UAAU,oBAAoB,EAClC,OAAO,YAAY;GAClB,QAAQ,UAAU,SAAS,KAAK,OAAO;EACxC,EACD,CAAC;EACD,KAAK,UAAU,IAAI,mBAAmB,EAAE,SAAS,KAAK,QAAQ,CAAC;EAC/D,KAAK,uBAAuB,QAAQ,UAAU,SAAS,UAAU,EAChE,OAAO,YAAY;GAClB,KAAK,QAAQ,QAAQ,OAAO;EAC7B,EACD,CAAC;EACD,KAAK,QAAQ,KAAK;CACnB;CAEA,IAAI,iBAA6D;EAChE,OAAO,KAAK,QAAQ;CACrB;CAEA,IAAI,YAAmD;EACtD,OAAO,KAAK,QAAQ;CACrB;CAEA,OAAO,QAAgB,QAAiC;EACvD,KAAK,QAAQ,OAAO,QAAQ,MAAM;EAClC,OAAO,QAAQ,QAAQ;CACxB;CAEA,QAAc;EACb,KAAK,WAAW;CACjB;CAEA,UAAgB;EACf,IAAI,KAAK,UACR;EAED,KAAK,WAAW;EAChB,KAAK,QAAQ,QAAQ;EACrB,KAAK,QAAQ,QAAQ;EACrB,KAAK,qBAAqB,YAAY;EACtC,KAAK,UAAU,SAAS,SAAS;CAClC;CAEA,CAAC,kBAAwB;EACxB,KAAK,QAAQ;CACd;AACD"}