@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
@@ -36,10 +36,7 @@ import {
36
36
  DefaultZLinkSessionReplyCall,
37
37
  DefaultZLinkSessionSendCall
38
38
  } from './session-calls';
39
- import {
40
- ZLinkSessionRequestTracker,
41
- type ZLinkPendingSessionRequest
42
- } from './session-requests';
39
+ import { ZLinkSessionRequestTracker, type ZLinkPendingSessionRequest } from './session-requests';
43
40
  import { ZLinkSessionLocalActorBindings } from './session-local-actors';
44
41
  import type { ServiceActorRef } from '../foundation/service-stateful-registry';
45
42
  import type { ServiceRetiredBoundSessionRouteFence } from '../foundation/service-stateful-wire-codec';
@@ -48,6 +45,8 @@ import { releaseApplicationJobPermitBeforeHandler } from '../application-jobs/ap
48
45
  export interface ZLinkSessionContextStream extends ZLinkStream {
49
46
  writeRaw(payload: Message, flags?: number): boolean;
50
47
  submitRaw(payload: Message, signal?: AbortSignal, timeoutMs?: number): Promise<ZLinkSubmitResult>;
48
+ enqueueActorBound?(actorSlot: number, actorId: string): Promise<void>;
49
+ enqueueActorUnbound?(actorSlot: number): Promise<void>;
51
50
  }
52
51
 
