@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.
- package/dist/{create-99Ksgl_O.mjs → create-i5VyYgN6.mjs} +58 -21
- package/dist/create-i5VyYgN6.mjs.map +1 -0
- package/dist/{handle-TnxwtQ4T.mjs → handle-DwMgqe7R.mjs} +34 -30
- package/dist/handle-DwMgqe7R.mjs.map +1 -0
- package/dist/{index-DmIapvr-.d.mts → index-B9SEJGU2.d.mts} +61 -63
- package/dist/{index-O1A3CdBV.d.mts → index-BjCFWcmV.d.mts} +17 -4
- package/dist/{index-Cg_iY2yY.d.mts → index-CFAJ969E.d.mts} +79 -13
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +94 -95
- package/dist/index.mjs.map +1 -1
- package/dist/{router-DUh3bhLy.mjs → router-at5bTdJQ.mjs} +3 -3
- package/dist/{router-DUh3bhLy.mjs.map → router-at5bTdJQ.mjs.map} +1 -1
- package/dist/rx/index.d.mts +1 -1
- package/dist/rx/index.mjs +1 -1
- package/dist/{rx-B3OU17wu.mjs → rx-DM6Ouv-m.mjs} +21 -7
- package/dist/rx-DM6Ouv-m.mjs.map +1 -0
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.mjs +1 -1
- package/dist/test/index.d.mts +2 -2
- package/dist/test/index.mjs +2 -2
- package/dist/web/index.d.mts +3 -16
- package/dist/web/index.mjs +4 -4
- package/dist/webext/index.d.mts +2 -2
- package/dist/webext/index.mjs +3 -3
- package/package.json +10 -1
- package/dist/create-99Ksgl_O.mjs.map +0 -1
- package/dist/handle-TnxwtQ4T.mjs.map +0 -1
- package/dist/rx-B3OU17wu.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-99Ksgl_O.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?: Record<string, unknown>;\n\tmutable?: false;\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\treadonly attributes: Readonly<Record<string, unknown>>;\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(attributes: Record<string, unknown>): void;\n}\n\nexport const SpanTraitSchema = defineType({\n\tid: \"string\",\n\tfork: \"Function\",\n\tattributes: \"object\",\n});\n\nexport const SPAN_TRAIT_TOKEN = new SecuritydeptInjectionToken<SpanTrait>(\n\t\"SPAN_TRAIT_TOKEN\",\n);\n\nexport interface OperationSpanTrait extends MutableSpanTrait {\n\taddEvent(type: string, attributes?: Record<string, unknown>): void;\n\trecordError(error: unknown, attributes?: Record<string, unknown>): void;\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 SpanCreateOptions,\n\tSpanCreateOptionsSchema,\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 _attributes: Readonly<Record<string, unknown>>;\n\tprotected readonly _idFactory: () => string;\n\n\tget attributes() {\n\t\treturn this._attributes;\n\t}\n\n\tprotected constructor(\n\t\tparent: SpanTrait | undefined,\n\t\tidFactory: () => string,\n\t\tattributes: Readonly<Record<string, unknown>>,\n\t) {\n\t\tthis._idFactory = idFactory;\n\t\tthis.id = idFactory();\n\t\tthis.parent = parent;\n\t\tthis._attributes = 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\tObject.freeze({ ...(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(\n\t\t\tthis,\n\t\t\toptions.idFactory ?? this._idFactory,\n\t\t\tObject.freeze({ ...options.attributes }),\n\t\t);\n\t}\n\n\tsetAttributes(attributes: Record<string, unknown>): void {\n\t\tthis._attributes = Object.freeze({ ...this._attributes, ...attributes });\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 { type EventStreamTrait, type EventSubscriptionTrait } from \"../events\";\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\tconst events: EventStreamTrait<TracingEvent> = subject;\n\tconst subscriptions: EventSubscriptionTrait[] = [];\n\n\tfor (const subscriber of resolvedCreateOptions.subscribers) {\n\t\tsubscriptions.push(\n\t\t\tevents.subscribe({\n\t\t\t\tnext(event) {\n\t\t\t\t\tsubscriber.record(event);\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn {\n\t\trecord(event) {\n\t\t\tsubject.next(event);\n\t\t},\n\t\tevents,\n\t\tdispose() {\n\t\t\tfor (const subscription of subscriptions.splice(0)) {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t}\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 { type SpanTrait } 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 interface TracingEvent {\n\tname: string;\n\tat: number;\n\tspan: SpanTrait;\n\tlevel: TracingLevel;\n\ttarget: string;\n\tfields?: Record<string, unknown>;\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handle-TnxwtQ4T.mjs","names":["UserRecoveryValue","ClientErrorKindValue","defineType"],"sources":["../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":["import { ClientError } from \"./client-error\";\nimport {\n\ttype ClientErrorKind,\n\tClientErrorKind as ClientErrorKindValue,\n\ttype ErrorPresentation,\n\ttype ErrorPresentationActionDescriptor,\n\ttype ErrorPresentationDescriptor,\n\tErrorPresentationTone,\n\ttype ReadErrorPresentationDescriptorOptions,\n\ttype UserRecovery,\n\tUserRecovery as UserRecoveryValue,\n} from \"./types\";\n\ninterface ClientErrorLike {\n\tcode: string | null;\n\tkind: ClientErrorKind | null;\n\trecovery: UserRecovery;\n\tretryable: boolean;\n\tsource?: string;\n\tpresentation?: ErrorPresentation;\n}\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\nconst userRecoveryValues = new Set<string>(Object.values(UserRecoveryValue));\nconst clientErrorKindValues = new Set<string>(\n\tObject.values(ClientErrorKindValue),\n);\n\nexport function readErrorPresentationDescriptor(\n\terror: unknown,\n\toptions: ReadErrorPresentationDescriptorOptions = {},\n): ErrorPresentationDescriptor {\n\tconst clientError =\n\t\terror instanceof ClientError ? error : coerceClientErrorLike(error);\n\tif (!clientError) {\n\t\treturn {\n\t\t\tcode: null,\n\t\t\tkind: 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\tretryable: false,\n\t\t\ttone: ErrorPresentationTone.Danger,\n\t\t\tprimaryAction: null,\n\t\t};\n\t}\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\treturn {\n\t\tcode,\n\t\tkind: clientError.kind,\n\t\tsource: clientError.source,\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\tretryable: clientError.retryable,\n\t\ttone:\n\t\t\tcodePresentation?.tone ?? readClientErrorTone(clientError.kind, recovery),\n\t\tprimaryAction: readPrimaryAction(recovery, options),\n\t};\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 coerceClientErrorLike(error: unknown): ClientErrorLike | null {\n\tif (typeof error !== \"object\" || error === null) {\n\t\treturn null;\n\t}\n\tconst candidate = error as Record<string, unknown>;\n\tif (\n\t\ttypeof candidate.kind !== \"string\" ||\n\t\t!clientErrorKindValues.has(candidate.kind)\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tcode: typeof candidate.code === \"string\" ? candidate.code : null,\n\t\tkind: candidate.kind as ClientErrorKind,\n\t\trecovery:\n\t\t\ttypeof candidate.recovery === \"string\" &&\n\t\t\tuserRecoveryValues.has(candidate.recovery)\n\t\t\t\t? (candidate.recovery as UserRecovery)\n\t\t\t\t: UserRecoveryValue.None,\n\t\tretryable: candidate.retryable === true,\n\t\tsource: typeof candidate.source === \"string\" ? candidate.source : undefined,\n\t\tpresentation: isErrorPresentation(candidate.presentation)\n\t\t\t? candidate.presentation\n\t\t\t: undefined,\n\t};\n}\n\nfunction isErrorPresentation(value: unknown): value is ErrorPresentation {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\ttypeof (value as Record<string, unknown>).code === \"string\" &&\n\t\ttypeof (value as Record<string, unknown>).message === \"string\" &&\n\t\ttypeof (value as Record<string, unknown>).recovery === \"string\" &&\n\t\tuserRecoveryValues.has(\n\t\t\t(value as Record<string, unknown>).recovery as string,\n\t\t)\n\t);\n}\n\nfunction readPrimaryAction(\n\trecovery: UserRecovery,\n\toptions: ReadErrorPresentationDescriptorOptions,\n): ErrorPresentationActionDescriptor | 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":"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"}
|
package/dist/rx-B3OU17wu.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rx-B3OU17wu.mjs","names":["BehaviorSubject"],"sources":["../src/errors/types.ts","../src/errors/client-error.ts","../src/compat/disposable.ts","../src/compat/observable.ts","../src/rx/event.ts","../src/rx/signal.ts","../src/rx/command.ts","../src/rx/environment.ts","../src/cancellation/create.ts","../src/signals/error.ts","../src/signals/types.ts","../src/signals/resource-snapshot.ts","../src/rx/resource.ts"],"sourcesContent":["// --- Error model ---\n// Dual-layer: machine-facing runtime error + user-facing presentation / recovery hint.\n\n/** Recovery actions the user might take. Aligned with server-side `UserRecovery`. */\nexport const UserRecovery = {\n\tNone: \"none\",\n\tRetry: \"retry\",\n\tRestartFlow: \"restart_flow\",\n\tReauthenticate: \"reauthenticate\",\n\tContactSupport: \"contact_support\",\n} as const;\n\nexport type UserRecovery = (typeof UserRecovery)[keyof typeof UserRecovery];\n\n/** User-facing error presentation. `code` is the cross-platform stable contract. */\nexport interface ErrorPresentation {\n\tcode: string;\n\tmessage: string;\n\trecovery: UserRecovery;\n}\n\nexport const ErrorPresentationTone = {\n\tNeutral: \"neutral\",\n\tWarning: \"warning\",\n\tDanger: \"danger\",\n} as const;\n\nexport type ErrorPresentationTone =\n\t(typeof ErrorPresentationTone)[keyof typeof ErrorPresentationTone];\n\nexport interface ErrorPresentationActionDescriptor {\n\trecovery: UserRecovery;\n\tlabel: string;\n\thref: string | null;\n}\n\nexport interface ErrorPresentationDescriptor {\n\tcode: string | null;\n\tkind: ClientErrorKind | null;\n\tsource?: string;\n\ttitle: string;\n\tdescription: string;\n\trecovery: UserRecovery;\n\tretryable: boolean;\n\ttone: ErrorPresentationTone;\n\tprimaryAction: ErrorPresentationActionDescriptor | null;\n}\n\nexport interface ReadErrorPresentationDescriptorOptions {\n\tfallbackTitle?: string;\n\tfallbackDescription?: string;\n\tcodePresentations?: Readonly<Record<string, ErrorCodePresentationDescriptor>>;\n\trecoveryLinks?: Partial<Record<UserRecovery, string>>;\n\trecoveryLabels?: Partial<Record<UserRecovery, string>>;\n}\n\nexport interface ErrorCodePresentationDescriptor {\n\ttitle: string;\n\tdescription: string;\n\ttone?: ErrorPresentationTone;\n\trecovery?: UserRecovery;\n}\n\n/** Machine-facing error kind discriminator. */\nexport const ClientErrorKind = {\n\tAuthorization: \"authorization\",\n\tTransport: \"transport\",\n\tServer: \"server\",\n\tProtocol: \"protocol\",\n\tStorage: \"storage\",\n\tConfiguration: \"configuration\",\n\tUnauthenticated: \"unauthenticated\",\n\tUnauthorized: \"unauthorized\",\n\tCancelled: \"cancelled\",\n\tTimeout: \"timeout\",\n\tInternal: \"internal\",\n} as const;\n\nexport type ClientErrorKind =\n\t(typeof ClientErrorKind)[keyof typeof ClientErrorKind];\n\n/** Stable source vocabulary for common client error producers. */\nexport const ClientErrorSource = {\n\tTransport: \"transport\",\n\tServer: \"server\",\n\tClient: \"client\",\n} as const;\n\nexport type ClientErrorSource =\n\t(typeof ClientErrorSource)[keyof typeof ClientErrorSource];\n","import {\n\tClientErrorKind,\n\tClientErrorSource,\n\ttype ErrorPresentation,\n\tUserRecovery,\n\ttype UserRecovery as UserRecoveryType,\n} from \"./types\";\n\ntype ServerErrorBody = {\n\tkind?: string;\n\tcode?: string;\n\tmessage?: string;\n\trecovery?: string;\n\tpresentation?: {\n\t\tcode?: string;\n\t\tmessage?: string;\n\t\trecovery?: string;\n\t};\n};\n\nexport interface ClientErrorFromUnknownOptions {\n\tmessage: string;\n\tcode: string;\n\tsource: string;\n}\n\nexport interface ClientErrorFromHttpResponseOptions {\n\tstatus: number;\n\tbody?: unknown;\n\tsource?: string;\n}\n\nconst userRecoveryValues = new Set<string>(Object.values(UserRecovery));\n\nfunction readUserRecovery(value: unknown): UserRecoveryType | undefined {\n\treturn typeof value === \"string\" && userRecoveryValues.has(value)\n\t\t? (value as UserRecoveryType)\n\t\t: undefined;\n}\n\nfunction mapServerErrorKind(\n\tkind: string | undefined,\n\tstatus: number,\n): ClientErrorKind {\n\tswitch (kind) {\n\t\tcase \"unauthenticated\":\n\t\t\treturn ClientErrorKind.Unauthenticated;\n\t\tcase \"unauthorized\":\n\t\t\treturn ClientErrorKind.Unauthorized;\n\t\tcase \"unavailable\":\n\t\tcase \"internal\":\n\t\t\treturn ClientErrorKind.Server;\n\t\tcase \"invalid_request\":\n\t\tcase \"conflict\":\n\t\t\treturn ClientErrorKind.Protocol;\n\t\tdefault:\n\t\t\treturn status === 401\n\t\t\t\t? ClientErrorKind.Unauthenticated\n\t\t\t\t: status === 403\n\t\t\t\t\t? ClientErrorKind.Unauthorized\n\t\t\t\t\t: status === 408\n\t\t\t\t\t\t? ClientErrorKind.Timeout\n\t\t\t\t\t\t: status >= 500\n\t\t\t\t\t\t\t? ClientErrorKind.Server\n\t\t\t\t\t\t\t: ClientErrorKind.Protocol;\n\t}\n}\n\nfunction readServerErrorBody(body: unknown): ServerErrorBody | undefined {\n\tif (!body || typeof body !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst record = body as Record<string, unknown>;\n\tconst error =\n\t\trecord.error && typeof record.error === \"object\"\n\t\t\t? (record.error as Record<string, unknown>)\n\t\t\t: record;\n\n\treturn {\n\t\tkind: typeof error.kind === \"string\" ? error.kind : undefined,\n\t\tcode: typeof error.code === \"string\" ? error.code : undefined,\n\t\tmessage: typeof error.message === \"string\" ? error.message : undefined,\n\t\trecovery: typeof error.recovery === \"string\" ? error.recovery : undefined,\n\t\tpresentation:\n\t\t\terror.presentation && typeof error.presentation === \"object\"\n\t\t\t\t? {\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\ttypeof (error.presentation as Record<string, unknown>).code ===\n\t\t\t\t\t\t\t\"string\"\n\t\t\t\t\t\t\t\t? ((error.presentation as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t.code as string)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\ttypeof (error.presentation as Record<string, unknown>).message ===\n\t\t\t\t\t\t\t\"string\"\n\t\t\t\t\t\t\t\t? ((error.presentation as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t.message as string)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\trecovery:\n\t\t\t\t\t\t\ttypeof (error.presentation as Record<string, unknown>)\n\t\t\t\t\t\t\t\t.recovery === \"string\"\n\t\t\t\t\t\t\t\t? ((error.presentation as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t.recovery as string)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t};\n}\n\n/**\n * Base client error carrying both machine-facing context and an optional\n * user-facing presentation layer.\n *\n * Top-level `code` and `recovery` provide stable machine contracts for\n * policy decisions without requiring callers to unwrap `presentation`.\n */\nexport class ClientError extends Error {\n\treadonly kind: ClientErrorKind;\n\n\t/**\n\t * Stable machine-readable error code.\n\t * Matches `presentation.code` when present, otherwise a default\n\t * derived from `kind`.\n\t */\n\treadonly code: string;\n\n\t/** Recovery hint at the machine level. */\n\treadonly recovery: UserRecoveryType;\n\n\t/** Whether this error is safe to retry. */\n\treadonly retryable: boolean;\n\n\t/** Structured user-facing error presentation from the server. */\n\treadonly presentation?: ErrorPresentation;\n\n\t/** Source subsystem or component that produced the error. */\n\treadonly source?: string;\n\n\tconstructor(options: {\n\t\tkind: ClientErrorKind;\n\t\tmessage: string;\n\t\tcode?: string;\n\t\trecovery?: UserRecoveryType;\n\t\tretryable?: boolean;\n\t\tpresentation?: ErrorPresentation;\n\t\tsource?: string;\n\t\tcause?: unknown;\n\t}) {\n\t\tsuper(options.message, { cause: options.cause });\n\t\tthis.name = \"ClientError\";\n\t\tthis.kind = options.kind;\n\t\tthis.code =\n\t\t\toptions.code ?? options.presentation?.code ?? `client.${options.kind}`;\n\t\tthis.recovery =\n\t\t\toptions.recovery ?? options.presentation?.recovery ?? UserRecovery.None;\n\t\tthis.retryable = options.retryable ?? this.recovery === UserRecovery.Retry;\n\t\tthis.presentation = options.presentation;\n\t\tthis.source = options.source;\n\t}\n\n\t/** Create a `ClientError` from a server error response body. */\n\tstatic fromServerError(\n\t\tbody: {\n\t\t\tkind?: string;\n\t\t\tcode?: string;\n\t\t\tmessage?: string;\n\t\t\trecovery?: string;\n\t\t\tpresentation?: {\n\t\t\t\tcode?: string;\n\t\t\t\tmessage?: string;\n\t\t\t\trecovery?: string;\n\t\t\t};\n\t\t},\n\t\toverrides?: { kind?: ClientErrorKind; source?: string },\n\t): ClientError {\n\t\tconst rawPresentation = body.presentation;\n\t\tconst recovery =\n\t\t\treadUserRecovery(body.recovery) ??\n\t\t\treadUserRecovery(rawPresentation?.recovery) ??\n\t\t\tUserRecovery.None;\n\t\tconst presentation: ErrorPresentation | undefined =\n\t\t\trawPresentation?.code && rawPresentation.message\n\t\t\t\t? {\n\t\t\t\t\t\tcode: rawPresentation.code,\n\t\t\t\t\t\tmessage: rawPresentation.message,\n\t\t\t\t\t\trecovery: readUserRecovery(rawPresentation.recovery) ?? recovery,\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\treturn new ClientError({\n\t\t\tkind: overrides?.kind ?? mapServerErrorKind(body.kind, 400),\n\t\t\tmessage: body.message ?? presentation?.message ?? \"Unknown server error\",\n\t\t\tcode: body.code ?? presentation?.code,\n\t\t\trecovery,\n\t\t\tretryable: recovery === UserRecovery.Retry,\n\t\t\tpresentation,\n\t\t\tsource: overrides?.source,\n\t\t});\n\t}\n\n\tstatic fromUnknown(\n\t\terror: unknown,\n\t\toptions: ClientErrorFromUnknownOptions,\n\t): ClientError {\n\t\tif (error instanceof ClientError) {\n\t\t\treturn error;\n\t\t}\n\n\t\treturn new ClientError({\n\t\t\tkind: ClientErrorKind.Internal,\n\t\t\tmessage: options.message,\n\t\t\tcode: options.code,\n\t\t\tsource: options.source,\n\t\t\tcause: error,\n\t\t});\n\t}\n\n\t/**\n\t * Create a `ClientError` from an HTTP response status and optional body.\n\t * Used when a non-success status is unexpected.\n\t */\n\tstatic fromHttpResponse(\n\t\toptions: ClientErrorFromHttpResponseOptions,\n\t): ClientError {\n\t\tconst { status, body } = options;\n\t\tconst serverBody = readServerErrorBody(body);\n\n\t\t// Derive kind and source from HTTP status first — these apply\n\t\t// whether or not the response carries a structured error body.\n\t\tconst kind = mapServerErrorKind(serverBody?.kind, status);\n\n\t\tconst source = options.source ?? ClientErrorSource.Server;\n\t\tconst fallbackRecovery: UserRecoveryType =\n\t\t\tkind === ClientErrorKind.Unauthenticated\n\t\t\t\t? UserRecovery.Reauthenticate\n\t\t\t\t: status === 408 || status >= 500\n\t\t\t\t\t? UserRecovery.Retry\n\t\t\t\t\t: UserRecovery.None;\n\n\t\t// If the server returned a structured error body, preserve it\n\t\t// but keep the status-derived kind/source.\n\t\tif (serverBody?.code && serverBody?.message) {\n\t\t\tconst recovery =\n\t\t\t\treadUserRecovery(serverBody.presentation?.recovery) ??\n\t\t\t\treadUserRecovery(serverBody.recovery) ??\n\t\t\t\tfallbackRecovery;\n\t\t\treturn ClientError.fromServerError(\n\t\t\t\t{\n\t\t\t\t\t...serverBody,\n\t\t\t\t\trecovery,\n\t\t\t\t\tpresentation: serverBody.presentation\n\t\t\t\t\t\t? { ...serverBody.presentation, recovery }\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\t{ kind, source },\n\t\t\t);\n\t\t}\n\n\t\treturn new ClientError({\n\t\t\tkind,\n\t\t\tmessage: serverBody?.message ?? `HTTP ${status}`,\n\t\t\tcode: serverBody?.code ?? `http.${status}`,\n\t\t\trecovery: fallbackRecovery,\n\t\t\tretryable: status === 408 || status >= 500,\n\t\t\tsource,\n\t\t});\n\t}\n}\n","export const SYMBOL_DISPOSE: typeof Symbol.dispose =\n\ttypeof Symbol !== \"undefined\" && Symbol.dispose\n\t\t? Symbol.dispose\n\t\t: (\"@@dispose\" as unknown as typeof Symbol.dispose);\n\nexport interface DisposableTrait {\n\tdispose(): void;\n\t[SYMBOL_DISPOSE](): void;\n}\n\nexport const SYMBOL_ASYNC_DISPOSE: typeof Symbol.asyncDispose =\n\ttypeof Symbol !== \"undefined\" && Symbol.asyncDispose\n\t\t? Symbol.asyncDispose\n\t\t: (\"@@asyncDispose\" as unknown as typeof Symbol.asyncDispose);\n\nexport interface AsyncDisposableTrait {\n\tdispose(): Promise<void>;\n\t[SYMBOL_ASYNC_DISPOSE](): Promise<void>;\n}\n\nexport interface DisposableStackTrait extends DisposableTrait {\n\treadonly disposed: boolean;\n\tuse<T extends DisposableTrait>(disposable: T): T;\n\tdispose(): void;\n\t[SYMBOL_DISPOSE](): void;\n}\n\nexport const SYMBOL_DISPOSABLE_STACK = \"@@disposableStack\";\n\nexport function injectDisposableStackFrom(\n\targ: unknown,\n\tisOptions = false,\n): DisposableStackTrait | undefined {\n\treturn (\n\t\tisOptions && typeof arg === \"object\" && arg !== null\n\t\t\t? (arg as Record<PropertyKey, unknown>)[SYMBOL_DISPOSABLE_STACK]\n\t\t\t: arg\n\t) as DisposableStackTrait | undefined;\n}\n\nexport class SimpleDisposableStack implements DisposableStackTrait {\n\tprivate readonly stack: DisposableTrait[] = [];\n\tdisposed = false;\n\n\tuse<T extends DisposableTrait>(disposable: T): T {\n\t\tif (this.disposed) {\n\t\t\tthrow new ReferenceError(\"Disposable stack is already disposed\");\n\t\t}\n\t\tthis.stack.push(disposable);\n\t\treturn disposable;\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\tconst errors: unknown[] = [];\n\t\tfor (\n\t\t\tlet disposable = this.stack.pop();\n\t\t\tdisposable;\n\t\t\tdisposable = this.stack.pop()\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdisposable.dispose();\n\t\t\t} catch (error) {\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t}\n\t\tif (errors.length === 1) {\n\t\t\tthrow errors[0];\n\t\t}\n\t\tif (errors.length > 1) {\n\t\t\tthrow new AggregateError(errors, \"Failed to dispose disposable stack\");\n\t\t}\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n\ninterface NativeDisposableStackLike {\n\treadonly disposed: boolean;\n\tuse<T extends DisposableTrait>(disposable: T): T;\n\tdispose(): void;\n}\n\ntype NativeDisposableStackConstructor = new () => NativeDisposableStackLike;\n\nexport class StdDisposableStack implements DisposableStackTrait {\n\tprivate readonly stack: NativeDisposableStackLike;\n\n\tconstructor(\n\t\tStack: NativeDisposableStackConstructor = (\n\t\t\tglobalThis as typeof globalThis & {\n\t\t\t\tDisposableStack: NativeDisposableStackConstructor;\n\t\t\t}\n\t\t).DisposableStack,\n\t) {\n\t\tthis.stack = new Stack();\n\t}\n\n\tget disposed(): boolean {\n\t\treturn this.stack.disposed;\n\t}\n\n\tuse<T extends DisposableTrait>(disposable: T): T {\n\t\treturn this.stack.use(disposable);\n\t}\n\n\tdispose(): void {\n\t\tthis.stack.dispose();\n\t}\n\n\t[SYMBOL_DISPOSE](): void {\n\t\tthis.dispose();\n\t}\n}\n\nexport function createDisposableStack(): DisposableStackTrait {\n\tconst Stack = (\n\t\tglobalThis as typeof globalThis & {\n\t\t\tDisposableStack?: NativeDisposableStackConstructor;\n\t\t}\n\t).DisposableStack;\n\treturn typeof Stack === \"function\"\n\t\t? new StdDisposableStack(Stack)\n\t\t: new SimpleDisposableStack();\n}\n\nexport function withDisposableStack(index: number, isOptions = false) {\n\treturn <TThis, TArgs extends unknown[], TReturn>(\n\t\ttarget: (this: TThis, ...args: TArgs) => TReturn,\n\t\t_context: ClassMethodDecoratorContext<\n\t\t\tTThis,\n\t\t\t(this: TThis, ...args: TArgs) => TReturn\n\t\t>,\n\t) =>\n\t\tfunction (this: TThis, ...args: TArgs): TReturn {\n\t\t\tconst disposableStack = createDisposableStack();\n\t\t\tconst injectedArgs = [...args] as unknown[];\n\t\t\tif (isOptions) {\n\t\t\t\tconst value = injectedArgs[index];\n\t\t\t\tinjectedArgs[index] = Object.assign(\n\t\t\t\t\t{},\n\t\t\t\t\ttypeof value === \"object\" && value !== null ? value : undefined,\n\t\t\t\t\t{ [SYMBOL_DISPOSABLE_STACK]: disposableStack },\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tinjectedArgs[index] = disposableStack;\n\t\t\t}\n\n\t\t\tlet result: TReturn;\n\t\t\ttry {\n\t\t\t\tresult = target.call(this, ...(injectedArgs as TArgs));\n\t\t\t} catch (error) {\n\t\t\t\tdisposableStack.dispose();\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof result === \"object\" &&\n\t\t\t\tresult !== null &&\n\t\t\t\t\"then\" in result &&\n\t\t\t\ttypeof result.then === \"function\"\n\t\t\t) {\n\t\t\t\treturn Promise.resolve(result).finally(() => {\n\t\t\t\t\tdisposableStack.dispose();\n\t\t\t\t}) as TReturn;\n\t\t\t}\n\n\t\t\tdisposableStack.dispose();\n\t\t\treturn result;\n\t\t};\n}\n","export const SYMBOL_OBSERVABLE: typeof Symbol.observable =\n\ttypeof Symbol !== \"undefined\" && Symbol.observable\n\t\t? Symbol.observable\n\t\t: (\"@@observable\" as unknown as typeof Symbol.observable);\n\n/** Subscription handle with explicit unsubscribe. */\nexport interface SubscriptionTrait {\n\tunsubscribe(): void;\n}\n\n/** Observer for event streams — mirrors the Observable observer pattern. */\nexport interface ObserverTrait<T> {\n\tnext(value: T): void;\n\terror(error: unknown): void;\n\tcomplete(): void;\n}\n\nexport interface SubscribableTrait<T> {\n\tsubscribe(observer: Partial<ObserverTrait<T>>): SubscriptionTrait;\n}\n\nexport interface InteropObservableTrait<T> {\n\t[SYMBOL_OBSERVABLE](): SubscribableTrait<T>;\n}\n\nexport type WithInteropObservableTraitCompat<\n\tO extends InteropObservableTrait<unknown>,\n\tT extends O extends InteropObservableTrait<infer U> ? U : never,\n> = O & InteropObservableTrait<T>;\n\nexport function isInteropObservableTrait<T>(\n\tvalue: unknown,\n): value is InteropObservableTrait<T> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\tSYMBOL_OBSERVABLE in value &&\n\t\ttypeof value[SYMBOL_OBSERVABLE] === \"function\"\n\t);\n}\n","import {\n\tfrom,\n\tObservable,\n\ttype ObservableInput,\n\ttype OperatorFunction,\n\tReplaySubject,\n\tSubject,\n} from \"rxjs\";\nimport {\n\ttype InteropObservableTrait,\n\tisInteropObservableTrait,\n\ttype SubscribableTrait,\n\tSYMBOL_OBSERVABLE,\n} from \"../compat\";\nimport {\n\ttype EventObserverTrait,\n\ttype EventStreamTrait,\n\ttype EventSubjectTrait,\n} from \"../events/types\";\n\nexport type RxEventStreamProducer<T> = (\n\tobserver: EventObserverTrait<T>,\n) => (() => void) | void;\n\nexport type RxEventStreamInput<T> =\n\t| ObservableInput<T>\n\t| InteropObservableTrait<T>\n\t| SubscribableTrait<T>;\n\nexport class RxEventStream<T>\n\textends Observable<T>\n\timplements EventStreamTrait<T>, InteropObservableTrait<T>\n{\n\tconstructor(source: RxEventStreamInput<T> | RxEventStreamProducer<T>) {\n\t\tsuper((subscriber) => {\n\t\t\tif (typeof source === \"function\") {\n\t\t\t\treturn source(subscriber);\n\t\t\t}\n\t\t\tif (isInteropObservableTrait<T>(source)) {\n\t\t\t\tconst subscription = source[SYMBOL_OBSERVABLE]().subscribe(subscriber);\n\t\t\t\treturn () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (\n\t\t\t\ttypeof source === \"object\" &&\n\t\t\t\tsource !== null &&\n\t\t\t\t\"subscribe\" in source &&\n\t\t\t\ttypeof source.subscribe === \"function\"\n\t\t\t) {\n\t\t\t\tconst subscription = source.subscribe(subscriber);\n\t\t\t\treturn () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst subscription = from(source as ObservableInput<T>).subscribe(\n\t\t\t\tsubscriber,\n\t\t\t);\n\t\t\treturn () => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t};\n\t\t});\n\t}\n\n\t[SYMBOL_OBSERVABLE](): RxEventStream<T> {\n\t\treturn this;\n\t}\n\n\tstatic fromObservableInput<T>(\n\t\tinput: RxEventStreamInput<T>,\n\t): RxEventStream<T> {\n\t\tif (input instanceof RxEventStream) {\n\t\t\treturn input;\n\t\t}\n\t\treturn new RxEventStream(input);\n\t}\n\n\t// @ts-expect-error RxJS pipe overloads are intentionally narrowed to RxEventStream.\n\toverride pipe(): RxEventStream<T>;\n\toverride pipe<A>(op1: OperatorFunction<T, A>): RxEventStream<A>;\n\toverride pipe<A, B>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t): RxEventStream<B>;\n\toverride pipe<A, B, C>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t): RxEventStream<C>;\n\toverride pipe<A, B, C, D>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t): RxEventStream<D>;\n\toverride pipe<A, B, C, D, E>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t\top5: OperatorFunction<D, E>,\n\t): RxEventStream<E>;\n\toverride pipe<A, B, C, D, E, F>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t\top5: OperatorFunction<D, E>,\n\t\top6: OperatorFunction<E, F>,\n\t): RxEventStream<F>;\n\toverride pipe<A, B, C, D, E, F, G>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t\top5: OperatorFunction<D, E>,\n\t\top6: OperatorFunction<E, F>,\n\t\top7: OperatorFunction<F, G>,\n\t): RxEventStream<G>;\n\toverride pipe<A, B, C, D, E, F, G, H>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t\top5: OperatorFunction<D, E>,\n\t\top6: OperatorFunction<E, F>,\n\t\top7: OperatorFunction<F, G>,\n\t\top8: OperatorFunction<G, H>,\n\t): RxEventStream<H>;\n\toverride pipe<A, B, C, D, E, F, G, H, I>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t\top5: OperatorFunction<D, E>,\n\t\top6: OperatorFunction<E, F>,\n\t\top7: OperatorFunction<F, G>,\n\t\top8: OperatorFunction<G, H>,\n\t\top9: OperatorFunction<H, I>,\n\t): RxEventStream<I>;\n\toverride pipe<A, B, C, D, E, F, G, H, I>(\n\t\top1: OperatorFunction<T, A>,\n\t\top2: OperatorFunction<A, B>,\n\t\top3: OperatorFunction<B, C>,\n\t\top4: OperatorFunction<C, D>,\n\t\top5: OperatorFunction<D, E>,\n\t\top6: OperatorFunction<E, F>,\n\t\top7: OperatorFunction<F, G>,\n\t\top8: OperatorFunction<G, H>,\n\t\top9: OperatorFunction<H, I>,\n\t\t...operations: OperatorFunction<any, any>[]\n\t): RxEventStream<unknown>;\n\toverride pipe(\n\t\t...args: Parameters<Observable<T>[\"pipe\"]>\n\t): RxEventStream<unknown> {\n\t\tconst piped = super.pipe(...args);\n\t\treturn RxEventStream.fromObservableInput(piped);\n\t}\n}\n\nexport class RxEventSubject<T>\n\textends Subject<T>\n\timplements EventSubjectTrait<T>\n{\n\t[SYMBOL_OBSERVABLE](): RxEventStream<T> {\n\t\treturn this.asObservable();\n\t}\n\n\toverride asObservable(): RxEventStream<T> {\n\t\treturn RxEventStream.fromObservableInput(super.asObservable());\n\t}\n}\n\nexport class RxEventReplaySubject<T>\n\textends ReplaySubject<T>\n\timplements EventSubjectTrait<T>\n{\n\t[SYMBOL_OBSERVABLE](): RxEventStream<T> {\n\t\treturn this.asObservable();\n\t}\n\n\toverride asObservable(): RxEventStream<T> {\n\t\treturn RxEventStream.fromObservableInput(super.asObservable());\n\t}\n}\n","import {\n\tanimationFrameScheduler,\n\tasapScheduler,\n\taudit,\n\tauditTime,\n\tBehaviorSubject,\n\tconcat,\n\tdefer,\n\tdistinctUntilChanged,\n\tEMPTY,\n\tfromEventPattern,\n\ttype MonoTypeOperatorFunction,\n\tmap,\n\tmerge,\n\ttype Observable,\n\tof,\n\tSubject,\n\tshare,\n\tshareReplay,\n\tswitchMap,\n} from \"rxjs\";\nimport {\n\ttype InteropObservableTrait,\n\tSYMBOL_OBSERVABLE,\n\ttype WithInteropObservableTraitCompat,\n} from \"../compat\";\nimport {\n\ttype ReadableSignalTrait,\n\ttype SignalOptions,\n\ttype WritableSignalTrait,\n} from \"../signals/types\";\nimport { RxEventStream } from \"./event\";\n\nexport interface RxSignalDirtyEvent<T> {\n\tepoch: number;\n\tsignal: ReadableSignalTrait<T>;\n}\n\nexport type RxSignalOptions<T> = SignalOptions<T>;\n\nexport type RxSignalWatchScheduler<THandle = unknown> = (\n\tflush: () => void,\n) => THandle;\n\nexport type RxSignalWatchCanceller<THandle = unknown> = (\n\thandle: THandle,\n) => void;\n\nexport interface RxSignalWatchOptions {\n\tschedule: RxSignalWatchScheduler;\n\tcancel?: RxSignalWatchCanceller;\n}\n\nfunction watchOptionsToAuditOperator<T>(\n\toptions: RxSignalWatchOptions,\n): MonoTypeOperatorFunction<T> {\n\tif (options.schedule === globalThis.queueMicrotask) {\n\t\treturn auditTime(0, asapScheduler);\n\t}\n\tif (\n\t\toptions.schedule === globalThis.requestAnimationFrame &&\n\t\toptions.cancel === globalThis.cancelAnimationFrame\n\t) {\n\t\treturn auditTime(0, animationFrameScheduler);\n\t}\n\treturn audit(() =>\n\t\tfromEventPattern<void>(\n\t\t\t(handler) => options.schedule(() => handler()),\n\t\t\t(_handler, handle) => {\n\t\t\t\tif (options.cancel) {\n\t\t\t\t\toptions.cancel(handle);\n\t\t\t\t} else if (typeof handle === \"function\") {\n\t\t\t\t\thandle();\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t);\n}\n\nexport abstract class RxSignal<T>\n\timplements ReadableSignalTrait<T>, InteropObservableTrait<T>\n{\n\tprotected static globalEpoch = 0;\n\tprotected static currentContext: RxComputedSignal<any> | null = null;\n\n\tprotected valueEqVersion = 0;\n\n\treadonly equals: (a: unknown, b: unknown) => boolean;\n\tabstract get(): T;\n\tabstract dirtyObservable(): Observable<RxSignalDirtyEvent<T>>;\n\n\tprotected constructor(options: RxSignalOptions<T> | undefined) {\n\t\tthis.equals = (options?.equals ?? Object.is) as (\n\t\t\tleft: unknown,\n\t\t\tright: unknown,\n\t\t) => boolean;\n\t}\n\n\twatchStream(\n\t\toptions: RxSignalWatchOptions = { schedule: globalThis.queueMicrotask },\n\t): RxEventStream<void> {\n\t\treturn RxEventStream.fromObservableInput(\n\t\t\tthis.dirtyObservable().pipe(\n\t\t\t\twatchOptionsToAuditOperator(options),\n\t\t\t\tmap(() => undefined),\n\t\t\t\tshareReplay({ bufferSize: 1, refCount: true }),\n\t\t\t),\n\t\t);\n\t}\n\n\t[SYMBOL_OBSERVABLE](): RxEventStream<T> {\n\t\treturn RxEventStream.fromObservableInput(\n\t\t\tdefer(() =>\n\t\t\t\tconcat(\n\t\t\t\t\tof(this.get()),\n\t\t\t\t\tthis.dirtyObservable().pipe(map(() => this.get())),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t}\n\n\tabstract validateForEpoch(epoch: number): void;\n}\n\nexport class RxStateSignal<T>\n\textends RxSignal<T>\n\timplements InteropObservableTrait<T>, WritableSignalTrait<T>\n{\n\tprotected dirtySubject: Subject<RxSignalDirtyEvent<T>> = new Subject();\n\tprotected value: BehaviorSubject<T>;\n\n\tprotected constructor(\n\t\tinitialValue: T,\n\t\toptions: RxSignalOptions<T> | undefined,\n\t) {\n\t\tsuper(options);\n\t\tthis.value = new BehaviorSubject(initialValue);\n\t}\n\n\tset(input: T): void {\n\t\tconst changed = !this.equals(this.value.getValue(), input);\n\t\tthis.value.next(input);\n\t\tif (changed) {\n\t\t\tthis.valueEqVersion += 1;\n\t\t}\n\t\tRxSignal.globalEpoch += 1;\n\t\tthis.dirtySubject.next({\n\t\t\tepoch: RxSignal.globalEpoch,\n\t\t\tsignal: this,\n\t\t});\n\t}\n\n\tstatic fromInitialValue<T>(\n\t\tinitialValue: T,\n\t\toptions?: RxSignalOptions<T>,\n\t): RxStateSignalCompat<T> {\n\t\treturn new RxStateSignal<T>(initialValue, options);\n\t}\n\n\tget(): T {\n\t\tconst value = this.value.getValue();\n\t\tRxSignal.currentContext?.markDependency(this);\n\t\treturn value;\n\t}\n\n\toverride validateForEpoch(): void {}\n\n\toverride dirtyObservable(): Observable<RxSignalDirtyEvent<T>> {\n\t\treturn this.dirtySubject.asObservable();\n\t}\n\n\toverride [SYMBOL_OBSERVABLE](): RxEventStream<T> {\n\t\treturn RxEventStream.fromObservableInput(this.value.asObservable());\n\t}\n}\n\nexport type RxStateSignalCompat<T> = WithInteropObservableTraitCompat<\n\tRxStateSignal<T>,\n\tT\n>;\n\ntype AnyRxSignal = RxSignal<any> & { valueEqVersion: number };\n\ntype ComputedCacheState<T> =\n\t| { kind: \"empty\" }\n\t| { kind: \"value\"; value: T }\n\t| { kind: \"error\"; error: unknown };\n\nfunction haveSameSourceKeys(\n\tleft: ReadonlyMap<AnyRxSignal, number>,\n\tright: ReadonlyMap<AnyRxSignal, number>,\n): boolean {\n\tif (left.size !== right.size) {\n\t\treturn false;\n\t}\n\tconst leftSources = left.keys();\n\tconst rightSources = right.keys();\n\twhile (true) {\n\t\tconst leftSource = leftSources.next();\n\t\tconst rightSource = rightSources.next();\n\t\tif (leftSource.done || rightSource.done) {\n\t\t\treturn leftSource.done === rightSource.done;\n\t\t}\n\t\tif (leftSource.value !== rightSource.value) {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nexport class RxComputedSignal<T> extends RxSignal<T> {\n\tprotected cacheState: ComputedCacheState<T> = { kind: \"empty\" };\n\tprotected sources: ReadonlyMap<AnyRxSignal, number> = new Map();\n\tprotected sourcesSubject: BehaviorSubject<ReadonlyMap<AnyRxSignal, number>> =\n\t\tnew BehaviorSubject(this.sources);\n\tprivate validatedEpoch = -1;\n\tprivate isComputing = false;\n\tprivate collectingSources: Map<AnyRxSignal, number> | null = null;\n\tprivate dirty$: Observable<RxSignalDirtyEvent<T>> | undefined;\n\n\tprotected constructor(\n\t\tprotected readonly computeFn: () => T,\n\t\toptions: RxSignalOptions<T> | undefined,\n\t) {\n\t\tsuper(options);\n\t}\n\n\tmarkDependency(signal: RxSignal<any>): void {\n\t\tconst source = signal as AnyRxSignal;\n\t\tthis.collectingSources?.set(source, source.valueEqVersion);\n\t}\n\n\tprotected cacheStatesEqual(\n\t\tleft: ComputedCacheState<T>,\n\t\tright: ComputedCacheState<T>,\n\t): boolean {\n\t\tif (left.kind !== right.kind) {\n\t\t\treturn false;\n\t\t}\n\t\tif (left.kind === \"empty\" || right.kind === \"empty\") {\n\t\t\treturn false;\n\t\t}\n\t\tif (left.kind === \"value\" && right.kind === \"value\") {\n\t\t\treturn this.equals(left.value, right.value);\n\t\t}\n\t\tif (left.kind === \"error\" && right.kind === \"error\") {\n\t\t\treturn Object.is(left.error, right.error);\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected recompute(): void {\n\t\tif (this.isComputing) {\n\t\t\tthrow new Error(\"Circular computed dependency detected\");\n\t\t}\n\t\tconst prevContext = RxSignal.currentContext;\n\t\tconst prevCollectingSources = this.collectingSources;\n\t\tconst nextSources = new Map<AnyRxSignal, number>();\n\t\tRxSignal.currentContext = this;\n\t\tthis.collectingSources = nextSources;\n\t\tthis.isComputing = true;\n\t\tlet nextCacheState: ComputedCacheState<T>;\n\t\ttry {\n\t\t\tconst computed = this.computeFn();\n\t\t\tnextCacheState = { kind: \"value\", value: computed };\n\t\t} catch (error) {\n\t\t\tnextCacheState = { kind: \"error\", error };\n\t\t} finally {\n\t\t\tthis.collectingSources = prevCollectingSources;\n\t\t\tRxSignal.currentContext = prevContext;\n\t\t\tthis.isComputing = false;\n\t\t}\n\t\tconst sourcesChanged = !haveSameSourceKeys(this.sources, nextSources);\n\t\tlet cacheStateChanged: boolean;\n\t\ttry {\n\t\t\tcacheStateChanged = !this.cacheStatesEqual(\n\t\t\t\tthis.cacheState,\n\t\t\t\tnextCacheState,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tnextCacheState = { kind: \"error\", error };\n\t\t\tcacheStateChanged = !this.cacheStatesEqual(\n\t\t\t\tthis.cacheState,\n\t\t\t\tnextCacheState,\n\t\t\t);\n\t\t}\n\t\tif (cacheStateChanged) {\n\t\t\tthis.valueEqVersion += 1;\n\t\t}\n\t\tthis.cacheState = nextCacheState;\n\t\tthis.sources = nextSources;\n\t\tif (sourcesChanged) {\n\t\t\tthis.sourcesSubject.next(nextSources);\n\t\t}\n\t\tif (nextCacheState.kind === \"error\") {\n\t\t\tthrow nextCacheState.error;\n\t\t}\n\t}\n\n\toverride validateForEpoch(epoch: number): void {\n\t\tif (this.validatedEpoch === epoch) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tif (this.cacheState.kind === \"empty\") {\n\t\t\t\tthis.recompute();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const [source, version] of this.sources) {\n\t\t\t\ttry {\n\t\t\t\t\tsource.validateForEpoch(epoch);\n\t\t\t\t} catch {\n\t\t\t\t\tthis.recompute();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (source.valueEqVersion !== version) {\n\t\t\t\t\tthis.recompute();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.validatedEpoch = epoch;\n\t\t}\n\t}\n\n\toverride get(): T {\n\t\tthis.validateForEpoch(RxSignal.globalEpoch);\n\t\tRxSignal.currentContext?.markDependency(this);\n\t\tswitch (this.cacheState.kind) {\n\t\t\tcase \"value\":\n\t\t\t\treturn this.cacheState.value;\n\t\t\tcase \"error\":\n\t\t\t\tthrow this.cacheState.error;\n\t\t\tcase \"empty\":\n\t\t\t\tthrow new Error(\"Computed signal has not been initialized\");\n\t\t}\n\t}\n\n\toverride dirtyObservable(): Observable<RxSignalDirtyEvent<T>> {\n\t\tif (!this.dirty$) {\n\t\t\tthis.dirty$ = defer(() => {\n\t\t\t\tthis.validateForEpoch(RxSignal.globalEpoch);\n\t\t\t\treturn this.sourcesSubject.asObservable().pipe(\n\t\t\t\t\tswitchMap((sources) =>\n\t\t\t\t\t\tsources.size === 0\n\t\t\t\t\t\t\t? EMPTY\n\t\t\t\t\t\t\t: merge(\n\t\t\t\t\t\t\t\t\t...[...sources.keys()].map((source) =>\n\t\t\t\t\t\t\t\t\t\tsource.dirtyObservable(),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t).pipe(\n\t\t\t\t\t\t\t\t\tdistinctUntilChanged(\n\t\t\t\t\t\t\t\t\t\t(left, right) => left.epoch === right.epoch,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tmap((dirtyDepEvent) => {\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tepoch: dirtyDepEvent.epoch,\n\t\t\t\t\t\t\t\t\t\t\tsignal: this,\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}).pipe(share());\n\t\t}\n\t\treturn this.dirty$;\n\t}\n\n\tstatic computed<T>(\n\t\tfn: () => T,\n\t\toptions?: RxSignalOptions<T>,\n\t): RxComputedSignalCompat<T> {\n\t\treturn new RxComputedSignal<T>(fn, options);\n\t}\n}\n\nexport type RxComputedSignalCompat<T> = WithInteropObservableTraitCompat<\n\tRxComputedSignal<T>,\n\tT\n>;\n","/** biome-ignore-all lint/complexity/noBannedTypes: false negative */\nimport {\n\tconcatAll,\n\tfilter,\n\tfrom,\n\tlastValueFrom,\n\tmap,\n\tObservable,\n\ttype ObservableInput,\n\ttype Observer,\n\ttype OperatorFunction,\n\ttype Subscription,\n\ttakeLast,\n\ttakeWhile,\n\ttoArray,\n} from \"rxjs\";\nimport { ClientError, ClientErrorKind } from \"../errors\";\n\nexport const CommandResponseType = {\n\tData: \"data\",\n\tSuccess: \"success\",\n\tError: \"error\",\n\tCancel: \"cancel\",\n\tRejected: \"rejected\",\n} as const;\n\nexport type CommandResponseType =\n\t(typeof CommandResponseType)[keyof typeof CommandResponseType];\n\nexport type Command<Payload = unknown, Extra extends {} = {}> = Extra & {\n\treadonly payload: Payload;\n};\n\nexport type CommandDataResponse<TCmd extends Command, TData = unknown> = {\n\treadonly type: typeof CommandResponseType.Data;\n\treadonly command: TCmd;\n\treadonly data: TData;\n};\n\nexport type CommandSuccessResponse<TCmd extends Command> = {\n\treadonly type: typeof CommandResponseType.Success;\n\treadonly command: TCmd;\n};\n\nexport type CommandErrorResponse<TCmd extends Command> = {\n\treadonly type: typeof CommandResponseType.Error;\n\treadonly command: TCmd;\n\treadonly error: unknown;\n};\n\nexport type CommandCancelResponse<TCmd extends Command> = {\n\treadonly type: typeof CommandResponseType.Cancel;\n\treadonly command: TCmd;\n};\n\nexport type CommandRejectedResponse<TCmd extends Command> = {\n\treadonly type: typeof CommandResponseType.Rejected;\n\treadonly command: TCmd;\n\treadonly reason: string;\n};\n\nexport type CommandTerminalResponse<TCmd extends Command> =\n\t| CommandSuccessResponse<TCmd>\n\t| CommandErrorResponse<TCmd>\n\t| CommandCancelResponse<TCmd>\n\t| CommandRejectedResponse<TCmd>;\n\nexport type CommandResponse<TCmd extends Command, TData = unknown> =\n\t| CommandDataResponse<TCmd, TData>\n\t| CommandTerminalResponse<TCmd>;\n\nexport interface DispatchCommandBaseOptions<\n\tTCmd extends Command,\n\tTData = unknown,\n> {\n\treadonly requestStream: Pick<Observer<TCmd>, \"next\">;\n\treadonly responseStream: ObservableInput<CommandResponse<TCmd, TData>>;\n}\n\nexport interface DispatchCommandLocallyOptions<\n\tTPayload,\n\tTCommandExtra extends {} = {},\n\tTData = unknown,\n\tTCmd extends Command<TPayload, TCommandExtra> = Command<\n\t\tTPayload,\n\t\tTCommandExtra\n\t>,\n> extends DispatchCommandBaseOptions<TCmd, TData> {\n\treadonly payload: TPayload;\n\treadonly createCommandExtra?: (payload: TPayload) => TCommandExtra;\n}\n\nexport interface DispatchCommandByIdOptions<\n\tTCmd extends Command,\n\tTId,\n\tTData = unknown,\n> extends DispatchCommandBaseOptions<TCmd, TData> {\n\treadonly command: TCmd;\n\treadonly selectCommandId: (command: TCmd) => TId;\n\treadonly areIdsEqual?: (left: TId, right: TId) => boolean;\n}\n\nfunction createCommandCancellationError<TCmd extends Command>(\n\tcommand: TCmd,\n): Error {\n\treturn new ClientError({\n\t\tkind: ClientErrorKind.Cancelled,\n\t\tmessage: \"Command was cancelled before completion\",\n\t\tcause: {\n\t\t\tcommand,\n\t\t},\n\t});\n}\n\nfunction createCommandRejectedError<TCmd extends Command>(\n\tcommand: TCmd,\n\treason: string,\n): Error {\n\treturn new ClientError({\n\t\tkind: ClientErrorKind.Cancelled,\n\t\tmessage: `Command was rejected before execution: ${reason}`,\n\t\tcause: {\n\t\t\tcommand,\n\t\t\treason,\n\t\t},\n\t});\n}\n\nexport function isCommandDataResponse<TCmd extends Command, TData>(\n\tresponse: CommandResponse<TCmd, TData>,\n): response is CommandDataResponse<TCmd, TData> {\n\treturn response.type === CommandResponseType.Data;\n}\n\nexport function isCommandTerminalResponse<TCmd extends Command, TData>(\n\tresponse: CommandResponse<TCmd, TData>,\n): response is CommandTerminalResponse<TCmd> {\n\treturn response.type !== CommandResponseType.Data;\n}\n\nfunction dispatchCommand<TCmd extends Command, TData>(\n\tdispatch: () => void,\n\tmatches: (response: CommandResponse<TCmd, TData>) => boolean,\n): OperatorFunction<\n\tCommandResponse<TCmd, TData>,\n\tCommandResponse<TCmd, TData>\n> {\n\treturn (source$) =>\n\t\tnew Observable<CommandResponse<TCmd, TData>>((subscriber) => {\n\t\t\tconst subscription = source$\n\t\t\t\t.pipe(filter(matches), takeWhile(isCommandDataResponse, true))\n\t\t\t\t.subscribe(subscriber);\n\n\t\t\tif (subscription.closed) {\n\t\t\t\treturn subscription;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tdispatch();\n\t\t\t} catch (error) {\n\t\t\t\tif (!subscription.closed) {\n\t\t\t\t\tsubscriber.error(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn subscription;\n\t\t});\n}\n\nexport function unwrapCommandTerminalResponse<TCmd extends Command>(\n\tresponse: CommandTerminalResponse<TCmd>,\n): void {\n\tswitch (response.type) {\n\t\tcase CommandResponseType.Success:\n\t\t\treturn;\n\t\tcase CommandResponseType.Error:\n\t\t\tthrow response.error;\n\t\tcase CommandResponseType.Cancel:\n\t\t\tthrow createCommandCancellationError(response.command);\n\t\tcase CommandResponseType.Rejected:\n\t\t\tthrow createCommandRejectedError(response.command, response.reason);\n\t}\n}\n\nexport function commandResponseData<\n\tTCmd extends Command,\n\tTData,\n>(): OperatorFunction<CommandResponse<TCmd, TData>, TData> {\n\treturn (source$) =>\n\t\tsource$.pipe(\n\t\t\tfilter((response): response is CommandDataResponse<TCmd, TData> => {\n\t\t\t\tif (isCommandDataResponse(response)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tunwrapCommandTerminalResponse(response);\n\t\t\t\treturn false;\n\t\t\t}),\n\t\t\tmap((response) => response.data),\n\t\t);\n}\n\nexport function dispatchCommandLocallyToStream<\n\tTPayload,\n\tTCommandExtra extends {} = {},\n\tTData = unknown,\n\tTCmd extends Command<TPayload, TCommandExtra> = Command<\n\t\tTPayload,\n\t\tTCommandExtra\n\t>,\n>(\n\toptions: DispatchCommandLocallyOptions<TPayload, TCommandExtra, TData, TCmd>,\n): Observable<CommandResponse<TCmd, TData>> {\n\tconst command = {\n\t\tpayload: options.payload,\n\t\t...(options.createCommandExtra?.(options.payload) ?? {}),\n\t} as TCmd;\n\n\treturn from(options.responseStream).pipe(\n\t\tdispatchCommand(\n\t\t\t() => {\n\t\t\t\toptions.requestStream.next(command);\n\t\t\t},\n\t\t\t(response) => response.command === command,\n\t\t),\n\t);\n}\n\nexport function dispatchCommandByIdToStream<\n\tTCmd extends Command,\n\tTId,\n\tTData = unknown,\n>(\n\toptions: DispatchCommandByIdOptions<TCmd, TId, TData>,\n): Observable<CommandResponse<TCmd, TData>> {\n\tconst areIdsEqual = options.areIdsEqual ?? Object.is;\n\tconst commandId = options.selectCommandId(options.command);\n\n\treturn from(options.responseStream).pipe(\n\t\tdispatchCommand(\n\t\t\t() => {\n\t\t\t\toptions.requestStream.next(options.command);\n\t\t\t},\n\t\t\t(response) =>\n\t\t\t\tareIdsEqual(options.selectCommandId(response.command), commandId),\n\t\t),\n\t);\n}\n\nexport async function dispatchCommandLocallyToPromise<\n\tTPayload,\n\tTCommandExtra extends {} = {},\n\tTData = unknown,\n\tTCmd extends Command<TPayload, TCommandExtra> = Command<\n\t\tTPayload,\n\t\tTCommandExtra\n\t>,\n>(\n\toptions: DispatchCommandLocallyOptions<\n\t\tTPayload,\n\t\tTCommandExtra,\n\t\tTData,\n\t\tTCmd\n\t> & {},\n): Promise<CommandDataResponse<TCmd, TData>> {\n\tconst [data, terminal] = await lastValueFrom(\n\t\tdispatchCommandLocallyToStream(options).pipe(takeLast(2), toArray()),\n\t\t{\n\t\t\tdefaultValue: [],\n\t\t},\n\t);\n\tif (data === undefined) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Configuration,\n\t\t\tmessage:\n\t\t\t\t\"the executor configuration of dispatchCommandLocallyToPromise should produce a valid data response.\",\n\t\t});\n\t}\n\tif (!isCommandDataResponse(data)) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Configuration,\n\t\t\tmessage:\n\t\t\t\t\"the executor configuration of dispatchCommandLocallyToPromise should produce a valid data response.\",\n\t\t});\n\t}\n\tif (terminal === undefined) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Internal,\n\t\t\tmessage:\n\t\t\t\t\"the execution of dispatchCommandLocallyToPromise must produce a valid terminal response.\",\n\t\t});\n\t}\n\tif (!isCommandTerminalResponse(terminal)) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Internal,\n\t\t\tmessage:\n\t\t\t\t\"the execution of dispatchCommandLocallyToPromise must produce a valid terminal response.\",\n\t\t});\n\t}\n\tunwrapCommandTerminalResponse(terminal);\n\treturn data;\n}\n\nexport async function dispatchCommandByIdToPromise<\n\tTCmd extends Command,\n\tTId,\n\tTData = unknown,\n>(\n\toptions: DispatchCommandByIdOptions<TCmd, TId, TData>,\n): Promise<CommandDataResponse<TCmd, TData>> {\n\tconst [data, terminal] = await lastValueFrom(\n\t\tdispatchCommandByIdToStream(options).pipe(takeLast(2), toArray()),\n\t\t{\n\t\t\tdefaultValue: [],\n\t\t},\n\t);\n\tif (data === undefined) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Configuration,\n\t\t\tmessage:\n\t\t\t\t\"the executor configuration of dispatchCommandLocallyToPromise should produce a valid data response.\",\n\t\t});\n\t}\n\tif (!isCommandDataResponse(data)) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Configuration,\n\t\t\tmessage:\n\t\t\t\t\"the executor configuration of dispatchCommandLocallyToPromise should produce a valid data response.\",\n\t\t});\n\t}\n\tif (terminal === undefined) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Internal,\n\t\t\tmessage:\n\t\t\t\t\"the execution of dispatchCommandLocallyToPromise must produce a valid terminal response.\",\n\t\t});\n\t}\n\tif (!isCommandTerminalResponse(terminal)) {\n\t\tthrow new ClientError({\n\t\t\tkind: ClientErrorKind.Internal,\n\t\t\tmessage:\n\t\t\t\t\"the execution of dispatchCommandLocallyToPromise must produce a valid terminal response.\",\n\t\t});\n\t}\n\tunwrapCommandTerminalResponse(terminal);\n\treturn data;\n}\n\nfunction createCommandExecutionStream<\n\tTCmd extends Command,\n\tTData = unknown,\n>(options: {\n\treadonly command: TCmd;\n\treadonly execute: (command: TCmd) => ObservableInput<TData>;\n\treadonly onStateEnd?: (command: TCmd) => void;\n}): Observable<CommandResponse<TCmd, TData>> {\n\treturn new Observable<CommandResponse<TCmd, TData>>((subscriber) => {\n\t\tlet didEmitTerminal = false;\n\n\t\tconst emitTerminal = (response: CommandTerminalResponse<TCmd>) => {\n\t\t\tif (didEmitTerminal) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdidEmitTerminal = true;\n\t\t\tsubscriber.next(response);\n\t\t\tsubscriber.complete();\n\t\t};\n\n\t\tconst subscription = from(options.execute(options.command)).subscribe({\n\t\t\tnext: (data) => {\n\t\t\t\tsubscriber.next({\n\t\t\t\t\ttype: CommandResponseType.Data,\n\t\t\t\t\tcommand: options.command,\n\t\t\t\t\tdata,\n\t\t\t\t});\n\t\t\t},\n\t\t\terror: (error) => {\n\t\t\t\temitTerminal({\n\t\t\t\t\ttype: CommandResponseType.Error,\n\t\t\t\t\tcommand: options.command,\n\t\t\t\t\terror,\n\t\t\t\t});\n\t\t\t},\n\t\t\tcomplete: () => {\n\t\t\t\temitTerminal({\n\t\t\t\t\ttype: CommandResponseType.Success,\n\t\t\t\t\tcommand: options.command,\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\n\t\treturn () => {\n\t\t\tconst wasTerminalEmitted = didEmitTerminal;\n\t\t\tsubscription.unsubscribe();\n\t\t\toptions.onStateEnd?.(options.command);\n\n\t\t\tif (!wasTerminalEmitted) {\n\t\t\t\tsubscriber.next({\n\t\t\t\t\ttype: CommandResponseType.Cancel,\n\t\t\t\t\tcommand: options.command,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t});\n}\n\nexport function switchCommand<TCmd extends Command, TData = unknown>(\n\texecute: (command: TCmd) => ObservableInput<TData>,\n): OperatorFunction<TCmd, CommandResponse<TCmd, TData>> {\n\treturn (source$) =>\n\t\tnew Observable<CommandResponse<TCmd, TData>>((destination) => {\n\t\t\tlet innerSubscription: Subscription | null = null;\n\t\t\tlet currentCommand: TCmd | null = null;\n\t\t\tlet isComplete = false;\n\n\t\t\tconst checkComplete = () => {\n\t\t\t\tif (isComplete && !innerSubscription) {\n\t\t\t\t\tdestination.complete();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst sourceSubscription = source$.subscribe({\n\t\t\t\tnext: (command) => {\n\t\t\t\t\tconst cancelledCommand = currentCommand;\n\n\t\t\t\t\tinnerSubscription?.unsubscribe();\n\t\t\t\t\tinnerSubscription = null;\n\t\t\t\t\tcurrentCommand = null;\n\n\t\t\t\t\tif (cancelledCommand) {\n\t\t\t\t\t\tdestination.next({\n\t\t\t\t\t\t\ttype: CommandResponseType.Cancel,\n\t\t\t\t\t\t\tcommand: cancelledCommand,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentCommand = command;\n\t\t\t\t\tlet didCompleteSynchronously = false;\n\t\t\t\t\tconst nextInnerSubscription = createCommandExecutionStream({\n\t\t\t\t\t\tcommand,\n\t\t\t\t\t\texecute,\n\t\t\t\t\t}).subscribe({\n\t\t\t\t\t\tnext: (response) => {\n\t\t\t\t\t\t\tdestination.next(response);\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\t\tdestination.error(error);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t\tdidCompleteSynchronously = true;\n\t\t\t\t\t\t\tinnerSubscription = null;\n\t\t\t\t\t\t\tcurrentCommand = null;\n\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!didCompleteSynchronously) {\n\t\t\t\t\t\tinnerSubscription = nextInnerSubscription;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: (error) => {\n\t\t\t\t\tdestination.error(error);\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcheckComplete();\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tsourceSubscription.unsubscribe();\n\t\t\t\tinnerSubscription?.unsubscribe();\n\t\t\t};\n\t\t});\n}\n\nexport function concatCommand<TCmd extends Command, TData = unknown>(\n\texecute: (command: TCmd) => ObservableInput<TData>,\n): OperatorFunction<TCmd, CommandResponse<TCmd, TData>> {\n\treturn (source$: Observable<TCmd>) =>\n\t\tsource$.pipe(\n\t\t\tmap((command) =>\n\t\t\t\tcreateCommandExecutionStream({\n\t\t\t\t\tcommand,\n\t\t\t\t\texecute,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tconcatAll(),\n\t\t);\n}\n\nexport const exhaustCommand =\n\t<TCmd extends Command, TData = unknown>(\n\t\texecute: (command: TCmd) => ObservableInput<TData>,\n\t) =>\n\t(source$: Observable<TCmd>) =>\n\t\tnew Observable<CommandResponse<TCmd, TData>>((destination) => {\n\t\t\tlet innerSubscription: Subscription | null = null;\n\t\t\tlet isComplete = false;\n\n\t\t\tconst checkComplete = () => {\n\t\t\t\tif (isComplete && !innerSubscription) {\n\t\t\t\t\tdestination.complete();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst sourceSubscription = source$.subscribe({\n\t\t\t\tnext: (command) => {\n\t\t\t\t\tif (innerSubscription) {\n\t\t\t\t\t\tdestination.next({\n\t\t\t\t\t\t\ttype: CommandResponseType.Rejected,\n\t\t\t\t\t\t\tcommand,\n\t\t\t\t\t\t\treason: \"Pessimistic lock active.\",\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet didCompleteSynchronously = false;\n\t\t\t\t\tconst nextInnerSubscription = createCommandExecutionStream({\n\t\t\t\t\t\tcommand,\n\t\t\t\t\t\texecute,\n\t\t\t\t\t}).subscribe({\n\t\t\t\t\t\tnext: (response) => {\n\t\t\t\t\t\t\tdestination.next(response);\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\t\tdestination.error(error);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t\tdidCompleteSynchronously = true;\n\t\t\t\t\t\t\tinnerSubscription = null;\n\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!didCompleteSynchronously) {\n\t\t\t\t\t\tinnerSubscription = nextInnerSubscription;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: (error) => {\n\t\t\t\t\tdestination.error(error);\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcheckComplete();\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tsourceSubscription.unsubscribe();\n\t\t\t\tinnerSubscription?.unsubscribe();\n\t\t\t};\n\t\t});\n","import { AsyncAction } from \"rxjs/internal/scheduler/AsyncAction\";\nimport { AsyncScheduler } from \"rxjs/internal/scheduler/AsyncScheduler\";\nimport { type TimerHandle } from \"rxjs/internal/scheduler/timerHandle\";\nimport { type TimeTrait } from \"../scheduling\";\n\nexport function createAsyncSchedulerWithTimestampProvider(\n\ttime: TimeTrait,\n): AsyncScheduler {\n\tclass TimeTraitAsyncAction<T> extends AsyncAction<T> {\n\t\tprotected override requestAsyncId(\n\t\t\tscheduler: AsyncScheduler,\n\t\t\t_id?: TimerHandle,\n\t\t\tdelay = 0,\n\t\t): TimerHandle {\n\t\t\treturn time.setTimeout(() => {\n\t\t\t\tscheduler.flush(this);\n\t\t\t}, delay) as TimerHandle;\n\t\t}\n\n\t\tprotected override recycleAsyncId(\n\t\t\t_scheduler: AsyncScheduler,\n\t\t\tid?: TimerHandle,\n\t\t\tdelay: number | null = 0,\n\t\t): TimerHandle | undefined {\n\t\t\tif (delay != null && this.delay === delay && this.pending === false) {\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\tif (id !== undefined) {\n\t\t\t\ttime.clearTimeout(id);\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn new AsyncScheduler(TimeTraitAsyncAction, time.now);\n}\n","import { filter, map, type Observable, take } from \"rxjs\";\nimport { BehaviorSubject } from \"rxjs/internal/BehaviorSubject\";\nimport {\n\ttype DisposableTrait,\n\tisInteropObservableTrait,\n\tSYMBOL_DISPOSE,\n\tSYMBOL_OBSERVABLE,\n} from \"../compat\";\nimport { ClientError } from \"../errors/client-error\";\nimport { ClientErrorKind, ClientErrorSource } from \"../errors/types\";\nimport {\n\ttype CancellationTokenErrorData,\n\ttype CancellationTokenSourceTrait,\n\ttype CancellationTokenTrait,\n} from \"./types\";\n\ninterface CancellationTokenCancelledState extends CancellationTokenErrorData {\n\treadonly isCancelled: true;\n}\n\ntype CancellationTokenUncancelledState = undefined;\n\ntype CancellationTokenState =\n\t| CancellationTokenCancelledState\n\t| CancellationTokenUncancelledState;\n\nexport class CancellationToken implements CancellationTokenTrait {\n\tprivate cancellationState = new BehaviorSubject<CancellationTokenState>(\n\t\tundefined,\n\t);\n\n\tget isCancellationRequested(): boolean {\n\t\treturn this.cancellationState.getValue()?.isCancelled === true;\n\t}\n\n\tget reason(): unknown {\n\t\treturn this.cancellationState.getValue()?.reason;\n\t}\n\n\t/** @internal — called by `CancellationTokenSource`. */\n\t_cancel(reason: unknown): void {\n\t\tif (this.isCancellationRequested) {\n\t\t\treturn;\n\t\t}\n\t\tthis.cancellationState.next({\n\t\t\tisCancelled: true,\n\t\t\treason,\n\t\t\tcancellationError: new ClientError({\n\t\t\t\tkind: ClientErrorKind.Cancelled,\n\t\t\t\tmessage: \"Operation was cancelled\",\n\t\t\t\tcode: \"client.cancelled\",\n\t\t\t\tsource: ClientErrorSource.Client,\n\t\t\t\tcause: reason,\n\t\t\t}),\n\t\t});\n\t}\n\n\tonCancellationRequested(\n\t\tlistener: (errorData: CancellationTokenErrorData) => void,\n\t): DisposableTrait {\n\t\tconst cancellationState = this.cancellationState.getValue();\n\t\tif (cancellationState?.isCancelled) {\n\t\t\tlistener({\n\t\t\t\tcancellationError: cancellationState.cancellationError,\n\t\t\t\treason: cancellationState.reason,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdispose() {},\n\t\t\t\t[SYMBOL_DISPOSE]() {},\n\t\t\t};\n\t\t}\n\n\t\tconst subscription = this.asObservable().subscribe((errorData) => {\n\t\t\tlistener(errorData);\n\t\t});\n\n\t\treturn {\n\t\t\tdispose() {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t},\n\t\t\t[SYMBOL_DISPOSE]: () => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t},\n\t\t};\n\t}\n\n\tthrowIfCancellationRequested(): void {\n\t\tconst cancellationState = this.cancellationState.getValue();\n\t\tif (cancellationState?.cancellationError) {\n\t\t\tthrow cancellationState.cancellationError;\n\t\t}\n\t}\n\n\tget cancellationError(): ClientError | undefined {\n\t\tconst cancellationState = this.cancellationState.getValue();\n\t\treturn cancellationState?.cancellationError;\n\t}\n\n\tprotected asObservable(): Observable<CancellationTokenErrorData> {\n\t\treturn this.cancellationState.pipe(\n\t\t\tfilter(\n\t\t\t\t(state): state is CancellationTokenCancelledState =>\n\t\t\t\t\t!!state?.isCancelled,\n\t\t\t),\n\t\t\ttake(1),\n\t\t\tmap((state) => ({\n\t\t\t\tcancellationError: state.cancellationError,\n\t\t\t\treason: state.reason,\n\t\t\t})),\n\t\t);\n\t}\n\n\t[SYMBOL_OBSERVABLE]() {\n\t\treturn this.asObservable();\n\t}\n}\n\nexport class CancellationTokenSource implements CancellationTokenSourceTrait {\n\treadonly token = new CancellationToken();\n\n\tcancel(reason?: unknown) {\n\t\tthis.token._cancel(reason);\n\t}\n}\n\n/**\n * Create a `CancellationTokenSource` that produces a cooperative cancellation token.\n */\nexport function createCancellationTokenSource(): CancellationTokenSourceTrait {\n\treturn new CancellationTokenSource();\n}\n\nexport function isCancellationTokenTrait(\n\tobj: unknown,\n): obj is CancellationTokenTrait {\n\treturn (\n\t\ttypeof obj === \"object\" &&\n\t\tobj !== null &&\n\t\ttypeof (obj as CancellationTokenTrait).isCancellationRequested ===\n\t\t\t\"boolean\" &&\n\t\ttypeof (obj as CancellationTokenTrait).onCancellationRequested ===\n\t\t\t\"function\" &&\n\t\ttypeof (obj as CancellationTokenTrait).throwIfCancellationRequested ===\n\t\t\t\"function\" &&\n\t\tisInteropObservableTrait(obj)\n\t);\n}\n","export const ResourceErrorCode = {\n\tValueUnavailable: \"resource.value_unavailable\",\n} as const;\n\nexport type ResourceErrorCode =\n\t(typeof ResourceErrorCode)[keyof typeof ResourceErrorCode];\n\nexport interface ResourceValueUnavailableErrorOptions {\n\treadonly status: string;\n}\n\nexport class ResourceError extends Error {\n\toverride readonly name = \"ResourceError\";\n\treadonly code: ResourceErrorCode;\n\treadonly status?: string;\n\n\tconstructor(\n\t\tmessage: string,\n\t\toptions: { code: ResourceErrorCode; status?: string },\n\t) {\n\t\tsuper(message);\n\t\tthis.code = options.code;\n\t\tthis.status = options.status;\n\t}\n\n\tstatic valueUnavailable(\n\t\toptions: ResourceValueUnavailableErrorOptions,\n\t): ResourceError {\n\t\treturn new ResourceError(\n\t\t\t`Resource value is not available while status is \"${options.status}\".`,\n\t\t\t{\n\t\t\t\tcode: ResourceErrorCode.ValueUnavailable,\n\t\t\t\tstatus: options.status,\n\t\t\t},\n\t\t);\n\t}\n}\n","// --- Signal trait types ---\n\nimport { type CancellationTokenTrait } from \"../cancellation/types\";\nimport { type DisposableTrait, type InteropObservableTrait } from \"../compat\";\nimport { type EventStreamTrait } from \"../events/types\";\n\nexport interface SignalOptions<T> {\n\tequals?: (a: T, b: T) => boolean;\n}\n\n/**\n * Read-only signal interface.\n * Semantics align with TC39 Signals proposal, but uses an SDK-owned thin protocol\n * to avoid coupling to any specific polyfill or standard implementation.\n */\nexport interface ReadableSignalTrait<T> extends InteropObservableTrait<T> {\n\treadonly equals: (a: unknown, b: unknown) => boolean;\n\t/** Return the current snapshot value. */\n\tget(): T;\n\t/**\n\t * Watch value invalidations.\n\t * The stream does not emit the current value on subscription; use\n\t * `[SYMBOL_OBSERVABLE]()` when value replay is required.\n\t */\n\twatchStream(): EventStreamTrait<void>;\n}\n\n/**\n * Writable signal interface.\n * State transitions should be controlled by the client / service layer;\n * external consumers typically only see the read-only projection.\n */\nexport interface WritableSignalTrait<T> extends ReadableSignalTrait<T> {\n\tset(value: T): void;\n}\n\n/**\n * Computed (derived) signal — always read-only, value is derived from\n * other signals automatically.\n */\nexport interface ComputedSignalTrait<T> extends ReadableSignalTrait<T> {}\n\nexport const ResourceStatus = {\n\tIdle: \"idle\",\n\tLoading: \"loading\",\n\tLoadingError: \"loading_error\",\n\tReloading: \"reloading\",\n\tResolved: \"resolved\",\n\tError: \"error\",\n} as const;\n\nexport type ResourceStatus =\n\t(typeof ResourceStatus)[keyof typeof ResourceStatus];\n\nexport interface ResourceIdleSnapshot {\n\treadonly status: typeof ResourceStatus.Idle;\n}\n\nexport interface ResourceLoadingSnapshot {\n\treadonly status: typeof ResourceStatus.Loading;\n}\n\nexport interface ResourceLoadingErrorSnapshot {\n\treadonly status: typeof ResourceStatus.LoadingError;\n\treadonly error: unknown;\n}\n\nexport interface ResourceReloadingSnapshot<T> {\n\treadonly status: typeof ResourceStatus.Reloading;\n\treadonly value: T;\n}\n\nexport interface ResourceResolvedSnapshot<T> {\n\treadonly status: typeof ResourceStatus.Resolved;\n\treadonly value: T;\n}\n\nexport interface ResourceErrorSnapshot<T> {\n\treadonly status: typeof ResourceStatus.Error;\n\treadonly value: T;\n\treadonly error: unknown;\n}\n\nexport type ResourceSnapshot<T> =\n\t| ResourceIdleSnapshot\n\t| ResourceLoadingSnapshot\n\t| ResourceLoadingErrorSnapshot\n\t| ResourceReloadingSnapshot<T>\n\t| ResourceResolvedSnapshot<T>\n\t| ResourceErrorSnapshot<T>;\n\nexport interface ResourceWhenValueOptions {\n\treadonly cancellationToken?: CancellationTokenTrait;\n\treadonly staleValueWhenError?: boolean;\n}\n\nexport interface ResourceTrait<T>\n\textends DisposableTrait,\n\t\tInteropObservableTrait<ResourceSnapshot<T>> {\n\treadonly value: ReadableSignalTrait<T>;\n\treadonly status: ReadableSignalTrait<ResourceStatus>;\n\treadonly error: ReadableSignalTrait<unknown | undefined>;\n\treadonly isLoading: ReadableSignalTrait<boolean>;\n\treadonly snapshot: ReadableSignalTrait<ResourceSnapshot<T>>;\n\thasValue(): boolean;\n\twhenValue(options?: ResourceWhenValueOptions): Promise<T>;\n}\n","import { filter, firstValueFrom, from, map, merge, NEVER } from \"rxjs\";\nimport {\n\ttype ReadableSignalTrait,\n\ttype ResourceErrorSnapshot,\n\ttype ResourceLoadingErrorSnapshot,\n\ttype ResourceReloadingSnapshot,\n\ttype ResourceResolvedSnapshot,\n\ttype ResourceSnapshot,\n\tResourceStatus,\n\ttype ResourceWhenValueOptions,\n} from \"./types\";\n\nexport async function whenResourceSnapshotValue<T>(\n\tsnapshotSignal: ReadableSignalTrait<ResourceSnapshot<T>>,\n\toptions?: ResourceWhenValueOptions,\n): Promise<T> {\n\toptions?.cancellationToken?.throwIfCancellationRequested();\n\tconst staleValueWhenError = options?.staleValueWhenError ?? true;\n\tconst current = snapshotSignal.get();\n\tif (\n\t\tcurrent.status === ResourceStatus.Resolved ||\n\t\tcurrent.status === ResourceStatus.Reloading ||\n\t\t(current.status === ResourceStatus.Error && staleValueWhenError)\n\t) {\n\t\treturn current.value;\n\t}\n\tif (\n\t\tcurrent.status === ResourceStatus.LoadingError ||\n\t\tcurrent.status === ResourceStatus.Error\n\t) {\n\t\tthrow current.error;\n\t}\n\n\tconst snapshot = await firstValueFrom(\n\t\tmerge(\n\t\t\tfrom(snapshotSignal).pipe(\n\t\t\t\tfilter(\n\t\t\t\t\t(\n\t\t\t\t\t\tsnapshot,\n\t\t\t\t\t): snapshot is\n\t\t\t\t\t\t| ResourceResolvedSnapshot<T>\n\t\t\t\t\t\t| ResourceReloadingSnapshot<T>\n\t\t\t\t\t\t| ResourceLoadingErrorSnapshot\n\t\t\t\t\t\t| ResourceErrorSnapshot<T> =>\n\t\t\t\t\t\tsnapshot.status === ResourceStatus.Resolved ||\n\t\t\t\t\t\tsnapshot.status === ResourceStatus.Reloading ||\n\t\t\t\t\t\tsnapshot.status === ResourceStatus.LoadingError ||\n\t\t\t\t\t\tsnapshot.status === ResourceStatus.Error,\n\t\t\t\t),\n\t\t\t),\n\t\t\t(options?.cancellationToken\n\t\t\t\t? from(options.cancellationToken)\n\t\t\t\t: NEVER\n\t\t\t).pipe(\n\t\t\t\tmap(({ cancellationError }) => {\n\t\t\t\t\tthrow cancellationError;\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t);\n\n\tif (snapshot.status === ResourceStatus.LoadingError) {\n\t\tthrow snapshot.error;\n\t}\n\tif (snapshot.status === ResourceStatus.Error && !staleValueWhenError) {\n\t\tthrow snapshot.error;\n\t}\n\treturn snapshot.value;\n}\n\ntype AnyResourceSnapshotSelector = (\n\t// More than four levels intentionally falls back to runtime composition.\n\tvalue: any,\n) => ReadableSignalTrait<ResourceSnapshot<unknown>>;\n\nexport function flattenResourceSnapshot<T1, T2>(\n\tsourceSnapshot: ResourceSnapshot<T1>,\n\tselect1: (value: T1) => ReadableSignalTrait<ResourceSnapshot<T2>>,\n): ResourceSnapshot<T2>;\nexport function flattenResourceSnapshot<T1, T2, T3>(\n\tsourceSnapshot: ResourceSnapshot<T1>,\n\tselect1: (value: T1) => ReadableSignalTrait<ResourceSnapshot<T2>>,\n\tselect2: (value: T2) => ReadableSignalTrait<ResourceSnapshot<T3>>,\n): ResourceSnapshot<T3>;\nexport function flattenResourceSnapshot<T1, T2, T3, T4>(\n\tsourceSnapshot: ResourceSnapshot<T1>,\n\tselect1: (value: T1) => ReadableSignalTrait<ResourceSnapshot<T2>>,\n\tselect2: (value: T2) => ReadableSignalTrait<ResourceSnapshot<T3>>,\n\tselect3: (value: T3) => ReadableSignalTrait<ResourceSnapshot<T4>>,\n): ResourceSnapshot<T4>;\nexport function flattenResourceSnapshot<T1, T2, T3, T4, T5>(\n\tsourceSnapshot: ResourceSnapshot<T1>,\n\tselect1: (value: T1) => ReadableSignalTrait<ResourceSnapshot<T2>>,\n\tselect2: (value: T2) => ReadableSignalTrait<ResourceSnapshot<T3>>,\n\tselect3: (value: T3) => ReadableSignalTrait<ResourceSnapshot<T4>>,\n\tselect4: (value: T4) => ReadableSignalTrait<ResourceSnapshot<T5>>,\n): ResourceSnapshot<T5>;\nexport function flattenResourceSnapshot(\n\tsourceSnapshot: ResourceSnapshot<unknown>,\n\tselect: AnyResourceSnapshotSelector,\n\t...selectors: readonly AnyResourceSnapshotSelector[]\n): ResourceSnapshot<unknown>;\n/**\n * Flatten nested resource snapshots while tracking each selected snapshot signal.\n * Ancestor reload and error states remain visible whenever the final snapshot has\n * a value; an ancestor error without a final value becomes a loading error.\n */\nexport function flattenResourceSnapshot(\n\tsourceSnapshot: ResourceSnapshot<unknown>,\n\t...selectors: readonly AnyResourceSnapshotSelector[]\n): ResourceSnapshot<unknown> {\n\tlet snapshot = sourceSnapshot;\n\tlet reloading = false;\n\tlet hasError = false;\n\tlet error: unknown;\n\n\tfor (const select of selectors) {\n\t\tswitch (snapshot.status) {\n\t\t\tcase ResourceStatus.Idle:\n\t\t\tcase ResourceStatus.Loading:\n\t\t\t\treturn hasError\n\t\t\t\t\t? { status: ResourceStatus.LoadingError, error }\n\t\t\t\t\t: snapshot;\n\t\t\tcase ResourceStatus.LoadingError:\n\t\t\t\treturn hasError\n\t\t\t\t\t? { status: ResourceStatus.LoadingError, error }\n\t\t\t\t\t: snapshot;\n\t\t\tcase ResourceStatus.Reloading:\n\t\t\t\treloading = true;\n\t\t\t\tsnapshot = select(snapshot.value).get();\n\t\t\t\tbreak;\n\t\t\tcase ResourceStatus.Resolved:\n\t\t\t\tsnapshot = select(snapshot.value).get();\n\t\t\t\tbreak;\n\t\t\tcase ResourceStatus.Error:\n\t\t\t\tif (!hasError) {\n\t\t\t\t\thasError = true;\n\t\t\t\t\terror = snapshot.error;\n\t\t\t\t}\n\t\t\t\tsnapshot = select(snapshot.value).get();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tswitch (snapshot.status) {\n\t\tcase ResourceStatus.Idle:\n\t\tcase ResourceStatus.Loading:\n\t\tcase ResourceStatus.LoadingError:\n\t\t\treturn hasError\n\t\t\t\t? { status: ResourceStatus.LoadingError, error }\n\t\t\t\t: snapshot;\n\t\tcase ResourceStatus.Reloading:\n\t\t\treturn hasError\n\t\t\t\t? { status: ResourceStatus.Error, value: snapshot.value, error }\n\t\t\t\t: snapshot;\n\t\tcase ResourceStatus.Resolved:\n\t\t\treturn hasError\n\t\t\t\t? { status: ResourceStatus.Error, value: snapshot.value, error }\n\t\t\t\t: reloading\n\t\t\t\t\t? { status: ResourceStatus.Reloading, value: snapshot.value }\n\t\t\t\t\t: snapshot;\n\t\tcase ResourceStatus.Error:\n\t\t\treturn hasError\n\t\t\t\t? { status: ResourceStatus.Error, value: snapshot.value, error }\n\t\t\t\t: snapshot;\n\t}\n}\n\nexport const ResourceSnapshotUpdateKind = {\n\tLoad: \"load\",\n\tResolve: \"resolve\",\n\tFail: \"fail\",\n\tFailWithValue: \"fail_with_value\",\n} as const;\n\nexport type ResourceSnapshotUpdateKind =\n\t(typeof ResourceSnapshotUpdateKind)[keyof typeof ResourceSnapshotUpdateKind];\n\nexport type ResourceSnapshotUpdate<T> =\n\t| { readonly kind: typeof ResourceSnapshotUpdateKind.Load }\n\t| {\n\t\t\treadonly kind: typeof ResourceSnapshotUpdateKind.Resolve;\n\t\t\treadonly value: T;\n\t }\n\t| {\n\t\t\treadonly kind: typeof ResourceSnapshotUpdateKind.Fail;\n\t\t\treadonly error: unknown;\n\t }\n\t| {\n\t\t\treadonly kind: typeof ResourceSnapshotUpdateKind.FailWithValue;\n\t\t\treadonly value: T;\n\t\t\treadonly error: unknown;\n\t };\n\nexport function reduceResourceSnapshot<T>(\n\tprevious: ResourceSnapshot<T>,\n\tupdate: ResourceSnapshotUpdate<T>,\n): ResourceSnapshot<T> {\n\tswitch (update.kind) {\n\t\tcase ResourceSnapshotUpdateKind.Load:\n\t\t\treturn previous.status === ResourceStatus.Reloading ||\n\t\t\t\tprevious.status === ResourceStatus.Resolved ||\n\t\t\t\tprevious.status === ResourceStatus.Error\n\t\t\t\t? { status: ResourceStatus.Reloading, value: previous.value }\n\t\t\t\t: { status: ResourceStatus.Loading };\n\t\tcase ResourceSnapshotUpdateKind.Resolve:\n\t\t\treturn { status: ResourceStatus.Resolved, value: update.value };\n\t\tcase ResourceSnapshotUpdateKind.Fail:\n\t\t\treturn previous.status === ResourceStatus.Reloading ||\n\t\t\t\tprevious.status === ResourceStatus.Resolved ||\n\t\t\t\tprevious.status === ResourceStatus.Error\n\t\t\t\t? {\n\t\t\t\t\t\tstatus: ResourceStatus.Error,\n\t\t\t\t\t\tvalue: previous.value,\n\t\t\t\t\t\terror: update.error,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tstatus: ResourceStatus.LoadingError,\n\t\t\t\t\t\terror: update.error,\n\t\t\t\t\t};\n\t\tcase ResourceSnapshotUpdateKind.FailWithValue:\n\t\t\treturn {\n\t\t\t\tstatus: ResourceStatus.Error,\n\t\t\t\tvalue: update.value,\n\t\t\t\terror: update.error,\n\t\t\t};\n\t}\n}\n","import {\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfinalize,\n\tfrom,\n\tmap,\n\ttype Observable,\n\ttype ObservableInput,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n} from \"rxjs\";\nimport {\n\ttype CancellationTokenTrait,\n\tcreateCancellationTokenSource,\n} from \"../cancellation\";\nimport {\n\ttype InteropObservableTrait,\n\tSYMBOL_DISPOSE,\n\tSYMBOL_OBSERVABLE,\n\ttype WithInteropObservableTraitCompat,\n} from \"../compat\";\nimport { ResourceError } from \"../signals/error\";\nimport {\n\tResourceSnapshotUpdateKind,\n\treduceResourceSnapshot,\n\twhenResourceSnapshotValue,\n} from \"../signals/resource-snapshot\";\nimport {\n\ttype ReadableSignalTrait,\n\ttype ResourceSnapshot,\n\tResourceStatus,\n\ttype ResourceTrait,\n\ttype ResourceWhenValueOptions,\n} from \"../signals/types\";\nimport { type RxEventStream } from \"./event\";\nimport {\n\tRxComputedSignal,\n\ttype RxComputedSignalCompat,\n\tRxStateSignal,\n\ttype RxStateSignalCompat,\n} from \"./signal\";\n\nexport {\n\ttype ResourceErrorSnapshot,\n\ttype ResourceIdleSnapshot,\n\ttype ResourceLoadingErrorSnapshot,\n\ttype ResourceLoadingSnapshot,\n\ttype ResourceReloadingSnapshot,\n\ttype ResourceResolvedSnapshot,\n\ttype ResourceSnapshot,\n\tResourceStatus,\n\ttype ResourceTrait,\n\ttype ResourceWhenValueOptions,\n} from \"../signals/types\";\n\nexport interface RxResourceStreamContext<T, R> {\n\treadonly request: R;\n\treadonly previous: ResourceSnapshot<T>;\n\treadonly cancellationToken: CancellationTokenTrait;\n}\n\nexport interface RxResourceOptions<T, R = undefined> {\n\treadonly request?: ReadableSignalTrait<R | undefined> | (() => R | undefined);\n\treadonly stream: (\n\t\tcontext: RxResourceStreamContext<T, R>,\n\t) => ObservableInput<T>;\n}\n\nabstract class RxResourceBase<T>\n\timplements ResourceTrait<T>, InteropObservableTrait<ResourceSnapshot<T>>\n{\n\tabstract readonly snapshot: ReadableSignalTrait<ResourceSnapshot<T>>;\n\treadonly value: RxComputedSignalCompat<T>;\n\treadonly status: RxComputedSignalCompat<ResourceStatus>;\n\treadonly error: RxComputedSignalCompat<unknown | undefined>;\n\treadonly isLoading: RxComputedSignalCompat<boolean>;\n\tprotected readonly destroyed = RxStateSignal.fromInitialValue(false);\n\tprotected readonly destroyed$ = from(this.destroyed).pipe(\n\t\tfilter((value): value is true => value),\n\t\ttake(1),\n\t);\n\n\tprotected constructor() {\n\t\tthis.value = RxComputedSignal.computed(() => {\n\t\t\tconst snapshot = this.snapshot.get();\n\t\t\tif (\n\t\t\t\tsnapshot.status === ResourceStatus.Resolved ||\n\t\t\t\tsnapshot.status === ResourceStatus.Reloading\n\t\t\t) {\n\t\t\t\treturn snapshot.value;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tsnapshot.status === ResourceStatus.LoadingError ||\n\t\t\t\tsnapshot.status === ResourceStatus.Error\n\t\t\t) {\n\t\t\t\tthrow snapshot.error;\n\t\t\t}\n\t\t\tthrow ResourceError.valueUnavailable({ status: snapshot.status });\n\t\t});\n\t\tthis.status = RxComputedSignal.computed(() => this.snapshot.get().status);\n\t\tthis.error = RxComputedSignal.computed(() => {\n\t\t\tconst snapshot = this.snapshot.get();\n\t\t\treturn snapshot.status === ResourceStatus.LoadingError ||\n\t\t\t\tsnapshot.status === ResourceStatus.Error\n\t\t\t\t? snapshot.error\n\t\t\t\t: undefined;\n\t\t});\n\t\tthis.isLoading = RxComputedSignal.computed(() => {\n\t\t\tconst status = this.snapshot.get().status;\n\t\t\treturn (\n\t\t\t\tstatus === ResourceStatus.Loading || status === ResourceStatus.Reloading\n\t\t\t);\n\t\t});\n\t}\n\n\thasValue(): boolean {\n\t\tconst status = this.snapshot.get().status;\n\t\treturn (\n\t\t\tstatus === ResourceStatus.Resolved || status === ResourceStatus.Reloading\n\t\t);\n\t}\n\n\tasync whenValue(options?: ResourceWhenValueOptions): Promise<T> {\n\t\treturn whenResourceSnapshotValue(this.snapshot, options);\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\t[SYMBOL_OBSERVABLE](): RxEventStream<ResourceSnapshot<T>> {\n\t\treturn this.snapshot[SYMBOL_OBSERVABLE]() as RxEventStream<\n\t\t\tResourceSnapshot<T>\n\t\t>;\n\t}\n}\n\nexport class RxResource<T, R = undefined> extends RxResourceBase<T> {\n\treadonly snapshot: RxStateSignalCompat<ResourceSnapshot<T>>;\n\n\tconstructor(private readonly options: RxResourceOptions<T, R>) {\n\t\tsuper();\n\t\tthis.snapshot = RxStateSignal.fromInitialValue<ResourceSnapshot<T>>({\n\t\t\tstatus: ResourceStatus.Idle,\n\t\t});\n\t\tthis.destroyed$.subscribe(() => {\n\t\t\tthis.snapshot.set({ status: ResourceStatus.Idle });\n\t\t});\n\t\tthis.connect();\n\t}\n\n\tprivate connect(): void {\n\t\tconst configuredRequest = this.options.request;\n\t\tconst requestObservable: Observable<R | undefined> =\n\t\t\tconfiguredRequest && typeof configuredRequest !== \"function\"\n\t\t\t\t? from(configuredRequest).pipe(\n\t\t\t\t\t\tdistinctUntilChanged(\n\t\t\t\t\t\t\tconfiguredRequest.equals as (\n\t\t\t\t\t\t\t\tleft: R | undefined,\n\t\t\t\t\t\t\t\tright: R | undefined,\n\t\t\t\t\t\t\t) => boolean,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t: of(\n\t\t\t\t\t\tconfiguredRequest && typeof configuredRequest === \"function\"\n\t\t\t\t\t\t\t? configuredRequest()\n\t\t\t\t\t\t\t: (undefined as R),\n\t\t\t\t\t);\n\t\tconst requestControlsLoading = configuredRequest !== undefined;\n\n\t\trequestObservable\n\t\t\t.pipe(\n\t\t\t\tswitchMap((request) => {\n\t\t\t\t\tif (requestControlsLoading && request === undefined) {\n\t\t\t\t\t\treturn of<ResourceSnapshot<T>>({ status: ResourceStatus.Idle });\n\t\t\t\t\t}\n\t\t\t\t\tconst previous = this.snapshot.get();\n\t\t\t\t\tconst loadingSnapshot = reduceResourceSnapshot(previous, {\n\t\t\t\t\t\tkind: ResourceSnapshotUpdateKind.Load,\n\t\t\t\t\t});\n\t\t\t\t\tthis.snapshot.set(loadingSnapshot);\n\n\t\t\t\t\tconst loadCancellation = createCancellationTokenSource();\n\t\t\t\t\treturn from(\n\t\t\t\t\t\tthis.options.stream({\n\t\t\t\t\t\t\trequest: request as R,\n\t\t\t\t\t\t\tprevious,\n\t\t\t\t\t\t\tcancellationToken: loadCancellation.token,\n\t\t\t\t\t\t}),\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tmap((value) =>\n\t\t\t\t\t\t\treduceResourceSnapshot(loadingSnapshot, {\n\t\t\t\t\t\t\t\tkind: ResourceSnapshotUpdateKind.Resolve,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcatchError((error: unknown) =>\n\t\t\t\t\t\t\tof(\n\t\t\t\t\t\t\t\treduceResourceSnapshot(loadingSnapshot, {\n\t\t\t\t\t\t\t\t\tkind: ResourceSnapshotUpdateKind.Fail,\n\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfinalize(() => loadCancellation.cancel()),\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((snapshot) => this.snapshot.set(snapshot));\n\t}\n\n\tstatic create<T, R = undefined>(\n\t\toptions: RxResourceOptions<T, R>,\n\t): RxResource<T, R> {\n\t\treturn new RxResource(options);\n\t}\n}\n\nclass RxSnapshotResource<T> extends RxResourceBase<T> {\n\treadonly snapshot: RxComputedSignalCompat<ResourceSnapshot<T>>;\n\n\tconstructor(source: () => ResourceSnapshot<T>) {\n\t\tsuper();\n\t\tthis.snapshot = RxComputedSignal.computed(() =>\n\t\t\tthis.destroyed.get() ? { status: ResourceStatus.Idle } : source(),\n\t\t);\n\t}\n}\n\nexport function resourceFromSnapshots<T>(\n\tsource: () => ResourceSnapshot<T>,\n): WithInteropObservableTraitCompat<ResourceTrait<T>, ResourceSnapshot<T>> {\n\treturn new RxSnapshotResource(source);\n}\n\nexport function mapResource<T, U>(\n\tsource: ResourceTrait<T>,\n\tmapValue: (value: T) => U,\n): WithInteropObservableTraitCompat<ResourceTrait<U>, ResourceSnapshot<U>> {\n\treturn resourceFromSnapshots(() => {\n\t\tconst snapshot = source.snapshot.get();\n\t\tswitch (snapshot.status) {\n\t\t\tcase ResourceStatus.Idle:\n\t\t\tcase ResourceStatus.Loading:\n\t\t\tcase ResourceStatus.LoadingError:\n\t\t\t\treturn snapshot;\n\t\t\tcase ResourceStatus.Reloading:\n\t\t\tcase ResourceStatus.Resolved:\n\t\t\t\treturn { status: snapshot.status, value: mapValue(snapshot.value) };\n\t\t\tcase ResourceStatus.Error:\n\t\t\t\treturn {\n\t\t\t\t\tstatus: ResourceStatus.Error,\n\t\t\t\t\tvalue: mapValue(snapshot.value),\n\t\t\t\t\terror: snapshot.error,\n\t\t\t\t};\n\t\t}\n\t});\n}\n\nexport function rxResource<T, R = undefined>(\n\toptions: RxResourceOptions<T, R>,\n): WithInteropObservableTraitCompat<ResourceTrait<T>, ResourceSnapshot<T>> {\n\treturn new RxResource(options);\n}\n"],"mappings":"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"}
|