@zlink-systems/framework 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -1,18 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ZLinkActorSessionBindingRegistry = void 0;
3
+ exports.ZLinkActorSessionBindingRegistry = exports.ZLinkActorSessionBindingTermination = void 0;
4
4
  const framework_errors_internal_1 = require("../framework-errors-internal");
5
5
  const abort_1 = require("../abort");
6
6
  const node_async_hooks_1 = require("node:async_hooks");
7
7
  const state_lane_1 = require("../execution/state-lane");
8
8
  const routing_id_1 = require("../routing-id");
9
9
  const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:actor-session-binding-registry');
10
+ var ZLinkActorSessionBindingTermination;
11
+ (function (ZLinkActorSessionBindingTermination) {
12
+ ZLinkActorSessionBindingTermination[ZLinkActorSessionBindingTermination["BindingEnd"] = 0] = "BindingEnd";
13
+ ZLinkActorSessionBindingTermination[ZLinkActorSessionBindingTermination["PhysicalDisconnect"] = 1] = "PhysicalDisconnect";
14
+ })(ZLinkActorSessionBindingTermination || (exports.ZLinkActorSessionBindingTermination = ZLinkActorSessionBindingTermination = {}));
10
15
  class ZLinkActorSessionBindingRegistry {
11
16
  terminalRelocationCapacity;
12
17
  outboundCapacity;
13
18
  sealWaitTimeoutMs;
19
+ errorSink;
14
20
  lane = new state_lane_1.ZLinkStateLane();
15
21
  routes = new Map();
22
+ nextActorSlots = new WeakMap();
16
23
  sealWaiters = new Map();
17
24
  activeFrameWaiters = new Map();
18
25
  relocations = new Map();
@@ -24,10 +31,11 @@ class ZLinkActorSessionBindingRegistry {
24
31
  // (the sealing side) must observe that bound; an unbounded wait here
25
32
  // turns a lost control or a lifecycle interlock into a silent stall
26
33
  // (spec 48:205 — transport/deadline limits apply during relocation).
27
- sealWaitTimeoutMs = 3_000) {
34
+ sealWaitTimeoutMs = 3_000, errorSink) {
28
35
  this.terminalRelocationCapacity = terminalRelocationCapacity;
29
36
  this.outboundCapacity = outboundCapacity;
30
37
  this.sealWaitTimeoutMs = sealWaitTimeoutMs;
38
+ this.errorSink = errorSink;
31
39
  if (!Number.isSafeInteger(terminalRelocationCapacity) || terminalRelocationCapacity <= 0) {
32
40
  throw new RangeError('Session relocation terminal capacity must be a positive safe integer.');
33
41
  }
@@ -38,62 +46,78 @@ class ZLinkActorSessionBindingRegistry {
38
46
  throw new RangeError('Session relocation seal timeout must be a positive safe integer.');
39
47
  }
40
48
  }
41
- async bind(context, actor, bindingToken, authorityFence, sessionIdentity) {
42
- await this.lane.run(() => this.bindCore(context, actor, bindingToken, authorityFence, sessionIdentity));
49
+ async bind(context, actor, bindingToken, authorityFence, sessionIdentity, commitActor) {
50
+ await this.lane.run(() => this.commitCore(undefined, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor));
43
51
  }
44
- bindCore(context, actor, bindingToken, authorityFence, sessionIdentity) {
45
- this.routes.set(actor.actorId, {
46
- context,
47
- actor,
48
- bindingToken,
49
- sessionIdentity: sessionIdentity ?? sessionIdentityFromContext(context),
50
- activeFrames: { count: 0, requests: new Set() },
51
- authorityFence
52
- });
53
- context.bindLocal(actor, bindingToken);
54
- }
55
- async replace(previous, context, actor, bindingToken, authorityFence, sessionIdentity) {
56
- await this.lane.run(() => this.replaceCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity));
57
- }
58
- replaceCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity) {
52
+ async commitCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor) {
59
53
  const current = this.routes.get(actor.actorId);
60
54
  if (current !== previous) {
61
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actor.actorId}' session binding changed before route replacement.`, true);
55
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actor.actorId}' session binding changed before route commit.`, true);
62
56
  }
