@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
@@ -10,10 +10,7 @@ import type {
10
10
  ZLinkMessageSerializer,
11
11
  ZLinkStream
12
12
  } from '../../contracts';
13
- import {
14
- ZLinkSubmitStatus,
15
- type ZLinkSubmitResult
16
- } from '../messaging/submission-result';
13
+ import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
17
14
  import type { Message } from '../../contracts/Common/Message';
18
15
  import { throwIfAborted } from '../abort';
19
16
  import { encodeFrameworkPayloadMessage } from '../messaging/payload-codec';
@@ -36,6 +33,8 @@ import {
36
33
  type ZLinkMeshCompletionTable
37
34
  } from '../backend/mesh-completion-table';
38
35
  import {
36
+ encodeActorBoundFrame,
37
+ encodeActorUnboundFrame,
39
38
  encodeSessionClosingFrame,
40
39
  encodeStreamControlFrame,
41
40
  ZLinkStreamCloseReasonCode
@@ -54,15 +53,17 @@ export interface ZLinkNativeSessionRoute {
54
53
  readonly completions: ZLinkMeshCompletionTable;
55
54
  }
56
55
 
56
+ interface ZLinkManagedActorBinding {
57
+ readonly actor: ZLinkBackendActorRef;
58
+ readonly bindingGeneration?: bigint;
59
+ readonly route?: ZLinkNativeSessionRoute;
60
+ }
61
+
57
62
  export class ZLinkManagedStream implements ZLinkStream {
58
63
  private currentLocalAddr: string | undefined;
59
64
  private currentRemoteAddr: string | undefined;
60
65
  private transportClosed = false;
61
- private readonly nativeActorBindings = new Map<string, {
62
- readonly actor: ZLinkBackendActorRef;
63
- readonly bindingGeneration: bigint;
64
- readonly route?: ZLinkNativeSessionRoute;
65
- }>();
66
+ private readonly nativeActorBindings = new Map<string, ZLinkManagedActorBinding>();
66
67
 
67
68
  constructor(
68
69
  private readonly socket: ZLinkBackendStreamSocket,
@@ -138,12 +139,11 @@ export class ZLinkManagedStream implements ZLinkStream {
138
139
  signal?: AbortSignal
139
140
  ): Promise<ZLinkSubmitResult> {
140
141
  throwIfAborted(signal);
141
- return await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT)
142
+ return (await this.sendBoundActor(actorId, parts, ZLINK_SEND_DONT_WAIT))
142
143
  ? { status: ZLinkSubmitStatus.Submitted }
143
144
  : { status: ZLinkSubmitStatus.Backpressured };
144
145
  }
145
146
 
146
-
147
147
  async close(signal?: AbortSignal): Promise<void> {
148
148
  throwIfAborted(signal);
149
149
  this.markTransportClosed();
@@ -196,12 +196,12 @@ export class ZLinkManagedStream implements ZLinkStream {
196
196
  `Stream session '${this.sessionId}' is disconnected.`
197
197
  );
198
198
  }
199
+ const nativeActor = toNativeActorRef(actor);
199
200
  const route = this.nativeRoute(actor.meshName);
200
201
  if (route !== undefined) {
201
202
  if (route.service.status().state === 1) {
202
203
  route.service.start();
203
204
  }
204
- const nativeActor = toNativeActorRef(actor);
205
205
  await this.ensureNativeActorRoute(route, actor, timeoutMs, signal);
206
206
  if (this.isTransportClosed()) {
207
207
  throw createInternalFrameworkException(
@@ -211,25 +211,29 @@ export class ZLinkManagedStream implements ZLinkStream {
211
211
  }
212
212
  await this.requireSuccessfulCompletion(
213
213
  route.completions.submit(
214
- () => route.service.bindActor(
215
- this.backendRoutingId(),
216
- nativeActor,
217
- timeoutMs,
218
- onBindingReplaced === undefined
219
- ? undefined
220
- : (_actorId, retiredSession, replacedActor) => {
221
- onBindingReplaced(replacedActor, retiredSession);
222
- },
223
- toStreamSessionActorAuthorityFence(authorityFence)
224
- ),
214
+ () =>
215
+ route.service.bindActor(
216
+ this.backendRoutingId(),
217
+ nativeActor,
218
+ timeoutMs,
219
+ onBindingReplaced === undefined
220
+ ? undefined
221
+ : (_actorId, retiredSession, replacedActor) => {
222
+ onBindingReplaced(replacedActor, retiredSession);
223
+ },
224
+ toStreamSessionActorAuthorityFence(authorityFence)
225
+ ),
225
226
  signal
226
227
  ),
227
- `Actor '${actor.actorId}' native session bind`,
228
+ `Actor '${actor.actorId}' native session bind`
228
229
  );
229
- const binding = route.service.bindings(this.backendRoutingId())
230
- .find((candidate) =>
231
- candidate.actor.actorId === nativeActor.actorId
232
- && candidate.actor.generation === nativeActor.generation);
230
+ const binding = route.service
231
+ .bindings(this.backendRoutingId())
232
+ .find(
233
+ (candidate) =>
234
+ candidate.actor.actorId === nativeActor.actorId &&
235
+ candidate.actor.generation === nativeActor.generation
236
+ );
233
237
  if (binding === undefined) {
234
238
  throw createInternalFrameworkException(
235
239
  ZLinkFrameworkInternalErrorKind.RouteNotConnected,
@@ -240,12 +244,13 @@ export class ZLinkManagedStream implements ZLinkStream {
240
244
  try {
241
245
  await this.requireSuccessfulCompletion(
242
246
  route.completions.submit(
243
- () => route.service.unbindActor(
244
- this.backendRoutingId(),
245
- nativeActor as never,
246
- binding.bindingGeneration,
247
- timeoutMs
248
- ),
247
+ () =>
248
+ route.service.unbindActor(
249
+ this.backendRoutingId(),
250
+ nativeActor as never,
251
+ binding.bindingGeneration,
252
+ timeoutMs
253
+ ),
249
254
  signal
250
255
  ),
251
256
  `Actor '${actor.actorId}' native session unbind`,
@@ -268,7 +273,13 @@ export class ZLinkManagedStream implements ZLinkStream {
268
273
  });
269
274
  return;
270
275
  }
271
- await this.socket.bindActor(this.backendRoutingId(), toBackendActorRef(actor), timeoutMs, signal);
276
+ await this.socket.bindActor(
277
+ this.backendRoutingId(),
278
+ toBackendActorRef(actor),
279
+ timeoutMs,
280
+ signal
281
+ );
282
+ this.nativeActorBindings.set(actor.actorId, { actor: nativeActor });
272
283
  }
273
284
 
274
285
  private async ensureNativeActorRoute(
@@ -282,23 +293,24 @@ export class ZLinkManagedStream implements ZLinkStream {
282
293
  signal
283
294
  );
284
295
  try {
285
- const resolved = completion.kindData?.kind === 'actorLookupCompletion'
286
- ? completion.kindData.location.actor
287
- : undefined;
296
+ const resolved =
297
+ completion.kindData?.kind === 'actorLookupCompletion'
298
+ ? completion.kindData.location.actor
299
+ : undefined;
288
300
  if (
289
- completion.terminalResult !== 0
290
- || completion.failureErrno !== 0
291
- || resolved === undefined
292
- || resolved.actorId !== actor.actorId
293
- || resolved.generation !== actor.objectGeneration
294
- || String(resolved.nodeRid) !== String(actor.nodeRid)
301
+ completion.terminalResult !== 0 ||
302
+ completion.failureErrno !== 0 ||
303
+ resolved === undefined ||
304
+ resolved.actorId !== actor.actorId ||
305
+ resolved.generation !== actor.objectGeneration ||
306
+ String(resolved.nodeRid) !== String(actor.nodeRid)
295
307
  ) {
296
308
  throw createInternalFrameworkException(
297
309
  ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
298
- `Actor '${actor.actorId}' native route fence does not match its ActorRef `
299
- + `(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, `
300
- + `resolved ${resolved === undefined ? 'none' : `${String(resolved.nodeRid)}/${resolved.generation}`}, `
301
- + `terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`
310
+ `Actor '${actor.actorId}' native route fence does not match its ActorRef ` +
311
+ `(expected ${String(actor.nodeRid)}/${actor.objectGeneration}, ` +
312
+ `resolved ${resolved === undefined ? 'none' : `${String(resolved.nodeRid)}/${resolved.generation}`}, ` +
313
+ `terminal=${completion.terminalResult}, failure=${completion.failureErrno}).`
302
314
  );
303
315
  }
304
316
  } finally {
@@ -317,19 +329,20 @@ export class ZLinkManagedStream implements ZLinkStream {
317
329
  const binding = this.nativeActorBindings.get(actorId);
318
330
  if (binding?.route !== undefined) {
319
331
  const route = binding.route;
320
- if (!this.hasNativeBinding(route, actorId, binding.bindingGeneration)) {
332
+ if (!this.hasNativeBinding(route, actorId, binding.bindingGeneration!)) {
321
333
  this.nativeActorBindings.delete(actorId);
322
334
  return;
323
335
  }
324
336
  try {
325
337
  await this.requireSuccessfulCompletion(
326
338
  route.completions.submit(
327
- () => route.service.unbindActor(
328
- this.backendRoutingId(),
329
- binding.actor as never,
330
- binding.bindingGeneration,
331
- timeoutMs
332
- ),
339
+ () =>
340
+ route.service.unbindActor(
341
+ this.backendRoutingId(),
342
+ binding.actor as never,
343
+ binding.bindingGeneration!,
344
+ timeoutMs
345
+ ),
333
346
  signal
334
347
  ),
335
348
  `Actor '${actorId}' native session unbind`,
@@ -343,7 +356,7 @@ export class ZLinkManagedStream implements ZLinkStream {
343
356
  // tombstone. A transport teardown can therefore report an internal
344
357
  // completion after the exact binding is already gone. Treat only that
345
358
  // exact missing binding as stale cleanup; preserve other failures.
346
- if (this.hasNativeBinding(route, actorId, binding.bindingGeneration)) {
359
+ if (this.hasNativeBinding(route, actorId, binding.bindingGeneration!)) {
347
360
  throw error;
348
361
  }
349
362
  }
@@ -353,6 +366,26 @@ export class ZLinkManagedStream implements ZLinkStream {
353
366
  return;
354
367
  }
355
368
  await this.socket.unbindActor(this.backendRoutingId(), actorId, timeoutMs, signal);
369
+ if (binding !== undefined && this.nativeActorBindings.get(actorId) === binding) {
370
+ this.nativeActorBindings.delete(actorId);
371
+ }
372
+ }
373
+
374
+ async enqueueActorBound(actorSlot: number, actorId: string): Promise<void> {
375
+ await this.submitActorBindingControl(encodeActorBoundFrame(actorSlot, actorId));
376
+ }
377
+
378
+ async enqueueActorUnbound(actorSlot: number): Promise<void> {
379
+ await this.submitActorBindingControl(encodeActorUnboundFrame(actorSlot));
380
+ }
381
+
382
+ private async submitActorBindingControl(frame: Uint8Array): Promise<void> {
383
+ const message = NativeMessage.from(frame);
384
+ try {
385
+ await this.socket.submit(this.backendRoutingId(), message);
386
+ } finally {
387
+ message.close();
388
+ }
356
389
  }
357
390
 
358
391
  async sendBoundActor(
@@ -370,24 +403,21 @@ export class ZLinkManagedStream implements ZLinkStream {
370
403
  if (binding?.route !== undefined) {
371
404
  const nativeParts = parts.map((part) => NativeMessage.from(part.data()));
372
405
  try {
373
- return await binding.route.service.sendToActor(
374
- this.backendRoutingId(),
375
- binding.actor as never,
376
- nativeParts,
377
- { flags: flags ?? 0 }
378
- ) === 0;
406
+ return (
407
+ (await binding.route.service.sendToActor(
408
+ this.backendRoutingId(),
409
+ binding.actor as never,
410
+ nativeParts,
411
+ { flags: flags ?? 0 }
412
+ )) === 0
413
+ );
379
414
  } finally {
380
415
  for (const part of nativeParts) {
381
416
  part.close();
382
417
  }
383
418
  }
384
419
  }
385
- return this.socket.sendBoundActor(
386
- this.backendRoutingId(),
387
- actorId,
388
- parts,
389
- flags ?? 0
390
- );
420
+ return this.socket.sendBoundActor(this.backendRoutingId(), actorId, parts, flags ?? 0);
391
421
  }
392
422
 
393
423
  updateAddresses(localAddr: string | undefined, remoteAddr: string | undefined): void {
@@ -406,9 +436,12 @@ export class ZLinkManagedStream implements ZLinkStream {
406
436
  bindingGeneration: bigint
407
437
  ): boolean {
408
438
  try {
409
- return route.service.bindings(this.backendRoutingId()).some(candidate =>
410
- candidate.actor.actorId === actorId
411
- && candidate.bindingGeneration === bindingGeneration);
439
+ return route.service
440
+ .bindings(this.backendRoutingId())
441
+ .some(
442
+ (candidate) =>
443
+ candidate.actor.actorId === actorId && candidate.bindingGeneration === bindingGeneration
444
+ );
412
445
  } catch {
413
446
  // A closed native service owns the teardown state. Keep the original
414
447
  // error when its binding snapshot is unavailable.
@@ -428,8 +461,8 @@ export class ZLinkManagedStream implements ZLinkStream {
428
461
  const completion = await completionPromise;
429
462
  try {
430
463
  if (
431
- completion.terminalResult !== 0
432
- && !acceptedTerminalResults.has(completion.terminalResult)
464
+ completion.terminalResult !== 0 &&
465
+ !acceptedTerminalResults.has(completion.terminalResult)
433
466
  ) {
434
467
  throw wireReplyFailureException(
435
468
  completion.terminalResult,
@@ -443,15 +476,15 @@ export class ZLinkManagedStream implements ZLinkStream {
443
476
  }
444
477
 
445
478
  private nativeRoute(meshName: string): ZLinkNativeSessionRoute | undefined {
446
- return this.nativeSessionRouteForMesh?.(meshName)
447
- ?? (
448
- this.nativeSessionService !== undefined && this.meshCompletions !== undefined
449
- ? {
450
- service: this.nativeSessionService,
451
- completions: this.meshCompletions
452
- }
453
- : undefined
454
- );
479
+ return (
480
+ this.nativeSessionRouteForMesh?.(meshName) ??
481
+ (this.nativeSessionService !== undefined && this.meshCompletions !== undefined
482
+ ? {
483
+ service: this.nativeSessionService,
484
+ completions: this.meshCompletions
485
+ }
486
+ : undefined)
487
+ );
455
488
  }
456
489
  }
457
490
 
@@ -460,18 +493,18 @@ export function streamSessionIdFromRoutingId(routingId: unknown): string {
460
493
  return routingId;
461
494
  }
462
495
  if (
463
- typeof routingId === 'object'
464
- && routingId !== null
465
- && 'toHex' in routingId
466
- && typeof (routingId as { toHex?: unknown }).toHex === 'function'
496
+ typeof routingId === 'object' &&
497
+ routingId !== null &&
498
+ 'toHex' in routingId &&
499
+ typeof (routingId as { toHex?: unknown }).toHex === 'function'
467
500
  ) {
468
501
  return (routingId as { toHex(): string }).toHex();
469
502
  }
470
503
  if (
471
- typeof routingId === 'object'
472
- && routingId !== null
473
- && 'toString' in routingId
474
- && typeof (routingId as { toString?: unknown }).toString === 'function'
504
+ typeof routingId === 'object' &&
505
+ routingId !== null &&
506
+ 'toString' in routingId &&
507
+ typeof (routingId as { toString?: unknown }).toString === 'function'
475
508
  ) {
476
509
  return (routingId as { toString(): string }).toString();
477
510
  }
@@ -63,7 +63,9 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
63
63
  const remoteTarget = this.options.remoteBoundSessionTargetProvider();
64
64
  if (remoteTarget !== undefined) {
65
65
  const spotKind: ZLinkSpotKind | undefined =
66
- 'spotKind' in remoteTarget ? remoteTarget.spotKind as ZLinkSpotKind | undefined : undefined;
66
+ 'spotKind' in remoteTarget
67
+ ? (remoteTarget.spotKind as ZLinkSpotKind | undefined)
68
+ : undefined;
67
69
  const payload = encodeRemoteActorPacketRelayPayload({
68
70
  actorId: this.options.actorId,
69
71
  routerChannelId: remoteTarget.routerChannelId,
@@ -76,27 +78,26 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
76
78
  spotId: remoteTarget.spotId,
77
79
  spotKind: spotKind ?? ZLinkSpotKind.Entry
78
80
  };
79
- if (await tryRequestRoutedJson(
80
- this.options.routedTransport,
81
- target,
82
- payload,
83
- { timeoutMs: this.options.requestTimeoutMs, signal }
84
- )) {
81
+ if (
82
+ await tryRequestRoutedJson(this.options.routedTransport, target, payload, {
83
+ timeoutMs: this.options.requestTimeoutMs,
84
+ signal
85
+ })
86
+ ) {
85
87
  return;
86
88
  }
87
- await this.options.routedTransport.sendToSpot(
88
- target,
89
- payload,
90
- { packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET, signal }
91
- );
89
+ await this.options.routedTransport.sendToSpot(target, payload, {
90
+ packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
91
+ signal
92
+ });
92
93
  return;
93
94
  }
94
95
  const actorRef = this.options.actorRefProvider();
95
96
  const node = this.options.nativeActorNodeProvider();
96
97
  if (
97
- actorRef !== undefined
98
- && node !== undefined
99
- && currentBindingGeneration(actorRef) !== undefined
98
+ actorRef !== undefined &&
99
+ node !== undefined &&
100
+ currentBindingGeneration(actorRef) !== undefined
100
101
  ) {
101
102
  await this.options.runtime.disconnectNativeBoundSession(node, actorRef, signal);
102
103
  return;
@@ -129,7 +130,11 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
129
130
  if (this.executed) {
130
131
  throwAlreadySubmitted('Bound session send call');
131
132
  }
132
- const packetName = resolveFrameworkPacketName(this.message, this.selectedPacketName, 'Bound session');
133
+ const packetName = resolveFrameworkPacketName(
134
+ this.message,
135
+ this.selectedPacketName,
136
+ 'Bound session'
137
+ );
133
138
  this.executed = true;
134
139
  throwIfAborted(signal);
135
140
  const result = await this.execute(packetName, signal);
@@ -144,13 +149,15 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
144
149
  // Call-scoped flow (spec 27 §4): the relay JSON flow pair and any nested
145
150
  // routed-transport envelope share one ambient flow that does not outlive
146
151
  // this submit call.
147
- return runWithOutboundFlow(
148
- this.options.flowCreationEnabled?.() ?? true,
149
- () => this.executeScoped(packetName, signal)
152
+ return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
153
+ this.executeScoped(packetName, signal)
150
154
  );
151
155
  }
152
156
 
153
- private async executeScoped(packetName: string, signal?: AbortSignal): Promise<ZLinkSubmitResult> {
157
+ private async executeScoped(
158
+ packetName: string,
159
+ signal?: AbortSignal
160
+ ): Promise<ZLinkSubmitResult> {
154
161
  const localActor = this.options.localActorProvider?.() === true;
155
162
  const remoteTarget = this.options.remoteBoundSessionTargetProvider();
156
163
  const sealedRemoteTarget = remoteTarget?.relocationSealId !== undefined;
@@ -175,11 +182,7 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
175
182
  const actorRef = this.options.actorRefProvider();
176
183
  const node = this.options.nativeActorNodeProvider();
177
184
  const bindingGeneration = currentBindingGeneration(actorRef);
178
- if (
179
- actorRef !== undefined
180
- && node !== undefined
181
- && bindingGeneration !== undefined
182
- ) {
185
+ if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
183
186
  nativeAttempted = true;
184
187
  const result = await this.options.runtime.sendNativeBoundSession(
185
188
  node,
@@ -200,8 +203,9 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
200
203
  }
201
204
  if (remoteTarget !== undefined) {
202
205
  const actorRef = this.options.actorRefProvider();
203
- const ownershipGeneration = (actorRef as (ActorRef & { ownershipGeneration?: bigint }) | undefined)
204
- ?.ownershipGeneration;
206
+ const ownershipGeneration = (
207
+ actorRef as (ActorRef & { ownershipGeneration?: bigint }) | undefined
208
+ )?.ownershipGeneration;
205
209
  const payload = encodeRemoteBoundSessionSendPayload({
206
210
  actorId: this.options.actorId,
207
211
  actorMeshName: actorRef?.meshName,
@@ -220,27 +224,28 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
220
224
  ? currentOrCreateFlow('Application')
221
225
  : undefined)
222
226
  });
223
- const submit = this.options.routedTransport.submitInfrastructure
224
- ?? this.options.routedTransport.submit;
225
- const result = submit === undefined
226
- ? await this.options.routedTransport.sendToSpot(
227
- {
228
- routerChannelId: remoteTarget.routerChannelId,
229
- targetNodeRid: remoteTarget.targetNodeRid,
230
- spotId: remoteTarget.spotId,
231
- spotKind: ZLinkSpotKind.Entry
232
- },
233
- payload,
234
- { packetName: ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET, signal }
235
- )
236
- : await submit.call(
237
- this.options.routedTransport,
238
- remoteTarget.routerChannelId,
239
- String(remoteTarget.targetNodeRid),
240
- ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET,
241
- payload,
242
- signal
243
- );
227
+ const submit =
228
+ this.options.routedTransport.submitInfrastructure ?? this.options.routedTransport.submit;
229
+ const result =
230
+ submit === undefined
231
+ ? await this.options.routedTransport.sendToSpot(
232
+ {
233
+ routerChannelId: remoteTarget.routerChannelId,
234
+ targetNodeRid: remoteTarget.targetNodeRid,
235
+ spotId: remoteTarget.spotId,
236
+ spotKind: ZLinkSpotKind.Entry
237
+ },
238
+ payload,
239
+ { packetName: ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET, signal }
240
+ )
241
+ : await submit.call(
242
+ this.options.routedTransport,
243
+ remoteTarget.routerChannelId,
244
+ String(remoteTarget.targetNodeRid),
245
+ ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET,
246
+ payload,
247
+ signal
248
+ );
244
249
  this.traceSubmitted(result, packetName);
245
250
  return result;
246
251
  }
@@ -259,10 +264,10 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
259
264
  const node = this.options.nativeActorNodeProvider();
260
265
  const bindingGeneration = currentBindingGeneration(actorRef);
261
266
  if (
262
- !nativeAttempted
263
- && actorRef !== undefined
264
- && node !== undefined
265
- && bindingGeneration !== undefined
267
+ !nativeAttempted &&
268
+ actorRef !== undefined &&
269
+ node !== undefined &&
270
+ bindingGeneration !== undefined
266
271
  ) {
267
272
  const result = await this.options.runtime.sendNativeBoundSession(
268
273
  node,