@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
@@ -7,6 +7,8 @@ exports.resolvePacketName = resolvePacketName;
7
7
  exports.ensureSingleSubmit = ensureSingleSubmit;
8
8
  exports.encodeStreamFrame = encodeStreamFrame;
9
9
  exports.encodeStreamControlFrame = encodeStreamControlFrame;
10
+ exports.encodeActorBoundFrame = encodeActorBoundFrame;
11
+ exports.encodeActorUnboundFrame = encodeActorUnboundFrame;
10
12
  exports.encodeSessionClosingFrame = encodeSessionClosingFrame;
11
13
  exports.decodeStreamFrame = decodeStreamFrame;
12
14
  exports.tryDecodeStreamFrame = tryDecodeStreamFrame;
@@ -38,19 +40,27 @@ var ZLinkStreamCodec;
38
40
  })(ZLinkStreamCodec || (exports.ZLinkStreamCodec = ZLinkStreamCodec = {}));
39
41
  function streamCodecContentType(codec) {
40
42
  switch (codec) {
41
- case ZLinkStreamCodec.Json: return 'application/json';
42
- case ZLinkStreamCodec.MessagePack: return 'application/x-msgpack';
43
- case ZLinkStreamCodec.Protobuf: return 'application/x-protobuf';
44
- case ZLinkStreamCodec.Raw: return 'application/octet-stream';
43
+ case ZLinkStreamCodec.Json:
44
+ return 'application/json';
45
+ case ZLinkStreamCodec.MessagePack:
46
+ return 'application/x-msgpack';
47
+ case ZLinkStreamCodec.Protobuf:
48
+ return 'application/x-protobuf';
49
+ case ZLinkStreamCodec.Raw:
50
+ return 'application/octet-stream';
45
51
  }
46
52
  throw new TypeError(`Unsupported STREAM codec '${codec}'.`);
47
53
  }
48
54
  function streamCodecForContentType(contentType) {
49
55
  switch (contentType) {
50
- case 'application/json': return ZLinkStreamCodec.Json;
51
- case 'application/x-msgpack': return ZLinkStreamCodec.MessagePack;
52
- case 'application/x-protobuf': return ZLinkStreamCodec.Protobuf;
53
- case 'application/octet-stream': return ZLinkStreamCodec.Raw;
56
+ case 'application/json':
57
+ return ZLinkStreamCodec.Json;
58
+ case 'application/x-msgpack':
59
+ return ZLinkStreamCodec.MessagePack;
60
+ case 'application/x-protobuf':
61
+ return ZLinkStreamCodec.Protobuf;
62
+ case 'application/octet-stream':
63
+ return ZLinkStreamCodec.Raw;
54
64
  }
55
65
  throw new TypeError(`Unsupported STREAM content type '${contentType}'.`);
56
66
  }
@@ -70,6 +80,7 @@ var ZLinkStreamHeaderFlags;
70
80
  ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["PayloadCompressed"] = 4] = "PayloadCompressed";
71
81
  ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["HasCorrelationId"] = 8] = "HasCorrelationId";
72
82
  ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["HasFlowId"] = 16] = "HasFlowId";
83
+ ZLinkStreamHeaderFlags[ZLinkStreamHeaderFlags["HasActorSlot"] = 32] = "HasActorSlot";
73
84
  })(ZLinkStreamHeaderFlags || (exports.ZLinkStreamHeaderFlags = ZLinkStreamHeaderFlags = {}));
74
85
  var ZLinkStreamCloseReasonCode;
75
86
  (function (ZLinkStreamCloseReasonCode) {
@@ -106,6 +117,26 @@ function encodeStreamControlFrame(name) {
106
117
  metadata: EMPTY_STREAM_METADATA
107
118
  }, new Uint8Array());
108
119
  }