63
- context.bindLocal(actor, bindingToken);
64
- const sameLocalBinding = previous.context === context
65
- && previous.bindingToken === bindingToken;
66
- if (!sameLocalBinding) {
67
- try {
57
+ const sameBinding = previous !== undefined &&
58
+ previous.context === context &&
59
+ previous.bindingToken === bindingToken;
60
+ const actorSlot = sameBinding ? previous.actorSlot : this.issueActorSlot(context);
61
+ commitActor?.();
62
+ context.bindLocal(actor, bindingToken, actorSlot);
63
+ try {
64
+ if (previous !== undefined && !sameBinding) {
65
+ this.routes.delete(actor.actorId);
68
66
  previous.context.unbindLocal(actor.actorId, previous.bindingToken);
67
+ if (previous.actorSlot !== undefined) {
68
+ let unbound;
69
+ try {
70
+ unbound = previous.context.actorSlotControls?.enqueueUnbound(previous.actorSlot);
71
+ }
72
+ catch (error) {
73
+ unbound = Promise.reject(error);
74
+ }
75
+ void unbound?.catch((error) => this.errorSink?.()?.reportRuntimeTaskException('retired session actor unbound', error));
76
+ }
69
77
  }
70
- catch (error) {
71
- context.unbindLocal(actor.actorId, bindingToken);
72
- previous.context.bindLocal(previous.actor, previous.bindingToken);
73
- throw error;
78
+ if (!sameBinding && actorSlot !== undefined) {
79
+ await context.actorSlotControls.enqueueBound(actorSlot, actor.actorId);
74
80
  }
75
81
  }
82
+ catch (error) {
83
+ context.unbindLocal(actor.actorId, bindingToken);
84
+ throw error;
85
+ }
76
86
  this.routes.set(actor.actorId, {
77
87
  context,
78
88
  actor,
79
89
  bindingToken,
90
+ actorSlot,
80
91
  sessionIdentity: sessionIdentity ?? sessionIdentityFromContext(context),
81
- activeFrames: previous.activeFrames,
82
- sealId: previous.sealId,
83
- authorityFence: authorityFence ?? previous.authorityFence
92
+ activeFrames: previous?.activeFrames ?? { count: 0, requests: new Set() },
93
+ sealId: previous?.sealId,
94
+ authorityFence: authorityFence ?? previous?.authorityFence
84
95
  });
85
96
  }
86
- async replaceAndReleaseSeal(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity) {
87
- await this.lane.run(() => this.replaceAndReleaseSealCore(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity));
97
+ issueActorSlot(context) {
98
+ if (context.actorSlotControls === undefined)
99
+ return undefined;
100
+ const actorSlot = this.nextActorSlots.get(context) ?? 1;
101
+ if (actorSlot > 0xffff) {
102
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Stream session '${String(context.routingId)}' exhausted its Actor slots.`);
103
+ }
104
+ this.nextActorSlots.set(context, actorSlot + 1);
105
+ return actorSlot;
106
+ }
107
+ async replace(previous, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor) {
108
+ await this.lane.run(() => this.commitCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor));
109
+ }
110
+ async replaceAndReleaseSeal(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity, commitActor) {
111
+ await this.lane.run(() => this.replaceAndReleaseSealCore(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity, commitActor));
88
112
  }
89
- replaceAndReleaseSealCore(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity) {
113
+ async replaceAndReleaseSealCore(previous, context, actor, bindingToken, sealId, authorityFence, sessionIdentity, commitActor) {
90
114
  if (previous.sealId !== sealId) {
91
115
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actor.actorId}' route switch did not match its relocation seal.`, true);
92
116
  }
93
117
  // JavaScript cannot interleave another ingress turn between these two
94
118
  // synchronous mutations. The replacement preserves the seal, then the
95
119
  // exact release publishes the route to held ingress as one owner turn.
96
- this.replaceCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity);
120
+ await this.commitCore(previous, context, actor, bindingToken, authorityFence, sessionIdentity, commitActor);
97
121
  if (!this.abortSealCore(actor.actorId, sealId)) {
98
122
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actor.actorId}' route switch lost its relocation seal.`, true);
99
123
  }
@@ -120,10 +144,10 @@ class ZLinkActorSessionBindingRegistry {
120
144
  }
121
145
  return Object.freeze({ context: route.context });
122
146
  }
