@nice-code/action 0.25.0 → 0.26.0

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.
Files changed (39) hide show
  1. package/README.md +52 -0
  2. package/build/{AcceptorHandler-BizUtq4u.d.mts → AcceptorHandler-CLbwu2Pa.d.mts} +74 -16
  3. package/build/{AcceptorHandler-CxPfZtIl.d.cts → AcceptorHandler-Du292dpC.d.cts} +74 -16
  4. package/build/{ActionDevtoolsCore-D9KBBI2V.d.cts → ActionDevtoolsCore-DGwzONZT.d.mts} +2 -2
  5. package/build/{ActionDevtoolsCore-xZjAtB4H.d.mts → ActionDevtoolsCore-dH4K4w3B.d.cts} +2 -2
  6. package/build/advanced/index.cjs +1 -1
  7. package/build/advanced/index.d.cts +12 -6
  8. package/build/advanced/index.d.mts +12 -6
  9. package/build/advanced/index.mjs +1 -1
  10. package/build/{createHibernatableWsServerAdapter-BkjESd01.mjs → createHibernatableWsServerAdapter-BD5n-Ev9.mjs} +176 -75
  11. package/build/createHibernatableWsServerAdapter-BD5n-Ev9.mjs.map +1 -0
  12. package/build/{createHibernatableWsServerAdapter-FSDWrxoF.cjs → createHibernatableWsServerAdapter-j96U9vgo.cjs} +175 -74
  13. package/build/{createHibernatableWsServerAdapter-BkjESd01.mjs.map → createHibernatableWsServerAdapter-j96U9vgo.cjs.map} +1 -1
  14. package/build/devtools/browser/index.cjs.map +1 -1
  15. package/build/devtools/browser/index.d.cts +1 -1
  16. package/build/devtools/browser/index.d.mts +1 -1
  17. package/build/devtools/browser/index.mjs.map +1 -1
  18. package/build/devtools/server/index.d.cts +1 -1
  19. package/build/devtools/server/index.d.mts +1 -1
  20. package/build/{httpAcceptorCarrier-BQYaXI9j.cjs → httpAcceptorCarrier-By0Qa__L.cjs} +2 -2
  21. package/build/httpAcceptorCarrier-By0Qa__L.cjs.map +1 -0
  22. package/build/{httpAcceptorCarrier-DWqsCz3h.mjs → httpAcceptorCarrier-moSmtBxr.mjs} +2 -2
  23. package/build/httpAcceptorCarrier-moSmtBxr.mjs.map +1 -0
  24. package/build/index.cjs +2 -2
  25. package/build/index.cjs.map +1 -1
  26. package/build/index.d.cts +1 -1
  27. package/build/index.d.mts +1 -1
  28. package/build/index.mjs +2 -2
  29. package/build/index.mjs.map +1 -1
  30. package/build/platform/cloudflare/index.cjs +1 -1
  31. package/build/platform/cloudflare/index.d.cts +1 -1
  32. package/build/platform/cloudflare/index.d.mts +1 -1
  33. package/build/platform/cloudflare/index.mjs +1 -1
  34. package/build/react-query/index.d.cts +1 -1
  35. package/build/react-query/index.d.mts +1 -1
  36. package/package.json +5 -4
  37. package/build/createHibernatableWsServerAdapter-FSDWrxoF.cjs.map +0 -1
  38. package/build/httpAcceptorCarrier-BQYaXI9j.cjs.map +0 -1
  39. package/build/httpAcceptorCarrier-DWqsCz3h.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["ActionBase","ActionBase","ActionPayload","ActionPayload_Request","RuntimeCoordinate","isAction_Base_JsonObject","isAction_Base_JsonObject","isActionPayload_Any_JsonObject","err_nice_action","ActionPayload","err_nice_action","RuntimeCoordinate","runtimeCoordinateToStringIds","err_nice_action","RunningAction","err_nice_action","ActionLocalHandler","RuntimeCoordinate","ActionPayload_Request","ActionPayload_Result","normalizeFrame","err_nice_transport"],"sources":["../src/ActionDefinition/Action/Context/ActionContext.ts","../src/ActionDefinition/Action/Core/ActionCore.ts","../src/utils/isAction_Context_JsonObject.ts","../src/utils/isAction_Core_JsonObject.ts","../src/utils/isAction_Any_JsonObject.ts","../src/utils/assertIsActionJson.ts","../src/utils/isAction_Any_Instance.ts","../src/ActionDefinition/Domain/ActionDomainBase.ts","../src/ActionRuntime/ActionRuntimeManager.ts","../src/ActionDefinition/Domain/ActionRootDomain.ts","../src/ActionDefinition/Domain/ActionDomain.ts","../src/ActionDefinition/Domain/helpers/createRootActionDomain.ts","../src/ActionRuntime/Transport/Carrier/duplex/inMemory/createInMemoryChannel.ts","../src/ActionRuntime/Transport/Carrier/duplex/inMemory/inMemoryCarrier.ts","../src/ActionRuntime/Transport/Carrier/duplex/rtc/rtcDataChannelByteChannel.ts","../src/ActionRuntime/Transport/Carrier/duplex/rtc/rtcCarrier.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/err_nice_transport_ws.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/ws_util.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/webSocketByteChannel.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/wsCarrier.ts","../src/ActionRuntime/Transport/Carrier/exchange/http/httpCarrier.ts"],"sourcesContent":["import { RuntimeCoordinate } from \"../../../ActionRuntime/RuntimeCoordinate\";\nimport type { ActionDomain } from \"../../Domain/ActionDomain\";\nimport type {\n IActionDomain,\n TInferInputFromSchema,\n TInferOutputFromSchema,\n} from \"../../Domain/ActionDomain.types\";\nimport { ActionBase } from \"../ActionBase\";\nimport { EActionForm } from \"../ActionBase.types\";\nimport type {\n IActionContext,\n IActionContext_Data,\n IActionContext_Data_JsonObject,\n IActionContext_JsonObject,\n IActionRouteItem,\n} from \"./ActionContext.types\";\n\nexport class ActionContext<\n DOM extends IActionDomain,\n ID extends keyof DOM[\"actionSchema\"] & string = keyof DOM[\"actionSchema\"] & string,\n >\n extends ActionBase<EActionForm.context, DOM, ID>\n implements IActionContext<DOM, ID>\n{\n readonly form = EActionForm.context;\n readonly _routing: IActionRouteItem[];\n readonly timeCreated: number;\n readonly cuid: string;\n originClient: RuntimeCoordinate;\n\n constructor(\n readonly _domain: ActionDomain<DOM>,\n id: ID,\n hydrationData: IActionContext_Data,\n ) {\n super(EActionForm.context, _domain, id);\n this.timeCreated = hydrationData.timeCreated;\n this.cuid = hydrationData.cuid;\n this._routing = hydrationData.routing;\n this.originClient = hydrationData.originClient;\n }\n\n _setOriginClient(client: RuntimeCoordinate): void {\n this.originClient = client;\n }\n\n toJsonString(): string {\n return JSON.stringify(this.toJsonObject());\n }\n\n toContextDataJsonObject(): IActionContext_Data_JsonObject {\n return {\n timeCreated: this.timeCreated,\n cuid: this.cuid,\n routing: this.routing.map((item) => ({\n runtime: item.runtime.toJsonObject(),\n handler: item.handler,\n time: item.time,\n })),\n originClient: this.originClient.toJsonObject(),\n };\n }\n\n toJsonObject(): IActionContext_JsonObject<DOM, ID> {\n return {\n ...super.toJsonObject(),\n ...this.toContextDataJsonObject(),\n };\n }\n\n get routing(): IActionRouteItem[] {\n return this._routing;\n }\n\n addRouteItem(item: IActionRouteItem): void {\n this._routing.push(item);\n }\n\n deserializeInput(\n serialized: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.deserializeInput(serialized);\n }\n\n serializeInput(\n raw: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"] {\n return this.schema.serializeInput(raw);\n }\n\n validateInput(input: unknown): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.validateInput(input, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n\n validateOutput(output: unknown): TInferOutputFromSchema<DOM[\"actionSchema\"][ID]>[\"Output\"] {\n return this.schema.validateOutput(output, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n}\n","import { nanoid } from \"nanoid\";\nimport { RuntimeCoordinate } from \"../../../ActionRuntime/RuntimeCoordinate\";\nimport type { ActionDomain } from \"../../Domain/ActionDomain\";\nimport type {\n IActionDomain,\n TInferInputFromSchema,\n TInferOutputFromSchema,\n} from \"../../Domain/ActionDomain.types\";\nimport type { TNarrowActionType } from \"../Action.combined.types\";\nimport { ActionBase } from \"../ActionBase\";\nimport { EActionForm, type IActionBase, type IActionBase_JsonObject } from \"../ActionBase.types\";\nimport { ActionContext } from \"../Context/ActionContext\";\nimport { ActionPayload } from \"../Payload/ActionPayload\";\nimport { ActionPayload_Request } from \"../Payload/ActionPayload_Request\";\nimport type { IActionCore } from \"./ActionCore.types\";\n\nexport class ActionCore<\n DOM extends IActionDomain,\n ID extends keyof DOM[\"actionSchema\"] & string = keyof DOM[\"actionSchema\"] & string,\n >\n extends ActionBase<EActionForm.core, DOM, ID>\n implements IActionCore<DOM, ID>\n{\n readonly form = EActionForm.core;\n\n constructor(\n readonly _domain: ActionDomain<DOM>,\n id: ID,\n ) {\n super(EActionForm.core, _domain, id);\n }\n\n is<ACT extends IActionBase<any, any, any>>(\n action: ACT | unknown | null | undefined,\n ): action is TNarrowActionType<DOM, ACT, ID> {\n return (\n action instanceof ActionPayload && action.domain === this.domain && action.id === this.id\n );\n }\n\n toJsonObject(): IActionBase_JsonObject<EActionForm.core, DOM, ID> {\n return {\n id: this.id,\n form: this.form,\n domain: this.domain,\n allDomains: this.allDomains,\n };\n }\n\n request(\n ...args: [TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"]] extends [never]\n ? [input?: never]\n : [input: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"]]\n ): ActionPayload_Request<DOM, ID> {\n const input: unknown = args[0];\n const validatedInput = this.schema.validateInput(input, {\n actionId: this.id,\n domain: this.domain,\n });\n\n const context = new ActionContext(this._domain, this.id, {\n cuid: nanoid(),\n timeCreated: Date.now(),\n routing: [],\n originClient: RuntimeCoordinate.unknown,\n });\n\n return new ActionPayload_Request({ context }, validatedInput, {\n time: Date.now(),\n });\n }\n\n // async run(\n // input: TInferInputFromSchema<DOM[\"actions\"][ID]>[\"Input\"],\n // options?: IExecuteActionOptions<DOM, ID>,\n // ): Promise<RunningAction<DOM, ID>> {\n // return this.request(input).run(options);\n // }\n\n // async runToOutput(\n // input: TInferInputFromSchema<DOM[\"actions\"][ID]>[\"Input\"],\n // options?: IExecuteActionOptions<DOM, ID>,\n // ): Promise<TInferOutputFromSchema<DOM[\"actions\"][ID]>[\"Output\"]> {\n // return this.request(input).runToOutput(options);\n // }\n\n // async runToOutputSafe(\n // input: TInferInputFromSchema<DOM[\"actions\"][ID]>[\"Input\"],\n // options?: IExecuteActionOptions<DOM, ID>,\n // ): Promise<\n // TActionResult<\n // TInferOutputFromSchema<DOM[\"actions\"][ID]>[\"Output\"],\n // TInferActionError<DOM[\"actions\"][ID]>\n // >\n // > {\n // return this.request(input).runToOutputSafe(options);\n // }\n\n deserializeInput(\n serialized: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.deserializeInput(serialized);\n }\n\n serializeInput(\n raw: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"] {\n return this.schema.serializeInput(raw);\n }\n\n validateInput(input: unknown): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.validateInput(input, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n\n validateOutput(output: unknown): TInferOutputFromSchema<DOM[\"actionSchema\"][ID]>[\"Output\"] {\n return this.schema.validateOutput(output, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n}\n","import { EActionForm } from \"../ActionDefinition/Action/ActionBase.types\";\nimport type { IActionContext_JsonObject } from \"../ActionDefinition/Action/Context/ActionContext.types\";\nimport { isAction_Base_JsonObject } from \"./isAction_Base_JsonObject\";\n\nexport const isAction_Context_JsonObject = (obj: unknown): obj is IActionContext_JsonObject => {\n return isAction_Base_JsonObject(obj) && obj.form === EActionForm.context;\n};\n","import { EActionForm } from \"../ActionDefinition/Action/ActionBase.types\";\nimport type { IActionCore_JsonObject } from \"../ActionDefinition/Action/Core/ActionCore.types\";\nimport { isAction_Base_JsonObject } from \"./isAction_Base_JsonObject\";\n\nexport const isAction_Core_JsonObject = (obj: unknown): obj is IActionCore_JsonObject => {\n return isAction_Base_JsonObject(obj) && obj.form === EActionForm.core;\n};\n","import type { TAction_Any_JsonObject } from \"../ActionDefinition/Action/Action.combined.types\";\nimport { isAction_Context_JsonObject } from \"./isAction_Context_JsonObject\";\nimport { isAction_Core_JsonObject } from \"./isAction_Core_JsonObject\";\nimport { isActionPayload_Any_JsonObject } from \"./isActionPayload_Any_JsonObject\";\n\nexport function isAction_Any_JsonObject(obj: unknown): obj is TAction_Any_JsonObject {\n return (\n isActionPayload_Any_JsonObject(obj) ||\n isAction_Context_JsonObject(obj) ||\n isAction_Core_JsonObject(obj)\n );\n}\n","import type { IActionBase_JsonObject } from \"../ActionDefinition/Action/ActionBase.types\";\nimport { EErrId_NiceAction, err_nice_action } from \"../errors/err_nice_action\";\nimport { isAction_Any_JsonObject } from \"./isAction_Any_JsonObject\";\n\nexport function assertIsActionJson(obj: unknown): asserts obj is IActionBase_JsonObject {\n if (!isAction_Any_JsonObject(obj)) {\n throw err_nice_action.fromId(EErrId_NiceAction.wire_not_action_data);\n }\n}\n","import type { TAction_Any_Instance } from \"../ActionDefinition/Action/Action.combined.types\";\nimport type { IActionBase } from \"../ActionDefinition/Action/ActionBase.types\";\nimport { ActionContext } from \"../ActionDefinition/Action/Context/ActionContext\";\nimport { ActionCore } from \"../ActionDefinition/Action/Core/ActionCore\";\nimport { ActionPayload } from \"../ActionDefinition/Action/Payload/ActionPayload\";\n\nexport function isAction_Any_Instance<ACT extends IActionBase<any, any>>(\n value: unknown | ACT,\n): value is TAction_Any_Instance<any, any> {\n return (\n value instanceof ActionCore || value instanceof ActionPayload || value instanceof ActionContext\n );\n}\n","import type {\n TDistributeRunningActionUpdateListener,\n TRunningActionUpdateListener,\n} from \"../Action/RunningAction.types\";\nimport type { IActionDomain } from \"./ActionDomain.types\";\n\nexport abstract class ActionDomainBase<ACT_DOM extends IActionDomain = IActionDomain>\n implements IActionDomain<ACT_DOM[\"allDomains\"], ACT_DOM[\"actionSchema\"]>\n{\n readonly domain: ACT_DOM[\"domain\"];\n readonly allDomains: ACT_DOM[\"allDomains\"];\n readonly actionSchema: ACT_DOM[\"actionSchema\"];\n\n protected _listeners: TRunningActionUpdateListener<any, any>[] = [];\n\n constructor(definition: ACT_DOM) {\n this.domain = definition.domain;\n this.allDomains = definition.allDomains;\n this.actionSchema = definition.actionSchema;\n }\n\n /**\n * Add an observer that is called after every action dispatched through this domain.\n * Returns an unsubscribe function — call it to remove the listener.\n */\n addActionListener(\n listener: TDistributeRunningActionUpdateListener<\n ACT_DOM,\n keyof ACT_DOM[\"actionSchema\"] & string\n >,\n ): () => void {\n this._listeners.push(listener as TRunningActionUpdateListener<any, any>);\n return () => {\n this._listeners = this._listeners.filter((l) => l !== listener);\n };\n }\n\n /**\n * @internal\n * Observers registered directly on this domain via {@link addActionListener}.\n * Used to wire observers (e.g. devtools) onto RunningActions that aren't created\n * through the local-dispatch path — notably inbound actions pushed from a backend\n * or another client over a bidirectional transport.\n */\n _getActionObservers(): TRunningActionUpdateListener<any, any>[] {\n return this._listeners;\n }\n}\n","import type { TActionPayload_Any_Instance } from \"../ActionDefinition/Action/Payload/ActionPayload.types\";\nimport { EErrId_NiceAction, err_nice_action } from \"../errors/err_nice_action\";\nimport type { ActionRuntime } from \"./ActionRuntime\";\nimport type { IActionHandlerAndRuntime, IActionRuntimeManagerContext } from \"./ActionRuntime.types\";\nimport type { IHandleActionOptions } from \"./Handler/ActionHandler.types\";\nimport {\n type IRuntimeCoordinate,\n RuntimeCoordinate,\n type TRuntimeCoordinateStringId,\n} from \"./RuntimeCoordinate\";\nimport { runtimeCoordinateToStringIds } from \"./utils/runtimeCoordinateToStringIds\";\n\nexport class ActionRuntimeManager {\n private _runtimes: Map<TRuntimeCoordinateStringId, ActionRuntime> = new Map();\n private _preferredRuntimeClientId: TRuntimeCoordinateStringId | null = null;\n private _context: IActionRuntimeManagerContext;\n\n constructor(context?: IActionRuntimeManagerContext) {\n this._context = context ?? {};\n }\n\n registerRuntime(runtime: ActionRuntime): void {\n const runtimeId = runtime.coordinate.stringId;\n if (this._runtimes.has(runtimeId)) {\n throw err_nice_action.fromId(EErrId_NiceAction.client_runtime_already_registered, {\n context: this._context,\n client: runtime.coordinate,\n });\n }\n\n for (const id of runtime.coordinate.toStringIds()) {\n if (this._runtimes.has(id)) {\n continue;\n }\n\n this._runtimes.set(id, runtime);\n }\n }\n\n getRuntimeAndHandlerForAction(\n action: TActionPayload_Any_Instance<any, any>,\n options?: IHandleActionOptions,\n throwOnIssue?: boolean,\n ): IActionHandlerAndRuntime | undefined {\n const localRuntime = options?.targetLocalRuntime;\n\n if (localRuntime != null) {\n const runtime = throwOnIssue\n ? this.getBestRuntimeOrThrow(options?.targetLocalRuntime?.coordinate)\n : this.getBestRuntime(options?.targetLocalRuntime?.coordinate);\n\n if (runtime == null) {\n return;\n }\n\n const handler = runtime._getHandlerForAction(action, options);\n\n if (handler != null) {\n return { handler, runtime };\n }\n\n if (throwOnIssue) {\n throw err_nice_action.fromId(EErrId_NiceAction.no_action_execution_handler, {\n domain: action.domain,\n actionId: action.id,\n specifiedClient: localRuntime.coordinate,\n });\n }\n }\n\n // If no client specified, try to find a runtime that can handle the action\n for (const runtime of this._runtimes.values()) {\n const handler = runtime._getHandlerForAction(action);\n if (handler) {\n return { handler, runtime };\n }\n }\n\n if (throwOnIssue) {\n throw err_nice_action.fromId(EErrId_NiceAction.no_action_execution_handler, {\n domain: action.domain,\n actionId: action.id,\n specifiedClient: options?.targetLocalRuntime?.coordinate,\n });\n }\n }\n\n getRuntimeAndHandlerForActionOrThrow(\n action: TActionPayload_Any_Instance<any, any>,\n options?: IHandleActionOptions,\n ): IActionHandlerAndRuntime {\n return this.getRuntimeAndHandlerForAction(action, options, true)!;\n }\n\n setPreferredRuntime(runtime: ActionRuntime): void {\n const runtimeId = runtime.coordinate.stringId;\n this._preferredRuntimeClientId = runtimeId;\n }\n\n getPreferredRuntime(): ActionRuntime | undefined {\n if (this._preferredRuntimeClientId) {\n const runtime = this._runtimes.get(this._preferredRuntimeClientId);\n if (runtime) {\n return runtime;\n }\n }\n return this._runtimes.values().next().value;\n }\n\n getBestRuntimeForSpecifier(clientSpecifier: IRuntimeCoordinate): ActionRuntime | undefined {\n const actionClient = new RuntimeCoordinate(clientSpecifier);\n const ids = actionClient.toStringIds();\n\n for (const id of ids) {\n const runtime = this._runtimes.get(id);\n if (runtime) {\n return runtime;\n }\n }\n }\n\n getBestRuntime(clientSpecifier?: IRuntimeCoordinate): ActionRuntime | undefined {\n return clientSpecifier != null\n ? this.getBestRuntimeForSpecifier(clientSpecifier)\n : this.getPreferredRuntime();\n }\n\n hasRuntime(runtime: ActionRuntime): boolean {\n return this._runtimes.has(runtime.coordinate.stringId);\n }\n\n getBestRuntimeOrThrow(specifier?: IRuntimeCoordinate): ActionRuntime {\n const runtime = this.getBestRuntime(specifier);\n\n if (!runtime) {\n if (specifier == null) {\n throw err_nice_action.fromId(EErrId_NiceAction.no_client_runtimes_registered, {\n context: this._context,\n });\n }\n\n throw err_nice_action.fromId(EErrId_NiceAction.client_runtime_not_registered, {\n context: this._context,\n clientStringId: runtimeCoordinateToStringIds(specifier)[0],\n });\n }\n\n return runtime;\n }\n}\n","import type { ActionRuntime } from \"../../ActionRuntime/ActionRuntime\";\nimport type { IActionHandlerAndRuntime } from \"../../ActionRuntime/ActionRuntime.types\";\nimport { ActionRuntimeManager } from \"../../ActionRuntime/ActionRuntimeManager\";\nimport type { IExecuteActionOptions } from \"../../ActionRuntime/Handler/ActionHandler.types\";\nimport type { IRuntimeCoordinate } from \"../../ActionRuntime/RuntimeCoordinate\";\nimport { EErrId_NiceAction, err_nice_action } from \"../../errors/err_nice_action\";\nimport type { ActionPayload_Request } from \"../Action/Payload/ActionPayload_Request\";\nimport { RunningAction } from \"../Action/RunningAction\";\nimport { ActionDomain } from \"./ActionDomain\";\nimport type {\n IActionDomain,\n IActionDomainChildOptions,\n IActionRootDomain,\n TActionDomainChildDef,\n} from \"./ActionDomain.types\";\nimport { ActionDomainBase } from \"./ActionDomainBase\";\n\nexport class ActionRootDomain<\n ROOT_DOM extends IActionRootDomain = IActionRootDomain,\n> extends ActionDomainBase<ROOT_DOM> {\n private _actionRuntimeManager: ActionRuntimeManager;\n\n constructor(\n readonly domainDefinition: {\n domain: ROOT_DOM[\"domain\"];\n },\n ) {\n const domainId = domainDefinition.domain;\n\n super({\n domain: domainId,\n allDomains: [domainId],\n actionSchema: {},\n } as ROOT_DOM);\n\n this._actionRuntimeManager = new ActionRuntimeManager({ domain: domainId });\n }\n\n createChildDomain<SUB_DOM extends IActionDomainChildOptions>(\n subDomainDef: SUB_DOM & {\n [K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;\n },\n ): ActionDomain<TActionDomainChildDef<ROOT_DOM, SUB_DOM>> {\n if (this.allDomains.includes(subDomainDef.domain)) {\n throw err_nice_action.fromId(EErrId_NiceAction.domain_already_exists_in_hierarchy, {\n domain: subDomainDef.domain,\n allParentDomains: this.allDomains,\n parentDomain: this.domain,\n });\n }\n\n return new ActionDomain<TActionDomainChildDef<ROOT_DOM, SUB_DOM>>(\n {\n allDomains: [...this.allDomains, subDomainDef.domain],\n domain: subDomainDef.domain,\n actionSchema: subDomainDef.actions,\n },\n { rootDomain: this },\n );\n }\n\n _registerRuntime(runtime: ActionRuntime): void {\n this._actionRuntimeManager.registerRuntime(runtime);\n }\n\n _hasRuntime(runtime: ActionRuntime): boolean {\n return this._actionRuntimeManager.hasRuntime(runtime);\n }\n\n getRuntime(clientSpecifier: IRuntimeCoordinate): ActionRuntime | undefined {\n return this._actionRuntimeManager.getBestRuntimeForSpecifier(clientSpecifier);\n }\n\n async _runAction<\n DOM extends IActionDomain,\n ID extends keyof DOM[\"actionSchema\"] & string = keyof DOM[\"actionSchema\"] & string,\n ACT extends ActionPayload_Request<DOM, ID> = ActionPayload_Request<DOM, ID>,\n >(actionPayload: ACT, options?: IExecuteActionOptions<DOM, ID>): Promise<RunningAction<DOM, ID>> {\n const allListeners = [...this._listeners, ...(options?.listeners ?? [])];\n\n let handlerAndRuntime: IActionHandlerAndRuntime;\n try {\n handlerAndRuntime = this._actionRuntimeManager.getRuntimeAndHandlerForActionOrThrow(\n actionPayload,\n options,\n );\n } catch (err) {\n const runningAction = new RunningAction<DOM, ID>({\n context: actionPayload.context,\n request: actionPayload,\n callSite: actionPayload._callSite,\n });\n runningAction.addUpdateListeners(allListeners);\n runningAction._failWithError(err);\n throw err;\n }\n\n const { handler, runtime } = handlerAndRuntime;\n\n actionPayload.context._setOriginClient(runtime.coordinate);\n\n const runningAction = await handler.handleActionRequest(actionPayload, {\n targetLocalRuntime: runtime,\n });\n\n runningAction.addUpdateListeners(allListeners);\n\n return runningAction;\n }\n}\n","import type { ActionRuntime } from \"../../ActionRuntime/ActionRuntime\";\nimport type { IExecuteActionOptions } from \"../../ActionRuntime/Handler/ActionHandler.types\";\nimport { ActionLocalHandler } from \"../../ActionRuntime/Handler/Local/ActionLocalHandler\";\nimport { RuntimeCoordinate } from \"../../ActionRuntime/RuntimeCoordinate\";\nimport { EErrId_NiceAction, err_nice_action } from \"../../errors/err_nice_action\";\nimport { assertIsActionJson } from \"../../utils/assertIsActionJson\";\nimport { isAction_Any_Instance } from \"../../utils/isAction_Any_Instance\";\nimport type {\n TAction_Any_JsonObject,\n TDistributeActionPayload_Request,\n TDistributeActionPayload_Result,\n TDistributedDomainActions,\n TNarrowActionJsonTypeToActionInstanceType,\n} from \"../Action/Action.combined.types\";\nimport { EActionForm, type IActionBase } from \"../Action/ActionBase.types\";\nimport { ActionContext } from \"../Action/Context/ActionContext\";\nimport type { IActionContext_Data_JsonObject } from \"../Action/Context/ActionContext.types\";\nimport { ActionCore } from \"../Action/Core/ActionCore\";\nimport {\n EActionPayloadType,\n type IActionPayload_Request_JsonObject,\n type IActionPayload_Result_JsonObject,\n} from \"../Action/Payload/ActionPayload.types\";\nimport { ActionPayload_Request } from \"../Action/Payload/ActionPayload_Request\";\nimport { ActionPayload_Result } from \"../Action/Payload/ActionPayload_Result\";\nimport type { RunningAction } from \"../Action/RunningAction\";\nimport type { TRunningActionUpdateListener } from \"../Action/RunningAction.types\";\nimport type {\n IActionDomain,\n IActionDomainChildOptions,\n TActionDomainChildDef,\n TWrappableDomainActionHandler,\n} from \"./ActionDomain.types\";\nimport { ActionDomainBase } from \"./ActionDomainBase\";\nimport { type ActionRootDomain } from \"./ActionRootDomain\";\n\ntype TActionMap<ACT_DOM extends IActionDomain> = {\n [K in keyof ACT_DOM[\"actionSchema\"] & string]: ActionCore<ACT_DOM, K>;\n};\n\nexport class ActionDomain<\n ACT_DOM extends IActionDomain = IActionDomain,\n> extends ActionDomainBase<ACT_DOM> {\n private _rootDomain: ActionRootDomain<any>;\n private readonly _actionMap: TActionMap<ACT_DOM>;\n\n constructor(\n definition: ACT_DOM,\n {\n rootDomain,\n }: {\n rootDomain: ActionRootDomain<any>;\n },\n ) {\n super(definition);\n this._rootDomain = rootDomain;\n this._actionMap = this.createActionMap();\n }\n\n get rootDomain() {\n return this._rootDomain;\n }\n\n /**\n * @internal\n * All action observers that should see actions on this domain: the root domain's\n * observers plus this subdomain's own. Mirrors the listener set the local-dispatch\n * path assembles in `runAction`/`_runAction`, so inbound actions (pushed from a\n * backend or another client) can be wired up identically and surface in devtools.\n */\n _collectActionObservers(): TRunningActionUpdateListener<any, any>[] {\n return [...this._rootDomain._getActionObservers(), ...this._getActionObservers()];\n }\n\n _registerRuntime(runtime: ActionRuntime): void {\n this._rootDomain._registerRuntime(runtime);\n }\n\n createChildDomain<SUB_DOM extends IActionDomainChildOptions>(\n subDomainDef: SUB_DOM & {\n [K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;\n },\n ): ActionDomain<TActionDomainChildDef<ACT_DOM, SUB_DOM>> {\n if (this.allDomains.includes(subDomainDef.domain)) {\n throw err_nice_action.fromId(EErrId_NiceAction.domain_already_exists_in_hierarchy, {\n domain: subDomainDef.domain,\n allParentDomains: this.allDomains,\n parentDomain: this.domain,\n });\n }\n\n return new ActionDomain<TActionDomainChildDef<ACT_DOM, SUB_DOM>>(\n {\n allDomains: [...this.allDomains, subDomainDef.domain],\n domain: subDomainDef.domain,\n actionSchema: subDomainDef.actions,\n },\n { rootDomain: this._rootDomain },\n );\n }\n\n get action(): TActionMap<ACT_DOM> {\n return this._actionMap;\n }\n\n actionsMap(): TActionMap<ACT_DOM> {\n return this._actionMap;\n }\n\n actionForId<ID extends keyof ACT_DOM[\"actionSchema\"] & string>(id: ID): ActionCore<ACT_DOM, ID> {\n const actionSchema = this.actionSchema[id];\n if (!actionSchema) {\n throw err_nice_action.fromId(EErrId_NiceAction.action_id_not_in_domain, {\n domain: this.domain,\n actionId: id as string,\n });\n }\n\n return new ActionCore<ACT_DOM, ID>(this, id);\n }\n\n wrapAsPartialLocalHandler(\n wrappedActionExecutor: Partial<TWrappableDomainActionHandler<ACT_DOM>>,\n ): ActionLocalHandler {\n const _handler = new ActionLocalHandler();\n const executor = wrappedActionExecutor as unknown as Record<string, (input: any) => any>;\n\n for (const actionKey in wrappedActionExecutor) {\n if (!this.actionSchema[actionKey]) {\n continue;\n }\n\n _handler.forAction(this.actionForId(actionKey), (request) =>\n executor[request.id](request.input),\n );\n }\n\n return _handler;\n }\n\n wrapAsLocalHandler(\n wrappedActionExecutor: TWrappableDomainActionHandler<ACT_DOM>,\n ): ActionLocalHandler {\n const _handler = new ActionLocalHandler();\n const executor = wrappedActionExecutor as unknown as Record<string, (input: any) => any>;\n return _handler.forDomain(this, (request) => executor[request.id](request.input));\n }\n\n hydrateContext<ID extends keyof ACT_DOM[\"actionSchema\"] & string>(\n id: ID,\n contextData: IActionContext_Data_JsonObject,\n ): ActionContext<ACT_DOM, ID> {\n return new ActionContext(this, id, {\n timeCreated: contextData.timeCreated,\n cuid: contextData.cuid,\n routing: contextData.routing.map((item) => {\n return {\n runtime: new RuntimeCoordinate(item.runtime),\n handler: item.handler,\n time: item.time,\n };\n }),\n originClient: contextData.originClient\n ? new RuntimeCoordinate(contextData.originClient)\n : RuntimeCoordinate.unknown,\n });\n }\n\n isDomainAction<ACT extends IActionBase<any, ACT_DOM, any>>(\n action: ACT | unknown | null | undefined,\n ): action is TDistributedDomainActions<ACT_DOM, ACT> {\n return isAction_Any_Instance(action) && action.domain === this.domain;\n }\n\n hydrateRequestPayload<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n P extends IActionPayload_Request_JsonObject<ACT_DOM, ID>,\n >(serialized: P): TDistributeActionPayload_Request<ACT_DOM, ID> {\n if (serialized.type !== EActionPayloadType.request) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_state_mismatch, {\n expected: EActionPayloadType.request,\n received: serialized.type,\n });\n }\n\n if (serialized.domain !== this.domain) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_domain_mismatch, {\n expected: this.domain,\n received: serialized.domain,\n });\n }\n\n const id = serialized.id;\n if (!this.actionSchema[id]) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_id_not_found, {\n domain: this.domain,\n actionId: serialized.id,\n });\n }\n\n const contextAction = this.hydrateContext(id, serialized.context);\n\n return new ActionPayload_Request(\n { context: contextAction },\n contextAction.deserializeInput(serialized.input),\n {\n time: serialized.time,\n },\n ) as TDistributeActionPayload_Request<ACT_DOM, ID>;\n }\n\n hydrateResultPayload<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n R extends IActionPayload_Result_JsonObject<ACT_DOM, ID>,\n >(serialized: R): TDistributeActionPayload_Result<ACT_DOM, ID> {\n if (serialized.type !== EActionPayloadType.result) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_state_mismatch, {\n expected: EActionPayloadType.result,\n received: serialized.type,\n });\n }\n\n if (serialized.domain !== this.domain) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_domain_mismatch, {\n expected: this.domain,\n received: serialized.domain,\n });\n }\n\n const id = serialized.id;\n\n if (!this.actionSchema[id]) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_id_not_found, {\n domain: this.domain,\n actionId: serialized.id,\n });\n }\n\n const contextAction = this.hydrateContext(id, serialized.context);\n\n const result = serialized.result.ok\n ? {\n ok: true as const,\n output: contextAction.schema.deserializeOutput(serialized.result.output),\n }\n : serialized.result;\n\n return new ActionPayload_Result({ context: contextAction }, result, {\n time: serialized.time,\n }) as TDistributeActionPayload_Result<ACT_DOM, ID>;\n }\n\n hydrateAnyAction<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n AJ extends TAction_Any_JsonObject<ACT_DOM, ID>,\n >(actionJson: AJ): TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID> {\n assertIsActionJson(actionJson);\n\n if (actionJson.form === EActionForm.data) {\n if (actionJson.type === EActionPayloadType.request) {\n return this.hydrateRequestPayload(\n actionJson,\n ) as unknown as TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;\n }\n\n if (actionJson.type === EActionPayloadType.result) {\n return this.hydrateResultPayload(\n actionJson,\n ) as unknown as TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;\n }\n }\n\n return this.actionForId(actionJson.id) as TNarrowActionJsonTypeToActionInstanceType<\n ACT_DOM,\n AJ,\n ID\n >;\n }\n\n async runAction<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n ACT extends ActionPayload_Request<ACT_DOM, ID>,\n >(\n request: ACT,\n options?: IExecuteActionOptions<ACT_DOM, ID>,\n ): Promise<RunningAction<ACT_DOM, ID>> {\n const allListeners: TRunningActionUpdateListener<any, any>[] = [\n ...(options?.listeners ?? []),\n ...this._listeners,\n ];\n\n return this._rootDomain._runAction(request, {\n ...options,\n listeners: allListeners,\n });\n }\n\n private createActionMap(): {\n [K in keyof ACT_DOM[\"actionSchema\"] & string]: ActionCore<ACT_DOM, K>;\n } {\n const map = {} as {\n [K in keyof ACT_DOM[\"actionSchema\"] & string]: ActionCore<ACT_DOM, K>;\n };\n\n for (const id in this.actionSchema) {\n map[id] = new ActionCore(this, id);\n }\n\n return map;\n }\n}\n","import type { IActionRootDomain } from \"../ActionDomain.types\";\nimport { ActionRootDomain } from \"../ActionRootDomain\";\n\nexport const createActionRootDomain = <ID extends string>(definition: {\n domain: ID;\n}): ActionRootDomain<IActionRootDomain<ID>> => {\n return new ActionRootDomain<IActionRootDomain<ID>>(definition);\n};\n","import type { IDuplexCarrier } from \"../../Carrier.types\";\r\n\r\ntype TFrame = string | ArrayBuffer | Uint8Array;\r\n\r\n/** The peer (server) end of an in-memory pair — what you feed into an `AcceptorHandler`. */\r\nexport interface IInMemoryServerEndpoint {\r\n /** Write a frame back to the client end. */\r\n send(frame: TFrame): void;\r\n /** Register the inbound handler (frames the client sent). */\r\n onMessage(handler: (frame: TFrame) => void): void;\r\n /** Close the pair from this end. */\r\n close(): void;\r\n /** Notified when the pair closes (from either end). */\r\n onClose(handler: () => void): void;\r\n}\r\n\r\nexport interface IInMemoryChannelPair {\r\n /** The client end — pass as a {@link IDuplexCarrier} to a `LinkTransport`. */\r\n clientChannel: IDuplexCarrier;\r\n /** The server end — wire into an `AcceptorHandler` (`send` + `receive`). */\r\n serverEndpoint: IInMemoryServerEndpoint;\r\n}\r\n\r\n/**\r\n * Two cross-wired in-process byte channels — a loopback carrier with no socket. The client end is a\r\n * {@link IDuplexCarrier} you hand to a {@link LinkTransport}; the server end plugs into an\r\n * `AcceptorHandler` (`send: (_, f) => serverEndpoint.send(f)`, and `serverEndpoint.onMessage(f =>\r\n * handler.receive(conn, f))`). Frames are delivered on a microtask, so each side observes the other\r\n * asynchronously — exactly like a real transport — which makes this ideal for tests and for running\r\n * two runtimes in one process (or proving a non-WS carrier end to end).\r\n */\r\nexport function createInMemoryChannelPair(): IInMemoryChannelPair {\r\n let clientMessage: ((frame: TFrame) => void) | undefined;\r\n let clientClose: (() => void) | undefined;\r\n let serverMessage: ((frame: TFrame) => void) | undefined;\r\n let serverClose: (() => void) | undefined;\r\n let open = true;\r\n\r\n const closeBoth = (): void => {\r\n if (!open) return;\r\n open = false;\r\n queueMicrotask(() => {\r\n clientClose?.();\r\n serverClose?.();\r\n });\r\n };\r\n\r\n const clientChannel: IDuplexCarrier = {\r\n ready: Promise.resolve(),\r\n isOpen: () => open,\r\n send: (frame) => {\r\n if (!open) return;\r\n queueMicrotask(() => serverMessage?.(frame));\r\n },\r\n attach: ({ onMessage, onClose }) => {\r\n clientMessage = onMessage;\r\n clientClose = onClose;\r\n },\r\n close: closeBoth,\r\n label: \"in-memory\",\r\n };\r\n\r\n const serverEndpoint: IInMemoryServerEndpoint = {\r\n send: (frame) => {\r\n if (!open) return;\r\n queueMicrotask(() => clientMessage?.(frame));\r\n },\r\n onMessage: (handler) => {\r\n serverMessage = handler;\r\n },\r\n onClose: (handler) => {\r\n serverClose = handler;\r\n },\r\n close: closeBoth,\r\n };\r\n\r\n return { clientChannel, serverEndpoint };\r\n}\r\n","import {\r\n createInMemoryChannelPair,\r\n type IInMemoryServerEndpoint,\r\n} from \"./createInMemoryChannel\";\r\nimport type { IDuplexCarrierSource } from \"../../Carrier.types\";\r\n\r\nexport interface IInMemoryCarrier {\r\n /** The connector end — pass as the `carrier` to one of `connectChannel`'s transports. */\r\n carrier: IDuplexCarrierSource;\r\n /** The acceptor end — wire into an `AcceptorHandler` (`send` + `receive`). */\r\n serverEndpoint: IInMemoryServerEndpoint;\r\n}\r\n\r\n/**\r\n * A loopback duplex carrier with no socket — two cross-wired in-process ends. The connector end is an\r\n * {@link IDuplexCarrierSource} for `connectChannel`; the acceptor end plugs into an `AcceptorHandler`.\r\n * Ideal for tests and for running two runtimes in one process, or proving a non-WS carrier end to end.\r\n */\r\nexport function inMemoryCarrier(): IInMemoryCarrier {\r\n const { clientChannel, serverEndpoint } = createInMemoryChannelPair();\r\n return {\r\n carrier: {\r\n carrierLabel: \"memory\",\r\n open: () => clientChannel,\r\n getCacheKey: () => [\"memory\"],\r\n },\r\n serverEndpoint,\r\n };\r\n}\r\n","import type { IDuplexCarrier } from \"../../Carrier.types\";\r\n\r\n/**\r\n * The slice of the `RTCDataChannel` surface this adapter uses — declared structurally so it accepts the\r\n * browser `RTCDataChannel`, React-Native (`react-native-webrtc`), or any node-webrtc shim without a hard\r\n * dependency on a specific DOM/RN type. A real `RTCDataChannel` satisfies it as-is.\r\n */\r\nexport interface IRtcDataChannelLike {\r\n readyState: string; // \"connecting\" | \"open\" | \"closing\" | \"closed\"\r\n binaryType: string;\r\n label?: string;\r\n send(data: string | ArrayBuffer | ArrayBufferView): void;\r\n close(): void;\r\n addEventListener(type: string, listener: (event: any) => void, options?: unknown): void;\r\n}\r\n\r\n/**\r\n * Adapt a WebRTC `RTCDataChannel` to the carrier-agnostic {@link IDuplexCarrier}, so two browsers\r\n * (or two mobile apps) linked peer-to-peer — no server in the middle — run the *same* secure session as\r\n * a WebSocket. Hand it to `createSecureLinkTransport({ openChannel: () => rtcDataChannelByteChannel(dc) })`.\r\n *\r\n * The data channel must already be created (its negotiation/signaling is the app's concern); this only\r\n * drives bytes over it. Binary frames are requested as `ArrayBuffer` so the binary session codec unpacks\r\n * them synchronously; a `Blob` (if the channel hands one back) is normalized to a buffer.\r\n */\r\nexport function rtcDataChannelByteChannel(dc: IRtcDataChannelLike): IDuplexCarrier {\r\n dc.binaryType = \"arraybuffer\";\r\n\r\n let intentional = false;\r\n let onMessage: ((frame: string | ArrayBuffer | Uint8Array) => void) | undefined;\r\n let onClose: (() => void) | undefined;\r\n const preAttach: (string | ArrayBuffer | Uint8Array)[] = [];\r\n\r\n const deliver = (frame: string | ArrayBuffer | Uint8Array): void => {\r\n if (onMessage != null) onMessage(frame);\r\n else preAttach.push(frame);\r\n };\r\n\r\n dc.addEventListener(\"message\", async (event: { data: unknown }) => {\r\n const frame = await normalizeFrame(event.data);\r\n if (frame !== undefined) deliver(frame);\r\n });\r\n dc.addEventListener(\"close\", () => {\r\n if (!intentional) console.error(\"RTCDataChannel closed\");\r\n onClose?.();\r\n });\r\n dc.addEventListener(\"error\", (event: unknown) => {\r\n console.error(\"RTCDataChannel error:\", event);\r\n onClose?.();\r\n });\r\n\r\n const ready = new Promise<void>((resolve, reject) => {\r\n if (dc.readyState === \"open\") {\r\n resolve();\r\n return;\r\n }\r\n dc.addEventListener(\"open\", () => resolve(), { once: true });\r\n dc.addEventListener(\"error\", (event: unknown) => reject(event), { once: true });\r\n dc.addEventListener(\"close\", () => reject(new Error(\"RTCDataChannel closed before open\")), {\r\n once: true,\r\n });\r\n });\r\n\r\n return {\r\n ready,\r\n isOpen: () => dc.readyState === \"open\",\r\n send: (frame) => {\r\n // A pooled `Uint8Array` may be backed by a `SharedArrayBuffer` that `send` rejects — copy into a\r\n // fresh view (mirrors the WebSocket `sendFrame` guard).\r\n if (typeof frame === \"string\" || frame instanceof ArrayBuffer) dc.send(frame);\r\n else dc.send(new Uint8Array(frame));\r\n },\r\n attach: (handlers) => {\r\n onMessage = handlers.onMessage;\r\n onClose = handlers.onClose;\r\n for (const frame of preAttach) handlers.onMessage(frame);\r\n preAttach.length = 0;\r\n },\r\n close: () => {\r\n intentional = true;\r\n try {\r\n dc.close();\r\n } catch {\r\n // already closing/closed — the close listener still runs cleanup\r\n }\r\n },\r\n get label() {\r\n return dc.label != null && dc.label !== \"\" ? dc.label : undefined;\r\n },\r\n };\r\n}\r\n\r\nasync function normalizeFrame(\r\n data: unknown,\r\n): Promise<string | ArrayBuffer | Uint8Array | undefined> {\r\n if (typeof data === \"string\" || data instanceof ArrayBuffer || data instanceof Uint8Array) {\r\n return data;\r\n }\r\n if (typeof Blob !== \"undefined\" && data instanceof Blob) {\r\n return await data.arrayBuffer();\r\n }\r\n return undefined;\r\n}\r\n","import type { ITransportRouteActionParams, ITransportRouteInfo } from \"../../../Transport.types\";\r\nimport {\r\n type IRtcDataChannelLike,\r\n rtcDataChannelByteChannel,\r\n} from \"./rtcDataChannelByteChannel\";\r\nimport type { IDuplexCarrierSource } from \"../../Carrier.types\";\r\n\r\nexport interface IRtcCarrierOptions {\r\n getTransportCacheKey?: (input: ITransportRouteActionParams) => string[];\r\n getRouteInfo?: (input: ITransportRouteActionParams) => ITransportRouteInfo;\r\n}\r\n\r\n/**\r\n * A WebRTC {@link IDuplexCarrierSource} over an already-negotiated `RTCDataChannel` (signaling is the\r\n * app's concern). Pass it as a `carrier` to `connectChannel` so two browsers/apps linked peer-to-peer run\r\n * the identical secure session as a WebSocket.\r\n */\r\nexport function rtcCarrier(\r\n dataChannel: IRtcDataChannelLike,\r\n options: IRtcCarrierOptions = {},\r\n): IDuplexCarrierSource {\r\n return {\r\n carrierLabel: \"webrtc\",\r\n open: () => rtcDataChannelByteChannel(dataChannel),\r\n getCacheKey: options.getTransportCacheKey ?? (() => [\"webrtc\"]),\r\n getRouteInfo: options.getRouteInfo,\r\n };\r\n}\r\n","import { err } from \"@nice-code/error\";\r\nimport { err_nice_transport } from \"../../../err_nice_transport\";\r\n\r\nexport enum EErrId_NiceTransport_WebSocket {\r\n ws_disconnected = \"ws_disconnected\",\r\n ws_create_failed = \"ws_create_failed\",\r\n ws_error = \"ws_error\",\r\n}\r\n\r\nexport const err_nice_transport_ws = err_nice_transport.createChildDomain({\r\n domain: \"ws_transport\",\r\n schema: {\r\n [EErrId_NiceTransport_WebSocket.ws_disconnected]: err<Record<string, never>>({\r\n message: () => `WebSocket transport disconnected.`,\r\n }),\r\n [EErrId_NiceTransport_WebSocket.ws_create_failed]: err<{\r\n originalError?: Error;\r\n }>({\r\n message: ({ originalError }) =>\r\n `Failed to create WebSocket transport.${originalError ? ` Original error: ${originalError.message}` : \"\"}`,\r\n }),\r\n [EErrId_NiceTransport_WebSocket.ws_error]: err<{\r\n originalError?: Error;\r\n }>({\r\n message: ({ originalError }) =>\r\n `WebSocket transport error.${originalError ? ` Original error: ${originalError.message}` : \"\"}`,\r\n }),\r\n },\r\n});\r\n","/**\r\n * Send a text or binary frame over a socket. A binary formatter may hand back a `Uint8Array` whose\r\n * backing buffer is typed as `ArrayBufferLike` (msgpackr pools buffers / may be `SharedArrayBuffer`),\r\n * which `WebSocket.send`'s `BufferSource` parameter rejects — copy it into a fresh `ArrayBuffer`-backed\r\n * view so the type (and the bytes) are safe to send.\r\n */\r\nexport function sendFrame(ws: WebSocket, data: string | Uint8Array | ArrayBuffer): void {\r\n if (typeof data === \"string\" || data instanceof ArrayBuffer) {\r\n ws.send(data);\r\n return;\r\n }\r\n ws.send(new Uint8Array(data));\r\n}\r\n\r\n/** Compact a WebSocket URL to `host/pathname` for devtools display, falling back to the raw url. */\r\nexport function shortWs(url: string): string {\r\n try {\r\n const u = new URL(url);\r\n return `${u.host}${u.pathname}`;\r\n } catch {\r\n return url;\r\n }\r\n}\r\n","import type { IDuplexCarrier } from \"../../Carrier.types\";\r\nimport { sendFrame } from \"./ws_util\";\r\n\r\n/**\r\n * Adapt a `WebSocket` to the carrier-agnostic {@link IDuplexCarrier}, so the WebSocket becomes\r\n * \"just another carrier\" under the shared secure session. It owns every WebSocket-specific concern —\r\n * awaiting `open`, normalizing `Blob` frames to bytes, suppressing the log on a deliberate `close`, and\r\n * buffering any frame that arrives before the session attaches its handler — leaving the session itself\r\n * carrier-neutral.\r\n */\r\nexport function webSocketByteChannel(ws: WebSocket): IDuplexCarrier {\r\n let intentional = false;\r\n let onMessage: ((frame: string | ArrayBuffer | Uint8Array) => void) | undefined;\r\n let onClose: (() => void) | undefined;\r\n // Frames that land before the session calls `attach` (none expected in practice, but never lose one).\r\n const preAttach: (string | ArrayBuffer | Uint8Array)[] = [];\r\n\r\n const deliver = (frame: string | ArrayBuffer | Uint8Array): void => {\r\n if (onMessage != null) onMessage(frame);\r\n else preAttach.push(frame);\r\n };\r\n\r\n ws.addEventListener(\"message\", async (event) => {\r\n const frame = await normalizeFrame((event as MessageEvent).data);\r\n if (frame !== undefined) deliver(frame);\r\n });\r\n ws.addEventListener(\"close\", (event) => {\r\n if (!intentional) console.error(\"WebSocket closed:\", event);\r\n onClose?.();\r\n });\r\n ws.addEventListener(\"error\", (event) => {\r\n console.error(\"WebSocket error:\", event);\r\n onClose?.();\r\n });\r\n\r\n const ready = new Promise<void>((resolve, reject) => {\r\n if (ws.readyState === WebSocket.OPEN) {\r\n resolve();\r\n return;\r\n }\r\n ws.addEventListener(\"open\", () => resolve(), { once: true });\r\n ws.addEventListener(\"error\", (event) => reject(event), { once: true });\r\n ws.addEventListener(\r\n \"close\",\r\n (event) =>\r\n reject(new Error(`WebSocket closed before open: code=${(event as CloseEvent).code}`)),\r\n { once: true },\r\n );\r\n });\r\n\r\n return {\r\n ready,\r\n isOpen: () => ws.readyState === WebSocket.OPEN,\r\n send: (frame) => sendFrame(ws, frame),\r\n attach: (handlers) => {\r\n onMessage = handlers.onMessage;\r\n onClose = handlers.onClose;\r\n for (const frame of preAttach) handlers.onMessage(frame);\r\n preAttach.length = 0;\r\n },\r\n close: () => {\r\n intentional = true;\r\n try {\r\n ws.close();\r\n } catch {\r\n // already closing/closed — the close listener still runs cleanup\r\n }\r\n },\r\n get label() {\r\n return ws.url != null && ws.url !== \"\" ? ws.url : undefined;\r\n },\r\n };\r\n}\r\n\r\n/** Accept text + binary frames (ArrayBuffer / Uint8Array / Blob); Blobs are converted to a buffer. */\r\nasync function normalizeFrame(\r\n data: unknown,\r\n): Promise<string | ArrayBuffer | Uint8Array | undefined> {\r\n if (typeof data === \"string\" || data instanceof ArrayBuffer || data instanceof Uint8Array) {\r\n return data;\r\n }\r\n if (typeof Blob !== \"undefined\" && data instanceof Blob) {\r\n return await data.arrayBuffer();\r\n }\r\n return undefined;\r\n}\r\n","import type { ITransportRouteActionParams, ITransportRouteInfo } from \"../../../Transport.types\";\nimport { webSocketByteChannel } from \"./webSocketByteChannel\";\nimport { shortWs } from \"./ws_util\";\nimport type { IDuplexCarrierSource } from \"../../Carrier.types\";\n\n/** The WebSocket an action's socket is opened against (derived per action from the route params). */\nexport interface IWsCarrierRequest {\n url: string;\n}\n\nexport interface IWsCarrierOptions {\n /** Override the reuse key (defaults to `[url]`, so one socket is shared per endpoint). */\n getTransportCacheKey?: (input: ITransportRouteActionParams) => string[];\n /** Override the devtools route info for a specific action. */\n getRouteInfo?: (input: ITransportRouteActionParams) => ITransportRouteInfo;\n}\n\n/**\n * A WebSocket {@link IDuplexCarrierSource}: opens an `arraybuffer` socket (cached per endpoint) and adapts\n * it to a carrier. Pass it as a `carrier` to `connectChannel` — the WebSocket is now \"just another\n * carrier\" under the shared secure session, with no WS-specific transport class.\n *\n * `createRequest` derives the socket URL per action (keep it simple with `() => ({ url })`), so dynamic\n * endpoints (e.g. a per-run query param) need no `createWebSocket` escape hatch.\n */\nexport function wsCarrier(\n createRequest: (input: ITransportRouteActionParams) => IWsCarrierRequest,\n options: IWsCarrierOptions = {},\n): IDuplexCarrierSource {\n return {\n carrierLabel: \"ws\",\n open: (input) => webSocketByteChannel(defaultWebSocket(createRequest(input).url)),\n getCacheKey: options.getTransportCacheKey ?? ((input) => [createRequest(input).url]),\n getRouteInfo:\n options.getRouteInfo ??\n ((input) => {\n const { url } = createRequest(input);\n return { carrierLabel: \"ws\", url, summary: `ws ${shortWs(url)}` };\n }),\n };\n}\n\nfunction defaultWebSocket(url: string): WebSocket {\n const ws = new WebSocket(url);\n // Binary responses as ArrayBuffer (not Blob) so the session unpacks them synchronously.\n ws.binaryType = \"arraybuffer\";\n return ws;\n}\n","import type { ITransportRouteActionParams, ITransportRouteInfo } from \"../../../Transport.types\";\r\nimport type { IExchangeCarrier, IExchangeCarrierSource, TFrame } from \"../../Carrier.types\";\r\n\r\n/** The HTTP request an action is sent over (the body is supplied by the secure exchange session). */\r\nexport interface IHttpCarrierRequest {\r\n url: string;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/** The slice of `fetch` the carrier uses — a structural type so callers (and tests) needn't match the\r\n * full platform `fetch` (Bun's adds `preconnect`, etc.). The global `fetch` satisfies it. */\r\nexport type TCarrierFetch = (input: string, init?: RequestInit) => Promise<Response>;\r\n\r\nexport interface IHttpCarrierOptions {\r\n /** Override the reuse key (defaults to `[url]`, so one session is shared per endpoint). */\r\n getTransportCacheKey?: (input: ITransportRouteActionParams) => string[];\r\n /** Override the devtools route info for a specific action. */\r\n getRouteInfo?: (input: ITransportRouteActionParams) => ITransportRouteInfo;\r\n /** Override `fetch` (e.g. to route to an in-memory handler in tests). Defaults to global `fetch`. */\r\n fetch?: TCarrierFetch;\r\n}\r\n\r\nfunction shortPath(url: string): string {\r\n try {\r\n return new URL(url).pathname || url;\r\n } catch {\r\n return url;\r\n }\r\n}\r\n\r\n/**\r\n * An HTTP {@link IExchangeCarrierSource}: each `exchange` POSTs one frame body to the action endpoint and\r\n * resolves with the response body as the single correlated reply. Pass it as a `carrier` to\r\n * `connectChannel` — a secure HTTP transport then runs the *same* secure session as a duplex carrier\r\n * (handshake → token → encrypted frames), the request/reply correlation provided for free by the HTTP\r\n * transaction.\r\n *\r\n * `createRequest` derives the URL/headers per action (keep it simple with `() => ({ url })`). The body is\r\n * the session's responsibility, so it is never built here.\r\n */\r\nexport function httpCarrier(\r\n createRequest: (input: ITransportRouteActionParams) => IHttpCarrierRequest,\r\n options: IHttpCarrierOptions = {},\r\n): IExchangeCarrierSource {\r\n const doFetch = options.fetch ?? fetch;\r\n\r\n return {\r\n shape: \"exchange\",\r\n carrierLabel: \"http\",\r\n open: (input): IExchangeCarrier => {\r\n const request = createRequest(input);\r\n return {\r\n label: request.url,\r\n exchange: async (frame: TFrame, opts): Promise<TFrame> => {\r\n const res = await doFetch(request.url, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\", ...request.headers },\r\n body: typeof frame === \"string\" ? frame : new Uint8Array(frame),\r\n signal: opts?.signal,\r\n });\r\n return await res.text();\r\n },\r\n };\r\n },\r\n getCacheKey: options.getTransportCacheKey ?? ((input) => [createRequest(input).url]),\r\n getRouteInfo:\r\n options.getRouteInfo ??\r\n ((input) => {\r\n const { url } = createRequest(input);\r\n return { carrierLabel: \"http\", method: \"POST\", url, summary: `POST ${shortPath(url)}` };\r\n }),\r\n };\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["ActionBase","ActionBase","ActionPayload","ActionPayload_Request","RuntimeCoordinate","isAction_Base_JsonObject","isAction_Base_JsonObject","isActionPayload_Any_JsonObject","err_nice_action","ActionPayload","err_nice_action","RuntimeCoordinate","runtimeCoordinateToStringIds","err_nice_action","RunningAction","err_nice_action","ActionLocalHandler","RuntimeCoordinate","ActionPayload_Request","ActionPayload_Result","normalizeFrame","err_nice_transport"],"sources":["../src/ActionDefinition/Action/Context/ActionContext.ts","../src/ActionDefinition/Action/Core/ActionCore.ts","../src/utils/isAction_Context_JsonObject.ts","../src/utils/isAction_Core_JsonObject.ts","../src/utils/isAction_Any_JsonObject.ts","../src/utils/assertIsActionJson.ts","../src/utils/isAction_Any_Instance.ts","../src/ActionDefinition/Domain/ActionDomainBase.ts","../src/ActionRuntime/ActionRuntimeManager.ts","../src/ActionDefinition/Domain/ActionRootDomain.ts","../src/ActionDefinition/Domain/ActionDomain.ts","../src/ActionDefinition/Domain/helpers/createRootActionDomain.ts","../src/ActionRuntime/Transport/Carrier/duplex/inMemory/createInMemoryChannel.ts","../src/ActionRuntime/Transport/Carrier/duplex/inMemory/inMemoryCarrier.ts","../src/ActionRuntime/Transport/Carrier/duplex/rtc/rtcDataChannelByteChannel.ts","../src/ActionRuntime/Transport/Carrier/duplex/rtc/rtcCarrier.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/err_nice_transport_ws.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/ws_util.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/webSocketByteChannel.ts","../src/ActionRuntime/Transport/Carrier/duplex/ws/wsCarrier.ts","../src/ActionRuntime/Transport/Carrier/exchange/http/httpCarrier.ts"],"sourcesContent":["import { RuntimeCoordinate } from \"../../../ActionRuntime/RuntimeCoordinate\";\nimport type { ActionDomain } from \"../../Domain/ActionDomain\";\nimport type {\n IActionDomain,\n TInferInputFromSchema,\n TInferOutputFromSchema,\n} from \"../../Domain/ActionDomain.types\";\nimport { ActionBase } from \"../ActionBase\";\nimport { EActionForm } from \"../ActionBase.types\";\nimport type {\n IActionContext,\n IActionContext_Data,\n IActionContext_Data_JsonObject,\n IActionContext_JsonObject,\n IActionRouteItem,\n} from \"./ActionContext.types\";\n\nexport class ActionContext<\n DOM extends IActionDomain,\n ID extends keyof DOM[\"actionSchema\"] & string = keyof DOM[\"actionSchema\"] & string,\n >\n extends ActionBase<EActionForm.context, DOM, ID>\n implements IActionContext<DOM, ID>\n{\n readonly form = EActionForm.context;\n readonly _routing: IActionRouteItem[];\n readonly timeCreated: number;\n readonly cuid: string;\n originClient: RuntimeCoordinate;\n\n constructor(\n readonly _domain: ActionDomain<DOM>,\n id: ID,\n hydrationData: IActionContext_Data,\n ) {\n super(EActionForm.context, _domain, id);\n this.timeCreated = hydrationData.timeCreated;\n this.cuid = hydrationData.cuid;\n this._routing = hydrationData.routing;\n this.originClient = hydrationData.originClient;\n }\n\n _setOriginClient(client: RuntimeCoordinate): void {\n this.originClient = client;\n }\n\n toJsonString(): string {\n return JSON.stringify(this.toJsonObject());\n }\n\n toContextDataJsonObject(): IActionContext_Data_JsonObject {\n return {\n timeCreated: this.timeCreated,\n cuid: this.cuid,\n routing: this.routing.map((item) => ({\n runtime: item.runtime.toJsonObject(),\n handler: item.handler,\n time: item.time,\n })),\n originClient: this.originClient.toJsonObject(),\n };\n }\n\n toJsonObject(): IActionContext_JsonObject<DOM, ID> {\n return {\n ...super.toJsonObject(),\n ...this.toContextDataJsonObject(),\n };\n }\n\n get routing(): IActionRouteItem[] {\n return this._routing;\n }\n\n addRouteItem(item: IActionRouteItem): void {\n this._routing.push(item);\n }\n\n deserializeInput(\n serialized: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.deserializeInput(serialized);\n }\n\n serializeInput(\n raw: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"] {\n return this.schema.serializeInput(raw);\n }\n\n validateInput(input: unknown): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.validateInput(input, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n\n validateOutput(output: unknown): TInferOutputFromSchema<DOM[\"actionSchema\"][ID]>[\"Output\"] {\n return this.schema.validateOutput(output, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n}\n","import { nanoid } from \"nanoid\";\nimport { RuntimeCoordinate } from \"../../../ActionRuntime/RuntimeCoordinate\";\nimport type { ActionDomain } from \"../../Domain/ActionDomain\";\nimport type {\n IActionDomain,\n TInferInputFromSchema,\n TInferOutputFromSchema,\n} from \"../../Domain/ActionDomain.types\";\nimport type { TNarrowActionType } from \"../Action.combined.types\";\nimport { ActionBase } from \"../ActionBase\";\nimport { EActionForm, type IActionBase, type IActionBase_JsonObject } from \"../ActionBase.types\";\nimport { ActionContext } from \"../Context/ActionContext\";\nimport { ActionPayload } from \"../Payload/ActionPayload\";\nimport { ActionPayload_Request } from \"../Payload/ActionPayload_Request\";\nimport type { IActionCore } from \"./ActionCore.types\";\n\nexport class ActionCore<\n DOM extends IActionDomain,\n ID extends keyof DOM[\"actionSchema\"] & string = keyof DOM[\"actionSchema\"] & string,\n >\n extends ActionBase<EActionForm.core, DOM, ID>\n implements IActionCore<DOM, ID>\n{\n readonly form = EActionForm.core;\n\n constructor(\n readonly _domain: ActionDomain<DOM>,\n id: ID,\n ) {\n super(EActionForm.core, _domain, id);\n }\n\n is<ACT extends IActionBase<any, any, any>>(\n action: ACT | unknown | null | undefined,\n ): action is TNarrowActionType<DOM, ACT, ID> {\n return (\n action instanceof ActionPayload && action.domain === this.domain && action.id === this.id\n );\n }\n\n toJsonObject(): IActionBase_JsonObject<EActionForm.core, DOM, ID> {\n return {\n id: this.id,\n form: this.form,\n domain: this.domain,\n allDomains: this.allDomains,\n };\n }\n\n request(\n ...args: [TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"]] extends [never]\n ? [input?: never]\n : [input: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"]]\n ): ActionPayload_Request<DOM, ID> {\n const input: unknown = args[0];\n const validatedInput = this.schema.validateInput(input, {\n actionId: this.id,\n domain: this.domain,\n });\n\n const context = new ActionContext(this._domain, this.id, {\n cuid: nanoid(),\n timeCreated: Date.now(),\n routing: [],\n originClient: RuntimeCoordinate.unknown,\n });\n\n return new ActionPayload_Request({ context }, validatedInput, {\n time: Date.now(),\n });\n }\n\n // async run(\n // input: TInferInputFromSchema<DOM[\"actions\"][ID]>[\"Input\"],\n // options?: IExecuteActionOptions<DOM, ID>,\n // ): Promise<RunningAction<DOM, ID>> {\n // return this.request(input).run(options);\n // }\n\n // async runToOutput(\n // input: TInferInputFromSchema<DOM[\"actions\"][ID]>[\"Input\"],\n // options?: IExecuteActionOptions<DOM, ID>,\n // ): Promise<TInferOutputFromSchema<DOM[\"actions\"][ID]>[\"Output\"]> {\n // return this.request(input).runToOutput(options);\n // }\n\n // async runToOutputSafe(\n // input: TInferInputFromSchema<DOM[\"actions\"][ID]>[\"Input\"],\n // options?: IExecuteActionOptions<DOM, ID>,\n // ): Promise<\n // TActionResult<\n // TInferOutputFromSchema<DOM[\"actions\"][ID]>[\"Output\"],\n // TInferActionError<DOM[\"actions\"][ID]>\n // >\n // > {\n // return this.request(input).runToOutputSafe(options);\n // }\n\n deserializeInput(\n serialized: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.deserializeInput(serialized);\n }\n\n serializeInput(\n raw: TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"],\n ): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"SerdeInput\"] {\n return this.schema.serializeInput(raw);\n }\n\n validateInput(input: unknown): TInferInputFromSchema<DOM[\"actionSchema\"][ID]>[\"Input\"] {\n return this.schema.validateInput(input, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n\n validateOutput(output: unknown): TInferOutputFromSchema<DOM[\"actionSchema\"][ID]>[\"Output\"] {\n return this.schema.validateOutput(output, {\n domain: this.domain,\n actionId: this.id,\n });\n }\n}\n","import { EActionForm } from \"../ActionDefinition/Action/ActionBase.types\";\nimport type { IActionContext_JsonObject } from \"../ActionDefinition/Action/Context/ActionContext.types\";\nimport { isAction_Base_JsonObject } from \"./isAction_Base_JsonObject\";\n\nexport const isAction_Context_JsonObject = (obj: unknown): obj is IActionContext_JsonObject => {\n return isAction_Base_JsonObject(obj) && obj.form === EActionForm.context;\n};\n","import { EActionForm } from \"../ActionDefinition/Action/ActionBase.types\";\nimport type { IActionCore_JsonObject } from \"../ActionDefinition/Action/Core/ActionCore.types\";\nimport { isAction_Base_JsonObject } from \"./isAction_Base_JsonObject\";\n\nexport const isAction_Core_JsonObject = (obj: unknown): obj is IActionCore_JsonObject => {\n return isAction_Base_JsonObject(obj) && obj.form === EActionForm.core;\n};\n","import type { TAction_Any_JsonObject } from \"../ActionDefinition/Action/Action.combined.types\";\nimport { isAction_Context_JsonObject } from \"./isAction_Context_JsonObject\";\nimport { isAction_Core_JsonObject } from \"./isAction_Core_JsonObject\";\nimport { isActionPayload_Any_JsonObject } from \"./isActionPayload_Any_JsonObject\";\n\nexport function isAction_Any_JsonObject(obj: unknown): obj is TAction_Any_JsonObject {\n return (\n isActionPayload_Any_JsonObject(obj) ||\n isAction_Context_JsonObject(obj) ||\n isAction_Core_JsonObject(obj)\n );\n}\n","import type { IActionBase_JsonObject } from \"../ActionDefinition/Action/ActionBase.types\";\nimport { EErrId_NiceAction, err_nice_action } from \"../errors/err_nice_action\";\nimport { isAction_Any_JsonObject } from \"./isAction_Any_JsonObject\";\n\nexport function assertIsActionJson(obj: unknown): asserts obj is IActionBase_JsonObject {\n if (!isAction_Any_JsonObject(obj)) {\n throw err_nice_action.fromId(EErrId_NiceAction.wire_not_action_data);\n }\n}\n","import type { TAction_Any_Instance } from \"../ActionDefinition/Action/Action.combined.types\";\nimport type { IActionBase } from \"../ActionDefinition/Action/ActionBase.types\";\nimport { ActionContext } from \"../ActionDefinition/Action/Context/ActionContext\";\nimport { ActionCore } from \"../ActionDefinition/Action/Core/ActionCore\";\nimport { ActionPayload } from \"../ActionDefinition/Action/Payload/ActionPayload\";\n\nexport function isAction_Any_Instance<ACT extends IActionBase<any, any>>(\n value: unknown | ACT,\n): value is TAction_Any_Instance<any, any> {\n return (\n value instanceof ActionCore || value instanceof ActionPayload || value instanceof ActionContext\n );\n}\n","import type {\n TDistributeRunningActionUpdateListener,\n TRunningActionUpdateListener,\n} from \"../Action/RunningAction.types\";\nimport type { IActionDomain } from \"./ActionDomain.types\";\n\nexport abstract class ActionDomainBase<ACT_DOM extends IActionDomain = IActionDomain>\n implements IActionDomain<ACT_DOM[\"allDomains\"], ACT_DOM[\"actionSchema\"]>\n{\n readonly domain: ACT_DOM[\"domain\"];\n readonly allDomains: ACT_DOM[\"allDomains\"];\n readonly actionSchema: ACT_DOM[\"actionSchema\"];\n\n protected _listeners: TRunningActionUpdateListener<any, any>[] = [];\n\n constructor(definition: ACT_DOM) {\n this.domain = definition.domain;\n this.allDomains = definition.allDomains;\n this.actionSchema = definition.actionSchema;\n }\n\n /**\n * Add an observer that is called after every action dispatched through this domain.\n * Returns an unsubscribe function — call it to remove the listener.\n */\n addActionListener(\n listener: TDistributeRunningActionUpdateListener<\n ACT_DOM,\n keyof ACT_DOM[\"actionSchema\"] & string\n >,\n ): () => void {\n this._listeners.push(listener as TRunningActionUpdateListener<any, any>);\n return () => {\n this._listeners = this._listeners.filter((l) => l !== listener);\n };\n }\n\n /**\n * @internal\n * Observers registered directly on this domain via {@link addActionListener}.\n * Used to wire observers (e.g. devtools) onto RunningActions that aren't created\n * through the local-dispatch path — notably inbound actions pushed from a backend\n * or another client over a bidirectional transport.\n */\n _getActionObservers(): TRunningActionUpdateListener<any, any>[] {\n return this._listeners;\n }\n}\n","import type { TActionPayload_Any_Instance } from \"../ActionDefinition/Action/Payload/ActionPayload.types\";\nimport { EErrId_NiceAction, err_nice_action } from \"../errors/err_nice_action\";\nimport type { ActionRuntime } from \"./ActionRuntime\";\nimport type { IActionHandlerAndRuntime, IActionRuntimeManagerContext } from \"./ActionRuntime.types\";\nimport type { IHandleActionOptions } from \"./Handler/ActionHandler.types\";\nimport {\n type IRuntimeCoordinate,\n RuntimeCoordinate,\n type TRuntimeCoordinateStringId,\n} from \"./RuntimeCoordinate\";\nimport { runtimeCoordinateToStringIds } from \"./utils/runtimeCoordinateToStringIds\";\n\nexport class ActionRuntimeManager {\n private _runtimes: Map<TRuntimeCoordinateStringId, ActionRuntime> = new Map();\n private _preferredRuntimeClientId: TRuntimeCoordinateStringId | null = null;\n private _context: IActionRuntimeManagerContext;\n\n constructor(context?: IActionRuntimeManagerContext) {\n this._context = context ?? {};\n }\n\n registerRuntime(runtime: ActionRuntime): void {\n const runtimeId = runtime.coordinate.stringId;\n if (this._runtimes.has(runtimeId)) {\n throw err_nice_action.fromId(EErrId_NiceAction.client_runtime_already_registered, {\n context: this._context,\n client: runtime.coordinate,\n });\n }\n\n for (const id of runtime.coordinate.toStringIds()) {\n if (this._runtimes.has(id)) {\n continue;\n }\n\n this._runtimes.set(id, runtime);\n }\n }\n\n getRuntimeAndHandlerForAction(\n action: TActionPayload_Any_Instance<any, any>,\n options?: IHandleActionOptions,\n throwOnIssue?: boolean,\n ): IActionHandlerAndRuntime | undefined {\n const localRuntime = options?.targetLocalRuntime;\n\n if (localRuntime != null) {\n const runtime = throwOnIssue\n ? this.getBestRuntimeOrThrow(options?.targetLocalRuntime?.coordinate)\n : this.getBestRuntime(options?.targetLocalRuntime?.coordinate);\n\n if (runtime == null) {\n return;\n }\n\n const handler = runtime._getHandlerForAction(action, options);\n\n if (handler != null) {\n return { handler, runtime };\n }\n\n if (throwOnIssue) {\n throw err_nice_action.fromId(EErrId_NiceAction.no_action_execution_handler, {\n domain: action.domain,\n actionId: action.id,\n specifiedClient: localRuntime.coordinate,\n });\n }\n }\n\n // If no client specified, try to find a runtime that can handle the action\n for (const runtime of this._runtimes.values()) {\n const handler = runtime._getHandlerForAction(action);\n if (handler) {\n return { handler, runtime };\n }\n }\n\n if (throwOnIssue) {\n throw err_nice_action.fromId(EErrId_NiceAction.no_action_execution_handler, {\n domain: action.domain,\n actionId: action.id,\n specifiedClient: options?.targetLocalRuntime?.coordinate,\n });\n }\n }\n\n getRuntimeAndHandlerForActionOrThrow(\n action: TActionPayload_Any_Instance<any, any>,\n options?: IHandleActionOptions,\n ): IActionHandlerAndRuntime {\n return this.getRuntimeAndHandlerForAction(action, options, true)!;\n }\n\n setPreferredRuntime(runtime: ActionRuntime): void {\n const runtimeId = runtime.coordinate.stringId;\n this._preferredRuntimeClientId = runtimeId;\n }\n\n getPreferredRuntime(): ActionRuntime | undefined {\n if (this._preferredRuntimeClientId) {\n const runtime = this._runtimes.get(this._preferredRuntimeClientId);\n if (runtime) {\n return runtime;\n }\n }\n return this._runtimes.values().next().value;\n }\n\n getBestRuntimeForSpecifier(clientSpecifier: IRuntimeCoordinate): ActionRuntime | undefined {\n const actionClient = new RuntimeCoordinate(clientSpecifier);\n const ids = actionClient.toStringIds();\n\n for (const id of ids) {\n const runtime = this._runtimes.get(id);\n if (runtime) {\n return runtime;\n }\n }\n }\n\n getBestRuntime(clientSpecifier?: IRuntimeCoordinate): ActionRuntime | undefined {\n return clientSpecifier != null\n ? this.getBestRuntimeForSpecifier(clientSpecifier)\n : this.getPreferredRuntime();\n }\n\n hasRuntime(runtime: ActionRuntime): boolean {\n return this._runtimes.has(runtime.coordinate.stringId);\n }\n\n getBestRuntimeOrThrow(specifier?: IRuntimeCoordinate): ActionRuntime {\n const runtime = this.getBestRuntime(specifier);\n\n if (!runtime) {\n if (specifier == null) {\n throw err_nice_action.fromId(EErrId_NiceAction.no_client_runtimes_registered, {\n context: this._context,\n });\n }\n\n throw err_nice_action.fromId(EErrId_NiceAction.client_runtime_not_registered, {\n context: this._context,\n clientStringId: runtimeCoordinateToStringIds(specifier)[0],\n });\n }\n\n return runtime;\n }\n}\n","import type { ActionRuntime } from \"../../ActionRuntime/ActionRuntime\";\nimport type { IActionHandlerAndRuntime } from \"../../ActionRuntime/ActionRuntime.types\";\nimport { ActionRuntimeManager } from \"../../ActionRuntime/ActionRuntimeManager\";\nimport type { IExecuteActionOptions } from \"../../ActionRuntime/Handler/ActionHandler.types\";\nimport type { IRuntimeCoordinate } from \"../../ActionRuntime/RuntimeCoordinate\";\nimport { EErrId_NiceAction, err_nice_action } from \"../../errors/err_nice_action\";\nimport type { ActionPayload_Request } from \"../Action/Payload/ActionPayload_Request\";\nimport { RunningAction } from \"../Action/RunningAction\";\nimport { ActionDomain } from \"./ActionDomain\";\nimport type {\n IActionDomain,\n IActionDomainChildOptions,\n IActionRootDomain,\n TActionDomainChildDef,\n} from \"./ActionDomain.types\";\nimport { ActionDomainBase } from \"./ActionDomainBase\";\n\nexport class ActionRootDomain<\n ROOT_DOM extends IActionRootDomain = IActionRootDomain,\n> extends ActionDomainBase<ROOT_DOM> {\n private _actionRuntimeManager: ActionRuntimeManager;\n\n constructor(\n readonly domainDefinition: {\n domain: ROOT_DOM[\"domain\"];\n },\n ) {\n const domainId = domainDefinition.domain;\n\n super({\n domain: domainId,\n allDomains: [domainId],\n actionSchema: {},\n } as ROOT_DOM);\n\n this._actionRuntimeManager = new ActionRuntimeManager({ domain: domainId });\n }\n\n createChildDomain<SUB_DOM extends IActionDomainChildOptions>(\n subDomainDef: SUB_DOM & {\n [K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;\n },\n ): ActionDomain<TActionDomainChildDef<ROOT_DOM, SUB_DOM>> {\n if (this.allDomains.includes(subDomainDef.domain)) {\n throw err_nice_action.fromId(EErrId_NiceAction.domain_already_exists_in_hierarchy, {\n domain: subDomainDef.domain,\n allParentDomains: this.allDomains,\n parentDomain: this.domain,\n });\n }\n\n return new ActionDomain<TActionDomainChildDef<ROOT_DOM, SUB_DOM>>(\n {\n allDomains: [...this.allDomains, subDomainDef.domain],\n domain: subDomainDef.domain,\n actionSchema: subDomainDef.actions,\n },\n { rootDomain: this },\n );\n }\n\n _registerRuntime(runtime: ActionRuntime): void {\n this._actionRuntimeManager.registerRuntime(runtime);\n }\n\n _hasRuntime(runtime: ActionRuntime): boolean {\n return this._actionRuntimeManager.hasRuntime(runtime);\n }\n\n getRuntime(clientSpecifier: IRuntimeCoordinate): ActionRuntime | undefined {\n return this._actionRuntimeManager.getBestRuntimeForSpecifier(clientSpecifier);\n }\n\n async _runAction<\n DOM extends IActionDomain,\n ID extends keyof DOM[\"actionSchema\"] & string = keyof DOM[\"actionSchema\"] & string,\n ACT extends ActionPayload_Request<DOM, ID> = ActionPayload_Request<DOM, ID>,\n >(actionPayload: ACT, options?: IExecuteActionOptions<DOM, ID>): Promise<RunningAction<DOM, ID>> {\n const allListeners = [...this._listeners, ...(options?.listeners ?? [])];\n\n let handlerAndRuntime: IActionHandlerAndRuntime;\n try {\n handlerAndRuntime = this._actionRuntimeManager.getRuntimeAndHandlerForActionOrThrow(\n actionPayload,\n options,\n );\n } catch (err) {\n const runningAction = new RunningAction<DOM, ID>({\n context: actionPayload.context,\n request: actionPayload,\n callSite: actionPayload._callSite,\n });\n runningAction.addUpdateListeners(allListeners);\n runningAction._failWithError(err);\n throw err;\n }\n\n const { handler, runtime } = handlerAndRuntime;\n\n actionPayload.context._setOriginClient(runtime.coordinate);\n\n const runningAction = await handler.handleActionRequest(actionPayload, {\n targetLocalRuntime: runtime,\n });\n\n runningAction.addUpdateListeners(allListeners);\n\n return runningAction;\n }\n}\n","import type { ActionRuntime } from \"../../ActionRuntime/ActionRuntime\";\nimport type { IExecuteActionOptions } from \"../../ActionRuntime/Handler/ActionHandler.types\";\nimport { ActionLocalHandler } from \"../../ActionRuntime/Handler/Local/ActionLocalHandler\";\nimport { RuntimeCoordinate } from \"../../ActionRuntime/RuntimeCoordinate\";\nimport { EErrId_NiceAction, err_nice_action } from \"../../errors/err_nice_action\";\nimport { assertIsActionJson } from \"../../utils/assertIsActionJson\";\nimport { isAction_Any_Instance } from \"../../utils/isAction_Any_Instance\";\nimport type {\n TAction_Any_JsonObject,\n TDistributeActionPayload_Request,\n TDistributeActionPayload_Result,\n TDistributedDomainActions,\n TNarrowActionJsonTypeToActionInstanceType,\n} from \"../Action/Action.combined.types\";\nimport { EActionForm, type IActionBase } from \"../Action/ActionBase.types\";\nimport { ActionContext } from \"../Action/Context/ActionContext\";\nimport type { IActionContext_Data_JsonObject } from \"../Action/Context/ActionContext.types\";\nimport { ActionCore } from \"../Action/Core/ActionCore\";\nimport {\n EActionPayloadType,\n type IActionPayload_Request_JsonObject,\n type IActionPayload_Result_JsonObject,\n} from \"../Action/Payload/ActionPayload.types\";\nimport { ActionPayload_Request } from \"../Action/Payload/ActionPayload_Request\";\nimport { ActionPayload_Result } from \"../Action/Payload/ActionPayload_Result\";\nimport type { RunningAction } from \"../Action/RunningAction\";\nimport type { TRunningActionUpdateListener } from \"../Action/RunningAction.types\";\nimport type {\n IActionDomain,\n IActionDomainChildOptions,\n TActionDomainChildDef,\n TWrappableDomainActionHandler,\n} from \"./ActionDomain.types\";\nimport { ActionDomainBase } from \"./ActionDomainBase\";\nimport { type ActionRootDomain } from \"./ActionRootDomain\";\n\ntype TActionMap<ACT_DOM extends IActionDomain> = {\n [K in keyof ACT_DOM[\"actionSchema\"] & string]: ActionCore<ACT_DOM, K>;\n};\n\nexport class ActionDomain<\n ACT_DOM extends IActionDomain = IActionDomain,\n> extends ActionDomainBase<ACT_DOM> {\n private _rootDomain: ActionRootDomain<any>;\n private readonly _actionMap: TActionMap<ACT_DOM>;\n\n constructor(\n definition: ACT_DOM,\n {\n rootDomain,\n }: {\n rootDomain: ActionRootDomain<any>;\n },\n ) {\n super(definition);\n this._rootDomain = rootDomain;\n this._actionMap = this.createActionMap();\n }\n\n get rootDomain() {\n return this._rootDomain;\n }\n\n /**\n * @internal\n * All action observers that should see actions on this domain: the root domain's\n * observers plus this subdomain's own. Mirrors the listener set the local-dispatch\n * path assembles in `runAction`/`_runAction`, so inbound actions (pushed from a\n * backend or another client) can be wired up identically and surface in devtools.\n */\n _collectActionObservers(): TRunningActionUpdateListener<any, any>[] {\n return [...this._rootDomain._getActionObservers(), ...this._getActionObservers()];\n }\n\n _registerRuntime(runtime: ActionRuntime): void {\n this._rootDomain._registerRuntime(runtime);\n }\n\n createChildDomain<SUB_DOM extends IActionDomainChildOptions>(\n subDomainDef: SUB_DOM & {\n [K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;\n },\n ): ActionDomain<TActionDomainChildDef<ACT_DOM, SUB_DOM>> {\n if (this.allDomains.includes(subDomainDef.domain)) {\n throw err_nice_action.fromId(EErrId_NiceAction.domain_already_exists_in_hierarchy, {\n domain: subDomainDef.domain,\n allParentDomains: this.allDomains,\n parentDomain: this.domain,\n });\n }\n\n return new ActionDomain<TActionDomainChildDef<ACT_DOM, SUB_DOM>>(\n {\n allDomains: [...this.allDomains, subDomainDef.domain],\n domain: subDomainDef.domain,\n actionSchema: subDomainDef.actions,\n },\n { rootDomain: this._rootDomain },\n );\n }\n\n get action(): TActionMap<ACT_DOM> {\n return this._actionMap;\n }\n\n actionsMap(): TActionMap<ACT_DOM> {\n return this._actionMap;\n }\n\n actionForId<ID extends keyof ACT_DOM[\"actionSchema\"] & string>(id: ID): ActionCore<ACT_DOM, ID> {\n const actionSchema = this.actionSchema[id];\n if (!actionSchema) {\n throw err_nice_action.fromId(EErrId_NiceAction.action_id_not_in_domain, {\n domain: this.domain,\n actionId: id as string,\n });\n }\n\n return new ActionCore<ACT_DOM, ID>(this, id);\n }\n\n wrapAsPartialLocalHandler(\n wrappedActionExecutor: Partial<TWrappableDomainActionHandler<ACT_DOM>>,\n ): ActionLocalHandler {\n const _handler = new ActionLocalHandler();\n const executor = wrappedActionExecutor as unknown as Record<string, (input: any) => any>;\n\n for (const actionKey in wrappedActionExecutor) {\n if (!this.actionSchema[actionKey]) {\n continue;\n }\n\n _handler.forAction(this.actionForId(actionKey), (request) =>\n executor[request.id](request.input),\n );\n }\n\n return _handler;\n }\n\n wrapAsLocalHandler(\n wrappedActionExecutor: TWrappableDomainActionHandler<ACT_DOM>,\n ): ActionLocalHandler {\n const _handler = new ActionLocalHandler();\n const executor = wrappedActionExecutor as unknown as Record<string, (input: any) => any>;\n return _handler.forDomain(this, (request) => executor[request.id](request.input));\n }\n\n hydrateContext<ID extends keyof ACT_DOM[\"actionSchema\"] & string>(\n id: ID,\n contextData: IActionContext_Data_JsonObject,\n ): ActionContext<ACT_DOM, ID> {\n return new ActionContext(this, id, {\n timeCreated: contextData.timeCreated,\n cuid: contextData.cuid,\n routing: contextData.routing.map((item) => {\n return {\n runtime: new RuntimeCoordinate(item.runtime),\n handler: item.handler,\n time: item.time,\n };\n }),\n originClient: contextData.originClient\n ? new RuntimeCoordinate(contextData.originClient)\n : RuntimeCoordinate.unknown,\n });\n }\n\n isDomainAction<ACT extends IActionBase<any, ACT_DOM, any>>(\n action: ACT | unknown | null | undefined,\n ): action is TDistributedDomainActions<ACT_DOM, ACT> {\n return isAction_Any_Instance(action) && action.domain === this.domain;\n }\n\n hydrateRequestPayload<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n P extends IActionPayload_Request_JsonObject<ACT_DOM, ID>,\n >(serialized: P): TDistributeActionPayload_Request<ACT_DOM, ID> {\n if (serialized.type !== EActionPayloadType.request) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_state_mismatch, {\n expected: EActionPayloadType.request,\n received: serialized.type,\n });\n }\n\n if (serialized.domain !== this.domain) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_domain_mismatch, {\n expected: this.domain,\n received: serialized.domain,\n });\n }\n\n const id = serialized.id;\n if (!this.actionSchema[id]) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_id_not_found, {\n domain: this.domain,\n actionId: serialized.id,\n });\n }\n\n const contextAction = this.hydrateContext(id, serialized.context);\n\n return new ActionPayload_Request(\n { context: contextAction },\n contextAction.deserializeInput(serialized.input),\n {\n time: serialized.time,\n },\n ) as TDistributeActionPayload_Request<ACT_DOM, ID>;\n }\n\n hydrateResultPayload<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n R extends IActionPayload_Result_JsonObject<ACT_DOM, ID>,\n >(serialized: R): TDistributeActionPayload_Result<ACT_DOM, ID> {\n if (serialized.type !== EActionPayloadType.result) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_state_mismatch, {\n expected: EActionPayloadType.result,\n received: serialized.type,\n });\n }\n\n if (serialized.domain !== this.domain) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_domain_mismatch, {\n expected: this.domain,\n received: serialized.domain,\n });\n }\n\n const id = serialized.id;\n\n if (!this.actionSchema[id]) {\n throw err_nice_action.fromId(EErrId_NiceAction.hydration_action_id_not_found, {\n domain: this.domain,\n actionId: serialized.id,\n });\n }\n\n const contextAction = this.hydrateContext(id, serialized.context);\n\n const result = serialized.result.ok\n ? {\n ok: true as const,\n output: contextAction.schema.deserializeOutput(serialized.result.output),\n }\n : serialized.result;\n\n return new ActionPayload_Result({ context: contextAction }, result, {\n time: serialized.time,\n }) as TDistributeActionPayload_Result<ACT_DOM, ID>;\n }\n\n hydrateAnyAction<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n AJ extends TAction_Any_JsonObject<ACT_DOM, ID>,\n >(actionJson: AJ): TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID> {\n assertIsActionJson(actionJson);\n\n if (actionJson.form === EActionForm.data) {\n if (actionJson.type === EActionPayloadType.request) {\n return this.hydrateRequestPayload(\n actionJson,\n ) as unknown as TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;\n }\n\n if (actionJson.type === EActionPayloadType.result) {\n return this.hydrateResultPayload(\n actionJson,\n ) as unknown as TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;\n }\n }\n\n return this.actionForId(actionJson.id) as TNarrowActionJsonTypeToActionInstanceType<\n ACT_DOM,\n AJ,\n ID\n >;\n }\n\n async runAction<\n ID extends keyof ACT_DOM[\"actionSchema\"] & string,\n ACT extends ActionPayload_Request<ACT_DOM, ID>,\n >(\n request: ACT,\n options?: IExecuteActionOptions<ACT_DOM, ID>,\n ): Promise<RunningAction<ACT_DOM, ID>> {\n const allListeners: TRunningActionUpdateListener<any, any>[] = [\n ...(options?.listeners ?? []),\n ...this._listeners,\n ];\n\n return this._rootDomain._runAction(request, {\n ...options,\n listeners: allListeners,\n });\n }\n\n private createActionMap(): {\n [K in keyof ACT_DOM[\"actionSchema\"] & string]: ActionCore<ACT_DOM, K>;\n } {\n const map = {} as {\n [K in keyof ACT_DOM[\"actionSchema\"] & string]: ActionCore<ACT_DOM, K>;\n };\n\n for (const id in this.actionSchema) {\n map[id] = new ActionCore(this, id);\n }\n\n return map;\n }\n}\n","import type { IActionRootDomain } from \"../ActionDomain.types\";\nimport { ActionRootDomain } from \"../ActionRootDomain\";\n\nexport const createActionRootDomain = <ID extends string>(definition: {\n domain: ID;\n}): ActionRootDomain<IActionRootDomain<ID>> => {\n return new ActionRootDomain<IActionRootDomain<ID>>(definition);\n};\n","import type { IDuplexCarrier } from \"../../Carrier.types\";\r\n\r\ntype TFrame = string | ArrayBuffer | Uint8Array;\r\n\r\n/** The peer (server) end of an in-memory pair — what you feed into an `AcceptorHandler`. */\r\nexport interface IInMemoryServerEndpoint {\r\n /** Write a frame back to the client end. */\r\n send(frame: TFrame): void;\r\n /** Register the inbound handler (frames the client sent). */\r\n onMessage(handler: (frame: TFrame) => void): void;\r\n /** Close the pair from this end. */\r\n close(): void;\r\n /** Notified when the pair closes (from either end). */\r\n onClose(handler: () => void): void;\r\n}\r\n\r\nexport interface IInMemoryChannelPair {\r\n /** The client end — pass as a {@link IDuplexCarrier} to a `LinkTransport`. */\r\n clientChannel: IDuplexCarrier;\r\n /** The server end — wire into an `AcceptorHandler` (`send` + `receive`). */\r\n serverEndpoint: IInMemoryServerEndpoint;\r\n}\r\n\r\n/**\r\n * Two cross-wired in-process byte channels — a loopback carrier with no socket. The client end is a\r\n * {@link IDuplexCarrier} you hand to a {@link LinkTransport}; the server end plugs into an\r\n * `AcceptorHandler` (`send: (_, f) => serverEndpoint.send(f)`, and `serverEndpoint.onMessage(f =>\r\n * handler.receive(conn, f))`). Frames are delivered on a microtask, so each side observes the other\r\n * asynchronously — exactly like a real transport — which makes this ideal for tests and for running\r\n * two runtimes in one process (or proving a non-WS carrier end to end).\r\n */\r\nexport function createInMemoryChannelPair(): IInMemoryChannelPair {\r\n let clientMessage: ((frame: TFrame) => void) | undefined;\r\n let clientClose: (() => void) | undefined;\r\n let serverMessage: ((frame: TFrame) => void) | undefined;\r\n let serverClose: (() => void) | undefined;\r\n let open = true;\r\n\r\n const closeBoth = (): void => {\r\n if (!open) return;\r\n open = false;\r\n queueMicrotask(() => {\r\n clientClose?.();\r\n serverClose?.();\r\n });\r\n };\r\n\r\n const clientChannel: IDuplexCarrier = {\r\n ready: Promise.resolve(),\r\n isOpen: () => open,\r\n send: (frame) => {\r\n if (!open) return;\r\n queueMicrotask(() => serverMessage?.(frame));\r\n },\r\n attach: ({ onMessage, onClose }) => {\r\n clientMessage = onMessage;\r\n clientClose = onClose;\r\n },\r\n close: closeBoth,\r\n label: \"in-memory\",\r\n };\r\n\r\n const serverEndpoint: IInMemoryServerEndpoint = {\r\n send: (frame) => {\r\n if (!open) return;\r\n queueMicrotask(() => clientMessage?.(frame));\r\n },\r\n onMessage: (handler) => {\r\n serverMessage = handler;\r\n },\r\n onClose: (handler) => {\r\n serverClose = handler;\r\n },\r\n close: closeBoth,\r\n };\r\n\r\n return { clientChannel, serverEndpoint };\r\n}\r\n","import {\r\n createInMemoryChannelPair,\r\n type IInMemoryServerEndpoint,\r\n} from \"./createInMemoryChannel\";\r\nimport type { IDuplexCarrierSource } from \"../../Carrier.types\";\r\n\r\nexport interface IInMemoryCarrier {\r\n /** The connector end — pass as the `carrier` to one of `connectChannel`'s transports. */\r\n carrier: IDuplexCarrierSource;\r\n /** The acceptor end — wire into an `AcceptorHandler` (`send` + `receive`). */\r\n serverEndpoint: IInMemoryServerEndpoint;\r\n}\r\n\r\n/**\r\n * A loopback duplex carrier with no socket — two cross-wired in-process ends. The connector end is an\r\n * {@link IDuplexCarrierSource} for `connectChannel`; the acceptor end plugs into an `AcceptorHandler`.\r\n * Ideal for tests and for running two runtimes in one process, or proving a non-WS carrier end to end.\r\n */\r\nexport function inMemoryCarrier(): IInMemoryCarrier {\r\n const { clientChannel, serverEndpoint } = createInMemoryChannelPair();\r\n return {\r\n carrier: {\r\n carrierLabel: \"memory\",\r\n open: () => clientChannel,\r\n getCacheKey: () => [\"memory\"],\r\n },\r\n serverEndpoint,\r\n };\r\n}\r\n","import type { IDuplexCarrier } from \"../../Carrier.types\";\r\n\r\n/**\r\n * The slice of the `RTCDataChannel` surface this adapter uses — declared structurally so it accepts the\r\n * browser `RTCDataChannel`, React-Native (`react-native-webrtc`), or any node-webrtc shim without a hard\r\n * dependency on a specific DOM/RN type. A real `RTCDataChannel` satisfies it as-is.\r\n */\r\nexport interface IRtcDataChannelLike {\r\n readyState: string; // \"connecting\" | \"open\" | \"closing\" | \"closed\"\r\n binaryType: string;\r\n label?: string;\r\n send(data: string | ArrayBuffer | ArrayBufferView): void;\r\n close(): void;\r\n addEventListener(type: string, listener: (event: any) => void, options?: unknown): void;\r\n}\r\n\r\n/**\r\n * Adapt a WebRTC `RTCDataChannel` to the carrier-agnostic {@link IDuplexCarrier}, so two browsers\r\n * (or two mobile apps) linked peer-to-peer — no server in the middle — run the *same* secure session as\r\n * a WebSocket. Hand it to `createSecureLinkTransport({ openChannel: () => rtcDataChannelByteChannel(dc) })`.\r\n *\r\n * The data channel must already be created (its negotiation/signaling is the app's concern); this only\r\n * drives bytes over it. Binary frames are requested as `ArrayBuffer` so the binary session codec unpacks\r\n * them synchronously; a `Blob` (if the channel hands one back) is normalized to a buffer.\r\n */\r\nexport function rtcDataChannelByteChannel(dc: IRtcDataChannelLike): IDuplexCarrier {\r\n dc.binaryType = \"arraybuffer\";\r\n\r\n let intentional = false;\r\n let onMessage: ((frame: string | ArrayBuffer | Uint8Array) => void) | undefined;\r\n let onClose: (() => void) | undefined;\r\n const preAttach: (string | ArrayBuffer | Uint8Array)[] = [];\r\n\r\n const deliver = (frame: string | ArrayBuffer | Uint8Array): void => {\r\n if (onMessage != null) onMessage(frame);\r\n else preAttach.push(frame);\r\n };\r\n\r\n dc.addEventListener(\"message\", async (event: { data: unknown }) => {\r\n const frame = await normalizeFrame(event.data);\r\n if (frame !== undefined) deliver(frame);\r\n });\r\n dc.addEventListener(\"close\", () => {\r\n if (!intentional) console.error(\"RTCDataChannel closed\");\r\n onClose?.();\r\n });\r\n dc.addEventListener(\"error\", (event: unknown) => {\r\n console.error(\"RTCDataChannel error:\", event);\r\n onClose?.();\r\n });\r\n\r\n const ready = new Promise<void>((resolve, reject) => {\r\n if (dc.readyState === \"open\") {\r\n resolve();\r\n return;\r\n }\r\n dc.addEventListener(\"open\", () => resolve(), { once: true });\r\n dc.addEventListener(\"error\", (event: unknown) => reject(event), { once: true });\r\n dc.addEventListener(\"close\", () => reject(new Error(\"RTCDataChannel closed before open\")), {\r\n once: true,\r\n });\r\n });\r\n\r\n return {\r\n ready,\r\n isOpen: () => dc.readyState === \"open\",\r\n send: (frame) => {\r\n // A pooled `Uint8Array` may be backed by a `SharedArrayBuffer` that `send` rejects — copy into a\r\n // fresh view (mirrors the WebSocket `sendFrame` guard).\r\n if (typeof frame === \"string\" || frame instanceof ArrayBuffer) dc.send(frame);\r\n else dc.send(new Uint8Array(frame));\r\n },\r\n attach: (handlers) => {\r\n onMessage = handlers.onMessage;\r\n onClose = handlers.onClose;\r\n for (const frame of preAttach) handlers.onMessage(frame);\r\n preAttach.length = 0;\r\n },\r\n close: () => {\r\n intentional = true;\r\n try {\r\n dc.close();\r\n } catch {\r\n // already closing/closed — the close listener still runs cleanup\r\n }\r\n },\r\n get label() {\r\n return dc.label != null && dc.label !== \"\" ? dc.label : undefined;\r\n },\r\n };\r\n}\r\n\r\nasync function normalizeFrame(\r\n data: unknown,\r\n): Promise<string | ArrayBuffer | Uint8Array | undefined> {\r\n if (typeof data === \"string\" || data instanceof ArrayBuffer || data instanceof Uint8Array) {\r\n return data;\r\n }\r\n if (typeof Blob !== \"undefined\" && data instanceof Blob) {\r\n return await data.arrayBuffer();\r\n }\r\n return undefined;\r\n}\r\n","import type { ITransportRouteActionParams, ITransportRouteInfo } from \"../../../Transport.types\";\r\nimport {\r\n type IRtcDataChannelLike,\r\n rtcDataChannelByteChannel,\r\n} from \"./rtcDataChannelByteChannel\";\r\nimport type { IDuplexCarrierSource } from \"../../Carrier.types\";\r\n\r\nexport interface IRtcCarrierOptions {\r\n getTransportCacheKey?: (input: ITransportRouteActionParams) => string[];\r\n getRouteInfo?: (input: ITransportRouteActionParams) => ITransportRouteInfo;\r\n}\r\n\r\n/**\r\n * A WebRTC {@link IDuplexCarrierSource} over an already-negotiated `RTCDataChannel` (signaling is the\r\n * app's concern). Pass it as a `carrier` to `connectChannel` so two browsers/apps linked peer-to-peer run\r\n * the identical secure session as a WebSocket.\r\n */\r\nexport function rtcCarrier(\r\n dataChannel: IRtcDataChannelLike,\r\n options: IRtcCarrierOptions = {},\r\n): IDuplexCarrierSource {\r\n return {\r\n carrierLabel: \"webrtc\",\r\n open: () => rtcDataChannelByteChannel(dataChannel),\r\n getCacheKey: options.getTransportCacheKey ?? (() => [\"webrtc\"]),\r\n getRouteInfo: options.getRouteInfo,\r\n };\r\n}\r\n","import { err } from \"@nice-code/error\";\r\nimport { err_nice_transport } from \"../../../err_nice_transport\";\r\n\r\nexport enum EErrId_NiceTransport_WebSocket {\r\n ws_disconnected = \"ws_disconnected\",\r\n ws_create_failed = \"ws_create_failed\",\r\n ws_error = \"ws_error\",\r\n}\r\n\r\nexport const err_nice_transport_ws = err_nice_transport.createChildDomain({\r\n domain: \"ws_transport\",\r\n schema: {\r\n [EErrId_NiceTransport_WebSocket.ws_disconnected]: err<Record<string, never>>({\r\n message: () => `WebSocket transport disconnected.`,\r\n }),\r\n [EErrId_NiceTransport_WebSocket.ws_create_failed]: err<{\r\n originalError?: Error;\r\n }>({\r\n message: ({ originalError }) =>\r\n `Failed to create WebSocket transport.${originalError ? ` Original error: ${originalError.message}` : \"\"}`,\r\n }),\r\n [EErrId_NiceTransport_WebSocket.ws_error]: err<{\r\n originalError?: Error;\r\n }>({\r\n message: ({ originalError }) =>\r\n `WebSocket transport error.${originalError ? ` Original error: ${originalError.message}` : \"\"}`,\r\n }),\r\n },\r\n});\r\n","/**\r\n * Send a text or binary frame over a socket. A binary formatter may hand back a `Uint8Array` whose\r\n * backing buffer is typed as `ArrayBufferLike` (msgpackr pools buffers / may be `SharedArrayBuffer`),\r\n * which `WebSocket.send`'s `BufferSource` parameter rejects — copy it into a fresh `ArrayBuffer`-backed\r\n * view so the type (and the bytes) are safe to send.\r\n */\r\nexport function sendFrame(ws: WebSocket, data: string | Uint8Array | ArrayBuffer): void {\r\n if (typeof data === \"string\" || data instanceof ArrayBuffer) {\r\n ws.send(data);\r\n return;\r\n }\r\n ws.send(new Uint8Array(data));\r\n}\r\n\r\n/** Compact a WebSocket URL to `host/pathname` for devtools display, falling back to the raw url. */\r\nexport function shortWs(url: string): string {\r\n try {\r\n const u = new URL(url);\r\n return `${u.host}${u.pathname}`;\r\n } catch {\r\n return url;\r\n }\r\n}\r\n","import type { IDuplexCarrier } from \"../../Carrier.types\";\r\nimport { sendFrame } from \"./ws_util\";\r\n\r\n/**\r\n * Adapt a `WebSocket` to the carrier-agnostic {@link IDuplexCarrier}, so the WebSocket becomes\r\n * \"just another carrier\" under the shared secure session. It owns every WebSocket-specific concern —\r\n * awaiting `open`, normalizing `Blob` frames to bytes, suppressing the log on a deliberate `close`, and\r\n * buffering any frame that arrives before the session attaches its handler — leaving the session itself\r\n * carrier-neutral.\r\n */\r\nexport function webSocketByteChannel(ws: WebSocket): IDuplexCarrier {\r\n let intentional = false;\r\n let onMessage: ((frame: string | ArrayBuffer | Uint8Array) => void) | undefined;\r\n let onClose: (() => void) | undefined;\r\n // Frames that land before the session calls `attach` (none expected in practice, but never lose one).\r\n const preAttach: (string | ArrayBuffer | Uint8Array)[] = [];\r\n\r\n const deliver = (frame: string | ArrayBuffer | Uint8Array): void => {\r\n if (onMessage != null) onMessage(frame);\r\n else preAttach.push(frame);\r\n };\r\n\r\n ws.addEventListener(\"message\", async (event) => {\r\n const frame = await normalizeFrame((event as MessageEvent).data);\r\n if (frame !== undefined) deliver(frame);\r\n });\r\n ws.addEventListener(\"close\", (event) => {\r\n if (!intentional) console.error(\"WebSocket closed:\", event);\r\n onClose?.();\r\n });\r\n ws.addEventListener(\"error\", (event) => {\r\n console.error(\"WebSocket error:\", event);\r\n onClose?.();\r\n });\r\n\r\n const ready = new Promise<void>((resolve, reject) => {\r\n if (ws.readyState === WebSocket.OPEN) {\r\n resolve();\r\n return;\r\n }\r\n ws.addEventListener(\"open\", () => resolve(), { once: true });\r\n ws.addEventListener(\"error\", (event) => reject(event), { once: true });\r\n ws.addEventListener(\r\n \"close\",\r\n (event) =>\r\n reject(new Error(`WebSocket closed before open: code=${(event as CloseEvent).code}`)),\r\n { once: true },\r\n );\r\n });\r\n\r\n return {\r\n ready,\r\n isOpen: () => ws.readyState === WebSocket.OPEN,\r\n send: (frame) => sendFrame(ws, frame),\r\n attach: (handlers) => {\r\n onMessage = handlers.onMessage;\r\n onClose = handlers.onClose;\r\n for (const frame of preAttach) handlers.onMessage(frame);\r\n preAttach.length = 0;\r\n },\r\n close: () => {\r\n intentional = true;\r\n try {\r\n ws.close();\r\n } catch {\r\n // already closing/closed — the close listener still runs cleanup\r\n }\r\n },\r\n get label() {\r\n return ws.url != null && ws.url !== \"\" ? ws.url : undefined;\r\n },\r\n };\r\n}\r\n\r\n/** Accept text + binary frames (ArrayBuffer / Uint8Array / Blob); Blobs are converted to a buffer. */\r\nasync function normalizeFrame(\r\n data: unknown,\r\n): Promise<string | ArrayBuffer | Uint8Array | undefined> {\r\n if (typeof data === \"string\" || data instanceof ArrayBuffer || data instanceof Uint8Array) {\r\n return data;\r\n }\r\n if (typeof Blob !== \"undefined\" && data instanceof Blob) {\r\n return await data.arrayBuffer();\r\n }\r\n return undefined;\r\n}\r\n","import type { ITransportRouteActionParams, ITransportRouteInfo } from \"../../../Transport.types\";\r\nimport { webSocketByteChannel } from \"./webSocketByteChannel\";\r\nimport { shortWs } from \"./ws_util\";\r\nimport type { IDuplexCarrierSource } from \"../../Carrier.types\";\r\n\r\n/** The WebSocket an action's socket is opened against (derived per action from the route params). */\r\nexport interface IWsCarrierRequest {\r\n url: string;\r\n}\r\n\r\nexport interface IWsCarrierOptions {\r\n /** Override the reuse key (defaults to `[url]`, so one socket is shared per endpoint). */\r\n getTransportCacheKey?: (input: ITransportRouteActionParams) => string[];\r\n /** Override the devtools route info for a specific action. */\r\n getRouteInfo?: (input: ITransportRouteActionParams) => ITransportRouteInfo;\r\n}\r\n\r\n/**\r\n * A WebSocket {@link IDuplexCarrierSource}: opens an `arraybuffer` socket (cached per endpoint) and adapts\r\n * it to a carrier. Pass it as a `carrier` to `connectChannel` — the WebSocket is now \"just another\r\n * carrier\" under the shared secure session, with no WS-specific transport class.\r\n *\r\n * `createRequest` derives the socket URL per action (keep it simple with `() => ({ url })`), so dynamic\r\n * endpoints (e.g. a per-run query param) need no `createWebSocket` escape hatch.\r\n */\r\nexport function wsCarrier(\r\n createRequest: (input: ITransportRouteActionParams) => IWsCarrierRequest,\r\n options: IWsCarrierOptions = {},\r\n): IDuplexCarrierSource {\r\n return {\r\n carrierLabel: \"ws\",\r\n open: (input) => webSocketByteChannel(defaultWebSocket(createRequest(input).url)),\r\n getCacheKey: options.getTransportCacheKey ?? ((input) => [createRequest(input).url]),\r\n getRouteInfo:\r\n options.getRouteInfo ??\r\n ((input) => {\r\n const { url } = createRequest(input);\r\n return { carrierLabel: \"ws\", url, summary: `ws ${shortWs(url)}` };\r\n }),\r\n };\r\n}\r\n\r\nfunction defaultWebSocket(url: string): WebSocket {\r\n const ws = new WebSocket(url);\r\n // Binary responses as ArrayBuffer (not Blob) so the session unpacks them synchronously.\r\n ws.binaryType = \"arraybuffer\";\r\n return ws;\r\n}\r\n","import type { ITransportRouteActionParams, ITransportRouteInfo } from \"../../../Transport.types\";\r\nimport type { IExchangeCarrier, IExchangeCarrierSource, TFrame } from \"../../Carrier.types\";\r\n\r\n/** The HTTP request an action is sent over (the body is supplied by the secure exchange session). */\r\nexport interface IHttpCarrierRequest {\r\n url: string;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/** The slice of `fetch` the carrier uses — a structural type so callers (and tests) needn't match the\r\n * full platform `fetch` (Bun's adds `preconnect`, etc.). The global `fetch` satisfies it. */\r\nexport type TCarrierFetch = (input: string, init?: RequestInit) => Promise<Response>;\r\n\r\nexport interface IHttpCarrierOptions {\r\n /** Override the reuse key (defaults to `[url]`, so one session is shared per endpoint). */\r\n getTransportCacheKey?: (input: ITransportRouteActionParams) => string[];\r\n /** Override the devtools route info for a specific action. */\r\n getRouteInfo?: (input: ITransportRouteActionParams) => ITransportRouteInfo;\r\n /** Override `fetch` (e.g. to route to an in-memory handler in tests). Defaults to global `fetch`. */\r\n fetch?: TCarrierFetch;\r\n}\r\n\r\nfunction shortPath(url: string): string {\r\n try {\r\n return new URL(url).pathname || url;\r\n } catch {\r\n return url;\r\n }\r\n}\r\n\r\n/**\r\n * An HTTP {@link IExchangeCarrierSource}: each `exchange` POSTs one frame body to the action endpoint and\r\n * resolves with the response body as the single correlated reply. Pass it as a `carrier` to\r\n * `connectChannel` — a secure HTTP transport then runs the *same* secure session as a duplex carrier\r\n * (handshake → token → encrypted frames), the request/reply correlation provided for free by the HTTP\r\n * transaction.\r\n *\r\n * `createRequest` derives the URL/headers per action (keep it simple with `() => ({ url })`). The body is\r\n * the session's responsibility, so it is never built here.\r\n */\r\nexport function httpCarrier(\r\n createRequest: (input: ITransportRouteActionParams) => IHttpCarrierRequest,\r\n options: IHttpCarrierOptions = {},\r\n): IExchangeCarrierSource {\r\n const doFetch = options.fetch ?? fetch;\r\n\r\n return {\r\n shape: \"exchange\",\r\n carrierLabel: \"http\",\r\n open: (input): IExchangeCarrier => {\r\n const request = createRequest(input);\r\n return {\r\n label: request.url,\r\n exchange: async (frame: TFrame, opts): Promise<TFrame> => {\r\n const res = await doFetch(request.url, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\", ...request.headers },\r\n body: typeof frame === \"string\" ? frame : new Uint8Array(frame),\r\n signal: opts?.signal,\r\n });\r\n return await res.text();\r\n },\r\n };\r\n },\r\n getCacheKey: options.getTransportCacheKey ?? ((input) => [createRequest(input).url]),\r\n getRouteInfo:\r\n options.getRouteInfo ??\r\n ((input) => {\r\n const { url } = createRequest(input);\r\n return { carrierLabel: \"http\", method: \"POST\", url, summary: `POST ${shortPath(url)}` };\r\n }),\r\n };\r\n}\r\n"],"mappings":"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"}
