webloom-framework 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/advanced.d.ts +20 -8
- package/dist/advanced.js +4 -4
- package/dist/advanced.js.map +1 -1
- package/dist/{chunk-JHJZIO2H.js → chunk-CKML74MG.js} +25 -4
- package/dist/chunk-CKML74MG.js.map +1 -0
- package/dist/{chunk-YOIH6H36.js → chunk-RRNUE457.js} +112 -32
- package/dist/chunk-RRNUE457.js.map +1 -0
- package/dist/{chunk-RAQOFUZY.js → chunk-XVD7ALPV.js} +461 -46
- package/dist/chunk-XVD7ALPV.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +4 -4
- package/dist/{messageBus-CtrwkjrO.d.ts → messageBus-BDtkjs6y.d.ts} +1 -1
- package/dist/messagePortServiceTransport-DyNmdgoa.d.ts +150 -0
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/{runtimeTypes-DquUCHz-.d.ts → runtimeTypes-CleHMFaq.d.ts} +269 -3
- package/dist/{sharedWorkerHost-Cb2a1_KD.d.ts → sharedWorkerHost-BNMUW-8v.d.ts} +37 -2
- package/dist/testing.d.ts +6 -6
- package/dist/testing.js +4 -4
- package/dist/{windowRuntime-B6Ue8jso.d.ts → windowRuntime-BGl_jfbK.d.ts} +2 -2
- package/docs/api.md +1 -1
- package/docs/proposals/webloom-v4/verification.md +100 -54
- package/package.json +5 -3
- package/dist/chunk-JHJZIO2H.js.map +0 -1
- package/dist/chunk-RAQOFUZY.js.map +0 -1
- package/dist/chunk-YOIH6H36.js.map +0 -1
- package/dist/messagePortServiceTransport-B0FyJr43.d.ts +0 -264
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/runtimeSession.ts","../src/transport/serviceBridge.ts","../src/transport/messagePortServiceTransport.ts","../src/transport/messagePortServiceProvider.ts","../src/runtime/peerView.ts","../src/runtime/connectSharedWorker.ts"],"names":["timeoutMs","active"],"mappings":"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","file":"chunk-XVD7ALPV.js","sourcesContent":["// WebLoom 物理 endpoint 的通用 session 生命周期。\n//\n// 这个模块只管理“哪条连接、当前是否还准入、是否已经排空”。它不理解\n// 产品 lease、存储 owner、领域 session 或 CAS;那些仍属于产品层。\n\nimport type {\n RuntimeDrainResult,\n RuntimeEndpointBinding,\n RuntimeEndpointState,\n} from \"../contracts/lifecycle.js\";\n\n/** 关闭握手默认等待时间;调用方可以传入更严格的 deadline。 */\nexport const DEFAULT_RUNTIME_DRAIN_TIMEOUT_MS = 2_000;\n\n/** 一个需要等待真实执行槽结束的框架参与者。 */\nexport interface RuntimeDrainParticipant {\n /** 等待该参与者自己的真实执行槽结束。 */\n readonly drain: () => Promise<void>;\n /** deadline 到达时报告仍未结束的真实执行槽数量。 */\n readonly pending: () => number;\n}\n\nexport interface RuntimeEndpointSession {\n /** 本端由框架生成、不可复用的 endpoint 身份。 */\n readonly binding: RuntimeEndpointBinding;\n /** 已由对端首条合法框架消息建立的身份;尚未建立时为空。 */\n readonly remoteBinding?: RuntimeEndpointBinding;\n /** active -> closing -> closed。 */\n readonly state: RuntimeEndpointState;\n /** 最近一次同步关闭原因;只用于本地诊断。 */\n readonly closeReason?: string;\n /** 本端允许的最大 drain 时间;远端只能进一步收紧,不能扩大。 */\n readonly maxDrainTimeoutMs: number;\n /** 精确比较并建立对端 binding;不接受后续替换。 */\n acceptRemoteBinding(binding: unknown): boolean;\n /** 同步停止准入、触发撤权和 abort;幂等。 */\n beginClose(reason?: string): void;\n /** 等待全部参与者排空,始终受 bounded deadline 限制。 */\n drain(timeoutMs?: number): Promise<RuntimeDrainResult>;\n /** 物理 transport 即将关闭时标记终态;幂等。 */\n close(): void;\n /** 注册同步关闭回调。 */\n onBeginClose(listener: (reason: string) => void): () => void;\n /** 注册物理关闭回调。 */\n onClosed(listener: () => void): () => void;\n /** 注册一个真实执行排空参与者。 */\n registerDrainParticipant(participant: RuntimeDrainParticipant): () => void;\n}\n\nfunction validText(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0 && value.length <= 256;\n}\n\n/** 判断值是否为完整的框架 endpoint binding。 */\nexport function isRuntimeEndpointBinding(value: unknown): value is RuntimeEndpointBinding {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as { runtimeInstanceId?: unknown; connectionId?: unknown };\n return validText(candidate.runtimeInstanceId) && validText(candidate.connectionId);\n}\n\n/** 只比较框架 binding,不比较任何产品领域字段。 */\nexport function sameRuntimeEndpointBinding(\n left: RuntimeEndpointBinding | undefined,\n right: RuntimeEndpointBinding | undefined,\n): boolean {\n return left !== undefined && right !== undefined\n && left.runtimeInstanceId === right.runtimeInstanceId\n && left.connectionId === right.connectionId;\n}\n\nfunction copyBinding(value: RuntimeEndpointBinding): RuntimeEndpointBinding {\n return Object.freeze({ runtimeInstanceId: value.runtimeInstanceId, connectionId: value.connectionId });\n}\n\n/** 为一个 Runtime endpoint 生成不可复用的连接身份。 */\nexport function createRuntimeEndpointBinding(runtimeInstanceId: string): RuntimeEndpointBinding {\n let connectionId: string;\n try {\n connectionId = typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? `connection:${crypto.randomUUID()}`\n : `connection:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n } catch {\n connectionId = `connection:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n }\n if (!validText(runtimeInstanceId)) throw new TypeError(\"Runtime endpoint requires a valid runtimeInstanceId\");\n return copyBinding({ runtimeInstanceId, connectionId });\n}\n\n/** 创建一条由 Runtime/transport 共用的 endpoint session。 */\nexport function createRuntimeEndpointSession(\n binding: RuntimeEndpointBinding,\n options: { readonly defaultDrainTimeoutMs?: number } = {},\n): RuntimeEndpointSession {\n if (!isRuntimeEndpointBinding(binding)) throw new TypeError(\"Runtime endpoint binding is invalid\");\n const localBinding = copyBinding(binding);\n const beginCloseListeners = new Set<(reason: string) => void>();\n const closedListeners = new Set<() => void>();\n const participants = new Set<RuntimeDrainParticipant>();\n const defaultTimeout = options.defaultDrainTimeoutMs ?? DEFAULT_RUNTIME_DRAIN_TIMEOUT_MS;\n if (!Number.isFinite(defaultTimeout) || defaultTimeout < 1 || defaultTimeout > 300_000) {\n throw new TypeError(\"defaultDrainTimeoutMs must be a finite number from 1 to 300000\");\n }\n let state: RuntimeEndpointState = \"active\";\n let remoteBindingValue: RuntimeEndpointBinding | undefined;\n let closeReasonValue: string | undefined;\n let drainPromise: Promise<RuntimeDrainResult> | undefined;\n\n const session: RuntimeEndpointSession = {\n binding: localBinding,\n maxDrainTimeoutMs: defaultTimeout,\n get remoteBinding() { return remoteBindingValue; },\n get state() { return state; },\n get closeReason() { return closeReasonValue; },\n acceptRemoteBinding(value: unknown): boolean {\n if (!isRuntimeEndpointBinding(value) || state === \"closed\") return false;\n const next = copyBinding(value);\n if (remoteBindingValue === undefined) {\n remoteBindingValue = next;\n return true;\n }\n return sameRuntimeEndpointBinding(remoteBindingValue, next);\n },\n beginClose(reason = \"Runtime endpoint closing\"): void {\n if (state !== \"active\") return;\n state = \"closing\";\n closeReasonValue = reason.slice(0, 256);\n for (const listener of [...beginCloseListeners]) {\n try { listener(closeReasonValue); } catch { /* observer isolation */ }\n }\n },\n drain(timeoutMs = defaultTimeout): Promise<RuntimeDrainResult> {\n if (!Number.isFinite(timeoutMs) || timeoutMs < 1 || timeoutMs > 300_000) {\n return Promise.reject(new TypeError(\"drain timeoutMs must be a finite number from 1 to 300000\"));\n }\n if (drainPromise) return drainPromise;\n // A physical close is not proof that non-cooperative JavaScript has\n // stopped. Preserve the live participant count instead of fabricating\n // a successful drain after the transport has disappeared.\n const currentParticipants = [...participants];\n if (state === \"closed\") {\n const pendingExecutions = currentParticipants.reduce((total, participant) => {\n try { return total + Math.max(0, participant.pending()); } catch { return total; }\n }, 0);\n const result: RuntimeDrainResult = {\n state,\n drained: pendingExecutions === 0,\n timedOut: pendingExecutions !== 0,\n pendingExecutions,\n };\n drainPromise = Promise.resolve(result);\n return drainPromise;\n }\n if (state === \"active\") session.beginClose(\"Runtime endpoint drain requested\");\n drainPromise = new Promise<RuntimeDrainResult>((resolve) => {\n let settled = false;\n const settle = (timedOut: boolean, failed: boolean): void => {\n if (settled) return;\n settled = true;\n if (timer !== undefined) clearTimeout(timer);\n const pendingExecutions = currentParticipants.reduce((total, participant) => {\n try { return total + Math.max(0, participant.pending()); } catch { return total; }\n }, 0);\n resolve({ state, drained: !timedOut && !failed && pendingExecutions === 0, timedOut, pendingExecutions });\n };\n const effectiveTimeout = Math.min(timeoutMs, defaultTimeout);\n const timer = setTimeout(() => settle(true, false), effectiveTimeout);\n void Promise.allSettled(currentParticipants.map((participant) => {\n try { return participant.drain(); } catch (error) { return Promise.reject(error); }\n })).then((results) => settle(false, results.some((result) => result.status === \"rejected\")));\n });\n return drainPromise;\n },\n close(): void {\n if (state === \"closed\") return;\n if (state === \"active\") session.beginClose(\"Runtime endpoint physically closed\");\n state = \"closed\";\n for (const listener of [...closedListeners]) {\n try { listener(); } catch { /* observer isolation */ }\n }\n beginCloseListeners.clear();\n closedListeners.clear();\n },\n onBeginClose(listener) {\n if (state !== \"active\") {\n try { listener(closeReasonValue ?? \"Runtime endpoint closing\"); } catch { /* observer isolation */ }\n return () => undefined;\n }\n beginCloseListeners.add(listener);\n return () => beginCloseListeners.delete(listener);\n },\n onClosed(listener) {\n if (state === \"closed\") {\n try { listener(); } catch { /* observer isolation */ }\n return () => undefined;\n }\n closedListeners.add(listener);\n return () => closedListeners.delete(listener);\n },\n registerDrainParticipant(participant) {\n if (state === \"closed\") return () => undefined;\n participants.add(participant);\n return () => participants.delete(participant);\n },\n };\n return session;\n}\n","// WebLoom v4 typed capability bridge。\n//\n// 这里是唯一的远端 call/stream pending 实现。它负责本端的 deadline、代理\n// 身份 fence、有限 DTO/transfer 校验以及 stream 的消费状态机;MessagePort\n// provider 负责另一侧的 handler 执行状态机。\n\nimport type {\n CapabilityBridge,\n CapabilityClient,\n RemoteCapability,\n RpcCapabilityBase,\n RpcCallOptions,\n ServiceReference,\n StreamCapabilityBase,\n StreamSubscribeOptions,\n StreamSubscription,\n} from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope, type RuntimeEndpointBinding, type RuntimeKind, type SnapshotApplyResult, type RuntimeDrainResult } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n cloneFrozenAttributes,\n createReceivePortLedger,\n createRuntimeBudget,\n DEFAULT_RUNTIME_LIMITS,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n validateTransferListWithStats,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n createRuntimeMessageCodec,\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CLOSE_ACK_TYPE,\n RUNTIME_CLOSE_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_ERROR_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n RUNTIME_SNAPSHOT_TYPE,\n type RuntimeErrorResponseMessage,\n type RuntimeSnapshotMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\nimport {\n createRuntimeEndpointBinding,\n createRuntimeEndpointSession,\n sameRuntimeEndpointBinding,\n DEFAULT_RUNTIME_DRAIN_TIMEOUT_MS,\n type RuntimeEndpointSession,\n} from \"../runtime/runtimeSession.js\";\n\nexport interface RuntimeReceiveMetadata {\n /** 本次 MessageEvent 实际携带的业务 MessagePort;仅 transport 本地使用。 */\n readonly ports?: readonly MessagePort[];\n /** 由物理 endpoint transport 创建的一次性接收资源账本。 */\n readonly ledger?: ReceivePortLedger;\n /** 物理 endpoint 已完成一次 codec decode。 */\n readonly decoded?: boolean;\n}\n\nexport interface RuntimeTransport {\n /** 发送已验证 v4 message;transfer 由契约 extractor 提供。 */\n send(message: RuntimeWireMessage, transfer?: readonly Transferable[]): void;\n /** 订阅接收 message 及本次事件的本地 transfer 元数据。 */\n subscribe(listener: (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void): () => void;\n /** 关闭本端传输。 */\n close?(): void;\n /** 物理 endpoint 对 decode/接收账本错误的统一通知。 */\n subscribeError?(listener: (error: unknown, metadata?: RuntimeReceiveMetadata) => void): () => void;\n}\n\nexport interface CreateCapabilityBridgeOptions {\n /** 底层双向 transport。 */\n readonly transport: RuntimeTransport;\n /** 预期的对端 Runtime 类型。 */\n readonly remoteRuntimeKind?: RuntimeKind;\n /** 预期的对端逻辑 Runtime id。 */\n readonly remoteRuntimeId?: string;\n /** 默认调用预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 Runtime/advanced 装配提供的预算;只能收紧 v4 默认值。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n /** 当前物理 endpoint 的框架 binding;省略时由 bridge 生成。 */\n readonly binding?: RuntimeEndpointBinding;\n /** 与反向 provider 共用的 endpoint session。 */\n readonly session?: RuntimeEndpointSession;\n /** 关闭握手默认 drain deadline。 */\n readonly drainTimeoutMs?: number;\n}\n\ninterface ProxyRecord {\n readonly capability: RemoteCapability;\n readonly scope?: LifecycleScope;\n readonly cacheKey: string;\n bound?: ServiceReference;\n revoked: boolean;\n reason: string;\n}\n\ninterface QueueItem {\n readonly value: unknown;\n readonly ledger: ReceivePortLedger;\n readonly budgetBytes: number;\n}\n\ninterface QuotaReservation {\n readonly payloadBytes: number;\n pendingReserved: boolean;\n streamReserved: boolean;\n payloadReserved: boolean;\n}\n\ninterface WaitingCallRecord {\n readonly proxy: ProxyRecord;\n readonly prepared: { readonly value: unknown; readonly transfer: readonly Transferable[]; readonly budgetBytes: number };\n readonly reservation: QuotaReservation;\n readonly deadline: number;\n readonly mode: \"unary\" | \"stream\";\n fail: (error: unknown) => void;\n start: (reference: ServiceReference, remaining: number) => void;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n removeListener?: () => void;\n}\n\ninterface CallbackExecutionRecord {\n readonly stream: PendingStream;\n readonly item: QueueItem;\n released: boolean;\n}\n\ninterface PendingBase {\n readonly callId: string;\n readonly capability: RemoteCapability;\n readonly reference: ServiceReference;\n readonly proxy: ProxyRecord;\n readonly controller: AbortController;\n readonly cleanup?: () => void;\n readonly reservation: QuotaReservation;\n readonly mode: \"unary\" | \"stream\";\n timer?: ReturnType<typeof setTimeout>;\n settled: boolean;\n cancelSent: boolean;\n}\n\ninterface PendingUnary extends PendingBase {\n readonly mode: \"unary\";\n resolve(value?: unknown): void;\n reject(error: unknown): void;\n}\n\ntype StreamState = \"opening\" | \"active\" | \"draining\" | \"closed\" | \"failed\";\n\ninterface PendingStream extends PendingBase {\n readonly mode: \"stream\";\n readonly onNext: (value: unknown) => void | Promise<void>;\n readonly itemParser: { parse(value: unknown): unknown };\n readonly window: number;\n readonly resolveReady: () => void;\n readonly rejectReady: (error: unknown) => void;\n readonly resolveClosed: () => void;\n readonly rejectClosed: (error: unknown) => void;\n credit: number;\n sequence: number;\n state: StreamState;\n doneReceived: boolean;\n processing: boolean;\n draining: boolean;\n readySettled: boolean;\n closedSettled: boolean;\n queue: QueueItem[];\n executionWaiterRemove?: () => void;\n}\n\ntype Pending = PendingUnary | PendingStream;\n\nfunction id(prefix: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return `${prefix}:${crypto.randomUUID()}`;\n } catch { /* fallback */ }\n return `${prefix}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction timeoutMs(value: number | undefined, fallback: number): number {\n const result = value ?? fallback;\n if (!Number.isFinite(result) || result < 1 || result > 300_000) throw new TypeError(\"timeoutMs must be a finite number from 1 to 300000\");\n return result;\n}\n\nfunction mergeSignals(...signals: readonly (AbortSignal | undefined)[]): { signal: AbortSignal; dispose(): void } {\n const controller = new AbortController();\n const active = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n const listeners = active.map((signal) => {\n const listener = (): void => { try { controller.abort(signal.reason); } catch { controller.abort(); } };\n if (signal.aborted) listener(); else signal.addEventListener(\"abort\", listener, { once: true });\n return { signal, listener };\n });\n return { signal: controller.signal, dispose() { for (const item of listeners) item.signal.removeEventListener(\"abort\", item.listener); } };\n}\n\nfunction frameworkError(\n code: ConstructorParameters<typeof WebLoomError>[0],\n phase: ConstructorParameters<typeof WebLoomError>[2],\n context?: ConstructorParameters<typeof WebLoomError>[3],\n): WebLoomError {\n const text: Record<string, string> = {\n protocol_mismatch: \"Remote Runtime protocol is not supported\",\n capability_unavailable: \"Capability is unavailable\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out; remote side effect is unknown\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n service_stale: \"Capability exposure is stale\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_snapshot: \"Invalid Runtime snapshot\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return new WebLoomError(code, text[String(code)] ?? \"WebLoom operation failed\", phase, context);\n}\n\nfunction errorFromWire(message: RuntimeErrorResponseMessage): WebLoomError {\n return frameworkError(message.error.code, message.error.phase, { serviceInstanceId: message.serviceInstanceId });\n}\n\nfunction validCredit(value: number, maximum: number): boolean {\n return Number.isSafeInteger(value) && value >= 1 && value <= maximum;\n}\n\nfunction serviceMatches(reference: ServiceReference, capability: RemoteCapability): boolean {\n return reference.kind === capability.kind && reference.capabilityId === capability.id && reference.contractVersion === capability.version;\n}\n\nfunction serviceKey(service: Pick<ServiceReference, \"kind\" | \"capabilityId\" | \"contractVersion\">): string {\n return `${service.kind}\\u0000${service.capabilityId}\\u0000${service.contractVersion}`;\n}\n\nfunction contextFor(capability: RemoteCapability, reference?: ServiceReference): ConstructorParameters<typeof WebLoomError>[3] {\n return { capabilityId: capability.id, ...(reference ? { serviceInstanceId: reference.serviceInstanceId } : {}) };\n}\n\n/** 创建按 peer 绑定、可撤销且支持 typed stream 的 bridge。 */\nexport function createCapabilityBridge(options: CreateCapabilityBridgeOptions): CapabilityBridge & {\n readonly pendingCallCount: number;\n readonly activeStreamCount: number;\n readonly retainedPayloadBytes: number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const session = options.session ?? createRuntimeEndpointSession(options.binding ?? createRuntimeEndpointBinding(`bridge:${id(\"runtime\")}`), { defaultDrainTimeoutMs: options.drainTimeoutMs });\n if (options.binding && !sameRuntimeEndpointBinding(options.binding, session.binding)) throw new TypeError(\"Capability bridge binding disagrees with endpoint session\");\n const localBinding = session.binding;\n const listeners = new Set<() => void>();\n const pending = new Map<string, Pending>();\n const streams = new Map<string, PendingStream>();\n const waitingCalls = new Set<WaitingCallRecord>();\n const callbackExecutions = new Set<CallbackExecutionRecord>();\n const executionDrainWaiters = new Set<() => void>();\n const proxies = new Map<string, ProxyRecord>();\n const clients = new Map<string, CapabilityClient<RemoteCapability>>();\n let pendingCount = 0;\n let peerRetainedPayloadBytes = 0;\n let currentState: CapabilityBridge[\"state\"] = \"empty\";\n let terminalFailure: WebLoomError | undefined;\n let remoteRuntimeId: string | undefined;\n let remoteRuntimeKind: RuntimeKind | undefined;\n let remoteRuntimeInstanceId: string | undefined;\n let revision = -1;\n let appliedSnapshotFingerprint: string | undefined;\n let currentServices: readonly ServiceReference[] = [];\n let disposed = false;\n let closeMessageSent = false;\n let closeAckWaiter: { resolve: (result: RuntimeDrainResult) => void } | undefined;\n let receivedCloseAck: RuntimeDrainResult | undefined;\n let closeAckSent = false;\n let drainPromise: Promise<RuntimeDrainResult> | undefined;\n let reservedStreamCount = 0;\n const defaultTimeout = timeoutMs(options.defaultCallTimeoutMs, 30_000);\n\n const emit = (): void => {\n for (const listener of [...listeners]) { try { listener(); } catch { /* observer isolation */ } }\n };\n\n const reserve = (payloadBytes: number, stream: boolean): QuotaReservation | WebLoomError => {\n if (pendingCount >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (stream && (reservedStreamCount >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (payloadBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - payloadBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - payloadBytes) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n peerRetainedPayloadBytes += payloadBytes;\n budget.retainedPayloadBytes += payloadBytes;\n pendingCount += 1;\n if (stream) reservedStreamCount += 1;\n return { payloadBytes, pendingReserved: true, streamReserved: stream, payloadReserved: true };\n };\n\n const releasePendingReservation = (reservation: QuotaReservation): void => {\n if (!reservation.pendingReserved) return;\n reservation.pendingReserved = false;\n pendingCount = Math.max(0, pendingCount - 1);\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const releaseStreamReservation = (reservation: QuotaReservation): void => {\n if (!reservation.streamReserved) return;\n reservation.streamReserved = false;\n reservedStreamCount = Math.max(0, reservedStreamCount - 1);\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePayloadReservation = (reservation: QuotaReservation): void => {\n if (!reservation.payloadReserved) return;\n reservation.payloadReserved = false;\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - reservation.payloadBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - reservation.payloadBytes);\n };\n\n const releaseReservation = (reservation: QuotaReservation): void => {\n releasePendingReservation(reservation);\n releaseStreamReservation(reservation);\n releasePayloadReservation(reservation);\n };\n\n const releaseCallbackExecution = (record: CallbackExecutionRecord): void => {\n if (record.released) return;\n record.released = true;\n callbackExecutions.delete(record);\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - record.item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - record.item.budgetBytes);\n budget.releaseExecutionSlot();\n if (callbackExecutions.size === 0) {\n for (const resolve of [...executionDrainWaiters]) resolve();\n executionDrainWaiters.clear();\n }\n emit();\n };\n\n const releaseQueueItem = (item: QueueItem): void => {\n item.ledger.closeUndelivered();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - item.budgetBytes);\n };\n\n const settleUnary = (entry: PendingUnary, error?: unknown, value?: unknown): void => {\n if (entry.settled) return;\n entry.settled = true;\n if (entry.timer !== undefined) clearTimeout(entry.timer);\n pending.delete(entry.callId);\n releaseReservation(entry.reservation);\n entry.cleanup?.();\n if (error !== undefined) entry.reject(error); else entry.resolve(value);\n emit();\n };\n\n const sendCancel = (entry: PendingBase): void => {\n if (entry.cancelSent) return;\n entry.cancelSent = true;\n try {\n options.transport.send({ type: RUNTIME_CANCEL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId: entry.callId, serviceInstanceId: entry.reference.serviceInstanceId });\n } catch { /* connection is already unavailable */ }\n try { entry.controller.abort(); } catch { /* noop */ }\n };\n\n const settleReadyReject = (stream: PendingStream, error: unknown): void => {\n if (stream.readySettled) return;\n stream.readySettled = true;\n stream.rejectReady(error);\n };\n\n const settleClosedReject = (stream: PendingStream, error: unknown): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.rejectClosed(error);\n };\n\n const settleClosedResolve = (stream: PendingStream): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.resolveClosed();\n };\n\n const forgetStream = (stream: PendingStream): void => {\n if (!stream.closedSettled || stream.processing || stream.queue.length > 0) return;\n streams.delete(stream.callId);\n };\n\n const finishDraining = (stream: PendingStream): void => {\n if (!stream.doneReceived || stream.processing || stream.queue.length > 0 || stream.closedSettled) return;\n stream.state = \"closed\";\n settleClosedResolve(stream);\n forgetStream(stream);\n emit();\n };\n\n const terminateStream = (stream: PendingStream, error: WebLoomError, notifyRemote: boolean): void => {\n if (stream.state === \"closed\" || stream.state === \"failed\") return;\n stream.state = \"failed\";\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n pending.delete(stream.callId);\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n releaseReservation(stream.reservation);\n // Even when the remote cancel cannot be sent (for example after a\n // transport error), the local handler-facing signal must be fenced.\n try { stream.controller.abort(error); } catch { /* already aborted */ }\n for (const item of stream.queue.splice(0)) releaseQueueItem(item);\n if (!stream.readySettled) settleReadyReject(stream, error);\n settleClosedReject(stream, error);\n stream.cleanup?.();\n if (notifyRemote) sendCancel(stream);\n forgetStream(stream);\n emit();\n };\n\n const errorWithTerminalCause = (cause: WebLoomError, capability: RemoteCapability, reference?: ServiceReference): WebLoomError => (\n new WebLoomError(cause.code, cause.message, cause.phase, { ...cause.context, ...contextFor(capability, reference) }, cause.details)\n );\n\n const revokeProxy = (proxy: ProxyRecord, reason: string, terminalCause?: WebLoomError): void => {\n if (proxy.revoked) return;\n proxy.revoked = true;\n proxy.reason = reason;\n if (proxies.get(proxy.cacheKey) === proxy) clients.delete(proxy.cacheKey);\n const affected = new Set<Pending>();\n for (const entry of pending.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of streams.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of affected) {\n if (entry.proxy !== proxy) continue;\n const error = terminalCause\n ? errorWithTerminalCause(terminalCause, entry.capability, entry.reference)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(entry.capability, entry.reference));\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, true);\n else {\n settleUnary(entry as PendingUnary, error);\n sendCancel(entry);\n }\n }\n for (const record of [...waitingCalls]) {\n if (record.proxy === proxy) record.fail(terminalCause\n ? errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n }\n };\n\n const findService = (capability: RemoteCapability): ServiceReference | undefined => currentServices.find((service) => serviceMatches(service, capability));\n\n const terminalError = (proxy: ProxyRecord, capability: RemoteCapability): WebLoomError | undefined => {\n if (terminalFailure && !disposed) return frameworkError(terminalFailure.code, terminalFailure.phase, contextFor(capability, proxy.bound));\n if (session.state !== \"active\") return frameworkError(\"service_revoked\", \"dispose\", contextFor(capability, proxy.bound));\n if (disposed || proxy.revoked) return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (currentState === \"stale\" || currentState === \"disposed\") return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (proxy.bound && !currentServices.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n return frameworkError(\"service_stale\", \"dispatch\", contextFor(capability, proxy.bound));\n }\n // Before the first ready snapshot a lazy proxy must remain waitable. Once\n // the peer has published a ready projection, however, an unbound\n // capability absent from that projection is not a timeout oracle: callers\n // must observe the same redacted unavailable result as a peer allowlist\n // denial. A proxy bound to a previously visible exposure still gets the\n // more specific stale result above.\n if (currentState === \"ready\" && !proxy.bound && !findService(capability)) {\n return frameworkError(\"capability_unavailable\", \"wait\", contextFor(capability));\n }\n return undefined;\n };\n\n const prepareRequest = (capability: RemoteCapability, request: unknown): { value: unknown; transfer: readonly Transferable[]; budgetBytes: number } => {\n validateRawDto(request, limits, \"validate\");\n const parser = capability as RemoteCapability & { request: { parse(value: unknown): unknown } };\n let parsed: unknown;\n try { parsed = parser.request.parse(request); } catch { throw frameworkError(\"request_validation_failed\", \"validate\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try {\n const descriptor = (capability as RemoteCapability & { transfer?: { request?: (value: unknown) => readonly Transferable[] } }).transfer;\n validation = validateTransferListWithStats(parsed, descriptor?.request?.(parsed), { limits, phase: \"validate\" });\n } catch (error) {\n if (error instanceof WebLoomError) throw error;\n throw frameworkError(\"transfer_invalid\", \"validate\", contextFor(capability));\n }\n return { value: parsed, transfer: validation.transfer, budgetBytes: validation.stats.budgetBytes };\n };\n\n const prepareIncoming = (capability: RemoteCapability, value: unknown, direction: \"response\" | \"item\", ledger: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[]; stats: ReturnType<typeof validateDto> } => {\n try { validateRawDto(value, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n const parser = capability as RemoteCapability & { response?: { parse(value: unknown): unknown }; item?: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[]; item?: (value: unknown) => readonly Transferable[] } };\n let parsed: unknown;\n try {\n const selected = direction === \"response\" ? parser.response : parser.item;\n if (!selected) throw new Error(\"parser unavailable\");\n parsed = selected.parse(value);\n } catch { ledger.closeUndelivered(); throw frameworkError(\"response_validation_failed\", \"receive\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try { validation = validateTransferListWithStats(parsed, parser.transfer?.[direction]?.(parsed), { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error instanceof WebLoomError ? error : frameworkError(\"transfer_invalid\", \"receive\", contextFor(capability)); }\n try { assertReceivedPortSet(ledger, validation.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n return { value: parsed, transfer: validation.transfer, stats: validation.stats };\n };\n\n const sendWire = (message: RuntimeWireMessage, transfer: readonly Transferable[] = []): void => {\n const encoded = codec.encode(message);\n options.transport.send(encoded, transfer);\n };\n\n const startUnary = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, callOptions: RpcCallOptions, timeout: number, existingReservation?: QuotaReservation): Promise<unknown> => {\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, false);\n if (reservation instanceof WebLoomError) return Promise.reject(reservation);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, callOptions.signal);\n const callId = id(\"call\");\n return new Promise<unknown>((resolve, reject) => {\n const entry: PendingUnary = { callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false, mode: \"unary\", resolve, reject };\n pending.set(callId, entry);\n const onAbort = (): void => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n };\n merged.signal.addEventListener(\"abort\", onAbort, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"call_timeout\", \"receive\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n }, timeout);\n if (merged.signal.aborted) { onAbort(); return; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"unary\", timeoutMs: timeout, request: prepared.value, ...(reference.grantId !== undefined ? { grantId: reference.grantId } : {}), ...(callOptions.operationId !== undefined ? { operationId: callOptions.operationId } : {}) }, prepared.transfer);\n } catch {\n settleUnary(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)));\n }\n });\n };\n\n const waitForService = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, callOptions: RpcCallOptions): Promise<unknown> => {\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, false);\n if (reserved instanceof WebLoomError) return Promise.reject(reserved);\n return new Promise<unknown>((resolve, reject) => {\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"unary\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); callOptions.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n releaseReservation(record.reservation);\n reject(error);\n };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n void startUnary(proxy, prepared, reference, callOptions, remaining, record.reservation).then(resolve, reject);\n };\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (callOptions.signal) {\n if (callOptions.signal.aborted) { onAbort(); return; }\n callOptions.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n });\n };\n\n const call = (proxy: ProxyRecord, request: unknown, callOptions: RpcCallOptions): Promise<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return Promise.reject(unavailable);\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return Promise.reject(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForService(proxy, prepared, callOptions);\n if (!proxy.bound) proxy.bound = reference;\n return startUnary(proxy, prepared, reference, callOptions, timeout);\n };\n\n const createRejectedSubscription = (error: WebLoomError): StreamSubscription<unknown> => {\n let readyReject!: (reason: unknown) => void;\n let closedReject!: (reason: unknown) => void;\n const ready = new Promise<void>((_, reject) => { readyReject = reject; });\n const closed = new Promise<void>((_, reject) => { closedReject = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n readyReject(error);\n closedReject(error);\n return { ready, closed, cancel() { /* terminal */ } };\n };\n\n const startStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, optionsForSubscribe: StreamSubscribeOptions<unknown>, timeout: number, existingReservation?: QuotaReservation): StreamSubscription<unknown> => {\n const maximumCredit = Math.min(256, limits.maxStreamCredit);\n const window = optionsForSubscribe.initialCredit ?? 16;\n if (!validCredit(window, maximumCredit)) {\n if (existingReservation) releaseReservation(existingReservation);\n return createRejectedSubscription(frameworkError(\"stream_overflow\", \"validate\", contextFor(proxy.capability, reference)));\n }\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, true);\n if (reservation instanceof WebLoomError) return createRejectedSubscription(reservation);\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, optionsForSubscribe.signal);\n const callId = id(\"stream\");\n const entry: PendingStream = {\n callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false,\n mode: \"stream\", onNext: optionsForSubscribe.onNext, itemParser: (proxy.capability as StreamCapabilityBase & { item: { parse(value: unknown): unknown } }).item,\n window, credit: window, sequence: 1, state: \"opening\", doneReceived: false, processing: false, draining: false, readySettled: false, closedSettled: false, queue: [],\n resolveReady, rejectReady, resolveClosed, rejectClosed,\n };\n streams.set(callId, entry);\n pending.set(callId, entry);\n const cancel = (): void => {\n if (entry.state === \"closed\" || entry.state === \"failed\") return;\n terminateStream(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)), true);\n };\n merged.signal.addEventListener(\"abort\", cancel, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.state !== \"opening\") return;\n terminateStream(entry, frameworkError(\"call_timeout\", \"wait\", contextFor(entry.capability, reference)), true);\n }, timeout);\n if (merged.signal.aborted) { cancel(); return { ready, closed, cancel }; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"stream\", timeoutMs: timeout, request: prepared.value, initialCredit: window, ...(reference.grantId !== undefined ? { grantId: reference.grantId } : {}), ...(optionsForSubscribe.operationId !== undefined ? { operationId: optionsForSubscribe.operationId } : {}) }, prepared.transfer);\n } catch {\n terminateStream(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)), false);\n }\n return { ready, closed, cancel };\n };\n\n const waitForStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const timeout = timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, true);\n if (reserved instanceof WebLoomError) return createRejectedSubscription(reserved);\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n let active: StreamSubscription<unknown> | undefined;\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"stream\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); optionsForSubscribe.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => { if (record.finished) return; record.finished = true; cleanup(); releaseReservation(record.reservation); rejectReady(error); rejectClosed(error); };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n active = startStream(proxy, prepared, reference, optionsForSubscribe, remaining, record.reservation);\n active.ready.then(resolveReady, rejectReady);\n active.closed.then(resolveClosed, rejectClosed);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (optionsForSubscribe.signal) {\n if (optionsForSubscribe.signal.aborted) { onAbort(); return { ready, closed, cancel() { /* terminal */ } }; }\n optionsForSubscribe.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n return { ready, closed, cancel(reason = \"stream cancelled\") { void reason; if (active) active.cancel(reason); else record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability))); } };\n };\n\n const subscribe = (proxy: ProxyRecord, request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return createRejectedSubscription(unavailable);\n if (typeof optionsForSubscribe.onNext !== \"function\") return createRejectedSubscription(frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability)));\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return createRejectedSubscription(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForStream(proxy, prepared, optionsForSubscribe);\n if (!proxy.bound) proxy.bound = reference;\n return startStream(proxy, prepared, reference, optionsForSubscribe, timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout));\n };\n\n let drainStream: (stream: PendingStream) => void;\n const waitForExecutionSlot = (stream: PendingStream): void => {\n if (stream.executionWaiterRemove || stream.state === \"failed\" || stream.state === \"closed\" || stream.queue.length === 0) return;\n stream.executionWaiterRemove = budget.registerExecutionWaiter(() => {\n stream.executionWaiterRemove = undefined;\n drainStream(stream);\n });\n };\n drainStream = (stream: PendingStream): void => {\n if (stream.draining) return;\n stream.draining = true;\n void (async () => {\n try {\n while (stream.queue.length > 0) {\n if (stream.state === \"failed\" || stream.state === \"closed\") break;\n const item = stream.queue.shift();\n if (!item) break;\n if (callbackExecutions.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) {\n stream.queue.unshift(item);\n waitForExecutionSlot(stream);\n break;\n }\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n const execution: CallbackExecutionRecord = { stream, item, released: false };\n callbackExecutions.add(execution);\n budget.executionSlots += 1;\n stream.processing = true;\n try {\n // MessagePort resources become handler-owned immediately before\n // invoking user code. The byte reservation remains attached to the\n // execution record until that callback settles.\n item.ledger.handoff();\n await stream.onNext(item.value);\n if (stream.state === \"active\" && !stream.doneReceived) {\n stream.credit += 1;\n try { sendWire({ type: RUNTIME_CREDIT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId: stream.callId, serviceInstanceId: stream.reference.serviceInstanceId, count: 1 }); }\n catch { terminateStream(stream, frameworkError(\"transport_unavailable\", \"dispatch\", contextFor(stream.capability, stream.reference)), true); break; }\n }\n } catch {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n break;\n } finally {\n stream.processing = false;\n releaseCallbackExecution(execution);\n }\n }\n } finally {\n stream.processing = false;\n stream.draining = false;\n if (stream.queue.length === 0 || stream.state === \"failed\" || stream.state === \"closed\") {\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n } else {\n // The loop can stop with an item retained because the shared budget\n // is full. Keep that FIFO waiter registered after this drain task\n // yields; otherwise no later slot release would revisit this stream.\n waitForExecutionSlot(stream);\n }\n finishDraining(stream);\n forgetStream(stream);\n }\n })().catch(() => {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n });\n };\n\n const drainCallbackExecutions = (): Promise<void> => {\n if (callbackExecutions.size === 0) return Promise.resolve();\n return new Promise<void>((resolve) => executionDrainWaiters.add(resolve));\n };\n session.registerDrainParticipant({\n drain: drainCallbackExecutions,\n pending: () => callbackExecutions.size,\n });\n\n const invalidate = (reason = \"remote service directory replaced\", terminalCause?: WebLoomError): void => {\n // A terminal protocol/transport failure is the cause observed by every\n // affected request. Settle it before revoking proxies, otherwise the proxy\n // fence would replace the useful protocol error with service_revoked.\n if (terminalCause) {\n for (const record of [...waitingCalls]) record.fail(errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound));\n for (const entry of [...pending.values()]) {\n const error = errorWithTerminalCause(terminalCause, entry.capability, entry.reference);\n if (entry.mode === \"stream\") terminateStream(entry, error, true);\n else settleUnary(entry, error);\n }\n }\n for (const proxy of proxies.values()) revokeProxy(proxy, reason, terminalCause);\n if (!terminalCause) for (const record of [...waitingCalls]) record.fail(frameworkError(\"service_stale\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n clients.clear();\n if (!terminalCause) for (const entry of [...pending.values()]) {\n if (entry.mode === \"stream\") terminateStream(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)), true);\n else settleUnary(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)));\n }\n currentServices = [];\n currentState = disposed ? \"disposed\" : \"stale\";\n emit();\n };\n\n const failClose = (reason: string, code: \"protocol_mismatch\" | \"invalid_snapshot\" | \"invalid_message\" | \"transfer_invalid\" = \"invalid_message\"): void => {\n if (disposed) return;\n terminalFailure = frameworkError(code, \"receive\");\n // Settle requests with the terminal wire failure before notifying the\n // generic session fence. `onBeginClose` revokes ordinary proxies and\n // would otherwise turn a useful protocol/transfer error into the less\n // informative `service_revoked` error.\n invalidate(reason, terminalFailure);\n session.beginClose(reason);\n try { options.transport.close?.(); } catch { /* best effort */ }\n session.close();\n };\n\n const removeSessionBeginClose = session.onBeginClose((reason) => {\n // This callback is the synchronous admission fence. The bounded drain and\n // physical transport close happen only after all local proxies/handlers\n // have been revoked here.\n if (!disposed) invalidate(reason);\n });\n\n const bounded = async <T>(promise: Promise<T>, fallback: T, deadline: number): Promise<T> => {\n const remaining = deadline - Date.now();\n if (remaining <= 0) return fallback;\n return Promise.race([promise, new Promise<T>((resolve) => setTimeout(() => resolve(fallback), remaining))]);\n };\n\n const beginClose = (reason = \"Runtime bridge closing\"): void => { session.beginClose(reason); };\n const drain = (requestedTimeoutMs = DEFAULT_RUNTIME_DRAIN_TIMEOUT_MS): Promise<RuntimeDrainResult> => {\n if (drainPromise) return drainPromise;\n if (!Number.isFinite(requestedTimeoutMs) || requestedTimeoutMs < 1 || requestedTimeoutMs > 300_000) {\n return Promise.reject(new TypeError(\"drain timeoutMs must be a finite number from 1 to 300000\"));\n }\n const alreadyClosed = session.state === \"closed\";\n beginClose(\"Runtime bridge drain requested\");\n const effectiveTimeout = Math.min(requestedTimeoutMs, session.maxDrainTimeoutMs);\n const deadline = Date.now() + effectiveTimeout;\n const localDrain = session.drain(effectiveTimeout);\n if (alreadyClosed) {\n // A peer-initiated close may have completed before the owner calls its\n // own dispose(). The session result is already the terminal evidence;\n // do not send a new close into a transport that the peer has torn down\n // and do not wait for an acknowledgement that cannot arrive.\n drainPromise = (async () => {\n const localFallback: RuntimeDrainResult = {\n state: session.state,\n drained: false,\n timedOut: true,\n pendingExecutions: callbackExecutions.size,\n };\n return bounded(localDrain, localFallback, deadline);\n })();\n return drainPromise;\n }\n const ackPromise = receivedCloseAck\n ? Promise.resolve(receivedCloseAck)\n : new Promise<RuntimeDrainResult>((resolve) => { closeAckWaiter = { resolve }; });\n if (!closeMessageSent) {\n try {\n sendWire({\n type: RUNTIME_CLOSE_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n binding: localBinding,\n timeoutMs: effectiveTimeout,\n });\n closeMessageSent = true;\n } catch {\n closeAckWaiter = undefined;\n }\n }\n drainPromise = (async () => {\n const localFallback: RuntimeDrainResult = {\n state: session.state,\n drained: false,\n timedOut: true,\n pendingExecutions: callbackExecutions.size,\n };\n const local = await bounded(localDrain, localFallback, deadline);\n const ack = await bounded(ackPromise, undefined, deadline);\n if (ack === undefined) closeAckWaiter = undefined;\n const timedOut = local.timedOut || !ack || ack.timedOut;\n return {\n state: session.state,\n drained: local.drained && !!ack && ack.drained,\n timedOut,\n pendingExecutions: local.pendingExecutions + (ack?.pendingExecutions ?? 0),\n };\n })();\n return drainPromise;\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) {\n failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n return;\n }\n try {\n if (!metadata?.decoded) message = codec.decode(message);\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") {\n failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n } else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") {\n failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n } else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n return;\n }\n try {\n // The codec validates the shape; the endpoint session validates identity.\n // A different binding on the same physical port is always stale, even if\n // its callId/serviceInstanceId happens to match a live request.\n const bindingAccepted = session.acceptRemoteBinding(message.binding);\n // A simultaneous close can physically close this session while the\n // peer's close-ack is still queued on the port. It is safe to consume\n // that one ACK only when it carries the already-locked remote binding;\n // every other post-close identity mismatch remains terminal.\n const closedKnownCloseAck = !bindingAccepted\n && session.state === \"closed\"\n && message.type === RUNTIME_CLOSE_ACK_TYPE\n && sameRuntimeEndpointBinding(session.remoteBinding, message.binding);\n if (!bindingAccepted && !closedKnownCloseAck) {\n ledger.closeUndelivered();\n failClose(\"Runtime endpoint binding mismatch\", \"invalid_message\");\n return;\n }\n if (message.type === RUNTIME_CLOSE_TYPE) {\n ledger.closeUndelivered();\n session.beginClose(\"Remote Runtime endpoint closing\");\n // A remote request can tighten this endpoint's deadline, never extend\n // the locally trusted bounded limit.\n const timeout = Math.min(message.timeoutMs ?? session.maxDrainTimeoutMs, session.maxDrainTimeoutMs);\n void session.drain(timeout).then((result) => {\n // Both endpoints may initiate close in the same turn. The local\n // session can already be physically closed by the peer's ACK before\n // this remote-close continuation runs; it must still acknowledge the\n // remote binding once, while the transport remains available.\n if (closeAckSent) return;\n closeAckSent = true;\n try {\n sendWire({\n type: RUNTIME_CLOSE_ACK_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n binding: localBinding,\n acknowledgedBinding: message.binding,\n drained: result.drained,\n timedOut: result.timedOut,\n pendingExecutions: result.pendingExecutions,\n });\n } catch { /* physical close still fences the endpoint */ }\n session.close();\n // Let the close-ack leave a real MessagePort before tearing down the\n // transport. MessagePort.close() may discard a just-posted message,\n // which otherwise makes simultaneous two-end close time out.\n setTimeout(() => { try { options.transport.close?.(); } catch { /* best effort */ } }, 10);\n });\n return;\n }\n if (message.type === RUNTIME_CLOSE_ACK_TYPE) {\n ledger.closeUndelivered();\n if (!sameRuntimeEndpointBinding(message.acknowledgedBinding, localBinding)) {\n failClose(\"Runtime close acknowledgement binding mismatch\", \"invalid_message\");\n return;\n }\n const result: RuntimeDrainResult = {\n state: session.state,\n drained: message.drained,\n timedOut: message.timedOut,\n pendingExecutions: message.pendingExecutions,\n };\n receivedCloseAck = result;\n const waiter = closeAckWaiter;\n closeAckWaiter = undefined;\n waiter?.resolve(result);\n return;\n }\n // A Runtime connection has one physical bidirectional port. Incoming\n // call/cancel/credit messages belong to the peer-side Provider listener;\n // this bridge must leave its event.ports ledger untouched so that the\n // Provider can validate and hand off business resources.\n if (message.type === RUNTIME_CALL_TYPE || message.type === RUNTIME_CANCEL_TYPE || message.type === RUNTIME_CREDIT_TYPE) return;\n if (message.type === RUNTIME_SNAPSHOT_TYPE) {\n if (ledger.ports.length > 0) throw frameworkError(\"transfer_invalid\", \"receive\");\n const result = applySnapshot(message);\n if (!result.accepted && result.reason === \"protocol-mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (!result.accepted && result.reason === \"invalid-snapshot\") failClose(\"Invalid Runtime snapshot\", \"invalid_snapshot\");\n return;\n }\n if (message.type === RUNTIME_ERROR_TYPE) { ledger.closeUndelivered(); invalidate(message.message); return; }\n if (message.type === RUNTIME_RESULT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n if (entry.mode === \"unary\") {\n if (!(\"result\" in message)) { ledger.closeUndelivered(); settleUnary(entry, frameworkError(\"invalid_message\", \"receive\", contextFor(entry.capability, entry.reference))); return; }\n try {\n const incoming = prepareIncoming(entry.capability, message.result, \"response\", ledger);\n ledger.handoff();\n settleUnary(entry, undefined, incoming.value);\n } catch (error) { settleUnary(entry, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(entry.capability, entry.reference))); }\n return;\n }\n const stream = entry as PendingStream;\n if (\"streamReady\" in message && message.streamReady) {\n if (stream.state !== \"opening\") { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.state = \"active\";\n stream.readySettled = true;\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n releasePendingReservation(stream.reservation);\n stream.resolveReady();\n emit();\n return;\n }\n if (\"done\" in message && message.done) {\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.doneReceived = true;\n stream.state = \"draining\";\n pending.delete(stream.callId);\n releaseStreamReservation(stream.reservation);\n releasePayloadReservation(stream.reservation);\n stream.cleanup?.();\n finishDraining(stream);\n drainStream(stream);\n emit();\n return;\n }\n ledger.closeUndelivered();\n terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true);\n return;\n }\n if (message.type === RUNTIME_ERROR_MESSAGE_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n ledger.closeUndelivered();\n const error = errorFromWire(message);\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, false);\n else settleUnary(entry, error);\n return;\n }\n if (message.type === RUNTIME_NEXT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.mode !== \"stream\" || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n const stream = entry as PendingStream;\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (stream.credit < 1) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (message.sequence !== stream.sequence) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n let incoming: ReturnType<typeof prepareIncoming>;\n try { incoming = prepareIncoming(stream.capability, message.item, \"item\", ledger); }\n catch (error) { terminateStream(stream, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n const { value, stats } = incoming;\n if (peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - stats.budgetBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - stats.budgetBytes\n || stream.queue.length >= stream.window) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"resource_limit_exceeded\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.credit -= 1;\n stream.sequence += 1;\n stream.queue.push({ value, ledger, budgetBytes: stats.budgetBytes });\n peerRetainedPayloadBytes += stats.budgetBytes;\n budget.retainedPayloadBytes += stats.budgetBytes;\n drainStream(stream);\n return;\n }\n ledger.closeUndelivered();\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid WebLoom runtime message\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n }\n };\n\n const removeTransport = options.transport.subscribe((message, metadata) => onMessage(message, metadata));\n const removeTransportError = options.transport.subscribeError?.((error, metadata) => {\n metadata?.ledger?.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n });\n\n function applySnapshot(snapshot: RuntimeSnapshotMessage): SnapshotApplyResult {\n if (disposed) return { accepted: false, reason: \"disposed\" };\n if (!snapshot || typeof snapshot !== \"object\") return { accepted: false, reason: \"invalid-snapshot\" };\n if (snapshot.protocolVersion !== RUNTIME_PROTOCOL_VERSION) return { accepted: false, reason: \"protocol-mismatch\" };\n const binding = snapshot.binding;\n if (!session.acceptRemoteBinding(binding)) return { accepted: false, reason: \"invalid-snapshot\" };\n try {\n if (snapshot.units.length > limits.maxSnapshotUnits || snapshot.services.length > limits.maxSnapshotServices) return { accepted: false, reason: \"invalid-snapshot\" };\n const wireSnapshot = { ...snapshot, type: RUNTIME_SNAPSHOT_TYPE } as RuntimeSnapshotMessage;\n codec.encode(wireSnapshot);\n validateDto(wireSnapshot, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, phase: \"receive\" });\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (options.remoteRuntimeId !== undefined && snapshot.runtimeId !== options.remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (options.remoteRuntimeKind !== undefined && snapshot.runtimeKind !== options.remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeId !== undefined && snapshot.runtimeId !== remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeKind !== undefined && snapshot.runtimeKind !== remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n let fingerprint: string;\n try { fingerprint = JSON.stringify(snapshot); } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId === snapshot.runtimeInstanceId && snapshot.revision <= revision) {\n // A transport may have more than one internal observer. Replaying the\n // exact same revision is harmless and lets an observer report the state;\n // a different payload at that revision remains rejected.\n if (snapshot.revision === revision && fingerprint === appliedSnapshotFingerprint) return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n return { accepted: false, reason: \"stale-revision\", receivedRevision: snapshot.revision };\n }\n const services: ServiceReference[] = [];\n const keys = new Set<string>();\n try {\n for (const service of snapshot.state === \"ready\" ? snapshot.services : []) {\n const key = serviceKey(service);\n if (keys.has(key)) return { accepted: false, reason: \"invalid-snapshot\" };\n keys.add(key);\n services.push(Object.freeze({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, runtime: snapshot.runtimeKind, runtimeInstanceId: snapshot.runtimeInstanceId, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) }));\n }\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n const newRuntime = remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId !== snapshot.runtimeInstanceId;\n // Adding a service while a proxy is waiting is not an exposure replacement.\n // Only an existing contract whose serviceInstanceId changes is a fence event;\n // otherwise the first ready snapshot would revoke a proxy created just before\n // the asynchronous directory arrived.\n const replaced = !newRuntime && remoteRuntimeInstanceId === snapshot.runtimeInstanceId\n && currentServices.some((current) => {\n const next = services.find((service) => serviceKey(service) === serviceKey(current));\n return next !== undefined && next.serviceInstanceId !== current.serviceInstanceId;\n });\n if (newRuntime || replaced) invalidate(newRuntime ? \"Remote Runtime instance changed\" : \"Remote Runtime service exposure replaced\");\n if (!newRuntime && !replaced) {\n for (const proxy of proxies.values()) {\n if (proxy.bound && !services.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n revokeProxy(proxy, \"Remote Runtime service exposure was removed\");\n }\n }\n }\n remoteRuntimeId = snapshot.runtimeId;\n remoteRuntimeKind = snapshot.runtimeKind;\n remoteRuntimeInstanceId = snapshot.runtimeInstanceId;\n revision = snapshot.revision;\n appliedSnapshotFingerprint = fingerprint;\n currentServices = Object.freeze(services);\n currentState = snapshot.state === \"ready\" ? \"ready\" : snapshot.state === \"starting\" ? \"empty\" : snapshot.state === \"disposed\" ? \"disposed\" : \"stale\";\n if (currentState !== \"ready\" && snapshot.state !== \"starting\") for (const proxy of proxies.values()) revokeProxy(proxy, `Remote Runtime is ${snapshot.state}`);\n emit();\n return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n }\n\n const bridge: CapabilityBridge & { readonly pendingCallCount: number; readonly activeStreamCount: number; readonly retainedPayloadBytes: number } = {\n get state() { return currentState; },\n get runtimeInstanceId() { return remoteRuntimeInstanceId; },\n get runtimeKind() { return remoteRuntimeKind; },\n get binding() { return localBinding; },\n get endpointState() { return session.state; },\n getClient<C extends RemoteCapability>(capability: C, scope?: LifecycleScope): CapabilityClient<C> {\n const key = `${capability.kind}\\u0000${capability.id}\\u0000${capability.version}\\u0000${scope?.identity.scopeId ?? \"root\"}`;\n let proxy = proxies.get(key);\n if (!proxy || proxy.revoked) {\n proxy = { capability, scope, cacheKey: key, revoked: false, reason: \"Capability proxy is revoked\" };\n proxies.set(key, proxy);\n scope?.onRevoke((reason) => revokeProxy(proxy as ProxyRecord, reason));\n }\n const cached = clients.get(key);\n if (cached && !proxy.revoked) return cached as CapabilityClient<C>;\n const client = capability.kind === \"rpc\"\n ? { call: (request: unknown, optionsForCall?: RpcCallOptions) => call(proxy as ProxyRecord, request, optionsForCall ?? {}) }\n : { subscribe: (request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>) => subscribe(proxy as ProxyRecord, request, optionsForSubscribe) };\n clients.set(key, client as unknown as CapabilityClient<RemoteCapability>);\n return client as unknown as CapabilityClient<C>;\n },\n applySnapshot,\n invalidate,\n disconnect(reason = \"Runtime disconnected\") { invalidate(reason); currentState = \"stale\"; },\n beginClose,\n drain,\n dispose(reason = \"Runtime bridge disposed\") {\n if (disposed) return;\n // Synchronously fence admission and revoke all proxies before touching\n // the physical transport. dispose() itself is intentionally non-blocking;\n // callers that need the bounded close acknowledgement use drain().\n session.beginClose(reason);\n disposed = true;\n invalidate(reason);\n removeTransport();\n removeTransportError?.();\n options.transport.close?.();\n session.close();\n // Keep the execution participant registered after physical close so a\n // non-cooperative callback remains visible to a later drain query.\n removeSessionBeginClose();\n currentState = \"disposed\";\n emit();\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n services() { return currentServices; },\n get pendingCallCount() { return pendingCount; },\n get activeStreamCount() { return [...streams.values()].filter((entry) => entry.state === \"opening\" || entry.state === \"active\").length; },\n get retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n return bridge;\n}\n\n/** 内部 typed transfer 校验 helper;不接受 call 级临时 transfer 数组。 */\nexport function validateTransferables(value: unknown, transfer: readonly Transferable[] | undefined, limits?: RuntimeLimitsInput): readonly Transferable[] {\n return validateTransferList(value, transfer, { limits: limits ?? DEFAULT_RUNTIME_LIMITS, phase: \"validate\" });\n}\n","// MessagePort 到 v4 RuntimeTransport 的唯一适配。\n\nimport type { RuntimeReceiveMetadata, RuntimeTransport } from \"./serviceBridge.js\";\nimport type { RuntimeWireMessage } from \"../runtime/runtimeProtocol.js\";\nimport { createReceivePortLedger, normalizeRuntimeLimits, type RuntimeLimitsInput } from \"./dto.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createRuntimeMessageCodec } from \"../runtime/runtimeProtocol.js\";\n\nexport interface MessagePortLike {\n addEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n removeEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n postMessage(message: unknown, transfer?: readonly Transferable[]): void;\n start?(): void;\n close?(): void;\n}\n\n/** 将一个真实 MessagePort 绑定为双向 v4 transport。 */\nexport function createMessagePortRuntimeTransport(port: MessagePortLike, options: { readonly limits?: RuntimeLimitsInput } = {}): RuntimeTransport {\n const listeners = new Set<(message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void>();\n const errorListeners = new Set<(error: unknown, metadata?: RuntimeReceiveMetadata) => void>();\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const onMessage = (event: MessageEvent): void => {\n const ledger = createReceivePortLedger(event.ports ?? [], { limits, phase: \"receive\" });\n const metadata: RuntimeReceiveMetadata = Object.freeze({\n ports: ledger.ports,\n ledger,\n decoded: true,\n });\n if (!ledger.valid) {\n const error = new WebLoomError(\"transfer_invalid\", \"Invalid received transfer metadata\", \"receive\");\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n let message: RuntimeWireMessage;\n try { message = codec.decode(event.data); }\n catch (error) {\n ledger.closeUndelivered();\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n for (const listener of [...listeners]) {\n try { listener(message, metadata); } catch { /* observer isolation */ }\n }\n };\n port.addEventListener(\"message\", onMessage);\n port.start?.();\n let closed = false;\n return {\n send(message, transfer) {\n if (closed) throw new Error(\"MessagePort transport is closed\");\n port.postMessage(message, transfer);\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n subscribeError(listener) { errorListeners.add(listener); return () => errorListeners.delete(listener); },\n close() { if (closed) return; closed = true; port.removeEventListener(\"message\", onMessage); port.close?.(); listeners.clear(); errorListeners.clear(); },\n };\n}\n","// v4 MessagePort provider:同一物理端口上的反向 call/stream 分派。\n\nimport type { CapabilityPeer, HandlerCallContext, ServiceReference } from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope, type RuntimeEndpointBinding, type RuntimeDrainResult } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n createReceivePortLedger,\n createRuntimeBudget,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n createRuntimeMessageCodec,\n type RuntimeCallMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"./messagePortServiceTransport.js\";\nimport type { RuntimeTransport } from \"./serviceBridge.js\";\nimport { createRuntimeEndpointBinding, createRuntimeEndpointSession, sameRuntimeEndpointBinding, type RuntimeEndpointSession } from \"../runtime/runtimeSession.js\";\n\nexport interface MessagePortServiceCallInput {\n /** 已验证的 call message;request 已由生产 parser 规范化。 */\n readonly message: RuntimeCallMessage;\n /** parser 规范化后的请求。 */\n readonly request: unknown;\n /** 服务绑定身份。 */\n readonly reference: ServiceReference;\n /** 取消信号。 */\n readonly signal: AbortSignal;\n /** 本端以接收时钟计算的调用截止时间。 */\n readonly deadlineAt: number;\n /** 发起此调用的物理 endpoint binding。 */\n readonly binding: RuntimeEndpointBinding;\n /** 对端 peer 视图。 */\n readonly peer?: CapabilityPeer;\n}\n\nexport interface PreparedRequest {\n /** parser 规范化后的 DTO。 */\n readonly value: unknown;\n /** 契约声明的 transfer。 */\n readonly transfer?: readonly Transferable[];\n /** 可选的已计算计费值。 */\n readonly budgetBytes?: number;\n}\n\nexport interface MessagePortServiceProviderOptions {\n /** 兼容 standalone/testing 的当前 MessagePort;实际 Runtime 使用 shared transport。 */\n readonly port?: MessagePortLike;\n /** 当前物理 endpoint 的唯一 v4 transport。 */\n readonly transport?: RuntimeTransport;\n /** 当前可暴露的服务;返回空集合即拒绝新的调用。 */\n readonly services: () => readonly ServiceReference[];\n /** 调用 Host handler。 */\n readonly handleCall: (input: MessagePortServiceCallInput) => unknown | Promise<unknown | AsyncIterable<unknown>>;\n /** 当前 peer scope。 */\n readonly peerScope?: LifecycleScope;\n /** 默认 peer view;peerForCall 可按 handler 依赖进一步收窄。 */\n readonly peer?: CapabilityPeer;\n /** 当前 handler 所属插件允许观察的 peer view。 */\n readonly peerForCall?: (call: RuntimeCallMessage, reference: ServiceReference) => CapabilityPeer | undefined;\n /** 接收 request 的 parser/transfer 适配。 */\n readonly prepareRequest?: (call: RuntimeCallMessage, ledger: ReceivePortLedger) => PreparedRequest;\n /** 发送前验证/提取 unary response。 */\n readonly prepareResult?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 发送前验证/提取 stream item。 */\n readonly prepareItem?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 可信 Runtime/advanced 装配预算。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n /** 当前物理 endpoint 的框架 binding;省略时由 provider 生成。 */\n readonly binding?: RuntimeEndpointBinding;\n /** 与同一端口 bridge 共用的 endpoint session。 */\n readonly session?: RuntimeEndpointSession;\n /** 关闭握手默认 drain deadline。 */\n readonly drainTimeoutMs?: number;\n}\n\ninterface ActiveCall {\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly requestBytes: number;\n readonly deadlineAt: number;\n deadlineTimer?: ReturnType<typeof setTimeout>;\n removePeerRevoke?: () => void;\n pending: boolean;\n /** reserve() 为 stream 预留的活动槽;在 pending/stream 终态只释放一次。 */\n streamReserved: boolean;\n cancelled: boolean;\n /** 本端已经结束等待/交付,但业务执行仍可能未结束。 */\n frameworkSettled: boolean;\n executionReleased: boolean;\n}\n\ninterface StreamEntry {\n readonly active: ActiveCall;\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly window: number;\n iterator?: AsyncIterator<unknown>;\n credit: number;\n sequence: number;\n running: boolean;\n closed: boolean;\n iteratorDone: boolean;\n returnStarted: boolean;\n returnDone: boolean;\n pumpDone: boolean;\n}\n\nfunction safeErrorCode(error: unknown, fallback: string): string {\n return error instanceof WebLoomError ? error.code : fallback;\n}\n\nfunction post(transport: RuntimeTransport, codec: ReturnType<typeof createRuntimeMessageCodec>, message: RuntimeWireMessage, transfer: readonly Transferable[] = []): boolean {\n try { transport.send(codec.encode(message), transfer); return true; } catch { return false; }\n}\n\nfunction safeErrorMessage(code: string): string {\n const messages: Record<string, string> = {\n capability_unavailable: \"Capability is unavailable\",\n permission_denied: \"Capability authorization denied\",\n service_stale: \"Runtime service exposure is stale\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return messages[code] ?? \"Remote capability operation failed\";\n}\n\n/** 创建一个严格 bounded 的 MessagePort provider。 */\nexport function createMessagePortServiceProvider(options: MessagePortServiceProviderOptions): {\n setServices(): void;\n dispose(): void;\n readonly binding: RuntimeEndpointBinding;\n readonly endpointState: \"active\" | \"closing\" | \"closed\";\n beginClose(reason?: string): void;\n drain(timeoutMs?: number): Promise<RuntimeDrainResult>;\n pendingCount(): number;\n executionCount(): number;\n nonCooperativeExecutionCount(): number;\n retainedPayloadBytes(): number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const configuredTransport = options.transport ?? (options.port ? createMessagePortRuntimeTransport(options.port, { limits }) : undefined);\n if (!configuredTransport) throw new TypeError(\"MessagePort service provider requires transport or port\");\n const transport: RuntimeTransport = configuredTransport;\n const ownsSession = options.session === undefined;\n const session = options.session ?? createRuntimeEndpointSession(options.binding ?? createRuntimeEndpointBinding(`provider:${Date.now().toString(36)}`), { defaultDrainTimeoutMs: options.drainTimeoutMs });\n if (options.binding && !sameRuntimeEndpointBinding(options.binding, session.binding)) throw new TypeError(\"MessagePort service provider binding disagrees with endpoint session\");\n const localBinding = session.binding;\n const activeCalls = new Map<string, ActiveCall>();\n const streams = new Map<string, StreamEntry>();\n const executionSlots = new Map<string, ActiveCall>();\n const executionDrainWaiters = new Set<() => void>();\n let peerRetainedPayloadBytes = 0;\n let disposed = false;\n\n const serviceFor = (message: RuntimeCallMessage): ServiceReference | undefined => options.services().find((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n && service.serviceInstanceId === message.serviceInstanceId\n ));\n\n const serviceErrorCode = (message: RuntimeCallMessage): \"capability_unavailable\" | \"service_stale\" => {\n // services() is the peer's visible projection. An absent contract must\n // not reveal whether a hidden provider exists; a wrong exposure identity\n // for a currently visible contract is the only stale case we can safely\n // identify at this boundary.\n const visibleContract = options.services().some((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n ));\n return visibleContract ? \"service_stale\" : \"capability_unavailable\";\n };\n\n const sendError = (call: RuntimeCallMessage, code: string, phase: \"validate\" | \"wait\" | \"dispatch\" | \"execute\" | \"receive\" | \"dispose\"): void => {\n post(transport, codec, {\n type: RUNTIME_ERROR_MESSAGE_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n binding: localBinding,\n callId: call.callId,\n serviceInstanceId: call.serviceInstanceId,\n error: { code, message: safeErrorMessage(code), phase },\n });\n };\n\n const releaseExecution = (active: ActiveCall): void => {\n if (active.executionReleased) return;\n active.executionReleased = true;\n if (executionSlots.get(active.call.callId) === active) executionSlots.delete(active.call.callId);\n budget.releaseExecutionSlot();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - active.requestBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - active.requestBytes);\n active.removePeerRevoke?.();\n active.removePeerRevoke = undefined;\n if (executionSlots.size === 0) {\n for (const resolve of [...executionDrainWaiters]) resolve();\n executionDrainWaiters.clear();\n }\n };\n\n const releaseStreamReservation = (active: ActiveCall): void => {\n if (!active.streamReserved) return;\n active.streamReserved = false;\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePending = (active: ActiveCall): void => {\n if (!active.pending) return;\n active.pending = false;\n if (activeCalls.get(active.call.callId) === active) activeCalls.delete(active.call.callId);\n if (active.deadlineTimer !== undefined) { clearTimeout(active.deadlineTimer); active.deadlineTimer = undefined; }\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const finishPending = (active: ActiveCall): void => {\n releasePending(active);\n };\n\n const maybeReleaseStreamExecution = (stream: StreamEntry): void => {\n if (stream.pumpDone && stream.returnDone) releaseExecution(stream.active);\n };\n\n const returnIterator = (stream: StreamEntry): void => {\n if (stream.returnStarted) return;\n stream.returnStarted = true;\n const candidate = stream.iterator?.return;\n if (!candidate) { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n let result: unknown;\n try { result = candidate.call(stream.iterator); }\n catch { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n void Promise.resolve(result).then(() => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n }, () => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n });\n };\n\n const closeStream = (stream: StreamEntry, normalDone = false): void => {\n if (stream.closed) return;\n stream.closed = true;\n stream.active.cancelled = true;\n finishPending(stream.active);\n streams.delete(stream.call.callId);\n releaseStreamReservation(stream.active);\n if (normalDone) {\n stream.iteratorDone = true;\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n } else {\n // If the pump was never started (for example streamReady post failed),\n // there is no finally block that can mark it settled.\n if (!stream.running) stream.pumpDone = true;\n returnIterator(stream);\n maybeReleaseStreamExecution(stream);\n }\n };\n\n const closeLateIterable = async (value: unknown): Promise<void> => {\n try {\n if (!value || typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") return;\n const iterator = (value as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n const close = iterator.return;\n if (close) await Promise.resolve(close.call(iterator));\n } catch {\n // A late iterator is already outside the consumer boundary; its cleanup\n // failure must not create an unhandled rejection or leak wire details.\n }\n };\n\n const cancelActive = (active: ActiveCall, errorCode = \"request_cancelled\"): void => {\n if (active.cancelled) return;\n active.frameworkSettled = true;\n active.cancelled = true;\n try { active.controller.abort(); } catch { /* noop */ }\n const stream = streams.get(active.call.callId);\n if (stream) closeStream(stream);\n else finishPending(active);\n void errorCode;\n };\n\n const reserve = (requestBytes: number, stream: boolean): WebLoomError | undefined => {\n if (activeCalls.size >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (executionSlots.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (stream && (streams.size >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (requestBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - requestBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - requestBytes) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n budget.executionSlots += 1;\n peerRetainedPayloadBytes += requestBytes;\n budget.retainedPayloadBytes += requestBytes;\n return undefined;\n };\n\n const prepareRequest = (call: RuntimeCallMessage, ledger: ReceivePortLedger): { value: unknown; budgetBytes: number } => {\n try { validateRawDto(call.request, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n let prepared: PreparedRequest;\n try { prepared = options.prepareRequest?.(call, ledger) ?? { value: call.request }; }\n catch (error) { ledger.closeUndelivered(); throw error; }\n let transfer: readonly Transferable[];\n try { transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n try { assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n const stats = validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n // Quota ownership always uses the production walker result. An adapter's\n // optional precomputed field must not be able to under-report a normalized\n // payload and bypass retained-byte limits.\n return { value: prepared.value, budgetBytes: stats.budgetBytes };\n };\n\n const prepareOutput = (prepared: PreparedRequest, ledger?: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[] } => {\n try {\n const transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" });\n if (ledger) assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" });\n validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n return { value: prepared.value, transfer };\n } catch (error) { ledger?.closeUndelivered(); throw error; }\n };\n\n const pump = async (entry: StreamEntry): Promise<void> => {\n if (entry.running || entry.closed || !entry.iterator) return;\n entry.running = true;\n try {\n while (!entry.closed && !entry.active.cancelled && entry.credit > 0) {\n let next: IteratorResult<unknown>;\n try { next = await entry.iterator.next(); }\n catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"handler_failed\"), \"execute\");\n closeStream(entry);\n break;\n }\n if (entry.closed || entry.active.cancelled) break;\n if (next.done) {\n entry.iteratorDone = true;\n if (post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, done: true })) closeStream(entry, true);\n else { sendError(entry.call, \"transport_unavailable\", \"receive\"); closeStream(entry, true); }\n break;\n }\n try {\n const prepared = options.prepareItem?.(next.value, entry.call) ?? { value: next.value };\n const output = prepareOutput(prepared);\n if (!post(transport, codec, { type: RUNTIME_NEXT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, sequence: entry.sequence, item: output.value }, output.transfer)) {\n sendError(entry.call, \"response_clone_failed\", \"receive\");\n closeStream(entry);\n break;\n }\n entry.credit -= 1;\n entry.sequence += 1;\n } catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"response_validation_failed\"), \"receive\");\n closeStream(entry);\n break;\n }\n }\n } finally {\n entry.running = false;\n entry.pumpDone = true;\n maybeReleaseStreamExecution(entry);\n }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: import(\"./serviceBridge.js\").RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) { failClose(); return; }\n\n try {\n // Every RuntimeTransport, including advanced/testing transports, must\n // pass the same strict wire codec. There is no missing-binding\n // compatibility path here.\n if (!metadata?.decoded) message = codec.decode(message);\n } catch {\n ledger.closeUndelivered();\n failClose();\n return;\n }\n\n // The transport codec checks the binding shape; the endpoint session checks\n // that this physical port never changes peer identity mid-connection.\n const bindingAccepted = session.acceptRemoteBinding(message.binding);\n // A close-ack can arrive after the shared session has already transitioned\n // to closed. Provider does not consume ACKs, but must discard this late\n // same-binding control message without turning a completed close into a\n // second terminal failure. A different binding is still terminal.\n const closedKnownControl = !bindingAccepted\n && session.state === \"closed\"\n && sameRuntimeEndpointBinding(session.remoteBinding, message.binding);\n if (!bindingAccepted && !closedKnownControl) {\n ledger.closeUndelivered();\n failClose();\n return;\n }\n\n if (message.type === RUNTIME_CANCEL_TYPE) {\n ledger.closeUndelivered();\n const active = activeCalls.get(message.callId) ?? streams.get(message.callId)?.active;\n if (!active || active.reference.serviceInstanceId !== message.serviceInstanceId) return;\n cancelActive(active);\n return;\n }\n\n if (message.type === RUNTIME_CREDIT_TYPE) {\n ledger.closeUndelivered();\n const stream = streams.get(message.callId);\n const valid = stream !== undefined\n && stream.reference.serviceInstanceId === message.serviceInstanceId\n && Number.isSafeInteger(message.count)\n && message.count >= 1\n && message.count <= limits.maxStreamCredit\n && stream.credit + message.count <= stream.window;\n if (!valid) {\n if (stream && !stream.active.cancelled) sendError(stream.call, \"stream_overflow\", \"receive\");\n if (stream) closeStream(stream);\n return;\n }\n stream.credit += message.count;\n void pump(stream);\n return;\n }\n\n // The physical port is bidirectional: result/next/snapshot messages are\n // consumed by the bridge listener on this same port. They are not an\n // invalid provider message and their business ports must remain available\n // to that listener.\n if (message.type !== RUNTIME_CALL_TYPE) return;\n if (session.state !== \"active\" || disposed) {\n ledger.closeUndelivered();\n sendError(message, \"service_revoked\", \"dispose\");\n return;\n }\n const reference = serviceFor(message);\n if (!reference) { ledger.closeUndelivered(); sendError(message, serviceErrorCode(message), \"dispatch\"); return; }\n if (activeCalls.has(message.callId) || executionSlots.has(message.callId)) { ledger.closeUndelivered(); sendError(message, \"invalid_message\", \"dispatch\"); return; }\n // A published domain grant is part of the service exposure identity. A\n // caller must echo it exactly; omission is not equivalent to possession.\n if (message.grantId !== reference.grantId) { ledger.closeUndelivered(); sendError(message, \"permission_denied\", \"dispatch\"); return; }\n const initialCredit = message.initialCredit;\n if (message.mode === \"stream\" && (!Number.isSafeInteger(initialCredit) || (initialCredit as number) < 1 || (initialCredit as number) > limits.maxStreamCredit)) {\n ledger.closeUndelivered();\n sendError(message, \"stream_overflow\", \"validate\");\n return;\n }\n let request: { value: unknown; budgetBytes: number };\n try { request = prepareRequest(message, ledger); }\n catch (error) { sendError(message, safeErrorCode(error, \"request_validation_failed\"), error instanceof WebLoomError ? error.phase : \"receive\"); return; }\n const quotaError = reserve(request.budgetBytes, message.mode === \"stream\");\n if (quotaError) { ledger.closeUndelivered(); sendError(message, quotaError.code, \"dispatch\"); return; }\n // Request ports are now part of the handler DTO. The handler owns them only\n // after this point; provider no longer closes them on later cancellation.\n ledger.handoff();\n const controller = new AbortController();\n const active: ActiveCall = { call: { ...message, request: request.value }, controller, reference, requestBytes: request.budgetBytes, deadlineAt: Date.now() + message.timeoutMs, pending: true, streamReserved: message.mode === \"stream\", cancelled: false, frameworkSettled: false, executionReleased: false };\n activeCalls.set(message.callId, active);\n executionSlots.set(message.callId, active);\n if (options.peerScope) active.removePeerRevoke = options.peerScope.onRevoke(() => cancelActive(active, \"service_revoked\"));\n active.deadlineTimer = setTimeout(() => cancelActive(active, \"call_timeout\"), message.timeoutMs);\n const callPeer = options.peerForCall?.(active.call, reference) ?? options.peer;\n\n void (async () => {\n let stream: StreamEntry | undefined;\n try {\n if (active.cancelled || disposed) { releaseExecution(active); return; }\n const result = await options.handleCall({ message: active.call, request: request.value, reference, signal: controller.signal, deadlineAt: active.deadlineAt, binding: active.call.binding, peer: callPeer });\n if (active.cancelled || disposed || executionSlots.get(message.callId) !== active) {\n if (message.mode === \"stream\") await closeLateIterable(result);\n releaseExecution(active);\n return;\n }\n if (message.mode === \"unary\") {\n try {\n const output = prepareOutput(options.prepareResult?.(result, active.call) ?? { value: result });\n if (!active.cancelled && !post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, result: output.value }, output.transfer)) sendError(message, \"response_clone_failed\", \"receive\");\n } catch (error) { if (!active.cancelled) sendError(message, safeErrorCode(error, \"response_validation_failed\"), \"receive\"); }\n finishPending(active);\n releaseExecution(active);\n return;\n }\n if (!result || typeof (result as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") throw new WebLoomError(\"handler_failed\", \"Stream handler did not return AsyncIterable\", \"execute\");\n const iterator = (result as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n // An acquired iterator remains an execution slot while it is idle on\n // zero credit. It is released only after natural exhaustion or a\n // completed iterator.return().\n stream = { active, call: active.call, controller, reference, window: message.initialCredit ?? 16, iterator, credit: message.initialCredit ?? 16, sequence: 1, running: false, closed: false, iteratorDone: false, returnStarted: false, returnDone: false, pumpDone: false };\n streams.set(message.callId, stream);\n if (!post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, binding: localBinding, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, streamReady: true })) {\n sendError(message, \"transport_unavailable\", \"dispatch\");\n closeStream(stream);\n return;\n }\n releasePending(active);\n void pump(stream);\n } catch (error) {\n if (!active.cancelled && !disposed) sendError(message, safeErrorCode(error, \"handler_failed\"), error instanceof WebLoomError ? error.phase : \"execute\");\n if (stream) closeStream(stream);\n else { finishPending(active); releaseExecution(active); }\n }\n })().catch(() => {\n const lateStream = streams.get(active.call.callId);\n if (lateStream) closeStream(lateStream);\n else { finishPending(active); releaseExecution(active); }\n });\n };\n\n const drainExecutions = (): Promise<void> => {\n if (executionSlots.size === 0) return Promise.resolve();\n return new Promise<void>((resolve) => executionDrainWaiters.add(resolve));\n };\n session.registerDrainParticipant({\n drain: drainExecutions,\n pending: () => executionSlots.size,\n });\n\n let removeTransport: () => void = () => undefined;\n function dispose(): void {\n if (disposed) return;\n disposed = true;\n for (const active of [...activeCalls.values()]) cancelActive(active, \"service_revoked\");\n for (const stream of [...streams.values()]) closeStream(stream);\n removeTransport();\n if (ownsSession) session.close();\n }\n\n function failClose(): void {\n dispose();\n try { transport.close?.(); } catch { /* best effort */ }\n session.close();\n }\n\n removeTransport = transport.subscribe(onMessage);\n // Closing the shared endpoint synchronously fences provider admission and\n // aborts its active handlers before any asynchronous drain/transport I/O.\n let removeSessionBeginClose: () => void = () => undefined;\n removeSessionBeginClose = session.onBeginClose(() => dispose());\n session.onClosed(() => {\n // Keep the participant registered after physical close so a later drain\n // still reports non-cooperative execution slots truthfully.\n removeSessionBeginClose();\n });\n return {\n setServices() { /* provider reads the current projection at dispatch time */ },\n dispose,\n get binding() { return localBinding; },\n get endpointState() { return session.state; },\n beginClose(reason = \"Runtime endpoint closing\") { session.beginClose(reason); },\n drain(timeoutMs) { return session.drain(timeoutMs); },\n pendingCount() { return activeCalls.size; },\n executionCount() { return executionSlots.size; },\n nonCooperativeExecutionCount() { return [...executionSlots.values()].filter((active) => active.frameworkSettled).length; },\n retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n}\n","import { capabilityKey, type CapabilityDescriptor, type CapabilityPeer, type CapabilityClient, type RemoteCapability, type CapabilityBridge, type PeerScopeView } from \"../contracts/capability.js\";\nimport type { LifecycleScope, RuntimeEndpointBinding } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\n\n/** 将可信 peer controller 收窄为真正独立的普通 handler 作用域视图。 */\nexport function createPeerScopeView(scope: LifecycleScope): PeerScopeView {\n return Object.freeze({\n get state() { return scope.state; },\n signal: scope.signal,\n onRevoke(listener: (reason: string) => void) { return scope.onRevoke(listener); },\n });\n}\n\n/** 只复制 peer view 的公开字段,避免通过类型断言泄露 controller。 */\nexport function freezePeerView(peer: CapabilityPeer): CapabilityPeer {\n return Object.freeze(peer);\n}\n\nexport interface CreatePeerViewOptions {\n /** 当前物理连接的 opaque peer id。 */\n readonly peerId: string;\n /** 当前物理 endpoint 的框架 binding。 */\n readonly binding?: RuntimeEndpointBinding;\n /** 独立的只读 scope facade。 */\n readonly scope: PeerScopeView;\n /** 当前连接 bridge;其目录身份由 bridge 管理。 */\n readonly bridge: CapabilityBridge;\n /** handler 所属插件声明的 peer capability allowlist;undefined 仅供可信装配使用。 */\n readonly allowed?: readonly CapabilityDescriptor[];\n /** 代理绑定的完整 peer scope。 */\n readonly capabilityScope?: LifecycleScope;\n}\n\n/** 创建真正独立的 PeerView;不把 PeerController 通过类型断言传给普通 handler。 */\nexport function createCapabilityPeerView(options: CreatePeerViewOptions): CapabilityPeer {\n const allowed = options.allowed === undefined\n ? undefined\n : new Set(options.allowed.map((descriptor) => capabilityKey(descriptor)));\n return Object.freeze({\n peerId: options.peerId,\n binding: Object.freeze({ ...(options.binding ?? options.bridge.binding) }),\n get runtime() { return options.bridge.runtimeKind; },\n get runtimeInstanceId() { return options.bridge.runtimeInstanceId; },\n scope: options.scope,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> {\n if (allowed && !allowed.has(capabilityKey(capability))) {\n throw new WebLoomError(\"capability_unavailable\", \"Capability is unavailable\", \"dispatch\", { capabilityId: capability.id });\n }\n return options.bridge.getClient(capability, options.capabilityScope) as CapabilityClient<C>;\n },\n });\n}\n","// Window → SharedWorker 的 v4 双向连接。\n\nimport type { CapabilityBridge, CapabilityClient, CapabilityPeer, RemoteCapability, ServiceReference } from \"../contracts/capability.js\";\nimport { capabilityKey } from \"../contracts/capability.js\";\nimport type { LifecycleDisposeResult, RuntimeEndpointBinding, RuntimeSnapshot } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createCapabilityPeerView, createPeerScopeView } from \"./peerView.js\";\nimport { cloneFrozenAttributes, createRuntimeBudget, normalizeRuntimeLimits, type RuntimeBudget, type RuntimeLimitsInput } from \"../transport/dto.js\";\nimport type { WindowApp, RuntimeHandle, RuntimeStatusListener, RuntimeStatusSnapshot } from \"./runtimeTypes.js\";\nimport { RuntimeUnavailableError } from \"./runtimeTypes.js\";\nimport { createCapabilityBridge } from \"../transport/serviceBridge.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"../transport/messagePortServiceTransport.js\";\nimport { createMessagePortServiceProvider } from \"../transport/messagePortServiceProvider.js\";\nimport { invokeCapabilityHandler } from \"../host/capabilityRegistry.js\";\nimport { hostForWindowApp } from \"./windowRuntime.js\";\nimport { RUNTIME_ERROR_TYPE, RUNTIME_PROTOCOL_VERSION, RUNTIME_SNAPSHOT_TYPE } from \"./runtimeProtocol.js\";\nimport { createRuntimeEndpointBinding, createRuntimeEndpointSession } from \"./runtimeSession.js\";\n\nexport interface SharedWorkerLike {\n /** SharedWorker 主端口。 */\n readonly port: MessagePort;\n /** Worker error callback。 */\n onerror?: (event: Event) => void;\n addEventListener?(type: \"error\", listener: (event: Event) => void): void;\n removeEventListener?(type: \"error\", listener: (event: Event) => void): void;\n}\n\nexport type SharedWorkerFactory = (url: string | URL, options: { type: \"module\"; name?: string; credentials?: RequestCredentials }) => SharedWorkerLike;\n\nexport interface SharedWorkerClientExposure {\n /** 已完成本地初始化的 WindowApp。 */\n readonly app: WindowApp;\n /** 明确暴露给 Worker 的 RPC/stream capability。 */\n readonly expose?: readonly RemoteCapability[];\n}\n\nexport interface ConnectSharedWorkerOptions {\n /** Worker Runtime 逻辑标识。 */\n readonly id: string;\n /** Worker 构建 URL。 */\n readonly url: string | URL;\n /** SharedWorker name。 */\n readonly name?: string;\n /** 请求 credentials。 */\n readonly credentials?: RequestCredentials;\n /** 默认 call 预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 transport 配额;只能使用默认值或收紧。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的页面反向能力。 */\n readonly client?: SharedWorkerClientExposure;\n}\n\ninterface InternalOptions extends ConnectSharedWorkerOptions { readonly workerFactory?: SharedWorkerFactory; }\nconst handleBridges = new WeakMap<object, CapabilityBridge>();\n\nfunction makeWorker(options: InternalOptions): SharedWorkerLike {\n const workerOptions = { type: \"module\" as const, ...(options.name !== undefined ? { name: options.name } : {}), ...(options.credentials !== undefined ? { credentials: options.credentials } : {}) };\n if (options.workerFactory) return options.workerFactory(options.url, workerOptions);\n const WorkerConstructor = (globalThis as unknown as { SharedWorker?: new (url: string | URL, options: typeof workerOptions) => SharedWorkerLike }).SharedWorker;\n if (!WorkerConstructor) throw new RuntimeUnavailableError(\"SharedWorker is not supported by this browser\");\n return new WorkerConstructor(options.url, workerOptions);\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n\nfunction snapshotForClient(app: WindowApp, runtimeId: string, runtimeInstanceId: string, binding: RuntimeEndpointBinding, exposed: readonly RemoteCapability[], revision: number): RuntimeSnapshot & { readonly type: typeof RUNTIME_SNAPSHOT_TYPE; readonly binding: RuntimeEndpointBinding } {\n const allowed = new Set(exposed.map((capability) => capabilityKey(capability)));\n const state = app.state();\n const runtimeState: RuntimeSnapshot[\"state\"] = state.state === \"disconnected\" ? \"failed\" : state.state;\n return {\n type: RUNTIME_SNAPSHOT_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n runtimeId,\n runtimeKind: \"window-main\",\n runtimeInstanceId,\n revision,\n state: runtimeState,\n units: state.units,\n services: runtimeState === \"ready\" ? state.services.filter((service) => allowed.has(capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))).map((service) => ({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) })) : [],\n binding,\n };\n}\n\nfunction connectInternal(options: InternalOptions): RuntimeHandle {\n if (!options || typeof options.id !== \"string\" || options.id.trim() === \"\") throw new TypeError(\"SharedWorker runtime id must be a non-empty string\");\n const requestedClientHost = options.client ? hostForWindowApp(options.client.app) : undefined;\n const exposed = options.client?.expose ?? [];\n for (const capability of exposed) {\n if ((capability as { readonly kind?: string }).kind !== \"rpc\" && (capability as { readonly kind?: string }).kind !== \"stream\") throw new TypeError(`Capability \"${(capability as { readonly id?: string }).id ?? \"unknown\"}\" is not remotely exposable`);\n if (!requestedClientHost?.capabilities.registration(capability)) throw new TypeError(`Capability \"${capability.id}\" is not registered by the WindowApp`);\n }\n const worker = makeWorker(options);\n const port = worker.port;\n if (!port) throw new RuntimeUnavailableError(\"SharedWorker did not expose a MessagePort\");\n const limits = normalizeRuntimeLimits(options.limits);\n const transport = createMessagePortRuntimeTransport({\n addEventListener(type, listener) { port.addEventListener(type, listener); },\n removeEventListener(type, listener) { port.removeEventListener(type, listener); },\n postMessage(messageValue, transfer) { (port as unknown as MessagePortLike).postMessage(messageValue, transfer ? [...transfer] : undefined); },\n start() { port.start(); },\n close() { try { port.close(); } catch { /* noop */ } },\n }, { limits });\n const outboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const inboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const localRuntimeInstanceId = options.client?.app.runtimeInstanceId ?? `window:${Date.now().toString(36)}`;\n const binding = createRuntimeEndpointBinding(localRuntimeInstanceId);\n const session = createRuntimeEndpointSession(binding);\n const bridge = createCapabilityBridge({ transport, remoteRuntimeKind: \"shared-worker\", remoteRuntimeId: options.id, defaultCallTimeoutMs: options.defaultCallTimeoutMs, limits, budget: outboundBudget, binding, session });\n const listeners = new Set<RuntimeStatusListener>();\n const workerInstanceId = { value: \"\" };\n let revision = 0;\n let disposed = false;\n let disposePromise: Promise<void> | undefined;\n let current: RuntimeStatusSnapshot = Object.freeze({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: options.id, runtimeKind: \"shared-worker\", runtimeInstanceId: \"\", state: \"starting\", revision: 0, units: [], services: [] });\n const clientHost = requestedClientHost;\n const clientPeerScope = options.client && clientHost\n ? clientHost.rootScope.child(\"peer\", { attributes: { peerId: `peer:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}` } })\n : undefined;\n const clientPeerScopeView = clientPeerScope ? createPeerScopeView(clientPeerScope) : undefined;\n const clientPeer: CapabilityPeer | undefined = clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n binding,\n scope: clientPeerScopeView,\n bridge,\n capabilityScope: clientPeerScope,\n }) : undefined;\n const provider = options.client && clientHost ? createMessagePortServiceProvider({\n transport,\n peerScope: clientPeerScope,\n peer: clientPeer,\n binding,\n session,\n budget: inboundBudget,\n limits,\n services: () => clientHost.serviceReferences().filter((service) => exposed.some((capability) => capabilityKey(capability) === capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))),\n peerForCall: (_call, reference) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n return clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n binding,\n scope: clientPeerScopeView,\n bridge,\n allowed: registration?.peerDependencies ?? [],\n capabilityScope: clientPeerScope,\n }) : undefined;\n },\n prepareRequest: (call) => {\n const registration = clientHost.capabilities.registration({ kind: call.mode === \"stream\" ? \"stream\" : \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== (call.mode === \"stream\" ? \"stream\" : \"rpc\")) throw new WebLoomError(\"service_stale\", \"Window service exposure is stale\", \"dispatch\");\n const capability = registration.capability as typeof registration.capability & { request: { parse(value: unknown): unknown }; transfer?: { request?: (value: unknown) => readonly Transferable[] } };\n let value: unknown;\n try { value = capability.request.parse(call.request); } catch { throw new WebLoomError(\"request_validation_failed\", \"Capability request failed validation\", \"receive\"); }\n return { value, transfer: capability.transfer?.request?.(value) };\n },\n handleCall: async ({ request, reference, signal, deadlineAt, binding: callBinding, peer }) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n if (!registration) throw new WebLoomError(\"service_stale\", \"Window exposure is no longer available\", \"dispatch\");\n const handler = registration.handler as ((value: unknown, context: import(\"../contracts/capability.js\").HandlerCallContext) => unknown | Promise<unknown>) | undefined;\n if (!handler) throw new WebLoomError(\"service_stale\", \"Window service handler is unavailable\", \"dispatch\");\n return handler(request, { signal, deadlineAt, reference, binding: callBinding, origin: \"remote\", peer });\n },\n prepareResult: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"rpc\") throw new Error(\"Window RPC registration disappeared\");\n const rpc = registration.capability as typeof registration.capability & { response: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[] } };\n const parsed = rpc.response.parse(value);\n return { value: parsed, transfer: rpc.transfer?.response?.(parsed) };\n },\n prepareItem: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"stream\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"stream\") throw new Error(\"Window stream registration disappeared\");\n const stream = registration.capability as typeof registration.capability & { item: { parse(value: unknown): unknown }; transfer?: { item?: (value: unknown) => readonly Transferable[] } };\n const parsed = stream.item.parse(value);\n return { value: parsed, transfer: stream.transfer?.item?.(parsed) };\n },\n }) : undefined;\n\n const emit = (next: RuntimeStatusSnapshot): void => { current = Object.freeze({ ...next, units: Object.freeze([...next.units]), services: Object.freeze([...next.services]) }); for (const listener of [...listeners]) { try { listener(current); } catch { /* observer isolation */ } } };\n const sendClientSnapshot = (): void => { if (!options.client || disposed) return; revision += 1; try { transport.send(snapshotForClient(options.client.app, `${options.client.app.runtimeId}`, localRuntimeInstanceId, binding, exposed, revision)); } catch { /* bridge deadline handles disconnect */ } };\n const removeRaw = transport.subscribe((messageValue) => {\n if (messageValue.type === RUNTIME_SNAPSHOT_TYPE && messageValue.runtimeKind === \"shared-worker\") {\n const applied = bridge.applySnapshot(messageValue);\n if (applied.accepted) {\n workerInstanceId.value = messageValue.runtimeInstanceId;\n emit({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: messageValue.runtimeId, runtimeKind: messageValue.runtimeKind, runtimeInstanceId: messageValue.runtimeInstanceId, state: messageValue.state, revision: messageValue.revision, units: messageValue.units, services: messageValue.services, binding: messageValue.binding });\n }\n } else if (messageValue.type === RUNTIME_ERROR_TYPE) {\n bridge.invalidate(messageValue.message);\n emit({ ...current, state: \"failed\", error: messageValue.message, units: [], services: [] });\n }\n });\n const onError = (): void => {\n if (disposed) return;\n // A physical port failure is itself a lifecycle fence. Close the shared\n // endpoint session before clearing the local projection so reverse\n // handlers and pending calls cannot be admitted during recovery.\n session.beginClose(\"SharedWorker disconnected\");\n clientPeerScope?.revoke(\"SharedWorker disconnected\");\n provider?.dispose();\n bridge.disconnect(\"SharedWorker disconnected\");\n session.close();\n emit({ ...current, state: \"disconnected\", runtimeInstanceId: \"\", revision: 0, units: [], services: [], binding: undefined, error: \"SharedWorker disconnected\" });\n };\n port.addEventListener(\"messageerror\", onError);\n if (worker.addEventListener) worker.addEventListener(\"error\", onError);\n else worker.onerror = onError;\n sendClientSnapshot();\n const removeClient = options.client?.app.subscribe(() => sendClientSnapshot());\n\n const handle: RuntimeHandle = {\n runtimeKind: \"shared-worker\", runtimeId: options.id,\n binding,\n get endpointState() { return session.state; },\n get runtimeInstanceId() { return workerInstanceId.value; },\n state: () => current,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> { return bridge.getClient(capability); },\n optionalCapability<C extends RemoteCapability>(capability: C): CapabilityClient<C> | undefined { return bridge.services().some((service) => service.kind === capability.kind && service.capabilityId === capability.id && service.contractVersion === capability.version) ? bridge.getClient(capability) : undefined; },\n inspect: () => Object.freeze({ ...current, pendingCallCount: bridge.pendingCallCount, activeStreamCount: bridge.activeStreamCount, peerCount: current.state === \"ready\" ? 1 : 0 }),\n subscribe(listener) { listeners.add(listener); listener(current); return () => listeners.delete(listener); },\n beginClose(reason = \"SharedWorker connection closing\"): void {\n if (disposed) return;\n session.beginClose(reason);\n clientPeerScope?.revoke(reason);\n },\n drain(timeoutMs): Promise<import(\"../contracts/lifecycle.js\").RuntimeDrainResult> {\n session.beginClose(\"SharedWorker connection drain requested\");\n clientPeerScope?.revoke(\"SharedWorker connection drain requested\");\n return bridge.drain(timeoutMs);\n },\n dispose(reason = \"SharedWorker connection disposed\"): Promise<void> {\n if (disposed) return Promise.resolve();\n if (disposePromise) return disposePromise;\n disposePromise = (async () => {\n emit({ ...current, state: \"stopping\" });\n removeClient?.();\n removeRaw();\n clientPeerScope?.revoke(reason);\n // Keep `disposed` false until the shared session has synchronously\n // notified the bridge/provider. Their onBeginClose listeners are the\n // admission fence for local pending calls and reverse handlers.\n session.beginClose(reason);\n // Keep the bridge listener alive for the close acknowledgement. The\n // provider is fenced synchronously by the shared session callback.\n const drainResult = bridge.drain();\n await drainResult.catch(() => undefined);\n disposed = true;\n provider?.dispose();\n bridge.dispose(reason);\n port.removeEventListener(\"messageerror\", onError);\n worker.removeEventListener?.(\"error\", onError);\n transport.close?.();\n session.close();\n emit({ ...current, state: \"disposed\", runtimeInstanceId: \"\", revision: 0, units: [], services: [], binding: undefined });\n if (clientPeerScope) await clientPeerScope.dispose({ reason });\n })();\n return disposePromise;\n },\n };\n handleBridges.set(handle as object, bridge);\n return handle;\n}\n\n/** 同步创建 RuntimeHandle;ready 由 state/capability Promise 观察。 */\nexport function connectSharedWorker(options: ConnectSharedWorkerOptions): RuntimeHandle { return connectInternal(options); }\n\n/** testing 入口才允许注入可控 Worker 工厂。 */\nexport function connectSharedWorkerForTesting(options: ConnectSharedWorkerOptions, workerFactory: SharedWorkerFactory): RuntimeHandle { return connectInternal({ ...options, workerFactory }); }\n\n/** advanced 装配层取得连接 bridge;普通 RuntimeHandle 不暴露该实现细节。 */\nexport function bridgeForRuntimeHandle(handle: RuntimeHandle): CapabilityBridge {\n const bridge = handleBridges.get(handle as object);\n if (!bridge) throw new Error(\"RuntimeHandle is not owned by WebLoom\");\n return bridge;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { C as CreateWindowAppOptions, a as createWindowApp } from './windowRuntime-
|
|
5
|
-
export { c as createMessageBus } from './messageBus-
|
|
1
|
+
import { ak as Capability, al as CapabilityDependency, am as PluginContribution, an as PluginConfig, ao as PluginContextExtension, R as RuntimeKind, e as PluginPermission, ap as PluginSetup, aq as PluginDefinition } from './runtimeTypes-CleHMFaq.js';
|
|
2
|
+
export { ar as AppLike, as as CapabilityBridge, at as CapabilityClient, C as CapabilityDescriptor, au as CapabilityKind, l as CapabilityPeer, h as CreateUpgradeGateOptions, av as DefineLocalCapabilityOptions, aw as DefineRpcCapabilityOptions, ax as DefineStreamCapabilityOptions, ay as DispatchOptions, az as EventHandler, aA as FrameworkErrorCode, aB as FrameworkErrorContext, aC as FrameworkErrorPhase, aD as HandlerCallContext, aE as HandlerOptions, aF as HandlerOrigin, aG as HostListener, aH as ItemOf, aI as LIFECYCLE_ERROR_TEXT, aJ as LifecycleCleanup, aK as LifecycleCleanupIssue, aL as LifecycleCleanupPhase, aM as LifecycleDisposeOptions, aN as LifecycleDisposeResult, aO as LifecycleResourceHandle, aP as LifecycleResourceSnapshot, f as LifecycleScope, L as LifecycleScopeIdentity, aQ as LifecycleScopeKind, aR as LifecycleScopeRevokedError, aS as LifecycleScopeState, aT as LocalCapability, aU as LocalServiceOf, aV as Message, aW as MessageBus, aX as MessageBusSnapshot, aY as MessageHandler, aZ as MessageMode, a_ as OwnedResourceDefinition, a$ as PeerCapabilityDependency, b0 as PeerScopeView, b1 as PermissionDeniedError, g as PermissionLease, b2 as PermissionLeaseBinding, b3 as PermissionLeaseBindingExpectation, b4 as PermissionLeaseRevokedError, b5 as PluginAttributes, b6 as PluginContext, a as PluginGraph, b7 as PluginIntentCommand, b8 as PluginIntentCommandResult, b9 as PluginIntentController, ba as PluginIntentCoordinator, bb as PluginIntentSnapshot, bc as PluginIntentSubmissionResult, bd as PluginLifecycleState, P as PluginManifest, be as PluginManifestInput, c as PluginReverseDep, bf as PluginStartupMode, bg as PluginState, bh as PluginStateKind, bi as PluginTeardown, bj as PluginUnitGraph, bk as PluginUnitState, bl as PublishOptions, bm as RESOURCE_OWNER, bn as RESOURCE_REGISTRY, bo as RUNTIME_MESSAGE_BUS, bp as RemoteCapability, bq as RequestOf, br as RequestOptions, bs as ResourceContext, bt as ResourceDefinition, bu as ResourceKey, bv as ResourceRegistry, bw as ResourceSnapshot, bx as ResourceStatus, by as ResponseOf, bz as RpcCallOptions, bA as RpcCapability, bB as RpcCapabilityBase, bC as RpcClient, bD as RpcHandler, bE as RpcTransferDescriptor, bF as RuntimeCapabilityDependency, m as RuntimeDrainResult, k as RuntimeEndpointBinding, bG as RuntimeEndpointState, o as RuntimeHandle, bH as RuntimeInitializationError, bI as RuntimeLimits, bJ as RuntimeServiceSnapshot, bK as RuntimeSnapshot, bL as RuntimeStatusListener, bM as RuntimeStatusSnapshot, bN as RuntimeUnavailableError, b as RuntimeUnitDependency, bO as RuntimeUnitDependencyInput, d as RuntimeUnitDescriptor, bP as RuntimeUnitDescriptorInput, bQ as RuntimeUnitImplementationRegistry, bR as SCOPED_TASK_SCHEDULER_CAPABILITY, bS as ScopedTaskDefinition, S as ScopedTaskScheduler, bT as ScopedTaskSnapshot, j as ServiceReference, bU as SnapshotApplyResult, bV as StartupCapabilityErrorDetails, bW as StartupPluginErrorDetails, bX as StreamCapability, bY as StreamCapabilityBase, bZ as StreamClient, b_ as StreamHandler, b$ as StreamSubscribeOptions, c0 as StreamSubscription, c1 as StreamTransferDescriptor, c2 as TransferExtractor, c3 as UpgradeDrainResult, U as UpgradeGate, c4 as UpgradeGateRejectedError, c5 as UpgradeGateState, c6 as UpgradeHandshake, c7 as UpgradeHandshakeResult, c8 as UpgradeIoLease, c9 as UpgradeMode, ca as UpgradeSession, cb as ValueParser, cc as WebLoomError, W as WindowApp, cd as assertCapability, ce as capabilityDescriptor, cf as capabilityKey, cg as defineCapability, ch as isCapability, ci as isCapabilityDescriptor, cj as lifecycleErrorText } from './runtimeTypes-CleHMFaq.js';
|
|
3
|
+
export { A as ActivePeerSnapshot, l as ConnectSharedWorkerOptions, P as PeerController, d as PeerExposureOptions, e as PeerLifecycleEvent, c as RuntimePluginDefinition, S as SharedWorkerApp, m as SharedWorkerLike, h as StartSharedWorkerAppOptions, n as connectSharedWorker, j as createLifecycleScope, k as createResourceScope, s as startSharedWorkerApp } from './sharedWorkerHost-BNMUW-8v.js';
|
|
4
|
+
export { C as CreateWindowAppOptions, a as createWindowApp } from './windowRuntime-BGl_jfbK.js';
|
|
5
|
+
export { c as createMessageBus } from './messageBus-BDtkjs6y.js';
|
|
6
6
|
|
|
7
7
|
/** 普通插件定义选项;插件声明只使用 typed capability 与单一启动策略。 */
|
|
8
8
|
interface DefinePluginOptions<TProvides extends readonly Capability[] = readonly Capability[], TDependencies extends readonly CapabilityDependency[] = readonly CapabilityDependency[], TContribution = PluginContribution, TConfig extends PluginConfig = PluginConfig, TExtension extends PluginContextExtension = PluginContextExtension> {
|