123
- async unbind(actorId, context, bindingToken) {
124
- await this.lane.run(() => this.unbindCore(actorId, context, bindingToken));
147
+ async unbind(actorId, context, bindingToken, termination = ZLinkActorSessionBindingTermination.BindingEnd) {
148
+ await this.lane.run(() => this.unbindCore(actorId, context, bindingToken, termination));
125
149
  }
126
- unbindCore(actorId, context, bindingToken) {
150
+ async unbindCore(actorId, context, bindingToken, termination) {
127
151
  const route = this.routes.get(actorId);
128
152
  if (route === undefined || route.context !== context || route.bindingToken !== bindingToken) {
129
153
  return;
@@ -133,24 +157,28 @@ class ZLinkActorSessionBindingRegistry {
133
157
  this.rejectSealWaiters(actorId, new Error(`Actor '${actorId}' session binding was removed while ingress was held.`));
134
158
  this.rejectActiveFrameWaiters(actorId, new Error(`Actor '${actorId}' session binding was removed while accepted frames were active.`));
135
159
  this.clearRouteRelocation(actorId, route, new Error(`Actor '${actorId}' session binding was removed.`));
160
+ if (termination === ZLinkActorSessionBindingTermination.BindingEnd &&
161
+ route.actorSlot !== undefined) {
162
+ await context.actorSlotControls?.enqueueUnbound(route.actorSlot);
163
+ }
136
164
  }
137
165
  async unbindActor(actorId) {
138
166
  await this.lane.run(() => this.unbindActorCore(actorId));
139
167
  }
140
- unbindActorCore(actorId) {
168
+ async unbindActorCore(actorId) {
141
169
  const route = this.routes.get(actorId);
142
170
  if (route === undefined) {
143
171
  return;
144
172
  }
145
- this.unbindCore(actorId, route.context, route.bindingToken);
173
+ await this.unbindCore(actorId, route.context, route.bindingToken, ZLinkActorSessionBindingTermination.BindingEnd);
146
174
  }
147
175
  async cleanup(context) {
148
176
  await this.lane.run(() => this.cleanupCore(context));
149
177
  }
150
- cleanupCore(context) {
178
+ async cleanupCore(context) {
151
179
  for (const route of [...this.routes.values()]) {
152
180
  if (route.context === context) {
153
- this.unbindCore(route.actor.actorId, context, route.bindingToken);
181
+ await this.unbindCore(route.actor.actorId, context, route.bindingToken, ZLinkActorSessionBindingTermination.PhysicalDisconnect);
154
182
  }
155
183
  }
156
184
  }
@@ -238,8 +266,8 @@ class ZLinkActorSessionBindingRegistry {
238
266
  return;
239
267
  completed = true;
240
268
  route.activeFrames.count--;
241
- if (route.activeFrames.count === 0
242
- && this.routes.get(actorId)?.activeFrames === route.activeFrames) {
269
+ if (route.activeFrames.count === 0 &&
270
+ this.routes.get(actorId)?.activeFrames === route.activeFrames) {
243
271
  this.resolveActiveFrameWaiters(actorId);
244
272
  }
245
273
  };
@@ -356,9 +384,7 @@ class ZLinkActorSessionBindingRegistry {
356
384
  assertRelocationClaim(existing, claim);
357
385
  return { kind: 'existing', wait: existing.ready };
358
386
  }
359
- const predecessor = queue?.activeSealId === undefined
360
- ? undefined
361
- : queue.seals.get(queue.activeSealId);
387
+ const predecessor = queue?.activeSealId === undefined ? undefined : queue.seals.get(queue.activeSealId);
362
388
  if (predecessor !== undefined && predecessor.phase !== 'terminal') {
363
389
  if (predecessor.sessionIdentity === undefined || claim.sessionIdentity === undefined) {
364
390
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${claim.actorId}' session ingress is sealed by another relocation.`, true);
@@ -368,7 +394,9 @@ class ZLinkActorSessionBindingRegistry {
368
394
  }
369
395
  this.sealCore(claim.actorId, claim.sealId, expected);
370
396
  let resolveTerminal;
371
- const terminal = new Promise((resolve) => { resolveTerminal = resolve; });
397
+ const terminal = new Promise((resolve) => {
398
+ resolveTerminal = resolve;
399
+ });
372
400
  const ready = this.waitForActiveFramesCore(claim.actorId, signal);
373
401
  const actorQueue = queue ?? {
374
402
  actorId: claim.actorId,
@@ -402,10 +430,10 @@ class ZLinkActorSessionBindingRegistry {
402
430
  if (sealId !== undefined) {
403
431
  const queue = this.relocations.get(actorId);
404
432
  const state = queue?.seals.get(sealId);
405
- if (queue === undefined
406
- || state === undefined
407
- || (queue.activeSealId !== sealId
408
- && !(queue.activeSealId === undefined && state.phase === 'terminal'))) {
433
+ if (queue === undefined ||
434
+ state === undefined ||
435
+ (queue.activeSealId !== sealId &&
436
+ !(queue.activeSealId === undefined && state.phase === 'terminal'))) {
409
437
  failRetainedOutbound(operation, new Error(`Actor '${actorId}' Session outbound did not match its exact relocation seal.`));
410
438
  return 'rejected';
411
439
  }
@@ -417,9 +445,7 @@ class ZLinkActorSessionBindingRegistry {
417
445
  }
418
446
  admitRelocationOutboundCore(claim, operation) {
419
447
  const queue = this.relocations.get(claim.actorId);
420
- const state = queue?.activeSealId === undefined
421
- ? undefined
422
- : queue.seals.get(queue.activeSealId);
448
+ const state = queue?.activeSealId === undefined ? undefined : queue.seals.get(queue.activeSealId);
423
449
  const error = this.outboundAdmissionError(claim);
424
450
  if (error !== undefined) {
425
451
  failRetainedOutbound(operation, error);
@@ -437,14 +463,11 @@ class ZLinkActorSessionBindingRegistry {
437
463
  if (state.phase === 'sealed' || state.phase === 'applying') {
438
464
  const matchesSource = matchesRelocationSourceProof(state, claim);
439
465
  const matchesCurrent = this.matchesCurrentProducerNode(claim);
440
- const authorization = matchesSource || matchesCurrent
441
- ? 'source'
442
- : 'pendingTarget';
466
+ const authorization = matchesSource || matchesCurrent ? 'source' : 'pendingTarget';
443
467
  return this.retainRelocationOutboundCore(claim.actorId, operation, authorization, claim);
444
468
  }
445
469
  const acceptedProof = state.acceptedProducerProof;
446
- if (acceptedProof === undefined
447
- || !matchesAcceptedProducerProof(acceptedProof, claim)) {
470
+ if (acceptedProof === undefined || !matchesAcceptedProducerProof(acceptedProof, claim)) {
448
471
  failRetainedOutbound(operation, new Error(`Actor '${claim.actorId}' Session outbound admission did not match its accepted producer proof.`));
449
472
  return 'rejected';
450
473
  }
@@ -452,9 +475,7 @@ class ZLinkActorSessionBindingRegistry {
452
475
  }
453
476
  retainRelocationOutboundCore(actorId, operation, authorization, claim) {
454
477
  const queue = this.relocations.get(actorId);
455
- const state = queue?.activeSealId === undefined
456
- ? undefined
457
- : queue.seals.get(queue.activeSealId);
478
+ const state = queue?.activeSealId === undefined ? undefined : queue.seals.get(queue.activeSealId);
458
479
  if (queue === undefined)
459
480
  return 'passThrough';
460
481
  if (state === undefined || state.phase === 'applied' || state.phase === 'terminal') {
@@ -535,9 +556,9 @@ class ZLinkActorSessionBindingRegistry {
535
556
  }
536
557
  return { queue, state, applyPromise: state.applyPromise };
537
558
  }
538
- if (action === 'commit'
539
- && acceptedProducerProof !== undefined
540
- && !validAcceptedTargetProof(state, acceptedProducerProof)) {
559
+ if (action === 'commit' &&
560
+ acceptedProducerProof !== undefined &&
561
+ !validAcceptedTargetProof(state, acceptedProducerProof)) {
541
562
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actorId}' command 44 target producer proof did not match its Session seal.`, true);
542
563
  }
543
564
  if (action === 'abort' && acceptedProducerProof !== undefined) {
@@ -567,7 +588,7 @@ class ZLinkActorSessionBindingRegistry {
567
588
  completeRelocationApply(prepared) {
568
589
  const { queue, state, action, acceptedProducerProof, actorId, sealId } = prepared;
569
590
  const proof = action === 'commit'
570
- ? acceptedProducerProof ?? this.currentProducerProof(actorId)
591
+ ? (acceptedProducerProof ?? this.currentProducerProof(actorId))
571
592
  : relocationSourceProof(state);
572
593
  state.acceptedProducerProof = proof;
573
594
  for (let index = queue.outbound.length - 1; index >= 0; index--) {
@@ -578,10 +599,10 @@ class ZLinkActorSessionBindingRegistry {
578
599
  entry.released = true;
579
600
  continue;
580
601
  }
581
- if (action === 'commit'
582
- && proof !== undefined
583
- && entry.claim !== undefined
584
- && matchesAcceptedProducerProof(proof, entry.claim)) {
602
+ if (action === 'commit' &&
603
+ proof !== undefined &&
604
+ entry.claim !== undefined &&
605
+ matchesAcceptedProducerProof(proof, entry.claim)) {
585
606
  entry.released = true;
586
607
  continue;
587
608
  }
@@ -601,16 +622,16 @@ class ZLinkActorSessionBindingRegistry {
601
622
  const route = this.routes.get(actorId);
602
623
  const actorRef = (route?.actor).ref;
603
624
  const sessionIdentity = route?.sessionIdentity;
604
- if (route === undefined
605
- || actorRef === undefined
606
- || sessionIdentity === undefined
607
- || actorRef.ownerNodeGeneration === undefined)
625
+ if (route === undefined ||
626
+ actorRef === undefined ||
627
+ sessionIdentity === undefined ||
628
+ actorRef.ownerNodeGeneration === undefined)
608
629
  return undefined;
609
630
  return {
610
631
  actorId,
611
- objectGeneration: BigInt(actorRef.objectGeneration
612
- ?? actorRef.generation
613
- ?? -1),
632
+ objectGeneration: BigInt(actorRef.objectGeneration ??
633
+ actorRef.generation ??
634
+ -1),
614
635
  actorNodeRid: String(actorRef.nodeRid ?? ''),
615
636
  actorNodeGeneration: BigInt(actorRef.ownerNodeGeneration),
616
637
  sessionIdentity: String(sessionIdentity),
@@ -623,10 +644,10 @@ class ZLinkActorSessionBindingRegistry {
623
644
  observeRelocationTerminalCore(actorId, sealId, applyFingerprint) {
624
645
  const queue = this.relocations.get(actorId);
625
646
  const state = queue?.seals.get(sealId);
626
- if (queue === undefined
627
- || state === undefined
628
- || state.applyFingerprint !== applyFingerprint
629
- || (state.phase !== 'applied' && state.phase !== 'terminal')) {
647
+ if (queue === undefined ||
648
+ state === undefined ||
649
+ state.applyFingerprint !== applyFingerprint ||
650
+ (state.phase !== 'applied' && state.phase !== 'terminal')) {
630
651
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actorId}' Session relocation terminal did not match its exact route apply.`, true);
631
652
  }
632
653
  if (state.phase === 'terminal') {
@@ -680,9 +701,9 @@ class ZLinkActorSessionBindingRegistry {
680
701
  return;
681
702
  const activeSealId = queue.activeSealId;
682
703
  const activeState = activeSealId === undefined ? undefined : queue.seals.get(activeSealId);
683
- const ownsActiveSeal = activeState !== undefined
684
- && activeState.phase !== 'terminal'
685
- && activeState.sessionIdentity === route.sessionIdentity;
704
+ const ownsActiveSeal = activeState !== undefined &&
705
+ activeState.phase !== 'terminal' &&
706
+ activeState.sessionIdentity === route.sessionIdentity;
686
707
  if (!ownsActiveSeal) {
687
708
  // Nothing this exact route still holds open — leave terminal
688
709
  // retention and any other Session's active seal untouched.
@@ -725,8 +746,7 @@ class ZLinkActorSessionBindingRegistry {
725
746
  }
726
747
  validateSealCore(actorId, sealId) {
727
748
  const route = this.routes.get(actorId);
728
- return route !== undefined
729
- && route.sealId === sealId;
749
+ return route !== undefined && route.sealId === sealId;
730
750
  }
731
751
  /** True while a relocation seal currently holds this actor's ingress. */
732
752
  async isSealed(actorId) {
@@ -952,30 +972,30 @@ class ZLinkActorSessionBindingRegistry {
952
972
  failRetainedOutbound(entry.operation, error);
953
973
  }
954
974
  outboundAdmissionError(claim) {
955
- if (claim.actorId.length === 0
956
- || claim.objectGeneration <= 0n
957
- || claim.actorNodeRid.length === 0
958
- || claim.actorNodeGeneration <= 0n
959
- || claim.producerNodeRid.length === 0
960
- || claim.producerNodeGeneration <= 0n
961
- || claim.bindingGeneration <= 0n
962
- || claim.sessionIdentity.length === 0
963
- || !(0, routing_id_1.routingIdsEqual)(claim.producerNodeRid, claim.actorNodeRid)
964
- || claim.producerNodeGeneration !== claim.actorNodeGeneration) {
975
+ if (claim.actorId.length === 0 ||
976
+ claim.objectGeneration <= 0n ||
977
+ claim.actorNodeRid.length === 0 ||
978
+ claim.actorNodeGeneration <= 0n ||
979
+ claim.producerNodeRid.length === 0 ||
980
+ claim.producerNodeGeneration <= 0n ||
981
+ claim.bindingGeneration <= 0n ||
982
+ claim.sessionIdentity.length === 0 ||
983
+ !(0, routing_id_1.routingIdsEqual)(claim.producerNodeRid, claim.actorNodeRid) ||
984
+ claim.producerNodeGeneration !== claim.actorNodeGeneration) {
965
985
  return new Error(`Actor '${claim.actorId}' Session outbound admission claim is invalid.`);
966
986
  }
967
987
  const route = this.routes.get(claim.actorId);
968
988
  const ref = route?.actor;
969
989
  const actorRef = ref?.ref;
970
990
  const routeSessionIdentity = route?.sessionIdentity;
971
- if (route === undefined
972
- || actorRef === undefined
973
- || String(actorRef.actorId ?? claim.actorId) !== claim.actorId
974
- || BigInt(actorRef.objectGeneration
975
- ?? actorRef.generation
976
- ?? -1) !== claim.objectGeneration
977
- || BigInt(actorRef.bindingGeneration ?? -1) !== claim.bindingGeneration
978
- || String(routeSessionIdentity ?? '') !== claim.sessionIdentity) {
991
+ if (route === undefined ||
992
+ actorRef === undefined ||
993
+ String(actorRef.actorId ?? claim.actorId) !== claim.actorId ||
994
+ BigInt(actorRef.objectGeneration ??
995
+ actorRef.generation ??
996
+ -1) !== claim.objectGeneration ||
997
+ BigInt(actorRef.bindingGeneration ?? -1) !== claim.bindingGeneration ||
998
+ String(routeSessionIdentity ?? '') !== claim.sessionIdentity) {
979
999
  return new Error(`Actor '${claim.actorId}' Session outbound admission was fenced by its current binding.`);
980
1000
  }
981
1001
  return undefined;
@@ -983,9 +1003,9 @@ class ZLinkActorSessionBindingRegistry {
983
1003
  matchesCurrentProducerNode(claim) {
984
1004
  const route = this.routes.get(claim.actorId);
985
1005
  const actorRef = (route?.actor).ref;
986
- return route !== undefined
987
- && actorRef !== undefined
988
- && (0, routing_id_1.routingIdsEqual)(String(actorRef.nodeRid ?? ''), claim.actorNodeRid);
1006
+ return (route !== undefined &&
1007
+ actorRef !== undefined &&
1008
+ (0, routing_id_1.routingIdsEqual)(String(actorRef.nodeRid ?? ''), claim.actorNodeRid));
989
1009
  }
990
1010
  rememberTerminalRelocation(state) {
991
1011
  this.terminalRelocations.delete(state);
@@ -1003,11 +1023,11 @@ class ZLinkActorSessionBindingRegistry {
1003
1023
  }
1004
1024
  }
1005
1025
  deleteEmptyRelocationQueue(queue) {
1006
- if (queue.activeSealId === undefined
1007
- && queue.seals.size === 0
1008
- && queue.outbound.length === 0
1009
- && queue.drainPromise === undefined
1010
- && this.relocations.get(queue.actorId) === queue) {
1026
+ if (queue.activeSealId === undefined &&
1027
+ queue.seals.size === 0 &&
1028
+ queue.outbound.length === 0 &&
1029
+ queue.drainPromise === undefined &&
1030
+ this.relocations.get(queue.actorId) === queue) {
1011
1031
  this.relocations.delete(queue.actorId);
1012
1032
  }
1013
1033
  }
@@ -1030,11 +1050,11 @@ class ZLinkActorSessionBindingRegistry {
1030
1050
  }
1031
1051
  exports.ZLinkActorSessionBindingRegistry = ZLinkActorSessionBindingRegistry;
1032
1052
  function assertRelocationClaim(state, claim) {
1033
- if (state.actorGeneration !== claim.actorGeneration
1034
- || state.bindingGeneration !== claim.bindingGeneration
1035
- || state.sessionIdentity !== claim.sessionIdentity
1036
- || state.actorNodeRid !== claim.actorNodeRid
1037
- || state.actorNodeGeneration !== claim.actorNodeGeneration) {
1053
+ if (state.actorGeneration !== claim.actorGeneration ||
1054
+ state.bindingGeneration !== claim.bindingGeneration ||
1055
+ state.sessionIdentity !== claim.sessionIdentity ||
1056
+ state.actorNodeRid !== claim.actorNodeRid ||
1057
+ state.actorNodeGeneration !== claim.actorNodeGeneration) {
1038
1058
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${claim.actorId}' repeated Session seal changed its exact identity.`, true);
1039
1059
  }
1040
1060
  }
@@ -1042,34 +1062,34 @@ function startOutsideStateLane(work) {
1042
1062
  return detachedStateLaneResource.runInAsyncScope(work);
1043
1063
  }
1044
1064
  function matchesRelocationSourceProof(state, claim) {
1045
- return state.actorId === claim.actorId
1046
- && state.actorGeneration === claim.objectGeneration
1047
- && state.bindingGeneration === claim.bindingGeneration
1048
- && state.sessionIdentity === claim.sessionIdentity
1049
- && state.actorNodeRid !== undefined
1050
- && (0, routing_id_1.routingIdsEqual)(state.actorNodeRid, claim.actorNodeRid)
1051
- && state.actorNodeGeneration === claim.actorNodeGeneration;
1065
+ return (state.actorId === claim.actorId &&
1066
+ state.actorGeneration === claim.objectGeneration &&
1067
+ state.bindingGeneration === claim.bindingGeneration &&
1068
+ state.sessionIdentity === claim.sessionIdentity &&
1069
+ state.actorNodeRid !== undefined &&
1070
+ (0, routing_id_1.routingIdsEqual)(state.actorNodeRid, claim.actorNodeRid) &&
1071
+ state.actorNodeGeneration === claim.actorNodeGeneration);
1052
1072
  }
1053
1073
  function matchesAcceptedProducerProof(proof, claim) {
1054
- return proof.actorId === claim.actorId
1055
- && proof.objectGeneration === claim.objectGeneration
1056
- && (0, routing_id_1.routingIdsEqual)(proof.actorNodeRid, claim.actorNodeRid)
1057
- && proof.actorNodeGeneration === claim.actorNodeGeneration
1058
- && proof.sessionIdentity === claim.sessionIdentity
1059
- && proof.bindingGeneration === claim.bindingGeneration;
1074
+ return (proof.actorId === claim.actorId &&
1075
+ proof.objectGeneration === claim.objectGeneration &&
1076
+ (0, routing_id_1.routingIdsEqual)(proof.actorNodeRid, claim.actorNodeRid) &&
1077
+ proof.actorNodeGeneration === claim.actorNodeGeneration &&
1078
+ proof.sessionIdentity === claim.sessionIdentity &&
1079
+ proof.bindingGeneration === claim.bindingGeneration);
1060
1080
  }
1061
1081
  function validAcceptedTargetProof(state, proof) {
1062
- return proof.actorId === state.actorId
1063
- && proof.objectGeneration === state.actorGeneration
1064
- && proof.actorNodeRid.length > 0
1065
- && proof.actorNodeGeneration > 0n
1066
- && proof.sessionIdentity === state.sessionIdentity
1067
- && proof.bindingGeneration === state.bindingGeneration;
1082
+ return (proof.actorId === state.actorId &&
1083
+ proof.objectGeneration === state.actorGeneration &&
1084
+ proof.actorNodeRid.length > 0 &&
1085
+ proof.actorNodeGeneration > 0n &&
1086
+ proof.sessionIdentity === state.sessionIdentity &&
1087
+ proof.bindingGeneration === state.bindingGeneration);
1068
1088
  }
1069
1089
  function relocationSourceProof(state) {
1070
- if (state.sessionIdentity === undefined
1071
- || state.actorNodeRid === undefined
1072
- || state.actorNodeGeneration === undefined)
1090
+ if (state.sessionIdentity === undefined ||
1091
+ state.actorNodeRid === undefined ||
1092
+ state.actorNodeGeneration === undefined)
1073
1093
  return undefined;
1074
1094
  return {
1075
1095
  actorId: state.actorId,
@@ -1090,17 +1110,17 @@ function failRetainedOutbound(operation, error) {
1090
1110
  }
1091
1111
  }
1092
1112
  function assertSuccessorSessionIdentity(predecessor, successor) {
1093
- if (predecessor.actorGeneration !== successor.actorGeneration
1094
- || predecessor.bindingGeneration !== successor.bindingGeneration
1095
- || predecessor.sessionIdentity !== successor.sessionIdentity) {
1113
+ if (predecessor.actorGeneration !== successor.actorGeneration ||
1114
+ predecessor.bindingGeneration !== successor.bindingGeneration ||
1115
+ predecessor.sessionIdentity !== successor.sessionIdentity) {
1096
1116
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${successor.actorId}' successor Session seal changed its exact Session identity.`, true);
1097
1117
  }
1098
1118
  }
1099
1119
  function routeMatchesFence(route, expected) {
1100
1120
  const ref = route.actor.ref;
1101
- return ref !== undefined
1102
- && BigInt(ref.objectGeneration ?? ref.generation ?? -1n) === expected.objectGeneration
1103
- && ref.bindingGeneration === expected.bindingGeneration;
1121
+ return (ref !== undefined &&
1122
+ BigInt(ref.objectGeneration ?? ref.generation ?? -1n) === expected.objectGeneration &&
1123
+ ref.bindingGeneration === expected.bindingGeneration);
1104
1124
  }
1105
1125
  function sessionIdentityFromContext(context) {
1106
1126
  return context.routingId === undefined ? undefined : String(context.routingId);
@@ -1119,7 +1139,7 @@ function waitForSessionRelocation(operation, signal) {
1119
1139
  operation.then(() => {
1120
1140
  signal.removeEventListener('abort', onAbort);
1121
1141
  resolve();
1122
- }, error => {
1142
+ }, (error) => {
1123
1143
  signal.removeEventListener('abort', onAbort);
1124
1144
  reject(error);
1125
1145
  });
@@ -2,6 +2,7 @@ import type { ActorRef } from '../../contracts';
2
2
  import type { ServiceSessionBindingAdmissionClaim, ServiceSessionBindingAdmissionResult } from '../foundation/service-session-binding-ingress-port';
3
3
  import type { ZLinkActorSessionAuthorityFence, ZLinkActorSessionAcceptedProducerProof, ZLinkActorSessionRelocationClaim, ZLinkActorSessionRelocationSnapshot, ZLinkActorSessionRetainedOutbound, ZLinkActorSessionRouteFence } from './actor-session-binding-registry';
4
4
  export interface ZLinkActorSessionBindingRuntimeOwner {
5
+ actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
5
6
  sealRelocation(claim: ZLinkActorSessionRelocationClaim, expected: ZLinkActorSessionRouteFence, signal?: AbortSignal): Promise<void>;
6
7
  relocationSnapshot(actorId: string, sealId: string): Promise<ZLinkActorSessionRelocationSnapshot | undefined>;
7
8
  retainRelocationOutbound(actorId: string, operation: ZLinkActorSessionRetainedOutbound, sealId?: string): Promise<ServiceSessionBindingAdmissionResult>;
@@ -6,7 +6,9 @@ class ZLinkActorSessionLifecycleCoordinator {
6
6
  async run(actorId, operation) {
7
7
  const previous = this.tails.get(actorId) ?? Promise.resolve();
8
8
  let release;
9
- const current = new Promise((resolve) => { release = resolve; });
9
+ const current = new Promise((resolve) => {
10
+ release = resolve;
11
+ });
10
12
  const tail = previous.catch(() => undefined).then(() => current);
11
13
  this.tails.set(actorId, tail);
12
14
  await previous.catch(() => undefined);