package/build/index.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as httpAcceptorCarrier, $n as createInMemoryTofuVerifyKeyResolver, $t as TCarrier, A as TActionResultOutcome, Ar as IActionCore_JsonObject, B as decodeExchangeReply, Br as TPossibleDomainIdList, Bt as TChannelAcceptorCases, C as IActionProgress_Custom, Cr as IRuntimeCoordinate, Ct as serveChannel, D as TActionPayload_Any_Instance, Dr as TRuntimeCoordinateEnvId, Dt as TAcceptorCarrier, E as IActionRouteItemHandler, Er as RuntimeCoordinate, Et as IExchangeAcceptorCarrier, F as decodeActionFrame, Fr as TActionDomainSchema, G as IExchangeAcceptorSecurity, Gr as TActionSchemaOptions, Gt as defineChannel, H as encodeExchange, Hr as EActionResponseMode, Ht as acceptChannel, I as EErrId_NiceAction, Ir as TDomainActionId, It as IAcceptChannelOptions, J as IHttpCarrierOptions, K as EErrId_NiceTransport, Kn as IClientVerifyKeyResolveInput, Kr as TActionSerializationDefinition, L as err_nice_action, Lr as TInferInputFromSchema, Lt as IActionChannel, M as isActionPayload_Request_JsonObject, Mr as IActionDomainChildOptions, Mt as ConnectionStateStore, N as isActionPayload_Any_JsonObject, Nr as IActionRootDomain, O as TActionPayload_Any_JsonObject, Or as TRuntimeCoordinateStringId, Ot as isExchangeAcceptorCarrier, P as IActionFrameDecoder, Pr as TActionDomainChildDef, Q as IHttpAcceptorCarrierOptions, Qt as IExchangeCarrierSource, R as TExchangeReply, Rr as TInferOutputFromSchema, Rt as IConnectChannelOptions, S as IActionPayload_Result_JsonObject, Sr as ActionPayload_Progress, St as IServeConnectionStateOptions, T as IActionProgress_Percentage, Tr as IRuntimeFullCoordinates, Tt as IDuplexAcceptorCarrier, U as ExchangeAcceptor, Ur as TInferActionError, Ut as acceptChannelConnections, V as decodeExchangeRequest, Vr as ActionSchema, Vt as TChannelPushHandlers, W as IExchangeAcceptorConfig, Wn as ESecurityLevel, Wr as actionSchema, Wt as connectChannel, X as TCarrierFetch, Xt as IDuplexCarrierSource, Y as IHttpCarrierRequest, Yt as IDuplexCarrier, Z as httpCarrier, Zt as IExchangeCarrier, _ as IActionPayload_Data_Base, _r as IRunningActionUpdate_Success, _t as TServeHostOptions, ar as ActionLocalHandler, at as err_nice_transport_ws, b as IActionPayload_Request_JsonObject, br as TRunningActionUpdateListener, bt as IConnectionContext, cr as createActionRootDomain, ct as IRtcDataChannelLike, d as ActionCore, dr as ERunningActionFinishedType, dt as inMemoryCarrier, en as TFrame, et as IWsCarrierOptions, f as ActionPayload_Request, fr as ERunningActionState, ft as IInMemoryChannelPair, g as IActionPayload_Base_JsonObject, gr as IRunningActionUpdate_Started, gt as IChannelHostAdapter, h as IActionPayload_Base, hr as IRunningActionUpdate_Progress, ht as err_nice_external_client, ir as runtimeLinkId, it as EErrId_NiceTransport_WebSocket, j as isActionPayload_Result_JsonObject, jr as IActionDomain, k as TActionProgress, kr as IActionCore, l as ActionDomain, lr as ActionRootDomain, lt as rtcDataChannelByteChannel, m as EActionProgressType, mr as IRunningActionUpdate_Abort, mt as createInMemoryChannelPair, nt as IWsAcceptorCarrierOptions, or as createLocalHandler, ot as IRtcCarrierOptions, p as EActionPayloadType, pr as ERunningActionUpdateType, pt as IInMemoryServerEndpoint, q as err_nice_transport, qn as IClientVerifyKeyResolver, qr as TTransportedValue, rt as wsAcceptorCarrier, sr as MaybePromise, st as rtcCarrier, t as AcceptorHandler, tn as ConnectorHandler, tr as createStorageTofuVerifyKeyResolver, tt as wsCarrier, u as ActionRuntime, ur as RunningAction, ut as IInMemoryCarrier, v as IActionPayload_Progress, vr as TRunningActionUpdate, vt as serveHost, w as IActionProgress_None, wr as IRuntimeCoordinateSpecifics, wt as IAcceptorAttachmentStore, x as IActionPayload_Result, xr as ActionPayload_Result, xt as IServeChannelOptions, y as IActionPayload_Progress_JsonObject, yr as TRunningActionUpdateFinished, yt as IChannelServer, z as TExchangeRequest, zr as TPossibleDomainId, zt as IConnectTransport } from "./AcceptorHandler-CxPfZtIl.cjs";
1
+ import { $ as httpAcceptorCarrier, $n as createInMemoryTofuVerifyKeyResolver, $t as TCarrier, A as TActionResultOutcome, Ar as IActionCore_JsonObject, B as decodeExchangeReply, Br as TPossibleDomainIdList, Bt as TChannelAcceptorCases, C as IActionProgress_Custom, Cr as IRuntimeCoordinate, Ct as serveChannel, D as TActionPayload_Any_Instance, Dr as TRuntimeCoordinateEnvId, Dt as TAcceptorCarrier, E as IActionRouteItemHandler, Er as RuntimeCoordinate, Et as IExchangeAcceptorCarrier, F as decodeActionFrame, Fr as TActionDomainSchema, G as IExchangeAcceptorSecurity, Gr as TActionSchemaOptions, Gt as defineChannel, H as encodeExchange, Hr as EActionResponseMode, Ht as acceptChannel, I as EErrId_NiceAction, Ir as TDomainActionId, It as IAcceptChannelOptions, J as IHttpCarrierOptions, K as EErrId_NiceTransport, Kn as IClientVerifyKeyResolveInput, Kr as TActionSerializationDefinition, L as err_nice_action, Lr as TInferInputFromSchema, Lt as IActionChannel, M as isActionPayload_Request_JsonObject, Mr as IActionDomainChildOptions, Mt as ConnectionStateStore, N as isActionPayload_Any_JsonObject, Nr as IActionRootDomain, O as TActionPayload_Any_JsonObject, Or as TRuntimeCoordinateStringId, Ot as isExchangeAcceptorCarrier, P as IActionFrameDecoder, Pr as TActionDomainChildDef, Q as IHttpAcceptorCarrierOptions, Qt as IExchangeCarrierSource, R as TExchangeReply, Rr as TInferOutputFromSchema, Rt as IConnectChannelOptions, S as IActionPayload_Result_JsonObject, Sr as ActionPayload_Progress, St as IServeConnectionStateOptions, T as IActionProgress_Percentage, Tr as IRuntimeFullCoordinates, Tt as IDuplexAcceptorCarrier, U as ExchangeAcceptor, Ur as TInferActionError, Ut as acceptChannelConnections, V as decodeExchangeRequest, Vr as ActionSchema, Vt as TChannelPushHandlers, W as IExchangeAcceptorConfig, Wn as ESecurityLevel, Wr as actionSchema, Wt as connectChannel, X as TCarrierFetch, Xt as IDuplexCarrierSource, Y as IHttpCarrierRequest, Yt as IDuplexCarrier, Z as httpCarrier, Zt as IExchangeCarrier, _ as IActionPayload_Data_Base, _r as IRunningActionUpdate_Success, _t as TServeHostOptions, ar as ActionLocalHandler, at as err_nice_transport_ws, b as IActionPayload_Request_JsonObject, br as TRunningActionUpdateListener, bt as IConnectionContext, cr as createActionRootDomain, ct as IRtcDataChannelLike, d as ActionCore, dr as ERunningActionFinishedType, dt as inMemoryCarrier, en as TFrame, et as IWsCarrierOptions, f as ActionPayload_Request, fr as ERunningActionState, ft as IInMemoryChannelPair, g as IActionPayload_Base_JsonObject, gr as IRunningActionUpdate_Started, gt as IChannelHostAdapter, h as IActionPayload_Base, hr as IRunningActionUpdate_Progress, ht as err_nice_external_client, ir as runtimeLinkId, it as EErrId_NiceTransport_WebSocket, j as isActionPayload_Result_JsonObject, jr as IActionDomain, k as TActionProgress, kr as IActionCore, l as ActionDomain, lr as ActionRootDomain, lt as rtcDataChannelByteChannel, m as EActionProgressType, mr as IRunningActionUpdate_Abort, mt as createInMemoryChannelPair, nt as IWsAcceptorCarrierOptions, or as createLocalHandler, ot as IRtcCarrierOptions, p as EActionPayloadType, pr as ERunningActionUpdateType, pt as IInMemoryServerEndpoint, q as err_nice_transport, qn as IClientVerifyKeyResolver, qr as TTransportedValue, rt as wsAcceptorCarrier, sr as MaybePromise, st as rtcCarrier, t as AcceptorHandler, tn as ConnectorHandler, tr as createStorageTofuVerifyKeyResolver, tt as wsCarrier, u as ActionRuntime, ur as RunningAction, ut as IInMemoryCarrier, v as IActionPayload_Progress, vr as TRunningActionUpdate, vt as serveHost, w as IActionProgress_None, wr as IRuntimeCoordinateSpecifics, wt as IAcceptorAttachmentStore, x as IActionPayload_Result, xr as ActionPayload_Result, xt as IServeChannelOptions, y as IActionPayload_Progress_JsonObject, yr as TRunningActionUpdateFinished, yt as IChannelServer, z as TExchangeRequest, zr as TPossibleDomainId, zt as IConnectTransport } from "./AcceptorHandler-Du292dpC.cjs";
2
2
  export { type AcceptorHandler, ActionCore, ActionDomain, ActionLocalHandler, type ActionPayload_Progress, type ActionPayload_Request, type ActionPayload_Result, ActionRootDomain, ActionRuntime, ActionSchema, type ConnectionStateStore, type ConnectorHandler, EActionPayloadType, EActionProgressType, EActionResponseMode, EErrId_NiceAction, EErrId_NiceTransport, EErrId_NiceTransport_WebSocket, ERunningActionFinishedType, ERunningActionState, ERunningActionUpdateType, ESecurityLevel, ExchangeAcceptor, type IAcceptChannelOptions, type IAcceptorAttachmentStore, type IActionChannel, IActionCore, IActionCore_JsonObject, type IActionDomain, type IActionDomainChildOptions, type IActionFrameDecoder, IActionPayload_Base, IActionPayload_Base_JsonObject, IActionPayload_Data_Base, IActionPayload_Progress, IActionPayload_Progress_JsonObject, IActionPayload_Request_JsonObject, IActionPayload_Result, IActionPayload_Result_JsonObject, IActionProgress_Custom, IActionProgress_None, IActionProgress_Percentage, type IActionRootDomain, IActionRouteItemHandler, type IChannelHostAdapter, type IChannelServer, type IClientVerifyKeyResolveInput, type IClientVerifyKeyResolver, type IConnectChannelOptions, type IConnectTransport, type IConnectionContext, type IDuplexAcceptorCarrier, type IDuplexCarrier, type IDuplexCarrierSource, type IExchangeAcceptorCarrier, type IExchangeAcceptorConfig, type IExchangeAcceptorSecurity, type IExchangeCarrier, type IExchangeCarrierSource, type IHttpAcceptorCarrierOptions, type IHttpCarrierOptions, type IHttpCarrierRequest, type IInMemoryCarrier, type IInMemoryChannelPair, type IInMemoryServerEndpoint, type IRtcCarrierOptions, type IRtcDataChannelLike, type IRunningActionUpdate_Abort, type IRunningActionUpdate_Progress, type IRunningActionUpdate_Started, type IRunningActionUpdate_Success, IRuntimeCoordinate, IRuntimeCoordinateSpecifics, IRuntimeFullCoordinates, type IServeChannelOptions, type IServeConnectionStateOptions, type IWsAcceptorCarrierOptions, type IWsCarrierOptions, MaybePromise, RunningAction, RuntimeCoordinate, type TAcceptorCarrier, type TActionDomainChildDef, type TActionDomainSchema, TActionPayload_Any_Instance, TActionPayload_Any_JsonObject, TActionProgress, TActionResultOutcome, type TActionSchemaOptions, type TActionSerializationDefinition, type TCarrier, type TCarrierFetch, type TChannelAcceptorCases, type TChannelPushHandlers, type TDomainActionId, type TExchangeReply, type TExchangeRequest, type TFrame, type TInferActionError, type TInferInputFromSchema, type TInferOutputFromSchema, type TPossibleDomainId, type TPossibleDomainIdList, type TRunningActionUpdate, type TRunningActionUpdateFinished, type TRunningActionUpdateListener, TRuntimeCoordinateEnvId, TRuntimeCoordinateStringId, type TServeHostOptions, type TTransportedValue, acceptChannel, acceptChannelConnections, actionSchema, connectChannel, createActionRootDomain, createInMemoryChannelPair, createInMemoryTofuVerifyKeyResolver, createLocalHandler, createStorageTofuVerifyKeyResolver, decodeActionFrame, decodeExchangeReply, decodeExchangeRequest, defineChannel, encodeExchange, err_nice_action, err_nice_external_client, err_nice_transport, err_nice_transport_ws, httpAcceptorCarrier, httpCarrier, inMemoryCarrier, isActionPayload_Any_JsonObject, isActionPayload_Request_JsonObject, isActionPayload_Result_JsonObject, isExchangeAcceptorCarrier, rtcCarrier, rtcDataChannelByteChannel, runtimeLinkId, serveChannel, serveHost, wsAcceptorCarrier, wsCarrier };
