@zlink-systems/framework 0.20.0 → 0.22.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 (487) 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/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -26,10 +26,7 @@ import {
26
26
  ZLinkRemoteBoundSessionFenceError
27
27
  } from '../actors/bound-session-wire';
28
28
  import { encodeRemoteActorPacketTarget } from '../actors/actor-packet-relay-wire';
29
- import {
30
- decodeRoutingId as decodeWireRoutingId,
31
- routingIdsEqual
32
- } from '../routing-id';
29
+ import { decodeRoutingId as decodeWireRoutingId, routingIdsEqual } from '../routing-id';
33
30
  import type { MeshRouterResolver } from './mesh-router-resolver';
34
31
  import {
35
32
  encodeSessionRelocationRoute,
@@ -93,15 +90,16 @@ type RemoteBoundSessionSend = ReturnType<typeof decodeRemoteBoundSessionSendPayl
93
90
 
94
91
  export class ZLinkRemoteBoundSessionRelay {
95
92
  private readonly actorOwnershipGenerations = new Map<string, bigint>();
96
- private readonly activeServiceWireRelocations =
97
- new Map<string, ActiveServiceWireSessionRelocation>();
98
- private readonly terminalServiceWireRelocations =
99
- new BoundedReplayMap<string, TerminalServiceWireSessionRelocation>(
100
- SERVICE_CONTROL_TERMINAL_CAPACITY
101
- );
93
+ private readonly activeServiceWireRelocations = new Map<
94
+ string,
95
+ ActiveServiceWireSessionRelocation
96
+ >();
97
+ private readonly terminalServiceWireRelocations = new BoundedReplayMap<
98
+ string,
99
+ TerminalServiceWireSessionRelocation
100
+ >(SERVICE_CONTROL_TERMINAL_CAPACITY);
102
101
 
103
- constructor(private readonly options: ZLinkRemoteBoundSessionRelayOptions) {
104
- }
102
+ constructor(private readonly options: ZLinkRemoteBoundSessionRelayOptions) {}
105
103
 
106
104
  async receiveRoutedBoundSession(
107
105
  actorId: string,
@@ -111,36 +109,43 @@ export class ZLinkRemoteBoundSessionRelay {
111
109
  actorRef?: ActorRef,
112
110
  actorPacketTarget?: unknown
113
111
  ): Promise<void> {
114
- const ownershipGeneration = (actorRef as (ActorRef & { ownershipGeneration?: bigint }) | undefined)
115
- ?.ownershipGeneration;
112
+ const ownershipGeneration = (
113
+ actorRef as (ActorRef & { ownershipGeneration?: bigint }) | undefined
114
+ )?.ownershipGeneration;
116
115
  const currentGeneration = this.actorOwnershipGenerations.get(actorId);
117
116
  if (
118
117
  currentGeneration !== undefined &&
119
118
  (ownershipGeneration === undefined || ownershipGeneration < currentGeneration)
120
- ) return;
119
+ )
120
+ return;
121
121
  if (ownershipGeneration !== undefined) {
122
122
  this.actorOwnershipGenerations.set(actorId, ownershipGeneration);
123
123
  }
124
124
  await this.options.updateRemoteActorPacketTarget(actorId, actorPacketTarget);
125
125
  if (
126
- ownershipGeneration !== undefined
127
- && this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration
128
- ) return;
126
+ ownershipGeneration !== undefined &&
127
+ this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration
128
+ )
129
+ return;
129
130
  if (actorRef !== undefined) {
130
131
  await this.options.streamBindingRuntime().rebindActor(actorRef);
131
132
  }
132
133
  if (
133
- ownershipGeneration !== undefined
134
- && this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration
135
- ) return;
136
- const sent = await this.options.streamBindingRuntime().sendLocalBoundSession(actorId, message, packetName, metadata);
134
+ ownershipGeneration !== undefined &&
135
+ this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration
136
+ )
137
+ return;
138
+ const sent = await this.options
139
+ .streamBindingRuntime()
140
+ .sendLocalBoundSession(actorId, message, packetName, metadata);
137
141
  if (sent) {
138
142
  return;
139
143
  }
140
144
  if (
141
- ownershipGeneration !== undefined
142
- && this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration
143
- ) return;
145
+ ownershipGeneration !== undefined &&
146
+ this.actorOwnershipGenerations.get(actorId) !== ownershipGeneration
147
+ )
148
+ return;
144
149
  if (this.options.actorManager()?.getState(actorId)?.remoteBoundSessionTarget === undefined) {
145
150
  return;
146
151
  }