53
52
  interface ZLinkSessionContextRuntime {
@@ -126,10 +125,13 @@ export class DefaultZLinkSessionContext implements ZLinkSessionContext {
126
125
  correlationId: string | undefined
127
126
  ) => void;
128
127
  private closingForActorReplacement = false;
129
- private readonly retiredActorBindings = new Map<string, {
130
- readonly actorGeneration: bigint;
131
- readonly retiredSession: ServiceRetiredBoundSessionRouteFence;
132
- }>();
128
+ private readonly retiredActorBindings = new Map<
129
+ string,
130
+ {
131
+ readonly actorGeneration: bigint;
132
+ readonly retiredSession: ServiceRetiredBoundSessionRouteFence;
133
+ }
134
+ >();
133
135
 
134
136
  constructor(
135
137
  private readonly runtime: ZLinkSessionContextRuntime,
@@ -173,11 +175,13 @@ export class DefaultZLinkSessionContext implements ZLinkSessionContext {
173
175
  }
174
176
 
175
177
  /** Wired by the owning session runtime; see ZLinkSessionCallContext.traceFrameWritten. */
176
- setFrameWrittenObserver(observer: (
177
- kind: ZLinkStreamMessageKind,
178
- packetName: string,
179
- correlationId: string | undefined
180
- ) => void): void {
178
+ setFrameWrittenObserver(
179
+ observer: (
180
+ kind: ZLinkStreamMessageKind,
181
+ packetName: string,
182
+ correlationId: string | undefined
183
+ ) => void
184
+ ): void {
181
185
  this.frameWrittenObserver = observer;
182
186
  }
183
187
 
@@ -199,9 +203,9 @@ export class DefaultZLinkSessionContext implements ZLinkSessionContext {
199
203
  ): boolean {
200
204
  const previous = this.retiredActorBindings.get(actor.actorId);
201
205
  if (
202
- previous !== undefined
203
- && previous.actorGeneration === actor.generation
204
- && sameRetiredSession(previous.retiredSession, retiredSession)
206
+ previous !== undefined &&
207
+ previous.actorGeneration === actor.generation &&
208
+ sameRetiredSession(previous.retiredSession, retiredSession)
205
209
  ) {
206
210
  return false;
207
211
  }
@@ -219,17 +223,19 @@ export class DefaultZLinkSessionContext implements ZLinkSessionContext {
219
223
  ): boolean {
220
224
  const expected = this.retiredActorBindings.get(actor.actorId);
221
225
  if (
222
- expected === undefined
223
- || expected.actorGeneration !== actor.generation
224
- || !sameRetiredSession(expected.retiredSession, retiredSession)
226
+ expected === undefined ||
227
+ expected.actorGeneration !== actor.generation ||
228
+ !sameRetiredSession(expected.retiredSession, retiredSession)
225
229
  ) {
226
230
  return false;
227
231
  }
228
232
  const current = this.findBoundActor(actor.actorId);
229
233
  if (current === undefined) return true;
230
234
  const currentRef = current.ref as ActorRef & { readonly bindingGeneration?: bigint };
231
- return BigInt(currentRef.objectGeneration) === actor.generation
232
- && currentRef.bindingGeneration === retiredSession.retiredBindingGeneration;
235
+ return (
236
+ BigInt(currentRef.objectGeneration) === actor.generation &&
237
+ currentRef.bindingGeneration === retiredSession.retiredBindingGeneration
238
+ );
233
239
  }
234
240
 
235
241
  createTextMessage(payload: string): Message {
@@ -340,8 +346,31 @@ export class DefaultZLinkSessionContext implements ZLinkSessionContext {
340
346
  return this.localActors.find(actorId);
341
347
  }
342
348
 
343
- bindLocal(actor: DefaultZLinkSessionActor, token: string): void {
344
- this.localActors.bind(actor, token);
349
+ actorForSlot(actorSlot: number | undefined): DefaultZLinkSessionActor | undefined {
350
+ if (actorSlot === undefined) return undefined;
351
+ return this.localActors.findBySlot(actorSlot);
352
+ }
353
+
354
+ get actorSlotControls():
355
+ | {
356
+ enqueueBound(actorSlot: number, actorId: string): Promise<void>;
357
+ enqueueUnbound(actorSlot: number): Promise<void>;
358
+ }
359
+ | undefined {
360
+ if (
361
+ this.stream.enqueueActorBound === undefined ||
362
+ this.stream.enqueueActorUnbound === undefined
363
+ ) {
364
+ return undefined;
365
+ }
366
+ return {
367
+ enqueueBound: (actorSlot, actorId) => this.stream.enqueueActorBound!(actorSlot, actorId),
368
+ enqueueUnbound: (actorSlot) => this.stream.enqueueActorUnbound!(actorSlot)
369
+ };
370
+ }
371
+
372
+ bindLocal(actor: DefaultZLinkSessionActor, token: string, actorSlot?: number): void {
373
+ this.localActors.bind(actor, token, actorSlot);
345
374
  }
346
375
 
347
376
  unbindLocal(actorId: string, token: string): void {
@@ -372,13 +401,14 @@ class DefaultZLinkSessionHandlerRegistry implements ZLinkSessionHandlerRegistry
372
401
  `Session packet '${packetName}' is already registered.`
373
402
  );
374
403
  }
375
- if (typeof (handlerType as { prototype?: { handle?: unknown } }).prototype?.handle !== 'function') {
404
+ if (
405
+ typeof (handlerType as { prototype?: { handle?: unknown } }).prototype?.handle !== 'function'
406
+ ) {
376
407
  throw new TypeError(`Session handler '${handlerType.name}' must implement handle(...).`);
377
408
  }
378
- this.handlersByPacket.set(
379
- packetName,
380
- { handlerType: handlerType as Type<ZLinkSessionPacketHandler<ZLinkSessionContext>> }
381
- );
409
+ this.handlersByPacket.set(packetName, {
410
+ handlerType: handlerType as Type<ZLinkSessionPacketHandler<ZLinkSessionContext>>
411
+ });
382
412
  return this;
383
413
  }
384
414
 
@@ -386,7 +416,10 @@ class DefaultZLinkSessionHandlerRegistry implements ZLinkSessionHandlerRegistry
386
416
  this.registrationOpen = false;
387
417
  }
388
418
 
389
- async tryHandle(dispatch: import('../../contracts').ZLinkSessionDispatchContext, payload: ZLinkMessage): Promise<boolean> {
419
+ async tryHandle(
420
+ dispatch: import('../../contracts').ZLinkSessionDispatchContext,
421
+ payload: ZLinkMessage
422
+ ): Promise<boolean> {
390
423
  const registration = this.handlersByPacket.get(dispatch.packetName);
391
424
  if (registration === undefined) {
392
425
  return false;
@@ -407,9 +440,11 @@ class DefaultZLinkSessionHandlerRegistry implements ZLinkSessionHandlerRegistry
407
440
  private async createHandler(
408
441
  handlerType: Type<ZLinkSessionPacketHandler<ZLinkSessionContext>>
409
442
  ): Promise<ZLinkSessionPacketHandler<ZLinkSessionContext>> {
410
- return this.providerResolver?.get?.(handlerType)
411
- ?? await this.providerResolver?.create?.(handlerType)
412
- ?? new handlerType();
443
+ return (
444
+ this.providerResolver?.get?.(handlerType) ??
445
+ (await this.providerResolver?.create?.(handlerType)) ??
446
+ new handlerType()
447
+ );
413
448
  }
414
449
  }
415
450
 
@@ -420,7 +455,8 @@ interface SessionHandlerRegistration {
420
455
 
421
456
  function sessionHandlerPacketName(handlerType: new (...args: never[]) => unknown): string {
422
457
  const declared = readZLinkDecoratorMetadata(handlerType)
423
- .find((metadata) => metadata.kind === 'packet')?.packetName?.trim();
458
+ .find((metadata) => metadata.kind === 'packet')
459
+ ?.packetName?.trim();
424
460
  if (declared === undefined || declared.length === 0) {
425
461
  throw new ZLinkConfigurationException(
426
462
  `Session handler '${handlerType.name}' must declare a packet name with @ZLinkPacket(...).`
@@ -489,9 +525,9 @@ export class DefaultZLinkSessionActor implements ZLinkSessionActor {
489
525
  }
490
526
  if (BigInt(ref.objectGeneration) !== BigInt(this.currentRef.objectGeneration)) {
491
527
  throw new Error(
492
- `Cannot change session actor '${this.actorId}' object generation `
493
- + `from ${String(this.currentRef.objectGeneration)} `
494
- + `to ${String(ref.objectGeneration)}.`
528
+ `Cannot change session actor '${this.actorId}' object generation ` +
529
+ `from ${String(this.currentRef.objectGeneration)} ` +
530
+ `to ${String(ref.objectGeneration)}.`
495
531
  );
496
532
  }
497
533
  this.currentRef = ref;
@@ -508,9 +544,7 @@ export class DefaultZLinkSessionActor implements ZLinkSessionActor {
508
544
  payloadOrSignal?: ZLinkMessage | AbortSignal,
509
545
  signal?: AbortSignal
510
546
  ): Promise<void> {
511
- const dispatch = isSessionDispatchContext(dispatchOrPayload)
512
- ? dispatchOrPayload
513
- : undefined;
547
+ const dispatch = isSessionDispatchContext(dispatchOrPayload) ? dispatchOrPayload : undefined;
514
548
  let payload: ZLinkMessage;
515
549
  let relaySignal: AbortSignal | undefined;
516
550
  let header: ZLinkStreamFrameHeader | undefined;
@@ -537,26 +571,35 @@ export class DefaultZLinkSessionActor implements ZLinkSessionActor {
537
571
 
538
572
  const SESSION_DISPATCH_HEADERS = new WeakMap<ZLinkSessionDispatchContext, ZLinkStreamFrameHeader>();
539
573
 
540
- export function createSessionDispatchContext(header: ZLinkStreamFrameHeader): ZLinkSessionDispatchContext {
574
+ export function createSessionDispatchContext(
575
+ header: ZLinkStreamFrameHeader,
576
+ actor?: DefaultZLinkSessionActor
577
+ ): ZLinkSessionDispatchContext {
541
578
  const dispatch: ZLinkSessionDispatchContext = {
542
579
  packetName: header.name,
543
580
  metadata: header.metadata,
544
- canReply: header.requestSeq !== undefined
581
+ canReply: header.requestSeq !== undefined,
582
+ ...(actor === undefined ? {} : { actor })
545
583
  };
546
584
  SESSION_DISPATCH_HEADERS.set(dispatch, header);
547
585
  return dispatch;
548
586
  }
549
587
 
550
588
  function isSessionDispatchContext(value: unknown): value is ZLinkSessionDispatchContext {
551
- return value !== null && typeof value === 'object'
552
- && typeof (value as ZLinkSessionDispatchContext).packetName === 'string'
553
- && 'canReply' in value;
589
+ return (
590
+ value !== null &&
591
+ typeof value === 'object' &&
592
+ typeof (value as ZLinkSessionDispatchContext).packetName === 'string' &&
593
+ 'canReply' in value
594
+ );
554
595
  }
555
596
 
556
597
  function sessionDispatchHeader(dispatch: ZLinkSessionDispatchContext): ZLinkStreamFrameHeader {
557
598
  const header = SESSION_DISPATCH_HEADERS.get(dispatch);
558
599
  if (header === undefined) {
559
- throw new Error('Session actor relay dispatch must be the context supplied to the active session handler.');
600
+ throw new Error(
601
+ 'Session actor relay dispatch must be the context supplied to the active session handler.'
602
+ );
560
603
  }
561
604
  return header;
562
605
  }
@@ -600,10 +643,12 @@ function sameRetiredSession(
600
643
  left: ServiceRetiredBoundSessionRouteFence,
601
644
  right: ServiceRetiredBoundSessionRouteFence
602
645
  ): boolean {
603
- return left.sessionOwnerNodeRid === right.sessionOwnerNodeRid
604
- && left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration
605
- && left.sessionOwnerId === right.sessionOwnerId
606
- && left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration
607
- && left.sessionRid === right.sessionRid
608
- && left.retiredBindingGeneration === right.retiredBindingGeneration;
646
+ return (
647
+ left.sessionOwnerNodeRid === right.sessionOwnerNodeRid &&
648
+ left.sessionOwnerNodeGeneration === right.sessionOwnerNodeGeneration &&
649
+ left.sessionOwnerId === right.sessionOwnerId &&
650
+ left.sessionOwnerLeaseGeneration === right.sessionOwnerLeaseGeneration &&
651
+ left.sessionRid === right.sessionRid &&
652
+ left.retiredBindingGeneration === right.retiredBindingGeneration
653
+ );
609
654
  }
@@ -3,7 +3,8 @@ export interface ZLinkSessionLocalActor {
3
3
  }
4
4
 
5
5
  export class ZLinkSessionLocalActorBindings<TActor extends ZLinkSessionLocalActor> {
6
- private readonly actors = new Map<string, { actor: TActor; token: string }>();
6
+ private readonly actors = new Map<string, { actor: TActor; token: string; actorSlot?: number }>();
7
+ private readonly actorIdsBySlot = new Map<number, string>();
7
8
 
8
9
  snapshot(): readonly TActor[] {
9
10
  const snapshot: TActor[] = [];
@@ -17,14 +18,29 @@ export class ZLinkSessionLocalActorBindings<TActor extends ZLinkSessionLocalActo
17
18
  return this.actors.get(actorId)?.actor;
18
19
  }
19
20
 
20
- bind(actor: TActor, token: string): void {
21
- this.actors.set(actor.actorId, { actor, token });
21
+ findBySlot(actorSlot: number): TActor | undefined {
22
+ const actorId = this.actorIdsBySlot.get(actorSlot);
23
+ return actorId === undefined ? undefined : this.actors.get(actorId)?.actor;
24
+ }
25
+
26
+ bind(actor: TActor, token: string, actorSlot?: number): void {
27
+ const previous = this.actors.get(actor.actorId);
28
+ if (previous?.actorSlot !== undefined && previous.actorSlot !== actorSlot) {
29
+ this.actorIdsBySlot.delete(previous.actorSlot);
30
+ }
31
+ this.actors.set(actor.actorId, { actor, token, actorSlot });
32
+ if (actorSlot !== undefined) {
33
+ this.actorIdsBySlot.set(actorSlot, actor.actorId);
34
+ }
22
35
  }
23
36
 
24
37
  unbind(actorId: string, token: string): void {
25
38
  const current = this.actors.get(actorId);
26
39
  if (current?.token === token) {
27
40
  this.actors.delete(actorId);
41
+ if (current.actorSlot !== undefined) {
42
+ this.actorIdsBySlot.delete(current.actorSlot);
43
+ }
28
44
  }
29
45
  }
30
46
  }
@@ -1,8 +1,4 @@
1
- import type {
2
- Type,
3
- ZLinkSession,
4
- ZLinkSessionFactory
5
- } from '../../contracts';
1
+ import type { Type, ZLinkSession, ZLinkSessionFactory } from '../../contracts';
6
2
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
7
3
  import type { DefaultZLinkSessionContext } from './session-context';
8
4
 
@@ -45,6 +41,8 @@ async function createProviderInstance<T>(
45
41
  }
46
42
 
47
43
  function isSessionFactory(value: unknown): value is ZLinkSessionFactory {
48
- return typeof (value as { create?: unknown }).create === 'function'
49
- && (value as { context?: unknown }).context === undefined;
44
+ return (
45
+ typeof (value as { create?: unknown }).create === 'function' &&
46
+ (value as { context?: unknown }).context === undefined
47
+ );
50
48
  }
@@ -46,10 +46,12 @@ export class ZLinkSessionSerialExecutor {
46
46
 
47
47
  executeFinal(work: () => Promise<void>): Promise<void> {
48
48
  if (this.closed) {
49
- return Promise.reject(createInternalFrameworkException(
50
- ZLinkFrameworkInternalErrorKind.RuntimeShutdown,
51
- 'Session execution queue is closed.'
52
- ));
49
+ return Promise.reject(
50
+ createInternalFrameworkException(
51
+ ZLinkFrameworkInternalErrorKind.RuntimeShutdown,
52
+ 'Session execution queue is closed.'
53
+ )
54
+ );
53
55
  }
54
56
  const boundWork = bindApplicationJobPermit(work);
55
57
  return hasApplicationJobPermit()
@@ -69,8 +71,7 @@ export class ZLinkSessionSerialExecutor {
69
71
  const submitted = hasApplicationJobPermit()
70
72
  ? this.scheduler.submitPreAdmitted(boundWork, serialOptions)
71
73
  : this.scheduler.submit(boundWork, serialOptions);
72
- void submitted
73
- .catch(error => onRejected?.(error));
74
+ void submitted.catch((error) => onRejected?.(error));
74
75
  return true;
75
76
  }
76
77
 
@@ -6,15 +6,21 @@ import type { ZLinkBoundSessionResponseTarget } from './bound-session-response-t
6
6
 
7
7
  export interface ZLinkStreamActorLookupPort {
8
8
  find(actorId: string): Promise<DefaultZLinkSessionActor | undefined>;
9
- authorityFence(actorId: string): Promise<{
10
- readonly authorityOwnerGeneration: bigint;
11
- readonly ownerLeaseGeneration: bigint;
12
- } | undefined>;
13
- sessionRouteFence(actorId: string): Promise<{
14
- readonly actor: ActorRef;
15
- readonly sessionRid: ActorRef['nodeRid'];
16
- readonly bindingGeneration: bigint;
17
- } | undefined>;
9
+ authorityFence(actorId: string): Promise<
10
+ | {
11
+ readonly authorityOwnerGeneration: bigint;
12
+ readonly ownerLeaseGeneration: bigint;
13
+ }
14
+ | undefined
15
+ >;
16
+ sessionRouteFence(actorId: string): Promise<
17
+ | {
18
+ readonly actor: ActorRef;
19
+ readonly sessionRid: ActorRef['nodeRid'];
20
+ readonly bindingGeneration: bigint;
21
+ }
22
+ | undefined
23
+ >;
18
24
  }
19
25
 
20
26
  export interface ZLinkStreamActorLifecyclePort {
@@ -48,13 +54,22 @@ export interface ZLinkActorRouteCommitOptions {
48
54
  }
49
55
 
50
56
  export interface ZLinkBoundSessionResponsePort {
51
- captureBoundSessionResponseTarget(actor: ZLinkSessionActor): Promise<ZLinkBoundSessionResponseTarget | undefined>;
57
+ captureBoundSessionResponseTarget(
58
+ actor: ZLinkSessionActor
59
+ ): Promise<ZLinkBoundSessionResponseTarget | undefined>;
52
60
  sendLocalBoundSessionResponse(
53
- actorId: string, packetName: string, requestSeq: bigint, message: unknown,
54
- metadata: ReadonlyMap<string, string>, compressPayload: boolean
61
+ actorId: string,
62
+ packetName: string,
63
+ requestSeq: bigint,
64
+ message: unknown,
65
+ metadata: ReadonlyMap<string, string>,
66
+ compressPayload: boolean
55
67
  ): Promise<boolean>;
56
68
  sendLocalBoundSessionError(
57
- actorId: string, packetName: string, requestSeq: bigint, error: unknown,
69
+ actorId: string,
70
+ packetName: string,
71
+ requestSeq: bigint,
72
+ error: unknown,
58
73
  metadata: ReadonlyMap<string, string>
59
74
  ): Promise<boolean>;
60
75
  }
@@ -62,45 +77,80 @@ export interface ZLinkBoundSessionResponsePort {
62
77
  export interface ZLinkRemoteBoundSessionPort extends ZLinkStreamActorLifecyclePort {
63
78
  disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
64
79
  sendLocalBoundSession(
65
- actorId: string, message: unknown, packetName: string | undefined,
80
+ actorId: string,
81
+ message: unknown,
82
+ packetName: string | undefined,
66
83
  metadata: ReadonlyMap<string, string>
67
84
  ): Promise<boolean>;
68
85
  sendLocalBoundSessionResponse(
69
- actorId: string, packetName: string, requestSeq: bigint, message: unknown,
70
- metadata: ReadonlyMap<string, string>, compressPayload: boolean
86
+ actorId: string,
87
+ packetName: string,
88
+ requestSeq: bigint,
89
+ message: unknown,
90
+ metadata: ReadonlyMap<string, string>,
91
+ compressPayload: boolean
71
92
  ): Promise<boolean>;
72
93
  sendLocalBoundSessionError(
73
- actorId: string, packetName: string, requestSeq: bigint, error: unknown,
94
+ actorId: string,
95
+ packetName: string,
96
+ requestSeq: bigint,
97
+ error: unknown,
74
98
  metadata: ReadonlyMap<string, string>
75
99
  ): Promise<boolean>;
76
100
  sendNativeBoundSessionResponse(
77
- node: ZLinkBackendActorSessionNode, actorRef: ActorRef, packetName: string, requestSeq: bigint,
78
- message: unknown, metadata: ReadonlyMap<string, string>, compressPayload: boolean,
101
+ node: ZLinkBackendActorSessionNode,
102
+ actorRef: ActorRef,
103
+ packetName: string,
104
+ requestSeq: bigint,
105
+ message: unknown,
106
+ metadata: ReadonlyMap<string, string>,
107
+ compressPayload: boolean,
79
108
  signal?: AbortSignal
80
109
  ): Promise<void>;
81
110
  sendNativeBoundSessionError(
82
- node: ZLinkBackendActorSessionNode, actorRef: ActorRef, packetName: string, requestSeq: bigint,
83
- error: unknown, metadata: ReadonlyMap<string, string>, signal?: AbortSignal
111
+ node: ZLinkBackendActorSessionNode,
112
+ actorRef: ActorRef,
113
+ packetName: string,
114
+ requestSeq: bigint,
115
+ error: unknown,
116
+ metadata: ReadonlyMap<string, string>,
117
+ signal?: AbortSignal
84
118
  ): Promise<void>;
85
119
  }
86
120
 
87
121
  export interface ZLinkNativeFallbackBoundSessionPort {
88
- disconnectNativeBoundSession(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, signal?: AbortSignal): Promise<void>;
122
+ disconnectNativeBoundSession(
123
+ node: ZLinkBackendActorSessionNode,
124
+ actorRef: ActorRef,
125
+ signal?: AbortSignal
126
+ ): Promise<void>;
89
127
  disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
90
128
  sendLocalBoundSession(
91
- actorId: string, message: unknown, packetName: string | undefined,
129
+ actorId: string,
130
+ message: unknown,
131
+ packetName: string | undefined,
92
132
  metadata: ReadonlyMap<string, string>
93
133
  ): Promise<boolean>;
94
134
  submitLocalBoundSession(
95
- actorId: string, message: unknown, packetName: string | undefined,
96
- metadata: ReadonlyMap<string, string>, signal?: AbortSignal
135
+ actorId: string,
136
+ message: unknown,
137
+ packetName: string | undefined,
138
+ metadata: ReadonlyMap<string, string>,
139
+ signal?: AbortSignal
97
140
  ): Promise<ZLinkSubmitResult>;
98
141
  sendNativeBoundSession(
99
- node: ZLinkBackendActorSessionNode, actorRef: ActorRef, message: unknown, packetName: string | undefined,
100
- metadata: ReadonlyMap<string, string>, signal?: AbortSignal
142
+ node: ZLinkBackendActorSessionNode,
143
+ actorRef: ActorRef,
144
+ message: unknown,
145
+ packetName: string | undefined,
146
+ metadata: ReadonlyMap<string, string>,
147
+ signal?: AbortSignal
101
148
  ): Promise<ZLinkSubmitResult>;
102
149
  sendBoundSession(
103
- actorId: string, message: unknown, packetName: string | undefined,
104
- metadata: ReadonlyMap<string, string>, signal?: AbortSignal
150
+ actorId: string,
151
+ message: unknown,
152
+ packetName: string | undefined,
153
+ metadata: ReadonlyMap<string, string>,
154
+ signal?: AbortSignal
105
155
  ): Promise<ZLinkSubmitResult>;
106
156
  }