package/build/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as httpAcceptorCarrier, $n as createInMemoryTofuVerifyKeyResolver, $t as TCarrier, A as TActionResultOutcome, Ar as IActionCore_JsonObject, B as decodeExchangeReply, Br as TPossibleDomainIdList, Bt as TChannelAcceptorCases, C as IActionProgress_Custom, Cr as IRuntimeCoordinate, Ct as serveChannel, D as TActionPayload_Any_Instance, Dr as TRuntimeCoordinateEnvId, Dt as TAcceptorCarrier, E as IActionRouteItemHandler, Er as RuntimeCoordinate, Et as IExchangeAcceptorCarrier, F as decodeActionFrame, Fr as TActionDomainSchema, G as IExchangeAcceptorSecurity, Gr as TActionSchemaOptions, Gt as defineChannel, H as encodeExchange, Hr as EActionResponseMode, Ht as acceptChannel, I as EErrId_NiceAction, Ir as TDomainActionId, It as IAcceptChannelOptions, J as IHttpCarrierOptions, K as EErrId_NiceTransport, Kn as IClientVerifyKeyResolveInput, Kr as TActionSerializationDefinition, L as err_nice_action, Lr as TInferInputFromSchema, Lt as IActionChannel, M as isActionPayload_Request_JsonObject, Mr as IActionDomainChildOptions, Mt as ConnectionStateStore, N as isActionPayload_Any_JsonObject, Nr as IActionRootDomain, O as TActionPayload_Any_JsonObject, Or as TRuntimeCoordinateStringId, Ot as isExchangeAcceptorCarrier, P as IActionFrameDecoder, Pr as TActionDomainChildDef, Q as IHttpAcceptorCarrierOptions, Qt as IExchangeCarrierSource, R as TExchangeReply, Rr as TInferOutputFromSchema, Rt as IConnectChannelOptions, S as IActionPayload_Result_JsonObject, Sr as ActionPayload_Progress, St as IServeConnectionStateOptions, T as IActionProgress_Percentage, Tr as IRuntimeFullCoordinates, Tt as IDuplexAcceptorCarrier, U as ExchangeAcceptor, Ur as TInferActionError, Ut as acceptChannelConnections, V as decodeExchangeRequest, Vr as ActionSchema, Vt as TChannelPushHandlers, W as IExchangeAcceptorConfig, Wn as ESecurityLevel, Wr as actionSchema, Wt as connectChannel, X as TCarrierFetch, Xt as IDuplexCarrierSource, Y as IHttpCarrierRequest, Yt as IDuplexCarrier, Z as httpCarrier, Zt as IExchangeCarrier, _ as IActionPayload_Data_Base, _r as IRunningActionUpdate_Success, _t as TServeHostOptions, ar as ActionLocalHandler, at as err_nice_transport_ws, b as IActionPayload_Request_JsonObject, br as TRunningActionUpdateListener, bt as IConnectionContext, cr as createActionRootDomain, ct as IRtcDataChannelLike, d as ActionCore, dr as ERunningActionFinishedType, dt as inMemoryCarrier, en as TFrame, et as IWsCarrierOptions, f as ActionPayload_Request, fr as ERunningActionState, ft as IInMemoryChannelPair, g as IActionPayload_Base_JsonObject, gr as IRunningActionUpdate_Started, gt as IChannelHostAdapter, h as IActionPayload_Base, hr as IRunningActionUpdate_Progress, ht as err_nice_external_client, ir as runtimeLinkId, it as EErrId_NiceTransport_WebSocket, j as isActionPayload_Result_JsonObject, jr as IActionDomain, k as TActionProgress, kr as IActionCore, l as ActionDomain, lr as ActionRootDomain, lt as rtcDataChannelByteChannel, m as EActionProgressType, mr as IRunningActionUpdate_Abort, mt as createInMemoryChannelPair, nt as IWsAcceptorCarrierOptions, or as createLocalHandler, ot as IRtcCarrierOptions, p as EActionPayloadType, pr as ERunningActionUpdateType, pt as IInMemoryServerEndpoint, q as err_nice_transport, qn as IClientVerifyKeyResolver, qr as TTransportedValue, rt as wsAcceptorCarrier, sr as MaybePromise, st as rtcCarrier, t as AcceptorHandler, tn as ConnectorHandler, tr as createStorageTofuVerifyKeyResolver, tt as wsCarrier, u as ActionRuntime, ur as RunningAction, ut as IInMemoryCarrier, v as IActionPayload_Progress, vr as TRunningActionUpdate, vt as serveHost, w as IActionProgress_None, wr as IRuntimeCoordinateSpecifics, wt as IAcceptorAttachmentStore, x as IActionPayload_Result, xr as ActionPayload_Result, xt as IServeChannelOptions, y as IActionPayload_Progress_JsonObject, yr as TRunningActionUpdateFinished, yt as IChannelServer, z as TExchangeRequest, zr as TPossibleDomainId, zt as IConnectTransport } from "./AcceptorHandler-BizUtq4u.mjs";
1
+ import { $ as httpAcceptorCarrier, $n as createInMemoryTofuVerifyKeyResolver, $t as TCarrier, A as TActionResultOutcome, Ar as IActionCore_JsonObject, B as decodeExchangeReply, Br as TPossibleDomainIdList, Bt as TChannelAcceptorCases, C as IActionProgress_Custom, Cr as IRuntimeCoordinate, Ct as serveChannel, D as TActionPayload_Any_Instance, Dr as TRuntimeCoordinateEnvId, Dt as TAcceptorCarrier, E as IActionRouteItemHandler, Er as RuntimeCoordinate, Et as IExchangeAcceptorCarrier, F as decodeActionFrame, Fr as TActionDomainSchema, G as IExchangeAcceptorSecurity, Gr as TActionSchemaOptions, Gt as defineChannel, H as encodeExchange, Hr as EActionResponseMode, Ht as acceptChannel, I as EErrId_NiceAction, Ir as TDomainActionId, It as IAcceptChannelOptions, J as IHttpCarrierOptions, K as EErrId_NiceTransport, Kn as IClientVerifyKeyResolveInput, Kr as TActionSerializationDefinition, L as err_nice_action, Lr as TInferInputFromSchema, Lt as IActionChannel, M as isActionPayload_Request_JsonObject, Mr as IActionDomainChildOptions, Mt as ConnectionStateStore, N as isActionPayload_Any_JsonObject, Nr as IActionRootDomain, O as TActionPayload_Any_JsonObject, Or as TRuntimeCoordinateStringId, Ot as isExchangeAcceptorCarrier, P as IActionFrameDecoder, Pr as TActionDomainChildDef, Q as IHttpAcceptorCarrierOptions, Qt as IExchangeCarrierSource, R as TExchangeReply, Rr as TInferOutputFromSchema, Rt as IConnectChannelOptions, S as IActionPayload_Result_JsonObject, Sr as ActionPayload_Progress, St as IServeConnectionStateOptions, T as IActionProgress_Percentage, Tr as IRuntimeFullCoordinates, Tt as IDuplexAcceptorCarrier, U as ExchangeAcceptor, Ur as TInferActionError, Ut as acceptChannelConnections, V as decodeExchangeRequest, Vr as ActionSchema, Vt as TChannelPushHandlers, W as IExchangeAcceptorConfig, Wn as ESecurityLevel, Wr as actionSchema, Wt as connectChannel, X as TCarrierFetch, Xt as IDuplexCarrierSource, Y as IHttpCarrierRequest, Yt as IDuplexCarrier, Z as httpCarrier, Zt as IExchangeCarrier, _ as IActionPayload_Data_Base, _r as IRunningActionUpdate_Success, _t as TServeHostOptions, ar as ActionLocalHandler, at as err_nice_transport_ws, b as IActionPayload_Request_JsonObject, br as TRunningActionUpdateListener, bt as IConnectionContext, cr as createActionRootDomain, ct as IRtcDataChannelLike, d as ActionCore, dr as ERunningActionFinishedType, dt as inMemoryCarrier, en as TFrame, et as IWsCarrierOptions, f as ActionPayload_Request, fr as ERunningActionState, ft as IInMemoryChannelPair, g as IActionPayload_Base_JsonObject, gr as IRunningActionUpdate_Started, gt as IChannelHostAdapter, h as IActionPayload_Base, hr as IRunningActionUpdate_Progress, ht as err_nice_external_client, ir as runtimeLinkId, it as EErrId_NiceTransport_WebSocket, j as isActionPayload_Result_JsonObject, jr as IActionDomain, k as TActionProgress, kr as IActionCore, l as ActionDomain, lr as ActionRootDomain, lt as rtcDataChannelByteChannel, m as EActionProgressType, mr as IRunningActionUpdate_Abort, mt as createInMemoryChannelPair, nt as IWsAcceptorCarrierOptions, or as createLocalHandler, ot as IRtcCarrierOptions, p as EActionPayloadType, pr as ERunningActionUpdateType, pt as IInMemoryServerEndpoint, q as err_nice_transport, qn as IClientVerifyKeyResolver, qr as TTransportedValue, rt as wsAcceptorCarrier, sr as MaybePromise, st as rtcCarrier, t as AcceptorHandler, tn as ConnectorHandler, tr as createStorageTofuVerifyKeyResolver, tt as wsCarrier, u as ActionRuntime, ur as RunningAction, ut as IInMemoryCarrier, v as IActionPayload_Progress, vr as TRunningActionUpdate, vt as serveHost, w as IActionProgress_None, wr as IRuntimeCoordinateSpecifics, wt as IAcceptorAttachmentStore, x as IActionPayload_Result, xr as ActionPayload_Result, xt as IServeChannelOptions, y as IActionPayload_Progress_JsonObject, yr as TRunningActionUpdateFinished, yt as IChannelServer, z as TExchangeRequest, zr as TPossibleDomainId, zt as IConnectTransport } from "./AcceptorHandler-CLbwu2Pa.mjs";
2
2
  export { type AcceptorHandler, ActionCore, ActionDomain, ActionLocalHandler, type ActionPayload_Progress, type ActionPayload_Request, type ActionPayload_Result, ActionRootDomain, ActionRuntime, ActionSchema, type ConnectionStateStore, type ConnectorHandler, EActionPayloadType, EActionProgressType, EActionResponseMode, EErrId_NiceAction, EErrId_NiceTransport, EErrId_NiceTransport_WebSocket, ERunningActionFinishedType, ERunningActionState, ERunningActionUpdateType, ESecurityLevel, ExchangeAcceptor, type IAcceptChannelOptions, type IAcceptorAttachmentStore, type IActionChannel, IActionCore, IActionCore_JsonObject, type IActionDomain, type IActionDomainChildOptions, type IActionFrameDecoder, IActionPayload_Base, IActionPayload_Base_JsonObject, IActionPayload_Data_Base, IActionPayload_Progress, IActionPayload_Progress_JsonObject, IActionPayload_Request_JsonObject, IActionPayload_Result, IActionPayload_Result_JsonObject, IActionProgress_Custom, IActionProgress_None, IActionProgress_Percentage, type IActionRootDomain, IActionRouteItemHandler, type IChannelHostAdapter, type IChannelServer, type IClientVerifyKeyResolveInput, type IClientVerifyKeyResolver, type IConnectChannelOptions, type IConnectTransport, type IConnectionContext, type IDuplexAcceptorCarrier, type IDuplexCarrier, type IDuplexCarrierSource, type IExchangeAcceptorCarrier, type IExchangeAcceptorConfig, type IExchangeAcceptorSecurity, type IExchangeCarrier, type IExchangeCarrierSource, type IHttpAcceptorCarrierOptions, type IHttpCarrierOptions, type IHttpCarrierRequest, type IInMemoryCarrier, type IInMemoryChannelPair, type IInMemoryServerEndpoint, type IRtcCarrierOptions, type IRtcDataChannelLike, type IRunningActionUpdate_Abort, type IRunningActionUpdate_Progress, type IRunningActionUpdate_Started, type IRunningActionUpdate_Success, IRuntimeCoordinate, IRuntimeCoordinateSpecifics, IRuntimeFullCoordinates, type IServeChannelOptions, type IServeConnectionStateOptions, type IWsAcceptorCarrierOptions, type IWsCarrierOptions, MaybePromise, RunningAction, RuntimeCoordinate, type TAcceptorCarrier, type TActionDomainChildDef, type TActionDomainSchema, TActionPayload_Any_Instance, TActionPayload_Any_JsonObject, TActionProgress, TActionResultOutcome, type TActionSchemaOptions, type TActionSerializationDefinition, type TCarrier, type TCarrierFetch, type TChannelAcceptorCases, type TChannelPushHandlers, type TDomainActionId, type TExchangeReply, type TExchangeRequest, type TFrame, type TInferActionError, type TInferInputFromSchema, type TInferOutputFromSchema, type TPossibleDomainId, type TPossibleDomainIdList, type TRunningActionUpdate, type TRunningActionUpdateFinished, type TRunningActionUpdateListener, TRuntimeCoordinateEnvId, TRuntimeCoordinateStringId, type TServeHostOptions, type TTransportedValue, acceptChannel, acceptChannelConnections, actionSchema, connectChannel, createActionRootDomain, createInMemoryChannelPair, createInMemoryTofuVerifyKeyResolver, createLocalHandler, createStorageTofuVerifyKeyResolver, decodeActionFrame, decodeExchangeReply, decodeExchangeRequest, defineChannel, encodeExchange, err_nice_action, err_nice_external_client, err_nice_transport, err_nice_transport_ws, httpAcceptorCarrier, httpCarrier, inMemoryCarrier, isActionPayload_Any_JsonObject, isActionPayload_Request_JsonObject, isActionPayload_Result_JsonObject, isExchangeAcceptorCarrier, rtcCarrier, rtcDataChannelByteChannel, runtimeLinkId, serveChannel, serveHost, wsAcceptorCarrier, wsCarrier };
