@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
@@ -13,6 +13,7 @@ import type {
13
13
  } from './actor-session-binding-registry';
14
14
 
15
15
  export interface ZLinkActorSessionBindingRuntimeOwner {
16
+ actorSlot(actorId: string, sessionRid: string): Promise<number | undefined>;
16
17
  sealRelocation(
17
18
  claim: ZLinkActorSessionRelocationClaim,
18
19
  expected: ZLinkActorSessionRouteFence,
@@ -46,10 +47,13 @@ export interface ZLinkActorSessionBindingRuntimeOwner {
46
47
  applyFingerprint: string
47
48
  ): Promise<void>;
48
49
  clearRelocation(actorId: string, error: unknown): Promise<void>;
49
- committedRoute(actorId: string): Promise<{
50
- readonly actor: ActorRef;
51
- readonly authorityFence?: ZLinkActorSessionAuthorityFence;
52
- } | undefined>;
50
+ committedRoute(actorId: string): Promise<
51
+ | {
52
+ readonly actor: ActorRef;
53
+ readonly authorityFence?: ZLinkActorSessionAuthorityFence;
54
+ }
55
+ | undefined
56
+ >;
53
57
  }
54
58
 
55
59
  const owners = new WeakMap<object, ZLinkActorSessionBindingRuntimeOwner>();
@@ -4,7 +4,9 @@ export class ZLinkActorSessionLifecycleCoordinator {
4
4
  async run<T>(actorId: string, operation: () => Promise<T>): Promise<T> {
5
5
  const previous = this.tails.get(actorId) ?? Promise.resolve();
6
6
  let release!: () => void;
7
- const current = new Promise<void>((resolve) => { release = resolve; });
7
+ const current = new Promise<void>((resolve) => {
8
+ release = resolve;
9
+ });
8
10
  const tail = previous.catch(() => undefined).then(() => current);
9
11
  this.tails.set(actorId, tail);
10
12
  await previous.catch(() => undefined);
@@ -1,12 +1,5 @@
1
- import type {
2
- ZLinkMessage,
3
- ZLinkMessageSerializer,
4
- ZLinkSessionActor
5
- } from '../../contracts';
6
- import {
7
- ZLinkSubmitStatus,
8
- type ZLinkSubmitResult
9
- } from '../messaging/submission-result';
1
+ import type { ZLinkMessage, ZLinkMessageSerializer, ZLinkSessionActor } from '../../contracts';
2
+ import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
10
3
  import type { Message } from '../../contracts/Common/Message';
11
4
  import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
12
5
  import {
@@ -18,28 +11,32 @@ import {
18
11
  import { throwIfAborted } from '../abort';
19
12
  import { captureZLinkExecutionTurn } from '../execution';
20
13
  import {
21
- ZLinkActorSessionBindingRegistry
14
+ ZLinkActorSessionBindingRegistry,
15
+ ZLinkActorSessionBindingTermination
22
16
  } from './actor-session-binding-registry';
23
17
  import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
24
18
  import { ZLinkManagedStream } from './managed-stream';
25
- import {
26
- DefaultZLinkSessionActor,
27
- DefaultZLinkSessionContext
28
- } from './session-context';
29
- import {
30
- ZLinkStreamFrameMessageFactory
31
- } from './stream-frame-factory';
19
+ import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
20
+ import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
32
21
 
33
22
  export interface ZLinkBoundActorRelaySenderOptions {
34
23
  readonly actorBindTimeoutMs?: number;
35
24
  readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
36
- readonly relay?: (actor: ZLinkSessionActor, header: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal) => Promise<boolean>;
25
+ readonly relay?: (
26
+ actor: ZLinkSessionActor,
27
+ header: ZLinkStreamFrameHeader,
28
+ payload: Message,
29
+ signal?: AbortSignal
30
+ ) => Promise<boolean>;
37
31
  readonly notifyDisconnected?: (actor: ZLinkSessionActor, signal?: AbortSignal) => Promise<void>;
38
32
  }
39
33
 
40
34
  export class ZLinkBoundActorRelaySender {
41
35
  constructor(
42
- private readonly routes: ZLinkActorSessionBindingRegistry<DefaultZLinkSessionContext, DefaultZLinkSessionActor>,
36
+ private readonly routes: ZLinkActorSessionBindingRegistry<
37
+ DefaultZLinkSessionContext,
38
+ DefaultZLinkSessionActor
39
+ >,
43
40
  private readonly frameMessages: ZLinkStreamFrameMessageFactory,
44
41
  private readonly options: ZLinkBoundActorRelaySenderOptions = {},
45
42
  private readonly lifecycle = new ZLinkActorSessionLifecycleCoordinator()
@@ -51,13 +48,11 @@ export class ZLinkBoundActorRelaySender {
51
48
  signal?: AbortSignal,
52
49
  dispatchHeader?: ZLinkStreamFrameHeader
53
50
  ): Promise<ZLinkSubmitResult> {
54
- const header = dispatchHeader === undefined
55
- ? await this.currentHeader(actor)
56
- : await this.requireDispatchHeader(actor, dispatchHeader);
57
- if (
58
- header.kind === ZLinkStreamMessageKind.Request
59
- && header.requestSeq !== undefined
60
- ) {
51
+ const header =
52
+ dispatchHeader === undefined
53
+ ? await this.currentHeader(actor)
54
+ : await this.requireDispatchHeader(actor, dispatchHeader);
55
+ if (header.kind === ZLinkStreamMessageKind.Request && header.requestSeq !== undefined) {
61
56
  const operation = async (): Promise<ZLinkSubmitResult> => {
62
57
  const admission = await this.routes.beginAcceptedRequestFrameWhenReady(
63
58
  actor.actorId,
@@ -70,13 +65,16 @@ export class ZLinkBoundActorRelaySender {
70
65
  await admission.complete();
71
66
  }
72
67
  };
73
- if (await this.routes.isSealed(actor.actorId) && captureZLinkExecutionTurn() !== undefined) {
68
+ if (
69
+ (await this.routes.isSealed(actor.actorId)) &&
70
+ captureZLinkExecutionTurn() !== undefined
71
+ ) {
74
72
  void operation().catch(() => undefined);
75
73
  return { status: ZLinkSubmitStatus.Submitted };
76
74
  }
77
75
  return await operation();
78
76
  }
79
- if (await this.routes.isSealed(actor.actorId) && captureZLinkExecutionTurn() !== undefined) {
77
+ if ((await this.routes.isSealed(actor.actorId)) && captureZLinkExecutionTurn() !== undefined) {
80
78
  // Spec 32:62 — a Send completes once the source outbound queue
81
79
  // accepts it; spec 05 — infrastructure send progress must not depend
82
80
  // on the application turn. When the CALLER IS an application turn
@@ -89,12 +87,14 @@ export class ZLinkBoundActorRelaySender {
89
87
  // Non-turn callers (stream ingress relays) keep the waiting
90
88
  // semantics so a held frame across a failed rebind still
91
89
  // terminalizes to the caller.
92
- void this.routes.runAcceptedFrameWhenReady(
93
- actor.actorId,
94
- actor.bindingToken,
95
- () => this.relayAcceptedFrame(actor, payload, signal),
96
- signal
97
- ).catch(() => undefined);
90
+ void this.routes
91
+ .runAcceptedFrameWhenReady(
92
+ actor.actorId,
93
+ actor.bindingToken,
94
+ () => this.relayAcceptedFrame(actor, payload, signal),
95
+ signal
96
+ )
97
+ .catch(() => undefined);
98
98
  return { status: ZLinkSubmitStatus.Submitted };
99
99
  }
100
100
  return this.routes.runAcceptedFrameWhenReady(
@@ -112,7 +112,7 @@ export class ZLinkBoundActorRelaySender {
112
112
  header?: ZLinkStreamFrameHeader,
113
113
  requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined }
114
114
  ): Promise<ZLinkSubmitResult> {
115
- const activeHeader = header ?? await this.currentHeader(actor);
115
+ const activeHeader = header ?? (await this.currentHeader(actor));
116
116
  const started = await this.lifecycle.run(actor.actorId, async () => {
117
117
  const completion = this.relayInsideLifecycle(
118
118
  actor,
@@ -122,8 +122,8 @@ export class ZLinkBoundActorRelaySender {
122
122
  requestAdmission
123
123
  );
124
124
  if (
125
- activeHeader.kind === ZLinkStreamMessageKind.Request
126
- && activeHeader.requestSeq !== undefined
125
+ activeHeader.kind === ZLinkStreamMessageKind.Request &&
126
+ activeHeader.requestSeq !== undefined
127
127
  ) {
128
128
  // A routed REQUEST only needs this lane while its ordered submission
129
129
  // is started. Its admission acknowledgement can depend on relocation
@@ -167,7 +167,7 @@ export class ZLinkBoundActorRelaySender {
167
167
  currentHeader?: ZLinkStreamFrameHeader,
168
168
  requestAdmission?: { beginSubmission(signal?: AbortSignal): Promise<void> | undefined }
169
169
  ): Promise<ZLinkSubmitResult> {
170
- const header = currentHeader ?? await this.currentHeader(actor);
170
+ const header = currentHeader ?? (await this.currentHeader(actor));
171
171
  const held = requestAdmission?.beginSubmission(signal);
172
172
  if (held !== undefined) await held;
173
173
  throwIfAborted(signal);
@@ -184,7 +184,9 @@ export class ZLinkBoundActorRelaySender {
184
184
  return { status: ZLinkSubmitStatus.TargetNotFound };
185
185
  }
186
186
  const headerMessage = this.frameMessages.createBinaryMessage(encodeStreamHeader(header));
187
- const framePayloadMessage = this.frameMessages.createBinaryMessage(messageToBytes(payloadMessage));
187
+ const framePayloadMessage = this.frameMessages.createBinaryMessage(
188
+ messageToBytes(payloadMessage)
189
+ );
188
190
  try {
189
191
  return await route.context.stream.submitBoundActor(
190
192
  actor.actorId,
@@ -216,9 +218,9 @@ export class ZLinkBoundActorRelaySender {
216
218
  return route;
217
219
  });
218
220
  if (
219
- unbindNative
220
- && detached.bindingToken === actor.bindingToken
221
- && detached.context.stream instanceof ZLinkManagedStream
221
+ unbindNative &&
222
+ detached.bindingToken === actor.bindingToken &&
223
+ detached.context.stream instanceof ZLinkManagedStream
222
224
  ) {
223
225
  await detached.context.stream.unbindActor(
224
226
  actor.actorId,
@@ -237,17 +239,22 @@ export class ZLinkBoundActorRelaySender {
237
239
  const detached = await this.lifecycle.run(actor.actorId, async () => {
238
240
  const route = await this.routes.route(actor.actorId);
239
241
  if (
240
- route === undefined
241
- || route.context !== context
242
- || route.actor !== actor
243
- || route.bindingToken !== actor.bindingToken
242
+ route === undefined ||
243
+ route.context !== context ||
244
+ route.actor !== actor ||
245
+ route.bindingToken !== actor.bindingToken
244
246
  ) {
245
247
  return false;
246
248
  }
247
249
  // The transport is already closed, so remove its exact route before
248
250
  // invoking application lifecycle code. A reconnect can then install
249
251
  // a successor while this best-effort notification is in flight.
250
- await this.routes.unbind(actor.actorId, context, actor.bindingToken);
252
+ await this.routes.unbind(
253
+ actor.actorId,
254
+ context,
255
+ actor.bindingToken,
256
+ ZLinkActorSessionBindingTermination.PhysicalDisconnect
257
+ );
251
258
  return true;
252
259
  });
253
260
  if (!detached) return;
@@ -259,9 +266,12 @@ export class ZLinkBoundActorRelaySender {
259
266
  new Promise<never>((_, reject) => {
260
267
  controller.signal.addEventListener(
261
268
  'abort',
262
- () => reject(new Error(
263
- `Actor '${actor.actorId}' disconnect notification exceeded ${timeoutMs} ms.`
264
- )),
269
+ () =>
270
+ reject(
271
+ new Error(
272
+ `Actor '${actor.actorId}' disconnect notification exceeded ${timeoutMs} ms.`
273
+ )
274
+ ),
265
275
  { once: true }
266
276
  );
267
277
  })
@@ -1,8 +1,8 @@
1
1
  import type { Message } from '../../contracts/Common/Message';
2
- import {
3
- ZLinkSubmitStatus,
4
- type ZLinkSubmitResult
5
- } from '../messaging/submission-result';
2
+ import { ZLinkFrameworkErrorKind, ZLinkFrameworkException } from '../../contracts';
3
+ import { channelErrorCodeName } from '../channels/channel-envelope';
4
+ import { ZLinkRouteDisconnectedError } from '../channels/route-disconnected-error';
5
+ import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
6
6
  import { ZLinkStreamMessageKind } from './protocol';
7
7
  import type { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
8
8
 
@@ -40,7 +40,14 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
40
40
  message: unknown,
41
41
  metadata: ReadonlyMap<string, string>
42
42
  ): Promise<boolean> {
43
- return this.send(ZLinkStreamMessageKind.Response, packetName, requestSeq, message, metadata, 'response');
43
+ return this.send(
44
+ ZLinkStreamMessageKind.Response,
45
+ packetName,
46
+ requestSeq,
47
+ message,
48
+ metadata,
49
+ 'response'
50
+ );
44
51
  }
45
52
 
46
53
  sendError(
@@ -49,7 +56,14 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
49
56
  error: unknown,
50
57
  metadata: ReadonlyMap<string, string>
51
58
  ): Promise<boolean> {
52
- return this.send(ZLinkStreamMessageKind.Error, packetName, requestSeq, boundSessionErrorPayload(error), metadata, 'error response');
59
+ return this.send(
60
+ ZLinkStreamMessageKind.Error,
61
+ packetName,
62
+ requestSeq,
63
+ boundSessionErrorPayload(error),
64
+ metadata,
65
+ 'error response'
66
+ );
53
67
  }
54
68
 
55
69
  private async send(
@@ -60,7 +74,14 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
60
74
  metadata: ReadonlyMap<string, string>,
61
75
  operationName: string
62
76
  ): Promise<boolean> {
63
- const frame = this.frameMessages.createJsonFrameMessage(kind, packetName, metadata, false, requestSeq, payload);
77
+ const frame = this.frameMessages.createJsonFrameMessage(
78
+ kind,
79
+ packetName,
80
+ metadata,
81
+ false,
82
+ requestSeq,
83
+ payload
84
+ );
64
85
  try {
65
86
  const result = await this.context.stream.submitRaw(frame);
66
87
  if (result.status !== ZLinkSubmitStatus.Submitted) {
@@ -73,9 +94,18 @@ export class DefaultZLinkBoundSessionResponseTarget implements ZLinkBoundSession
73
94
  }
74
95
  }
75
96
 
76
- export function boundSessionErrorPayload(error: unknown): { readonly code: string; readonly message: string } {
97
+ export function boundSessionErrorPayload(error: unknown): {
98
+ readonly code: string;
99
+ readonly message: string;
100
+ } {
77
101
  return {
78
- code: error instanceof Error ? error.constructor.name : 'RemoteError',
102
+ code: channelErrorCodeName(
103
+ error instanceof ZLinkFrameworkException
104
+ ? error.kind
105
+ : error instanceof ZLinkRouteDisconnectedError
106
+ ? ZLinkFrameworkErrorKind.Unavailable
107
+ : ZLinkFrameworkErrorKind.InternalFailure
108
+ ),
79
109
  message: errorMessage(error)
80
110
  };
81
111
  }
@@ -1,10 +1,10 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException } from '../framework-errors-internal';
1
+ import {
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException
4
+ } from '../framework-errors-internal';
2
5
  import { ZLinkBufferMessage as ZLinkBindingMessage } from '../backend/runtime-message';
3
6
  import type { ActorRef } from '../../contracts';
4
- import {
5
- ZLinkSubmitStatus,
6
- type ZLinkSubmitResult
7
- } from '../messaging/submission-result';
7
+ import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
8
8
  import type { Message } from '../../contracts/Common/Message';
9
9
  import { throwIfAborted } from '../abort';
10
10
  import type {
@@ -23,26 +23,24 @@ import {
23
23
  ZLinkActorSessionBindingRegistry,
24
24
  type ZLinkActorSessionRoute
25
25
  } from './actor-session-binding-registry';
26
- import type {
27
- DefaultZLinkSessionActor,
28
- DefaultZLinkSessionContext
29
- } from './session-context';
30
- import {
31
- boundSessionErrorPayload
32
- } from './bound-session-response-target';
33
- import {
34
- ZLinkStreamFrameMessageFactory
35
- } from './stream-frame-factory';
36
- import {
37
- ZLinkManagedStream
38
- } from './managed-stream';
26
+ import type { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
27
+ import { boundSessionErrorPayload } from './bound-session-response-target';
28
+ import { ZLinkStreamFrameMessageFactory } from './stream-frame-factory';
29
+ import { ZLinkManagedStream } from './managed-stream';
39
30
 
40
31
  const ZLINK_SEND_DONT_WAIT = 1;
41
32
 
42
- type ZLinkStreamActorSessionRoute = ZLinkActorSessionRoute<DefaultZLinkSessionContext, DefaultZLinkSessionActor>;
33
+ type ZLinkStreamActorSessionRoute = ZLinkActorSessionRoute<
34
+ DefaultZLinkSessionContext,
35
+ DefaultZLinkSessionActor
36
+ >;
43
37
 
44
38
  export interface ZLinkBoundSessionTransport {
45
- send(actorId: string, message: unknown, options: ZLinkBoundSessionSendOptions): Promise<ZLinkSubmitResult>;
39
+ send(
40
+ actorId: string,
41
+ message: unknown,
42
+ options: ZLinkBoundSessionSendOptions
43
+ ): Promise<ZLinkSubmitResult>;
46
44
  disconnect(actorId: string, options: ZLinkBoundSessionDisconnectOptions): Promise<void>;
47
45
  }
48
46
 
@@ -66,7 +64,10 @@ export interface ZLinkBoundSessionServiceOptions {
66
64
 
67
65
  export class ZLinkBoundSessionService {
68
66
  constructor(
69
- private readonly routes: ZLinkActorSessionBindingRegistry<DefaultZLinkSessionContext, DefaultZLinkSessionActor>,
67
+ private readonly routes: ZLinkActorSessionBindingRegistry<
68
+ DefaultZLinkSessionContext,
69
+ DefaultZLinkSessionActor
70
+ >,
70
71
  private readonly frameMessages: ZLinkStreamFrameMessageFactory,
71
72
  private readonly options: ZLinkBoundSessionServiceOptions
72
73
  ) {}
@@ -86,7 +87,9 @@ export class ZLinkBoundSessionService {
86
87
  metadata,
87
88
  false,
88
89
  undefined,
89
- message
90
+ message,
91
+ undefined,
92
+ this.actorSlot(route)
90
93
  );
91
94
  try {
92
95
  const result = await this.requireTransport().send(actorId, frame, {
@@ -119,7 +122,9 @@ export class ZLinkBoundSessionService {
119
122
  metadata,
120
123
  false,
121
124
  undefined,
122
- message
125
+ message,
126
+ undefined,
127
+ this.actorSlot(route)
123
128
  );
124
129
  try {
125
130
  throwIfAborted(signal);
@@ -300,10 +305,7 @@ export class ZLinkBoundSessionService {
300
305
  }
301
306
  }
302
307
 
303
- async relayRemoteBoundSessionBind(
304
- stream: ZLinkManagedStream,
305
- actorRef: ActorRef
306
- ): Promise<void> {
308
+ async relayRemoteBoundSessionBind(stream: ZLinkManagedStream, actorRef: ActorRef): Promise<void> {
307
309
  const encodedBindHeader = encodeStreamHeader({
308
310
  kind: ZLinkStreamMessageKind.Send,
309
311
  codec: ZLinkStreamCodec.Raw,
@@ -312,14 +314,16 @@ export class ZLinkBoundSessionService {
312
314
  metadata: new Map()
313
315
  });
314
316
  // encodeStreamHeader returns a fresh, unaliased array; view it without re-copying.
315
- const header = ZLinkBindingMessage.fromOwned(Buffer.from(
316
- encodedBindHeader.buffer,
317
- encodedBindHeader.byteOffset,
318
- encodedBindHeader.byteLength
319
- ));
317
+ const header = ZLinkBindingMessage.fromOwned(
318
+ Buffer.from(
319
+ encodedBindHeader.buffer,
320
+ encodedBindHeader.byteOffset,
321
+ encodedBindHeader.byteLength
322
+ )
323
+ );
320
324
  const body = ZLinkBindingMessage.fromOwned(Buffer.alloc(0));
321
325
  try {
322
- if (!await stream.sendBoundActor(actorRef.actorId, [header, body], 0)) {
326
+ if (!(await stream.sendBoundActor(actorRef.actorId, [header, body], 0))) {
323
327
  throw createInternalFrameworkException(
324
328
  ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
325
329
  `Actor '${actorRef.actorId}' remote bound session bind relay failed.`
@@ -348,7 +352,9 @@ export class ZLinkBoundSessionService {
348
352
  metadata,
349
353
  compressPayload,
350
354
  requestSeq,
351
- payload
355
+ payload,
356
+ undefined,
357
+ this.actorSlot(route)
352
358
  );
353
359
  try {
354
360
  if ((await this.routes.route(actorId))?.bindingToken !== route.bindingToken) {
@@ -448,6 +454,10 @@ export class ZLinkBoundSessionService {
448
454
  }
449
455
  return this.options.transport;
450
456
  }
457
+
458
+ private actorSlot(route: ZLinkStreamActorSessionRoute): number | undefined {
459
+ return route.actorSlot;
460
+ }
451
461
  }
452
462
 
453
463
  function requireBoundSessionGeneration(actorRef: ActorRef): bigint {
@@ -480,15 +490,15 @@ function boundSessionSendFence(
480
490
  readonly ownerLeaseGeneration?: bigint;
481
491
  readonly ownerNodeGeneration?: bigint;
482
492
  };
483
- const ownerNodeGeneration = internal.ownerNodeGeneration
484
- ?? node.actorNodeGeneration?.(backendActor);
493
+ const ownerNodeGeneration =
494
+ internal.ownerNodeGeneration ?? node.actorNodeGeneration?.(backendActor);
485
495
  if (
486
- internal.ownershipGeneration === undefined
487
- || internal.ownershipGeneration <= 0n
488
- || internal.ownerLeaseGeneration === undefined
489
- || internal.ownerLeaseGeneration <= 0n
490
- || ownerNodeGeneration === undefined
491
- || ownerNodeGeneration <= 0n
496
+ internal.ownershipGeneration === undefined ||
497
+ internal.ownershipGeneration <= 0n ||
498
+ internal.ownerLeaseGeneration === undefined ||
499
+ internal.ownerLeaseGeneration <= 0n ||
500
+ ownerNodeGeneration === undefined ||
501
+ ownerNodeGeneration <= 0n
492
502
  ) {
493
503
  return undefined;
494
504
  }