120
+ function encodeActorBoundFrame(actorSlot, actorId) {
121
+ const actorIdBytes = (0, stream_wire_1.utf8Encode)(actorId);
122
+ if (actorIdBytes.length < 1 || actorIdBytes.length > 0xff) {
123
+ throw new Error('Actor id length is invalid for a STREAM binding control packet.');
124
+ }
125
+ const payload = new Uint8Array(4 + actorIdBytes.length);
126
+ payload[0] = 1;
127
+ payload[1] = actorSlot >>> 8;
128
+ payload[2] = actorSlot & 0xff;
129
+ payload[3] = actorIdBytes.length;
130
+ payload.set(actorIdBytes, 4);
131
+ return encodeStreamFrame(controlHeader('$zlink.actor.bound'), payload);
132
+ }
133
+ function encodeActorUnboundFrame(actorSlot) {
134
+ const payload = new Uint8Array(3);
135
+ payload[0] = 1;
136
+ payload[1] = actorSlot >>> 8;
137
+ payload[2] = actorSlot & 0xff;
138
+ return encodeStreamFrame(controlHeader('$zlink.actor.unbound'), payload);
139
+ }
109
140
  function encodeSessionClosingFrame(diagnostic = '', reason = ZLinkStreamCloseReasonCode.ServerDrain) {
110
141
  const diagnosticBytes = (0, stream_wire_1.utf8Encode)(diagnostic);
111
142
  if (diagnosticBytes.length > 512)
@@ -135,7 +166,9 @@ function encodeStreamHeader(header) {
135
166
  const hasMetadata = header.metadata.size > 0;
136
167
  const hasCorrelation = header.correlationId !== undefined && header.correlationId.length > 0;
137
168
  const hasFlow = header.flowId !== undefined || header.flowOrigin !== undefined;
138
- if (header.kind === ZLinkStreamMessageKind.Control && (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow)) {
169
+ const hasActorSlot = header.actorSlot !== undefined;
170
+ if (header.kind === ZLinkStreamMessageKind.Control &&
171
+ (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow || hasActorSlot)) {
139
172
  throw new Error('Control packet must not contain a request sequence, metadata, correlation id, or flow id.');
140
173
  }
141
174
  // Explicit construction: this runs for every outbound frame, so avoid a
@@ -149,7 +182,8 @@ function encodeStreamHeader(header) {
149
182
  metadata: header.metadata,
150
183
  correlationId: header.correlationId,
151
184
  flowId: header.flowId,
152
- flowOrigin: encodeFlowOrigin(header.flowOrigin)
185
+ flowOrigin: encodeFlowOrigin(header.flowOrigin),
186
+ actorSlot: header.actorSlot
153
187
  });
154
188
  }
155
189
  function decodeStreamHeader(header, flowEnabled = true) {
@@ -160,22 +194,24 @@ function decodeStreamHeader(header, flowEnabled = true) {
160
194
  const hasMetadata = (flags & ZLinkStreamHeaderFlags.HasMetadata) !== 0;
161
195
  const hasCorrelation = (flags & ZLinkStreamHeaderFlags.HasCorrelationId) !== 0;
162
196
  const hasFlow = (flags & ZLinkStreamHeaderFlags.HasFlowId) !== 0;
163
- if (kind === ZLinkStreamMessageKind.Control && (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow)) {
197
+ const hasActorSlot = (flags & ZLinkStreamHeaderFlags.HasActorSlot) !== 0;
198
+ if (kind === ZLinkStreamMessageKind.Control &&
199
+ (hasCorrelation || hasRequestSeq || hasMetadata || hasFlow || hasActorSlot)) {
164
200
  throw new Error('Control packet must not contain a request sequence, metadata, correlation id, or flow id.');
165
201
  }
166
202
  const metadata = publicStreamMetadata(decoded.metadata);
167
203
  return {
168
204
  kind,
169
205
  codec: decoded.codec,
170
- flags: (metadata.size === 0
171
- ? flags & ~ZLinkStreamHeaderFlags.HasMetadata
172
- : flags) & (flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
206
+ flags: (metadata.size === 0 ? flags & ~ZLinkStreamHeaderFlags.HasMetadata : flags) &
207
+ (flowEnabled ? ~0 : ~ZLinkStreamHeaderFlags.HasFlowId),
173
208
  requestSeq: decoded.requestSeq,
174
209
  name: decoded.name,
175
210
  metadata,
176
211
  correlationId: decoded.correlationId,
177
212
  flowId: decoded.flowId,
178
- flowOrigin: decodeFlowOrigin(decoded.flowOrigin)
213
+ flowOrigin: decodeFlowOrigin(decoded.flowOrigin),
214
+ actorSlot: decoded.actorSlot
179
215
  };
180
216
  }
181
217
  function actorRequestDeadlineMetadata(deadlineUnixMs) {
@@ -212,16 +248,28 @@ function createStreamReplyHeader(requestHeader, kind, codec, flags, metadata, in
212
248
  // observation-only and is not copied into the reply when tracing is Off
213
249
  // (spec 27 §4, §7).
214
250
  correlationId: requestHeader.correlationId,
215
- ...(includeFlow
216
- ? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin }
217
- : {})
251
+ actorSlot: requestHeader.actorSlot,
252
+ ...(includeFlow ? { flowId: requestHeader.flowId, flowOrigin: requestHeader.flowOrigin } : {})
253
+ };
254
+ }
255
+ function controlHeader(name) {
256
+ return {
257
+ kind: ZLinkStreamMessageKind.Control,
258
+ codec: ZLinkStreamCodec.Raw,
259
+ flags: ZLinkStreamHeaderFlags.None,
260
+ name,
261
+ metadata: EMPTY_STREAM_METADATA
218
262
  };
219
263
  }
220
264
  function encodeFlowOrigin(origin) {
221
- return origin === undefined ? undefined : { Inbound: 1, Timer: 2, Application: 3, Lifecycle: 4 }[origin];
265
+ return origin === undefined
266
+ ? undefined
267
+ : { Inbound: 1, Timer: 2, Application: 3, Lifecycle: 4 }[origin];
222
268
  }
223
269
  function decodeFlowOrigin(origin) {
224
- return origin === undefined ? undefined : { 1: 'Inbound', 2: 'Timer', 3: 'Application', 4: 'Lifecycle' }[origin];
270
+ return origin === undefined
271
+ ? undefined
272
+ : { 1: 'Inbound', 2: 'Timer', 3: 'Application', 4: 'Lifecycle' }[origin];
225
273
  }
226
274
  function messageToBytes(message) {
227
275
  const value = message;
@@ -37,10 +37,10 @@ class ZLinkSessionActorCoordinator {
37
37
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, 'Actor session binding requires a stream routing id.');
38
38
  }
39
39
  const previous = await this.routes.route(actorRef.actorId);
40
- const sameIncarnation = previous !== undefined
41
- && previous.context === context
42
- && previous.actor.ref.actorId === actorRef.actorId
43
- && BigInt(previous.actor.ref.objectGeneration) === BigInt(actorRef.objectGeneration);
40
+ const sameIncarnation = previous !== undefined &&
41
+ previous.context === context &&
42
+ previous.actor.ref.actorId === actorRef.actorId &&
43
+ BigInt(previous.actor.ref.objectGeneration) === BigInt(actorRef.objectGeneration);
44
44
  const samePhysicalBinding = sameIncarnation && sameActorRef(previous.actor.ref, actorRef);
45
45
  const reuseActor = sameIncarnation ? previous.actor : undefined;
46
46
  if (reuseActor !== undefined) {
@@ -57,32 +57,33 @@ class ZLinkSessionActorCoordinator {
57
57
  const boundActorRef = withBindingGeneration(actorRef, context.stream instanceof managed_stream_1.ZLinkManagedStream
58
58
  ? context.stream.actorBindingGeneration(actorRef.actorId)
59
59
  : undefined, previous?.actor.ref);
60
- const sessionActor = reuseActor
61
- ?? new session_context_1.DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
60
+ const sessionActor = reuseActor ??
61
+ new session_context_1.DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
62
62
  const sessionIdentity = String(this.actorBindingRoutingId(context));
63
- sessionActor.updateRef(boundActorRef);
64
63
  if (previous === undefined) {
65
64
  if (releaseSeal !== undefined) {
66
65
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actorRef.actorId}' route switch has no Session binding to release.`, true);
67
66
  }
68
- await this.routes.bind(context, sessionActor, bindingToken, authorityFence, sessionIdentity);
67
+ await this.routes.bind(context, sessionActor, bindingToken, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
69
68
  }
70
69
  else if (releaseSeal !== undefined) {
71
- await this.routes.replaceAndReleaseSeal(previous, context, sessionActor, bindingToken, releaseSeal.sealId, authorityFence, sessionIdentity);
70
+ await this.routes.replaceAndReleaseSeal(previous, context, sessionActor, bindingToken, releaseSeal.sealId, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
72
71
  }
73
72
  else {
74
- await this.routes.replace(previous, context, sessionActor, bindingToken, authorityFence, sessionIdentity);
73
+ await this.routes.replace(previous, context, sessionActor, bindingToken, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
75
74
  }
76
- if (confirmRemoteSessionBinding !== false && this.options.confirmRemoteActorSessionBinding !== undefined) {
77
- const waitForAcknowledgement = previous === undefined
78
- && confirmRemoteSessionBinding !== 'send';
75
+ if (confirmRemoteSessionBinding !== false &&
76
+ this.options.confirmRemoteActorSessionBinding !== undefined) {
77
+ const waitForAcknowledgement = previous === undefined && confirmRemoteSessionBinding !== 'send';
79
78
  const confirmation = this.options.confirmRemoteActorSessionBinding(boundActorRef, this.actorBindingRoutingId(context), undefined, { waitForAcknowledgement });
80
79
  const reportFailure = (error) => {
81
80
  // A fire-and-forget route update retains the already-current binding;
82
81
  // its failure is bounded diagnostics rather than a rollback. The
83
82
  // relay retries independently and reports the typed failure through
84
83
  // the runtime error sink instead of silently discarding it.
85
- this.options.errorSink?.()?.reportRuntimeTaskException('remote session binding confirmation', error);
84
+ this.options
85
+ .errorSink?.()
86
+ ?.reportRuntimeTaskException('remote session binding confirmation', error);
86
87
  };
87
88
  if (waitForAcknowledgement) {
88
89
  try {
@@ -126,8 +127,7 @@ class ZLinkSessionActorCoordinator {
126
127
  }
127
128
  async resolveAuthorityFence(actorRef, signal) {
128
129
  const internal = actorRef;
129
- if (internal.ownershipGeneration !== undefined
130
- && internal.ownerLeaseGeneration !== undefined) {
130
+ if (internal.ownershipGeneration !== undefined && internal.ownerLeaseGeneration !== undefined) {
131
131
  const resolved = internal.ownerNodeGeneration === undefined
132
132
  ? await this.options.actorAuthorityFenceResolver?.(actorRef.actorId, signal)
133
133
  : undefined;
@@ -200,16 +200,16 @@ class ZLinkSessionActorCoordinator {
200
200
  requireSameIncarnation(route.actor.ref, normalizedActorRef);
201
201
  if ((0, routing_id_1.routingIdsEqual)(route.actor.ref.nodeRid, normalizedActorRef.nodeRid)) {
202
202
  const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
203
- if (options.releaseSeal !== undefined
204
- && !await this.routes.validateSeal(normalizedActorRef.actorId, options.releaseSeal.sealId)) {
203
+ if (options.releaseSeal !== undefined &&
204
+ !(await this.routes.validateSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))) {
205
205
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${normalizedActorRef.actorId}' route switch did not match its relocation seal.`, true);
206
206
  }
207
207
  route.actor.updateRef(normalizedActorRef);
208
208
  if (authorityFence !== undefined) {
209
209
  await this.routes.updateAuthorityFence(normalizedActorRef.actorId, authorityFence);
210
210
  }
211
- if (options.releaseSeal !== undefined
212
- && !await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId)) {
211
+ if (options.releaseSeal !== undefined &&
212
+ !(await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))) {
213
213
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${normalizedActorRef.actorId}' route switch lost its relocation seal.`, true);
214
214
  }
215
215
  return;
@@ -221,10 +221,10 @@ class ZLinkSessionActorCoordinator {
221
221
  return await this.lifecycle.run(actorRef.actorId, async () => {
222
222
  (0, abort_1.throwIfAborted)(signal);
223
223
  const route = await this.routes.route(actorRef.actorId);
224
- if (route === undefined
225
- || !sameActorRef(route.actor.ref, actorRef)
226
- || !(0, routing_id_1.routingIdsEqual)(route.sessionIdentity, sessionRid)
227
- || bindingGenerationOf(route.actor.ref) !== bindingGeneration) {
224
+ if (route === undefined ||
225
+ !sameActorRef(route.actor.ref, actorRef) ||
226
+ !(0, routing_id_1.routingIdsEqual)(route.sessionIdentity, sessionRid) ||
227
+ bindingGenerationOf(route.actor.ref) !== bindingGeneration) {
228
228
  return false;
229
229
  }
230
230
  // A late legacy tombstone may remove only the still-current exact route.
@@ -241,9 +241,7 @@ class ZLinkSessionActorCoordinator {
241
241
  const route = await this.routes.route(actorId);
242
242
  const sessionRid = route?.sessionIdentity;
243
243
  const actor = route?.actor.ref;
244
- if (route === undefined
245
- || sessionRid === undefined
246
- || actor?.bindingGeneration === undefined) {
244
+ if (route === undefined || sessionRid === undefined || actor?.bindingGeneration === undefined) {
247
245
  return undefined;
248
246
  }
249
247
  return {
@@ -286,9 +284,7 @@ exports.ZLinkSessionActorCoordinator = ZLinkSessionActorCoordinator;
286
284
  function withBindingGeneration(actorRef, nativeBindingGeneration, previousRef) {
287
285
  const input = actorRef;
288
286
  const previous = previousRef;
289
- const bindingGeneration = nativeBindingGeneration
290
- ?? input.bindingGeneration
291
- ?? previous?.bindingGeneration;
287
+ const bindingGeneration = nativeBindingGeneration ?? input.bindingGeneration ?? previous?.bindingGeneration;
292
288
  if (bindingGeneration === undefined) {
293
289
  return actorRef;
294
290
  }
@@ -323,10 +319,10 @@ function preserveInternalActorRefField(target, source, field) {
323
319
  });
324
320
  }
325
321
  function isActorRefLike(value) {
326
- return (typeof value === 'object'
327
- && 'nodeRid' in value
328
- && 'actorId' in value
329
- && ('objectGeneration' in value || 'generation' in value));
322
+ return (typeof value === 'object' &&
323
+ 'nodeRid' in value &&
324
+ 'actorId' in value &&
325
+ ('objectGeneration' in value || 'generation' in value));
330
326
  }
331
327
  function normalizeActorRef(value, defaultMeshName) {
332
328
  const objectGeneration = value.objectGeneration ?? value.generation;
@@ -357,15 +353,15 @@ function createBindingToken() {
357
353
  return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
358
354
  }
359
355
  function sameActorRef(left, right) {
360
- return (0, routing_id_1.routingIdsEqual)(left.nodeRid, right.nodeRid)
361
- && left.actorId === right.actorId
362
- && BigInt(left.objectGeneration) === BigInt(right.objectGeneration);
356
+ return ((0, routing_id_1.routingIdsEqual)(left.nodeRid, right.nodeRid) &&
357
+ left.actorId === right.actorId &&
358
+ BigInt(left.objectGeneration) === BigInt(right.objectGeneration));
363
359
  }
364
360
  function requireSameIncarnation(current, updated) {
365
- if (current.actorId === updated.actorId
366
- && BigInt(current.objectGeneration) === BigInt(updated.objectGeneration)) {
361
+ if (current.actorId === updated.actorId &&
362
+ BigInt(current.objectGeneration) === BigInt(updated.objectGeneration)) {
367
363
  return;
368
364
  }
369
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${updated.actorId}' route update cannot replace object generation `
370
- + `${String(current.objectGeneration)} with ${String(updated.objectGeneration)}.`, true);
365
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${updated.actorId}' route update cannot replace object generation ` +
366
+ `${String(current.objectGeneration)} with ${String(updated.objectGeneration)}.`, true);
371
367
  }
@@ -10,6 +10,8 @@ import type { ServiceRetiredBoundSessionRouteFence } from '../foundation/service
10
10
  export interface ZLinkSessionContextStream extends ZLinkStream {
11
11
  writeRaw(payload: Message, flags?: number): boolean;
12
12
  submitRaw(payload: Message, signal?: AbortSignal, timeoutMs?: number): Promise<ZLinkSubmitResult>;
13
+ enqueueActorBound?(actorSlot: number, actorId: string): Promise<void>;
14
+ enqueueActorUnbound?(actorSlot: number): Promise<void>;
13
15
  }
14
16
  interface ZLinkSessionContextRuntime {
15
17
  cleanup(context: DefaultZLinkSessionContext): Promise<void>;
@@ -76,7 +78,12 @@ export declare class DefaultZLinkSessionContext implements ZLinkSessionContext {
76
78
  payloadForHeader(header: ZLinkStreamFrameHeader, payload: Message): Message;
77
79
  get boundActors(): readonly DefaultZLinkSessionActor[];
78
80
  findBoundActor(actorId: string): DefaultZLinkSessionActor | undefined;
79
- bindLocal(actor: DefaultZLinkSessionActor, token: string): void;
81
+ actorForSlot(actorSlot: number | undefined): DefaultZLinkSessionActor | undefined;
82
+ get actorSlotControls(): {
83
+ enqueueBound(actorSlot: number, actorId: string): Promise<void>;
84
+ enqueueUnbound(actorSlot: number): Promise<void>;
85
+ } | undefined;
86
+ bindLocal(actor: DefaultZLinkSessionActor, token: string, actorSlot?: number): void;
80
87
  unbindLocal(actorId: string, token: string): void;
81
88
  completeConfiguration(): void;
82
89
  }
@@ -92,7 +99,7 @@ export declare class DefaultZLinkSessionActor implements ZLinkSessionActor {
92
99
  relay(dispatch: ZLinkSessionDispatchContext, payload: ZLinkMessage, signal?: AbortSignal): Promise<void>;
93
100
  notifyDisconnected(signal?: AbortSignal): Promise<void>;
94
101
  }
95
- export declare function createSessionDispatchContext(header: ZLinkStreamFrameHeader): ZLinkSessionDispatchContext;
102
+ export declare function createSessionDispatchContext(header: ZLinkStreamFrameHeader, actor?: DefaultZLinkSessionActor): ZLinkSessionDispatchContext;
96
103
  export declare class DefaultZLinkBoundSession implements ZLinkBoundSession {
97
104
  private readonly runtime;
98
105
  private readonly actorId;
@@ -71,9 +71,9 @@ class DefaultZLinkSessionContext {
71
71
  }
72
72
  beginActorBindingReplacement(actor, retiredSession) {
73
73
  const previous = this.retiredActorBindings.get(actor.actorId);
74
- if (previous !== undefined
75
- && previous.actorGeneration === actor.generation
76
- && sameRetiredSession(previous.retiredSession, retiredSession)) {
74
+ if (previous !== undefined &&
75
+ previous.actorGeneration === actor.generation &&
76
+ sameRetiredSession(previous.retiredSession, retiredSession)) {
77
77
  return false;
78
78
  }
79
79
  this.closingForActorReplacement = true;
@@ -85,17 +85,17 @@ class DefaultZLinkSessionContext {
85
85
  }
86
86
  isExactRetiredActorBinding(actor, retiredSession) {
87
87
  const expected = this.retiredActorBindings.get(actor.actorId);
88
- if (expected === undefined
89
- || expected.actorGeneration !== actor.generation
90
- || !sameRetiredSession(expected.retiredSession, retiredSession)) {
88
+ if (expected === undefined ||
89
+ expected.actorGeneration !== actor.generation ||
90
+ !sameRetiredSession(expected.retiredSession, retiredSession)) {
91
91
  return false;
92
92
  }
93
93
  const current = this.findBoundActor(actor.actorId);
94
94
  if (current === undefined)
95
95
  return true;
96
96
  const currentRef = current.ref;
97
- return BigInt(currentRef.objectGeneration) === actor.generation
98
- && currentRef.bindingGeneration === retiredSession.retiredBindingGeneration;
97
+ return (BigInt(currentRef.objectGeneration) === actor.generation &&
98
+ currentRef.bindingGeneration === retiredSession.retiredBindingGeneration);
99
99
  }
100
100
  createTextMessage(payload) {
101
101
  return this.runtime.createTextMessage(payload);
@@ -163,8 +163,23 @@ class DefaultZLinkSessionContext {
163
163
  findBoundActor(actorId) {
164
164
  return this.localActors.find(actorId);
165
165
  }
166
- bindLocal(actor, token) {
167
- this.localActors.bind(actor, token);
166
+ actorForSlot(actorSlot) {
167
+ if (actorSlot === undefined)
168
+ return undefined;
169
+ return this.localActors.findBySlot(actorSlot);
170
+ }
171
+ get actorSlotControls() {
172
+ if (this.stream.enqueueActorBound === undefined ||
173
+ this.stream.enqueueActorUnbound === undefined) {
174
+ return undefined;
175
+ }
176
+ return {
177
+ enqueueBound: (actorSlot, actorId) => this.stream.enqueueActorBound(actorSlot, actorId),
178
+ enqueueUnbound: (actorSlot) => this.stream.enqueueActorUnbound(actorSlot)
179
+ };
180
+ }
181
+ bindLocal(actor, token, actorSlot) {
182
+ this.localActors.bind(actor, token, actorSlot);
168
183
  }
169
184
  unbindLocal(actorId, token) {
170
185
  this.localActors.unbind(actorId, token);
@@ -194,7 +209,9 @@ class DefaultZLinkSessionHandlerRegistry {
194
209
  if (typeof handlerType.prototype?.handle !== 'function') {
195
210
  throw new TypeError(`Session handler '${handlerType.name}' must implement handle(...).`);
196
211
  }
197
- this.handlersByPacket.set(packetName, { handlerType: handlerType });
212
+ this.handlersByPacket.set(packetName, {
213
+ handlerType: handlerType
214
+ });
198
215
  return this;
199
216
  }
200
217
  closeRegistration() {
@@ -215,14 +232,15 @@ class DefaultZLinkSessionHandlerRegistry {
215
232
  return await registration.instance;
216
233
  }
217
234
  async createHandler(handlerType) {
218
- return this.providerResolver?.get?.(handlerType)
219
- ?? await this.providerResolver?.create?.(handlerType)
220
- ?? new handlerType();
235
+ return (this.providerResolver?.get?.(handlerType) ??
236
+ (await this.providerResolver?.create?.(handlerType)) ??
237
+ new handlerType());
221
238
  }
222
239
  }
223
240
  function sessionHandlerPacketName(handlerType) {
224
241
  const declared = (0, Attributes_1.readZLinkDecoratorMetadata)(handlerType)
225
- .find((metadata) => metadata.kind === 'packet')?.packetName?.trim();
242
+ .find((metadata) => metadata.kind === 'packet')
243
+ ?.packetName?.trim();
226
244
  if (declared === undefined || declared.length === 0) {
227
245
  throw new configuration_1.ZLinkConfigurationException(`Session handler '${handlerType.name}' must declare a packet name with @ZLinkPacket(...).`);
228
246
  }
@@ -281,16 +299,14 @@ class DefaultZLinkSessionActor {
281
299
  throw new Error(`Cannot change session actor id from '${this.actorId}' to '${ref.actorId}'.`);
282
300
  }
283
301
  if (BigInt(ref.objectGeneration) !== BigInt(this.currentRef.objectGeneration)) {
284
- throw new Error(`Cannot change session actor '${this.actorId}' object generation `
285
- + `from ${String(this.currentRef.objectGeneration)} `
286
- + `to ${String(ref.objectGeneration)}.`);
302
+ throw new Error(`Cannot change session actor '${this.actorId}' object generation ` +
303
+ `from ${String(this.currentRef.objectGeneration)} ` +
304
+ `to ${String(ref.objectGeneration)}.`);
287
305
  }
288
306
  this.currentRef = ref;
289
307
  }
290
308
  async relay(dispatchOrPayload, payloadOrSignal, signal) {
291
- const dispatch = isSessionDispatchContext(dispatchOrPayload)
292
- ? dispatchOrPayload
293
- : undefined;
309
+ const dispatch = isSessionDispatchContext(dispatchOrPayload) ? dispatchOrPayload : undefined;
294
310
  let payload;
295
311
  let relaySignal;
296
312
  let header;
@@ -312,19 +328,21 @@ class DefaultZLinkSessionActor {
312
328
  }
313
329
  exports.DefaultZLinkSessionActor = DefaultZLinkSessionActor;
314
330
  const SESSION_DISPATCH_HEADERS = new WeakMap();
315
- function createSessionDispatchContext(header) {
331
+ function createSessionDispatchContext(header, actor) {
316
332
  const dispatch = {
317
333
  packetName: header.name,
318
334
  metadata: header.metadata,
319
- canReply: header.requestSeq !== undefined
335
+ canReply: header.requestSeq !== undefined,
336
+ ...(actor === undefined ? {} : { actor })
320
337
  };
321
338
  SESSION_DISPATCH_HEADERS.set(dispatch, header);
322
339
  return dispatch;
323
340
  }
324
341
  function isSessionDispatchContext(value) {
325
- return value !== null && typeof value === 'object'
326
- && typeof value.packetName === 'string'
327
- && 'canReply' in value;
342
+ return (value !== null &&
343
+ typeof value === 'object' &&
344
+ typeof value.packetName === 'string' &&
345
+ 'canReply' in value);
328
346
  }
329
347
  function sessionDispatchHeader(dispatch) {
330
348
  const header = SESSION_DISPATCH_HEADERS.get(dispatch);
@@ -368,10 +386,10 @@ function decodeStreamErrorPayload(payload) {
368
386
  }
369
387
  }
370
388
  function sameRetiredSession(left, right) {
371
- return left.sessionOwnerNodeRid === right.sessionOwnerNodeRid
372
- && left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration
373
- && left.sessionOwnerId === right.sessionOwnerId
374
- && left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration
375
- && left.sessionRid === right.sessionRid
376
- && left.retiredBindingGeneration === right.retiredBindingGeneration;
389
+ return (left.sessionOwnerNodeRid === right.sessionOwnerNodeRid &&
390
+ left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration &&
391
+ left.sessionOwnerId === right.sessionOwnerId &&
392
+ left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration &&
393
+ left.sessionRid === right.sessionRid &&
394
+ left.retiredBindingGeneration === right.retiredBindingGeneration);
377
395
  }
@@ -3,8 +3,10 @@ export interface ZLinkSessionLocalActor {
3
3
  }
4
4
  export declare class ZLinkSessionLocalActorBindings<TActor extends ZLinkSessionLocalActor> {
5
5
  private readonly actors;
6
+ private readonly actorIdsBySlot;
6
7
  snapshot(): readonly TActor[];
7
8
  find(actorId: string): TActor | undefined;
8
- bind(actor: TActor, token: string): void;
9
+ findBySlot(actorSlot: number): TActor | undefined;
10
+ bind(actor: TActor, token: string, actorSlot?: number): void;
9
11
  unbind(actorId: string, token: string): void;
10
12
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkSessionLocalActorBindings = void 0;
4
4
  class ZLinkSessionLocalActorBindings {
5
5
  actors = new Map();
6
+ actorIdsBySlot = new Map();
6
7
  snapshot() {
7
8
  const snapshot = [];
8
9
  for (const entry of this.actors.values()) {
@@ -13,13 +14,27 @@ class ZLinkSessionLocalActorBindings {
13
14
  find(actorId) {
14
15
  return this.actors.get(actorId)?.actor;
15
16
  }
16
- bind(actor, token) {
17
- this.actors.set(actor.actorId, { actor, token });
17
+ findBySlot(actorSlot) {
18
+ const actorId = this.actorIdsBySlot.get(actorSlot);
19
+ return actorId === undefined ? undefined : this.actors.get(actorId)?.actor;
20
+ }
21
+ bind(actor, token, actorSlot) {
22
+ const previous = this.actors.get(actor.actorId);
23
+ if (previous?.actorSlot !== undefined && previous.actorSlot !== actorSlot) {
24
+ this.actorIdsBySlot.delete(previous.actorSlot);
25
+ }
26
+ this.actors.set(actor.actorId, { actor, token, actorSlot });
27
+ if (actorSlot !== undefined) {
28
+ this.actorIdsBySlot.set(actorSlot, actor.actorId);
29
+ }
18
30
  }
19
31
  unbind(actorId, token) {
20
32
  const current = this.actors.get(actorId);
21
33
  if (current?.token === token) {
22
34
  this.actors.delete(actorId);
35
+ if (current.actorSlot !== undefined) {
36
+ this.actorIdsBySlot.delete(current.actorSlot);
37
+ }
23
38
  }
24
39
  }
25
40
  }
@@ -25,6 +25,6 @@ async function createProviderInstance(type, resolver, fallbackArg) {
25
25
  : new type(fallbackArg);
26
26
  }
27
27
  function isSessionFactory(value) {
28
- return typeof value.create === 'function'
29
- && value.context === undefined;
28
+ return (typeof value.create === 'function' &&
29
+ value.context === undefined);
30
30
  }
@@ -33,8 +33,7 @@ class ZLinkSessionSerialExecutor {
33
33
  const submitted = (0, application_job_queue_scope_1.hasApplicationJobPermit)()
34
34
  ? this.scheduler.submitPreAdmitted(boundWork, serialOptions)
35
35
  : this.scheduler.submit(boundWork, serialOptions);
36
- void submitted
37
- .catch(error => onRejected?.(error));
36
+ void submitted.catch((error) => onRejected?.(error));
38
37
  return true;
39
38
  }
40
39
  async dispose() {
@@ -27,7 +27,7 @@ export declare class ZLinkStreamFrameMessageFactory {
27
27
  constructor(options: ZLinkStreamFrameMessageFactoryOptions);
28
28
  createTextMessage(payload: string): Message;
29
29
  createBinaryMessage(payload: Uint8Array): Message;
30
- createJsonFrameMessage(kind: ZLinkStreamMessageKind, packetName: string, metadata: ReadonlyMap<string, string>, compressed: boolean, requestSeq: bigint | undefined, payload: unknown, correlationId?: string): Message;
30
+ createJsonFrameMessage(kind: ZLinkStreamMessageKind, packetName: string, metadata: ReadonlyMap<string, string>, compressed: boolean, requestSeq: bigint | undefined, payload: unknown, correlationId?: string, actorSlot?: number): Message;
31
31
  createJsonReplyFrameMessage(requestHeader: ZLinkStreamFrameHeader, kind: ZLinkStreamReplyMessageKind, metadata: ReadonlyMap<string, string>, compressed: boolean, payload: unknown): Message;
32
32
  private createJsonFrameMessageWithHeader;
33
33
  /**
@@ -26,7 +26,7 @@ class ZLinkStreamFrameMessageFactory {
26
26
  }
27
27
  return factory.createTextMessage((0, protocol_1.utf8Decode)(payload));
28
28
  }
29
- createJsonFrameMessage(kind, packetName, metadata, compressed, requestSeq, payload, correlationId) {
29
+ createJsonFrameMessage(kind, packetName, metadata, compressed, requestSeq, payload, correlationId, actorSlot) {
30
30
  const flow = (this.options.flowCreationEnabled?.() ?? true)
31
31
  ? (0, flow_context_1.currentOrCreateFlow)('Application')
32
32
  : undefined;
@@ -41,7 +41,8 @@ class ZLinkStreamFrameMessageFactory {
41
41
  metadata,
42
42
  correlationId,
43
43
  flowId: flow?.flowId,
44
- flowOrigin: flow?.flowOrigin
44
+ flowOrigin: flow?.flowOrigin,
45
+ actorSlot
45
46
  }));
46
47
  }
47
48
  createJsonReplyFrameMessage(requestHeader, kind, metadata, compressed, payload) {
@@ -53,7 +54,9 @@ class ZLinkStreamFrameMessageFactory {
53
54
  if (compressed) {
54
55
  body = compressStreamPayload(body, this.compressionCodec);
55
56
  }
56
- const flags = compressed ? protocol_1.ZLinkStreamHeaderFlags.PayloadCompressed : protocol_1.ZLinkStreamHeaderFlags.None;
57
+ const flags = compressed
58
+ ? protocol_1.ZLinkStreamHeaderFlags.PayloadCompressed
59
+ : protocol_1.ZLinkStreamHeaderFlags.None;
57
60
  const frame = (0, protocol_1.encodeStreamFrame)(createHeader(encoded.codec, flags), body);
58
61
  return this.createOwnedFrameMessage(frame);
59
62
  }
@@ -92,10 +95,14 @@ class ZLinkStreamFrameMessageFactory {
92
95
  exports.ZLinkStreamFrameMessageFactory = ZLinkStreamFrameMessageFactory;
93
96
  function streamDirection(kind) {
94
97
  switch (kind) {
95
- case protocol_1.ZLinkStreamMessageKind.Request: return 'Request';
96
- case protocol_1.ZLinkStreamMessageKind.Response: return 'Response';
97
- case protocol_1.ZLinkStreamMessageKind.Error: return 'Error';
98
- default: return 'Send';
98
+ case protocol_1.ZLinkStreamMessageKind.Request:
99
+ return 'Request';
100
+ case protocol_1.ZLinkStreamMessageKind.Response:
101
+ return 'Response';
102
+ case protocol_1.ZLinkStreamMessageKind.Error:
103
+ return 'Error';
104
+ default:
105
+ return 'Send';
99
106
  }
100
107
  }
101
108
  exports.zlinkStreamLz4CompressionCodec = {