package/build/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { $ as ActionPayload_Request, B as EErrId_NiceTransport, E as createInMemoryTofuVerifyKeyResolver, G as ActionSchema, H as err_nice_external_client, J as isActionPayload_Result_JsonObject, K as EActionResponseMode, M as ActionLocalHandler, N as createLocalHandler, O as createStorageTofuVerifyKeyResolver, P as ActionRuntime, Q as RunningAction, S as decodeActionFrame, U as isActionPayload_Any_JsonObject, V as err_nice_transport, W as isActionPayload_Request_JsonObject, X as EErrId_NiceAction, Y as isAction_Base_JsonObject, Z as err_nice_action, a as ExchangeAcceptor, at as RuntimeCoordinate, c as decodeExchangeReply, et as ActionPayload_Result, it as ActionBase, j as runtimeLinkId, l as decodeExchangeRequest, nt as EActionProgressType, ot as runtimeCoordinateToStringIds, q as actionSchema, rt as ActionPayload, tt as EActionPayloadType, u as encodeExchange, w as ESecurityLevel } from "./createHibernatableWsServerAdapter-BkjESd01.mjs";
1
+ import { $ as ActionPayload_Request, B as EErrId_NiceTransport, E as createInMemoryTofuVerifyKeyResolver, G as ActionSchema, H as err_nice_external_client, J as isActionPayload_Result_JsonObject, K as EActionResponseMode, M as ActionLocalHandler, N as createLocalHandler, O as createStorageTofuVerifyKeyResolver, P as ActionRuntime, Q as RunningAction, S as decodeActionFrame, U as isActionPayload_Any_JsonObject, V as err_nice_transport, W as isActionPayload_Request_JsonObject, X as EErrId_NiceAction, Y as isAction_Base_JsonObject, Z as err_nice_action, a as ExchangeAcceptor, at as RuntimeCoordinate, c as decodeExchangeReply, et as ActionPayload_Result, it as ActionBase, j as runtimeLinkId, l as decodeExchangeRequest, nt as EActionProgressType, ot as runtimeCoordinateToStringIds, q as actionSchema, rt as ActionPayload, tt as EActionPayloadType, u as encodeExchange, w as ESecurityLevel } from "./createHibernatableWsServerAdapter-BD5n-Ev9.mjs";
2
2
  import { n as ERunningActionState, r as ERunningActionUpdateType, t as ERunningActionFinishedType } from "./RunningAction.types-C176rqHG.mjs";
3
- import { a as isExchangeAcceptorCarrier, c as connectChannel, i as serveChannel, l as defineChannel, n as wsAcceptorCarrier, o as acceptChannel, r as serveHost, s as acceptChannelConnections, t as httpAcceptorCarrier } from "./httpAcceptorCarrier-DWqsCz3h.mjs";
3
+ import { a as isExchangeAcceptorCarrier, c as connectChannel, i as serveChannel, l as defineChannel, n as wsAcceptorCarrier, o as acceptChannel, r as serveHost, s as acceptChannelConnections, t as httpAcceptorCarrier } from "./httpAcceptorCarrier-moSmtBxr.mjs";
4
4
  import { nanoid } from "nanoid";
5
5
  import { err } from "@nice-code/error";
6
6
  //#region src/ActionDefinition/Action/Context/ActionContext.ts