@@ -163,14 +168,16 @@ export class ZLinkRemoteBoundSessionRelay {
163
168
  actorPacketTarget?: unknown
164
169
  ): Promise<void> {
165
170
  await this.options.updateRemoteActorPacketTarget(actorId, actorPacketTarget);
166
- await this.options.streamBindingRuntime().sendLocalBoundSessionResponse(
167
- actorId,
168
- packetName,
169
- requestSeq,
170
- message,
171
- replyOptions.metadata,
172
- replyOptions.compressPayload
173
- );
171
+ await this.options
172
+ .streamBindingRuntime()
173
+ .sendLocalBoundSessionResponse(
174
+ actorId,
175
+ packetName,
176
+ requestSeq,
177
+ message,
178
+ replyOptions.metadata,
179
+ replyOptions.compressPayload
180
+ );
174
181
  }
175
182
 
176
183
  async receiveRoutedBoundSessionError(
@@ -182,25 +189,23 @@ export class ZLinkRemoteBoundSessionRelay {
182
189
  actorPacketTarget?: unknown
183
190
  ): Promise<void> {
184
191
  await this.options.updateRemoteActorPacketTarget(actorId, actorPacketTarget);
185
- await this.options.streamBindingRuntime().sendLocalBoundSessionError(
186
- actorId,
187
- packetName,
188
- requestSeq,
189
- error,
190
- metadata
191
- );
192
+ await this.options
193
+ .streamBindingRuntime()
194
+ .sendLocalBoundSessionError(actorId, packetName, requestSeq, error, metadata);
192
195
  }
193
196
 
194
197
  async receiveRemoteBoundSessionSend(payload: unknown): Promise<{ readonly ok: boolean }> {
195
198
  const send = decodeRemoteBoundSessionSendPayload(payload);
196
199
  await this.options.updateRemoteActorPacketTarget(send.actorId, send.actorPacketTarget);
197
- const owner = actorSessionBindingRuntimeOwnerIfRegistered(
198
- this.options.streamBindingRuntime()
200
+ const owner = actorSessionBindingRuntimeOwnerIfRegistered(this.options.streamBindingRuntime());
201
+ const retained = await owner?.retainRelocationOutbound(
202
+ send.actorId,
203
+ {
204
+ deliver: () => this.deliverRemoteBoundSessionSend(send),
205
+ fail: (error) => this.options.reportOwnershipRefreshError?.(send.actorId, error)
206
+ },
207
+ send.relocationSealId
199
208
  );
200
- const retained = await owner?.retainRelocationOutbound(send.actorId, {
201
- deliver: () => this.deliverRemoteBoundSessionSend(send),
202
- fail: error => this.options.reportOwnershipRefreshError?.(send.actorId, error)
203
- }, send.relocationSealId);
204
209
  if (retained === 'retained') return { ok: true };
205
210
  if (retained === 'rejected') return { ok: false };
206
211
  return { ok: await this.deliverRemoteBoundSessionSend(send) };
@@ -208,15 +213,16 @@ export class ZLinkRemoteBoundSessionRelay {
208
213
 
209
214
  private async deliverRemoteBoundSessionSend(send: RemoteBoundSessionSend): Promise<boolean> {
210
215
  const metadata = new Map(Object.entries(send.metadata ?? {}));
211
- if (await this.options.streamBindingRuntime().sendLocalBoundSession(
212
- send.actorId,
213
- send.message,
214
- send.boundPacketName,
215
- metadata
216
- )) {
216
+ if (
217
+ await this.options
218
+ .streamBindingRuntime()
219
+ .sendLocalBoundSession(send.actorId, send.message, send.boundPacketName, metadata)
220
+ ) {
217
221
  return true;
218
222
  }
219
- if (this.options.actorManager()?.getState(send.actorId)?.remoteBoundSessionTarget === undefined) {
223
+ if (
224
+ this.options.actorManager()?.getState(send.actorId)?.remoteBoundSessionTarget === undefined
225
+ ) {
220
226
  return false;
221
227
  }
222
228
  const call = this.options.boundSessionFactory(send.actorId).send(send.message);
@@ -233,27 +239,31 @@ export class ZLinkRemoteBoundSessionRelay {
233
239
  async receiveRemoteBoundSessionResponse(payload: unknown): Promise<{ readonly ok: boolean }> {
234
240
  const response = decodeRemoteBoundSessionResponsePayload(payload);
235
241
  await this.options.updateRemoteActorPacketTarget(response.actorId, response.actorPacketTarget);
236
- const sent = await this.options.streamBindingRuntime().sendLocalBoundSessionResponse(
237
- response.actorId,
238
- response.boundPacketName,
239
- response.requestSeq,
240
- response.message,
241
- new Map(Object.entries(response.metadata ?? {})),
242
- response.compressPayload
243
- );
242
+ const sent = await this.options
243
+ .streamBindingRuntime()
244
+ .sendLocalBoundSessionResponse(
245
+ response.actorId,
246
+ response.boundPacketName,
247
+ response.requestSeq,
248
+ response.message,
249
+ new Map(Object.entries(response.metadata ?? {})),
250
+ response.compressPayload
251
+ );
244
252
  return { ok: sent };
245
253
  }
246
254
 
247
255
  async receiveRemoteBoundSessionError(payload: unknown): Promise<{ readonly ok: boolean }> {
248
256
  const response = decodeRemoteBoundSessionErrorPayload(payload);
249
257
  await this.options.updateRemoteActorPacketTarget(response.actorId, response.actorPacketTarget);
250
- const sent = await this.options.streamBindingRuntime().sendLocalBoundSessionError(
251
- response.actorId,
252
- response.boundPacketName,
253
- response.requestSeq,
254
- response.error,
255
- new Map(Object.entries(response.metadata ?? {}))
256
- );
258
+ const sent = await this.options
259
+ .streamBindingRuntime()
260
+ .sendLocalBoundSessionError(
261
+ response.actorId,
262
+ response.boundPacketName,
263
+ response.requestSeq,
264
+ response.error,
265
+ new Map(Object.entries(response.metadata ?? {}))
266
+ );
257
267
  return { ok: sent };
258
268
  }
259
269
 
@@ -337,22 +347,28 @@ export class ZLinkRemoteBoundSessionRelay {
337
347
  }
338
348
  const owner = actorSessionBindingRuntimeOwner(this.options.streamBindingRuntime());
339
349
  await owner.clearRelocation(actorId, error);
340
- void this.options.streamBindingRuntime().disconnectBoundSession(actorId)
341
- .catch(disconnectError => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
350
+ void this.options
351
+ .streamBindingRuntime()
352
+ .disconnectBoundSession(actorId)
353
+ .catch((disconnectError) =>
354
+ this.options.reportOwnershipRefreshError?.(actorId, disconnectError)
355
+ );
342
356
  state.sealAbortCleanup?.();
343
357
  };
344
- const timeoutError = () => createInternalFrameworkException(
345
- ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
346
- `Actor '${actorId}' Session relocation seal exceeded its absolute deadline.`,
347
- true
348
- );
349
- state.sealTimer = setTimeout(
350
- () => { void expire(timeoutError()); },
351
- this.options.sessionRelocationSealTimeoutMs
352
- );
358
+ const timeoutError = () =>
359
+ createInternalFrameworkException(
360
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
361
+ `Actor '${actorId}' Session relocation seal exceeded its absolute deadline.`,
362
+ true
363
+ );
364
+ state.sealTimer = setTimeout(() => {
365
+ void expire(timeoutError());
366
+ }, this.options.sessionRelocationSealTimeoutMs);
353
367
  state.sealTimer.unref();
354
368
  if (signal !== undefined) {
355
- const onAbort = () => { void expire(signal.reason ?? timeoutError()); };
369
+ const onAbort = () => {
370
+ void expire(signal.reason ?? timeoutError());
371
+ };
356
372
  state.sealAbortCleanup = () => signal.removeEventListener('abort', onAbort);
357
373
  if (signal.aborted) onAbort();
358
374
  else signal.addEventListener('abort', onAbort, { once: true });
@@ -369,10 +385,14 @@ export class ZLinkRemoteBoundSessionRelay {
369
385
  }
370
386
  if (state.terminal !== true) {
371
387
  const owner = actorSessionBindingRuntimeOwner(this.options.streamBindingRuntime());
372
- if (await owner.relocationSnapshot(actorId, key) !== undefined) {
388
+ if ((await owner.relocationSnapshot(actorId, key)) !== undefined) {
373
389
  await owner.clearRelocation(actorId, error);
374
- void this.options.streamBindingRuntime().disconnectBoundSession(actorId)
375
- .catch(disconnectError => this.options.reportOwnershipRefreshError?.(actorId, disconnectError));
390
+ void this.options
391
+ .streamBindingRuntime()
392
+ .disconnectBoundSession(actorId)
393
+ .catch((disconnectError) =>
394
+ this.options.reportOwnershipRefreshError?.(actorId, disconnectError)
395
+ );
376
396
  }
377
397
  }
378
398
  throw sealController.signal.aborted ? sealController.signal.reason : error;
@@ -405,7 +425,9 @@ export class ZLinkRemoteBoundSessionRelay {
405
425
  }
406
426
  const state = this.activeServiceWireRelocations.get(key);
407
427
  if (state === undefined) {
408
- await actorSessionBindingRuntimeOwner(this.options.streamBindingRuntime()).discardRelocationOutbound(
428
+ await actorSessionBindingRuntimeOwner(
429
+ this.options.streamBindingRuntime()
430
+ ).discardRelocationOutbound(
409
431
  value.actor.actorId,
410
432
  key,
411
433
  new ZLinkRemoteBoundSessionFenceError(
@@ -416,8 +438,8 @@ export class ZLinkRemoteBoundSessionRelay {
416
438
  return;
417
439
  }
418
440
  if (
419
- state.routeRequestFingerprint !== undefined
420
- && state.routeRequestFingerprint !== routeRequestFingerprint
441
+ state.routeRequestFingerprint !== undefined &&
442
+ state.routeRequestFingerprint !== routeRequestFingerprint
421
443
  ) {
422
444
  throw new ServiceWireProtocolError(
423
445
  `Session relocation '${key}' repeated command 44 with different bytes.`
@@ -437,12 +459,9 @@ export class ZLinkRemoteBoundSessionRelay {
437
459
  state.routeFingerprint = fingerprint;
438
460
  if (state.sealTimer !== undefined) clearTimeout(state.sealTimer);
439
461
  state.sealAbortCleanup?.();
440
- const routePromise = state.sealPromise.then(async sealed => {
462
+ const routePromise = state.sealPromise.then(async (sealed) => {
441
463
  validateSessionRelocationRouteAgainstSeal(value, sealed);
442
- await this.applyServiceWireSessionRelocationRoute(
443
- key,
444
- value
445
- );
464
+ await this.applyServiceWireSessionRelocationRoute(key, value);
446
465
  });
447
466
  state.routePromise = routePromise;
448
467
  try {
@@ -450,7 +469,7 @@ export class ZLinkRemoteBoundSessionRelay {
450
469
  this.terminalServiceWireRelocations.remember(key, {
451
470
  actorId: state.actorId,
452
471
  sealFingerprint: state.sealFingerprint,
453
- sealed: state.sealed ?? await state.sealPromise,
472
+ sealed: state.sealed ?? (await state.sealPromise),
454
473
  routeRequestFingerprint,
455
474
  routeFingerprint: fingerprint
456
475
  });
@@ -467,7 +486,7 @@ export class ZLinkRemoteBoundSessionRelay {
467
486
  if (this.activeServiceWireRelocations.get(key) === state) {
468
487
  this.activeServiceWireRelocations.delete(key);
469
488
  }
470
- const sealed = state.sealed ?? await state.sealPromise;
489
+ const sealed = state.sealed ?? (await state.sealPromise);
471
490
  this.terminalServiceWireRelocations.remember(key, {
472
491
  actorId: state.actorId,
473
492
  sealFingerprint: state.sealFingerprint,
@@ -475,13 +494,16 @@ export class ZLinkRemoteBoundSessionRelay {
475
494
  routeRequestFingerprint,
476
495
  routeFingerprint: fingerprint
477
496
  });
478
- actorSessionBindingRuntimeOwner(this.options.streamBindingRuntime())
479
- .clearRelocation(state.actorId, error);
480
- await this.options.streamBindingRuntime().disconnectBoundSession(state.actorId)
481
- .catch(disconnectError => this.options.reportOwnershipRefreshError?.(
482
- state.actorId,
483
- disconnectError
484
- ));
497
+ actorSessionBindingRuntimeOwner(this.options.streamBindingRuntime()).clearRelocation(
498
+ state.actorId,
499
+ error
500
+ );
501
+ await this.options
502
+ .streamBindingRuntime()
503
+ .disconnectBoundSession(state.actorId)
504
+ .catch((disconnectError) =>
505
+ this.options.reportOwnershipRefreshError?.(state.actorId, disconnectError)
506
+ );
485
507
  throw error;
486
508
  }
487
509
  }
@@ -506,19 +528,13 @@ export class ZLinkRemoteBoundSessionRelay {
506
528
  const owner = actorSessionBindingRuntimeOwner(runtime);
507
529
  const fingerprint = encodeSessionRelocationRoute(value).toString('base64');
508
530
  if (value.route.action === 'abort') {
509
- await owner.applyRelocation(
510
- value.actor.actorId,
511
- key,
512
- fingerprint,
513
- 'abort',
514
- async () => {
515
- if (!(await runtime.abortActorRouteSeal(value.actor.actorId, key))) {
516
- throw new ZLinkRemoteBoundSessionFenceError(
517
- `Actor '${value.actor.actorId}' command 44 abort lost its Session seal.`
518
- );
519
- }
531
+ await owner.applyRelocation(value.actor.actorId, key, fingerprint, 'abort', async () => {
532
+ if (!(await runtime.abortActorRouteSeal(value.actor.actorId, key))) {
533
+ throw new ZLinkRemoteBoundSessionFenceError(
534
+ `Actor '${value.actor.actorId}' command 44 abort lost its Session seal.`
535
+ );
520
536
  }
521
- );
537
+ });
522
538
  } else {
523
539
  const committedRoute = value.route;
524
540
  const current = (await runtime.find(value.actor.actorId))?.ref;
@@ -536,46 +552,38 @@ export class ZLinkRemoteBoundSessionRelay {
536
552
  ownershipGeneration: committedRoute.targetAuthorityOwnerGeneration,
537
553
  ownerNodeGeneration: committedRoute.targetNodeGeneration
538
554
  } as ActorRef;
539
- await owner.applyRelocation(
540
- value.actor.actorId,
541
- key,
542
- fingerprint,
543
- 'commit',
544
- async () => {
545
- await runtime.commitActorRoute(targetActorRef, undefined, {
546
- confirmRemoteSessionBinding: 'send',
547
- releaseSeal: { sealId: key }
548
- });
549
- const currentGeneration = this.actorOwnershipGenerations.get(value.actor.actorId);
550
- if (
551
- currentGeneration === undefined
552
- || currentGeneration < committedRoute.targetAuthorityOwnerGeneration
553
- ) {
554
- this.actorOwnershipGenerations.set(
555
- value.actor.actorId,
556
- committedRoute.targetAuthorityOwnerGeneration
557
- );
558
- }
555
+ await owner.applyRelocation(value.actor.actorId, key, fingerprint, 'commit', async () => {
556
+ await runtime.commitActorRoute(targetActorRef, undefined, {
557
+ confirmRemoteSessionBinding: 'send',
558
+ releaseSeal: { sealId: key }
559
+ });
560
+ const currentGeneration = this.actorOwnershipGenerations.get(value.actor.actorId);
561
+ if (
562
+ currentGeneration === undefined ||
563
+ currentGeneration < committedRoute.targetAuthorityOwnerGeneration
564
+ ) {
565
+ this.actorOwnershipGenerations.set(
566
+ value.actor.actorId,
567
+ committedRoute.targetAuthorityOwnerGeneration
568
+ );
559
569
  }
560
- );
570
+ });
561
571
  }
562
- await owner.observeRelocationTerminal(
563
- value.actor.actorId,
564
- key,
565
- fingerprint
566
- );
572
+ await owner.observeRelocationTerminal(value.actor.actorId, key, fingerprint);
567
573
  }
568
574
 
569
- private async validateServiceWireSessionRoute(value: ServiceSessionRelocationSeal): Promise<void> {
570
- const current = await this.options.streamBindingRuntime().sessionRouteFence(
571
- value.actor.actor.actorId
572
- );
575
+ private async validateServiceWireSessionRoute(
576
+ value: ServiceSessionRelocationSeal
577
+ ): Promise<void> {
578
+ const current = await this.options
579
+ .streamBindingRuntime()
580
+ .sessionRouteFence(value.actor.actor.actorId);
573
581
  if (
574
- current === undefined
575
- || current.actor.objectGeneration !== value.actor.actor.generation
576
- || !routingIdsEqual(current.actor.nodeRid, value.actor.actor.nodeRid)
577
- || current.sessionRid.toString() !== value.session.sessionRid
578
- || current.bindingGeneration !== value.session.bindingGeneration
582
+ current === undefined ||
583
+ current.actor.objectGeneration !== value.actor.actor.generation ||
584
+ !routingIdsEqual(current.actor.nodeRid, value.actor.actor.nodeRid) ||
585
+ current.sessionRid.toString() !== value.session.sessionRid ||
586
+ current.bindingGeneration !== value.session.bindingGeneration
579
587
  ) {
580
588
  throw new ZLinkRemoteBoundSessionFenceError(
581
589
  `Actor '${value.actor.actor.actorId}' command 42 was fenced by its exact Session route.`
@@ -583,7 +591,10 @@ export class ZLinkRemoteBoundSessionRelay {
583
591
  }
584
592
  }
585
593
 
586
- rememberRemoteBoundSessionTarget(actorId: string, target: ZLinkRemoteBoundSessionTarget | undefined): void {
594
+ rememberRemoteBoundSessionTarget(
595
+ actorId: string,
596
+ target: ZLinkRemoteBoundSessionTarget | undefined
597
+ ): void {
587
598
  this.options.actorManager()?.getState(actorId)?.setRemoteBoundSessionTarget(target);
588
599
  }
589
600
 
@@ -640,14 +651,18 @@ export class ZLinkRemoteBoundSessionRelay {
640
651
  signal?: AbortSignal
641
652
  ): Promise<void> {
642
653
  const state = this.options.actorManager()?.getState(actor.context.actorId);
643
- if (await this.options.streamBindingRuntime().sendLocalBoundSessionResponse(
644
- actor.context.actorId,
645
- packetName,
646
- requestSeq,
647
- response,
648
- replyOptions.metadata,
649
- replyOptions.compressPayload
650
- )) {
654
+ if (
655
+ await this.options
656
+ .streamBindingRuntime()
657
+ .sendLocalBoundSessionResponse(
658
+ actor.context.actorId,
659
+ packetName,
660
+ requestSeq,
661
+ response,
662
+ replyOptions.metadata,
663
+ replyOptions.compressPayload
664
+ )
665
+ ) {
651
666
  return;
652
667
  }
653
668
  const actorRef = currentActorRef(state, fallbackActorRef);
@@ -669,18 +684,22 @@ export class ZLinkRemoteBoundSessionRelay {
669
684
  }
670
685
  const actorSessionNode = this.options.actorSessionNode?.(actor.context.actorId);
671
686
  if (actorSessionNode === undefined) {
672
- throw new Error('Native bound-session response requires the RouteMesh stream-session service.');
687
+ throw new Error(
688
+ 'Native bound-session response requires the RouteMesh stream-session service.'
689
+ );
673
690
  }
674
- await this.options.streamBindingRuntime().sendNativeBoundSessionResponse(
675
- actorSessionNode,
676
- actorRef,
677
- packetName,
678
- requestSeq,
679
- response,
680
- replyOptions.metadata,
681
- replyOptions.compressPayload,
682
- signal
683
- );
691
+ await this.options
692
+ .streamBindingRuntime()
693
+ .sendNativeBoundSessionResponse(
694
+ actorSessionNode,
695
+ actorRef,
696
+ packetName,
697
+ requestSeq,
698
+ response,
699
+ replyOptions.metadata,
700
+ replyOptions.compressPayload,
701
+ signal
702
+ );
684
703
  }
685
704
 
686
705
  async sendActorError(
@@ -693,18 +712,16 @@ export class ZLinkRemoteBoundSessionRelay {
693
712
  fallbackActorRef?: ActorRef,
694
713
  signal?: AbortSignal
695
714
  ): Promise<void> {
696
- if (await this.options.streamBindingRuntime().sendLocalBoundSessionError(
697
- actorId,
698
- packetName,
699
- requestSeq,
700
- error,
701
- metadata
702
- )) {
715
+ if (
716
+ await this.options
717
+ .streamBindingRuntime()
718
+ .sendLocalBoundSessionError(actorId, packetName, requestSeq, error, metadata)
719
+ ) {
703
720
  return;
704
721
  }
705
722
  const state = this.options.actorManager()?.getState(actorId);
706
- const actorRef = currentActorRef(state, fallbackActorRef)
707
- ?? this.options.destroyedActorRefs.get(actorId);
723
+ const actorRef =
724
+ currentActorRef(state, fallbackActorRef) ?? this.options.destroyedActorRefs.get(actorId);
708
725
  const remoteTarget = fallbackBoundSessionTarget ?? state?.remoteBoundSessionTarget;
709
726
  if (remoteTarget !== undefined) {
710
727
  await this.sendRemoteBoundSessionError(
@@ -723,17 +740,21 @@ export class ZLinkRemoteBoundSessionRelay {
723
740
  }
724
741
  const actorSessionNode = this.options.actorSessionNode?.(actorId);
725
742
  if (actorSessionNode === undefined) {
726
- throw new Error('Native bound-session error response requires the RouteMesh stream-session service.');
743
+ throw new Error(
744
+ 'Native bound-session error response requires the RouteMesh stream-session service.'
745
+ );
727
746
  }
728
- await this.options.streamBindingRuntime().sendNativeBoundSessionError(
729
- actorSessionNode,
730
- actorRef,
731
- packetName,
732
- requestSeq,
733
- error,
734
- metadata,
735
- signal
736
- );
747
+ await this.options
748
+ .streamBindingRuntime()
749
+ .sendNativeBoundSessionError(
750
+ actorSessionNode,
751
+ actorRef,
752
+ packetName,
753
+ requestSeq,
754
+ error,
755
+ metadata,
756
+ signal
757
+ );
737
758
  }
738
759
 
739
760
  private async sendRemoteBoundSessionResponse(
@@ -748,15 +769,19 @@ export class ZLinkRemoteBoundSessionRelay {
748
769
  const actorPacketTarget = encodeRemoteActorPacketTarget(
749
770
  this.options.actorPacketTargetForState(actorId, target.routerChannelId)
750
771
  );
751
- await this.sendRemoteBoundSessionControl(target, encodeRemoteBoundSessionResponsePayload({
752
- actorId,
753
- boundPacketName: packetName,
754
- requestSeq,
755
- message,
756
- metadata: replyOptions.metadata,
757
- compressPayload: replyOptions.compressPayload,
758
- actorPacketTarget
759
- }), signal);
772
+ await this.sendRemoteBoundSessionControl(
773
+ target,
774
+ encodeRemoteBoundSessionResponsePayload({
775
+ actorId,
776
+ boundPacketName: packetName,
777
+ requestSeq,
778
+ message,
779
+ metadata: replyOptions.metadata,
780
+ compressPayload: replyOptions.compressPayload,
781
+ actorPacketTarget
782
+ }),
783
+ signal
784
+ );
760
785
  }
761
786
 
762
787
  private async sendRemoteBoundSessionError(
@@ -768,16 +793,20 @@ export class ZLinkRemoteBoundSessionRelay {
768
793
  metadata: ReadonlyMap<string, string>,
769
794
  signal?: AbortSignal
770
795
  ): Promise<void> {
771
- await this.sendRemoteBoundSessionControl(target, encodeRemoteBoundSessionErrorPayload({
772
- actorId,
773
- boundPacketName: packetName,
774
- requestSeq,
775
- error,
776
- metadata,
777
- actorPacketTarget: encodeRemoteActorPacketTarget(
778
- this.options.actorPacketTargetForState(actorId, target.routerChannelId)
779
- )
780
- }), signal);
796
+ await this.sendRemoteBoundSessionControl(
797
+ target,
798
+ encodeRemoteBoundSessionErrorPayload({
799
+ actorId,
800
+ boundPacketName: packetName,
801
+ requestSeq,
802
+ error,
803
+ metadata,
804
+ actorPacketTarget: encodeRemoteActorPacketTarget(
805
+ this.options.actorPacketTargetForState(actorId, target.routerChannelId)
806
+ )
807
+ }),
808
+ signal
809
+ );
781
810
  }
782
811
 
783
812
  private async sendRemoteBoundSessionControl(
@@ -789,8 +818,8 @@ export class ZLinkRemoteBoundSessionRelay {
789
818
  if (typeof packetName !== 'string') {
790
819
  throw new Error('Remote bound session control payload does not declare a packet name.');
791
820
  }
792
- const submit = this.options.routeTransport.submitInfrastructure
793
- ?? this.options.routeTransport.submit;
821
+ const submit =
822
+ this.options.routeTransport.submitInfrastructure ?? this.options.routeTransport.submit;
794
823
  if (submit === undefined) {
795
824
  throw new Error('Remote bound session node-direct transport is not available.');
796
825
  }
@@ -804,35 +833,35 @@ export class ZLinkRemoteBoundSessionRelay {
804
833
  );
805
834
  if (result.status !== ZLinkSubmitStatus.Submitted) {
806
835
  throw new Error(
807
- `Remote bound session control '${packetName}' was not admitted`
808
- + ` on '${target.routerChannelId}' for '${String(target.targetNodeRid)}'`
809
- + ` (status ${result.status}).`
836
+ `Remote bound session control '${packetName}' was not admitted` +
837
+ ` on '${target.routerChannelId}' for '${String(target.targetNodeRid)}'` +
838
+ ` (status ${result.status}).`
810
839
  );
811
840
  }
812
841
  }
813
842
  }
814
843
 
815
-
816
844
  function currentActorRef(
817
- state: {
818
- readonly nativeActorRef?: {
819
- readonly actorId: string;
820
- readonly nodeRid: ActorRef['nodeRid'];
821
- readonly generation?: bigint;
822
- readonly objectGeneration?: bigint;
823
- };
824
- readonly meshName?: string;
825
- readonly boundSessionBindingGeneration: bigint;
826
- readonly locationGeneration?: bigint;
827
- readonly ownerLeaseGeneration?: bigint;
828
- } | undefined,
845
+ state:
846
+ | {
847
+ readonly nativeActorRef?: {
848
+ readonly actorId: string;
849
+ readonly nodeRid: ActorRef['nodeRid'];
850
+ readonly generation?: bigint;
851
+ readonly objectGeneration?: bigint;
852
+ };
853
+ readonly meshName?: string;
854
+ readonly boundSessionBindingGeneration: bigint;
855
+ readonly locationGeneration?: bigint;
856
+ readonly ownerLeaseGeneration?: bigint;
857
+ }
858
+ | undefined,
829
859
  fallback: ActorRef | undefined
830
860
  ): ActorRef | undefined {
831
861
  const native = state?.nativeActorRef;
832
862
  if (native === undefined) return fallback;
833
- const objectGeneration = native.generation
834
- ?? native.objectGeneration
835
- ?? fallback?.objectGeneration;
863
+ const objectGeneration =
864
+ native.generation ?? native.objectGeneration ?? fallback?.objectGeneration;
836
865
  const meshName = state?.meshName ?? fallback?.meshName;
837
866
  if (objectGeneration === undefined || meshName === undefined) return fallback;
838
867
  return {
@@ -857,35 +886,33 @@ function validateSessionRelocationRouteAgainstSeal(
857
886
  sealed: ServiceSessionRelocationSealed
858
887
  ): void {
859
888
  const sameCoordinator =
860
- route.coordinator.ownerId === sealed.coordinator.ownerId
861
- && route.coordinator.leaseGeneration === sealed.coordinator.leaseGeneration
862
- && route.coordinator.nodeRid === sealed.coordinator.nodeRid
863
- && route.coordinator.nodeGeneration === sealed.coordinator.nodeGeneration
864
- && route.coordinator.expectedAuthorityStoreVersion
865
- === sealed.coordinator.expectedAuthorityStoreVersion;
889
+ route.coordinator.ownerId === sealed.coordinator.ownerId &&
890
+ route.coordinator.leaseGeneration === sealed.coordinator.leaseGeneration &&
891
+ route.coordinator.nodeRid === sealed.coordinator.nodeRid &&
892
+ route.coordinator.nodeGeneration === sealed.coordinator.nodeGeneration &&
893
+ route.coordinator.expectedAuthorityStoreVersion ===
894
+ sealed.coordinator.expectedAuthorityStoreVersion;
866
895
  const sameSession =
867
- route.session.sessionOwnerNodeRid === sealed.session.sessionOwnerNodeRid
868
- && route.session.sessionOwnerNodeGeneration === sealed.session.sessionOwnerNodeGeneration
869
- && route.session.sessionOwnerId === sealed.session.sessionOwnerId
870
- && route.session.sessionOwnerLeaseGeneration
871
- === sealed.session.sessionOwnerLeaseGeneration
872
- && route.session.sessionRid === sealed.session.sessionRid
873
- && route.session.bindingGeneration === sealed.session.bindingGeneration;
896
+ route.session.sessionOwnerNodeRid === sealed.session.sessionOwnerNodeRid &&
897
+ route.session.sessionOwnerNodeGeneration === sealed.session.sessionOwnerNodeGeneration &&
898
+ route.session.sessionOwnerId === sealed.session.sessionOwnerId &&
899
+ route.session.sessionOwnerLeaseGeneration === sealed.session.sessionOwnerLeaseGeneration &&
900
+ route.session.sessionRid === sealed.session.sessionRid &&
901
+ route.session.bindingGeneration === sealed.session.bindingGeneration;
874
902
  if (
875
- route.relocation.high !== sealed.relocation.high
876
- || route.relocation.low !== sealed.relocation.low
877
- || !sameCoordinator
878
- || !sameSession
879
- || route.actor.actorId !== sealed.actor.actor.actorId
880
- || route.actor.generation !== sealed.actor.actor.generation
903
+ route.relocation.high !== sealed.relocation.high ||
904
+ route.relocation.low !== sealed.relocation.low ||
905
+ !sameCoordinator ||
906
+ !sameSession ||
907
+ route.actor.actorId !== sealed.actor.actor.actorId ||
908
+ route.actor.generation !== sealed.actor.actor.generation
881
909
  ) {
882
910
  throw new ServiceWireProtocolError(
883
911
  `Session relocation '${serviceWireBarrierKey(route)}' changed its command 42 fence.`
884
912
  );
885
913
  }
886
914
  if (route.route.action === 'commit') {
887
- if (route.route.previousAuthorityOwnerGeneration
888
- !== sealed.actor.authorityOwnerGeneration) {
915
+ if (route.route.previousAuthorityOwnerGeneration !== sealed.actor.authorityOwnerGeneration) {
889
916
  throw new ServiceWireProtocolError(
890
917
  `Session relocation '${serviceWireBarrierKey(route)}' changed its source authority fence.`
891
918
  );