@zlink-systems/framework 0.30.0 → 0.30.2

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 (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -48,7 +48,10 @@ import {
48
48
  registerActorSessionBindingRuntimeOwner
49
49
  } from './actor-session-binding-runtime-owner';
50
50
  import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
51
- import { ZLinkBoundActorRelaySender } from './bound-actor-relay-sender';
51
+ import {
52
+ ZLinkBoundActorRelaySender,
53
+ type ZLinkBoundActorRelaySenderOptions
54
+ } from './bound-actor-relay-sender';
52
55
  import {
53
56
  DefaultZLinkBoundSessionResponseTarget,
54
57
  type ZLinkBoundSessionResponseTarget
@@ -140,7 +143,7 @@ export interface ZLinkStreamBindingRuntimeOptions {
140
143
  header: ZLinkStreamFrameHeader,
141
144
  payload: Message
142
145
  ) => Promise<boolean>;
143
- readonly notifyDisconnected?: (actor: ZLinkSessionActor, signal?: AbortSignal) => Promise<void>;
146
+ readonly notifyDisconnected?: ZLinkBoundActorRelaySenderOptions['notifyDisconnected'];
144
147
  readonly flowCreationEnabled?: () => boolean;
145
148
  readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
146
149
  }
@@ -459,14 +462,16 @@ export class ZLinkStreamBindingRuntime {
459
462
  actorSessionLifecycle
460
463
  );
461
464
  registerActorSessionBindingRuntimeOwner(this, {
465
+ prepareSessionRelocationSeal: (...args) => this.routes.prepareSessionRelocationSeal(...args),
466
+ acceptSessionRelocationRoute: (value, apply) =>
467
+ this.routes.acceptSessionRelocationRoute(value, apply),
468
+ clearSessionRelocationResults: () => this.routes.clearSessionRelocationResults(),
462
469
  actorSlot: async (actorId, sessionRid) =>
463
470
  (await this.routes.routeForSessionBinding(actorId, sessionRid))?.actorSlot,
464
- sealRelocation: (claim, expected, signal) =>
465
- this.routes.sealRelocation(claim, expected, signal),
466
471
  relocationSnapshot: (actorId, sealId) => this.routes.relocationSnapshot(actorId, sealId),
467
472
  applyRelocation: (...args) => this.routes.applyRelocation(...args),
468
473
  observeRelocationTerminal: (...args) => this.routes.observeRelocationTerminal(...args),
469
- clearRelocation: (actorId, error) => this.routes.clearRelocation(actorId, error),
474
+ clearRelocation: (...args) => this.routes.clearRelocation(...args),
470
475
  committedRoute: async (actorId) => {
471
476
  const route = await this.routes.route(actorId);
472
477
  return route === undefined
@@ -739,9 +744,10 @@ export class ZLinkStreamBindingRuntime {
739
744
  async disconnectNativeBoundSession(
740
745
  node: ZLinkBackendActorSessionNode,
741
746
  actorRef: ActorRef,
747
+ timeoutMs: number,
742
748
  signal?: AbortSignal
743
749
  ): Promise<void> {
744
- await this.boundSessions.disconnectNativeBoundSession(node, actorRef, signal);
750
+ await this.boundSessions.disconnectNativeBoundSession(node, actorRef, timeoutMs, signal);
745
751
  }
746
752
 
747
753
  async disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void> {
@@ -1,3 +1,4 @@
1
+ import { routingIdsEqual } from '../routing-id';
1
2
  import {
2
3
  ZLinkFrameworkInternalErrorKind,
3
4
  createInternalFrameworkException,
@@ -225,7 +226,8 @@ export class ZLinkManagedStream implements ZLinkStream {
225
226
  : (_actorId, retiredSession, replacedActor) => {
226
227
  onBindingReplaced(replacedActor, retiredSession);
227
228
  },
228
- toStreamSessionActorAuthorityFence(authorityFence)
229
+ toStreamSessionActorAuthorityFence(authorityFence),
230
+ () => this.close()
229
231
  ),
230
232
  signal
231
233
  ),
@@ -307,7 +309,7 @@ export class ZLinkManagedStream implements ZLinkStream {
307
309
  resolved === undefined ||
308
310
  resolved.actorId !== actor.actorId ||
309
311
  resolved.generation !== actor.objectGeneration ||
310
- String(resolved.nodeRid) !== String(actor.nodeRid)
312
+ !routingIdsEqual(resolved.nodeRid, actor.nodeRid)
311
313
  ) {
312
314
  throw createInternalFrameworkException(
313
315
  ZLinkFrameworkInternalErrorKind.ActorRouteNotFound,
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
1
2
  import {
2
3
  createInternalFrameworkException,
3
4
  ZLinkFrameworkInternalErrorKind
@@ -11,26 +12,13 @@ import {
11
12
  type ZLinkSubmitResult
12
13
  } from '../messaging/submission-result';
13
14
  import {
14
- ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
15
- ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
16
15
  ZLINK_REMOTE_BOUND_SESSION_SEND_PACKET,
17
16
  type ZLinkActorRoutedJoinTransport,
18
17
  type ZLinkRemoteActorPacketTarget,
19
18
  type ZLinkRemoteBoundSessionTarget
20
19
  } from '../actors';
21
- import {
22
- encodeRemoteActorPacketRelayPayload,
23
- encodeRemoteActorPacketTarget
24
- } from '../actors/actor-packet-relay-wire';
20
+ import { encodeRemoteActorPacketTarget } from '../actors/actor-packet-relay-wire';
25
21
  import { encodeRemoteBoundSessionSendPayload } from '../actors/bound-session-wire';
26
- import { tryRequestRoutedJson } from '../actors/actor-routed-json-request';
27
- import {
28
- ZLinkStreamCodec,
29
- ZLinkStreamHeaderFlags,
30
- ZLinkStreamMessageKind,
31
- encodeStreamHeader,
32
- type ZLinkStreamFrameHeader
33
- } from './protocol';
34
22
  import type { ZLinkNativeFallbackBoundSessionPort } from './stream-binding-runtime-ports';
35
23
  import type { ZLinkBackendActorSessionNode } from '../backend';
36
24
  import { resolveFrameworkPacketName } from '../messaging/packet-name';
@@ -59,37 +47,6 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
59
47
  }
60
48
 
61
49
  async disconnect(signal?: AbortSignal): Promise<void> {
62
- const remoteTarget = this.options.remoteBoundSessionTargetProvider();
63
- if (remoteTarget !== undefined) {
64
- const spotKind: ZLinkSpotKind | undefined =
65
- 'spotKind' in remoteTarget
66
- ? (remoteTarget.spotKind as ZLinkSpotKind | undefined)
67
- : undefined;
68
- const payload = encodeRemoteActorPacketRelayPayload({
69
- actorId: this.options.actorId,
70
- routerChannelId: remoteTarget.routerChannelId,
71
- header: encodeStreamHeader(disconnectedFrameHeader()),
72
- payload: Buffer.alloc(0)
73
- });
74
- const target = {
75
- routerChannelId: remoteTarget.routerChannelId,
76
- targetNodeRid: remoteTarget.targetNodeRid,
77
- spotId: remoteTarget.spotId,
78
- spotKind: spotKind ?? ZLinkSpotKind.Entry
79
- };
80
- if (
81
- await tryRequestRoutedJson(this.options.routedTransport, target, payload, {
82
- timeoutMs: this.options.requestTimeoutMs,
83
- signal
84
- })
85
- ) {
86
- return;
87
- }
88
- await this.options.routedTransport.sendToSpot(target, payload, {
89
- packetName: ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
90
- });
91
- return;
92
- }
93
50
  const actorRef = this.options.actorRefProvider();
94
51
  const node = this.options.nativeActorNodeProvider();
95
52
  if (
@@ -97,7 +54,12 @@ export class ZLinkNativeFallbackBoundSession implements ZLinkBoundSession {
97
54
  node !== undefined &&
98
55
  currentBindingGeneration(actorRef) !== undefined
99
56
  ) {
100
- await this.options.runtime.disconnectNativeBoundSession(node, actorRef, signal);
57
+ await this.options.runtime.disconnectNativeBoundSession(
58
+ node,
59
+ actorRef,
60
+ this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
61
+ signal
62
+ );
101
63
  return;
102
64
  }
103
65
  await this.options.runtime.disconnectBoundSession(this.options.actorId, signal);
@@ -154,42 +116,16 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
154
116
  private async executeScoped(packetName: string): Promise<ZLinkSubmitResult> {
155
117
  const localActor = this.options.localActorProvider?.() === true;
156
118
  const remoteTarget = this.options.remoteBoundSessionTargetProvider();
157
- let nativeAttempted = false;
158
- if (localActor) {
159
- const result = await this.options.runtime.submitLocalBoundSession(
119
+ if (localActor || remoteTarget === undefined) {
120
+ const localResult = await this.options.runtime.submitLocalBoundSession(
160
121
  this.options.actorId,
161
122
  this.message,
162
123
  packetName,
163
124
  this.selectedMetadata
164
125
  );
165
- if (result.status !== ZLinkSubmitStatus.TargetNotFound) {
166
- this.traceSubmitted(result, packetName);
167
- return result;
168
- }
169
-
170
- // A local Actor with a concrete native owner has a direct binding path.
171
- // Use that path before a routed transfer target. The transfer target is
172
- // retained for actors whose current owner is remote or whose native
173
- // binding is no longer available.
174
- const actorRef = this.options.actorRefProvider();
175
- const node = this.options.nativeActorNodeProvider();
176
- const bindingGeneration = currentBindingGeneration(actorRef);
177
- if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
178
- nativeAttempted = true;
179
- const result = await this.options.runtime.sendNativeBoundSession(
180
- node,
181
- actorRef,
182
- this.message,
183
- packetName,
184
- this.selectedMetadata
185
- );
186
- if (result.status !== ZLinkSubmitStatus.TargetNotFound) {
187
- this.traceSubmitted(result, packetName);
188
- return result;
189
- }
190
- if (remoteTarget === undefined) {
191
- return result;
192
- }
126
+ if (localResult.status !== ZLinkSubmitStatus.TargetNotFound) {
127
+ this.traceSubmitted(localResult, packetName);
128
+ return localResult;
193
129
  }
194
130
  }
195
131
  if (remoteTarget !== undefined) {
@@ -238,25 +174,10 @@ class ZLinkNativeFallbackBoundSessionSendCall implements ZLinkBoundSessionSendCa
238
174
  this.traceSubmitted(result, packetName);
239
175
  return result;
240
176
  }
241
- const localResult = await this.options.runtime.submitLocalBoundSession(
242
- this.options.actorId,
243
- this.message,
244
- packetName,
245
- this.selectedMetadata
246
- );
247
- if (localResult.status !== ZLinkSubmitStatus.TargetNotFound) {
248
- this.traceSubmitted(localResult, packetName);
249
- return localResult;
250
- }
251
177
  const actorRef = this.options.actorRefProvider();
252
178
  const node = this.options.nativeActorNodeProvider();
253
179
  const bindingGeneration = currentBindingGeneration(actorRef);
254
- if (
255
- !nativeAttempted &&
256
- actorRef !== undefined &&
257
- node !== undefined &&
258
- bindingGeneration !== undefined
259
- ) {
180
+ if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
260
181
  const result = await this.options.runtime.sendNativeBoundSession(
261
182
  node,
262
183
  actorRef,
@@ -300,13 +221,3 @@ function currentBindingGeneration(actorRef: ActorRef | undefined): bigint | unde
300
221
  function positiveBindingGeneration(generation: bigint | undefined): bigint | undefined {
301
222
  return generation !== undefined && generation > 0n ? generation : undefined;
302
223
  }
303
-
304
- function disconnectedFrameHeader(): ZLinkStreamFrameHeader {
305
- return {
306
- kind: ZLinkStreamMessageKind.Send,
307
- codec: ZLinkStreamCodec.Raw,
308
- flags: ZLinkStreamHeaderFlags.None,
309
- name: ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
310
- metadata: new Map()
311
- };
312
- }
@@ -14,7 +14,10 @@ import {
14
14
  import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
15
15
  import { ZLinkManagedStream } from './managed-stream';
16
16
  import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
17
- import type { ZLinkSessionBindingConfirmationOptions } from './stream-binding-runtime-ports';
17
+ import type {
18
+ ZLinkActorRouteCommitOptions,
19
+ ZLinkSessionBindingConfirmationOptions
20
+ } from './stream-binding-runtime-ports';
18
21
 
19
22
  export interface ZLinkSessionActorCoordinatorOptions {
20
23
  readonly actorBindTimeoutMs?: number;
@@ -70,25 +73,7 @@ export class ZLinkSessionActorCoordinator {
70
73
  private async replaceBinding(
71
74
  context: DefaultZLinkSessionContext,
72
75
  actorRef: ActorRef,
73
- signal?: AbortSignal,
74
- confirmRemoteSessionBinding: boolean | 'send' = true,
75
- releaseSeal?: { readonly sealId: string }
76
- ): Promise<DefaultZLinkSessionActor> {
77
- return await this.replaceBindingCore(
78
- context,
79
- actorRef,
80
- signal,
81
- confirmRemoteSessionBinding,
82
- releaseSeal
83
- );
84
- }
85
-
86
- private async replaceBindingCore(
87
- context: DefaultZLinkSessionContext,
88
- actorRef: ActorRef,
89
- signal?: AbortSignal,
90
- confirmRemoteSessionBinding: boolean | 'send' = true,
91
- releaseSeal?: { readonly sealId: string }
76
+ signal?: AbortSignal
92
77
  ): Promise<DefaultZLinkSessionActor> {
93
78
  throwIfAborted(signal);
94
79
  if (actorRef.actorId.trim().length === 0) {
@@ -134,15 +119,8 @@ export class ZLinkSessionActorCoordinator {
134
119
  const sessionActor =
135
120
  reuseActor ??
136
121
  new DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
137
- const sessionIdentity = String(this.actorBindingRoutingId(context));
122
+ const sessionIdentity = this.actorBindingRoutingId(context);
138
123
  if (previous === undefined) {
139
- if (releaseSeal !== undefined) {
140
- throw createInternalFrameworkException(
141
- ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
142
- `Actor '${actorRef.actorId}' route switch has no Session binding to release.`,
143
- true
144
- );
145
- }
146
124
  await this.routes.bind(
147
125
  context,
148
126
  sessionActor,
@@ -151,17 +129,6 @@ export class ZLinkSessionActorCoordinator {
151
129
  sessionIdentity,
152
130
  () => sessionActor.updateRef(boundActorRef)
153
131
  );
154
- } else if (releaseSeal !== undefined) {
155
- await this.routes.replaceAndReleaseSeal(
156
- previous,
157
- context,
158
- sessionActor,
159
- bindingToken,
160
- releaseSeal.sealId,
161
- authorityFence,
162
- sessionIdentity,
163
- () => sessionActor.updateRef(boundActorRef)
164
- );
165
132
  } else {
166
133
  await this.routes.replace(
167
134
  previous,
@@ -173,12 +140,8 @@ export class ZLinkSessionActorCoordinator {
173
140
  () => sessionActor.updateRef(boundActorRef)
174
141
  );
175
142
  }
176
- if (
177
- confirmRemoteSessionBinding !== false &&
178
- this.options.confirmRemoteActorSessionBinding !== undefined
179
- ) {
180
- const waitForAcknowledgement =
181
- previous === undefined && confirmRemoteSessionBinding !== 'send';
143
+ if (this.options.confirmRemoteActorSessionBinding !== undefined) {
144
+ const waitForAcknowledgement = previous === undefined;
182
145
  const confirmation = this.options.confirmRemoteActorSessionBinding(
183
146
  boundActorRef,
184
147
  this.actorBindingRoutingId(context),
@@ -334,12 +297,7 @@ export class ZLinkSessionActorCoordinator {
334
297
  async commitActorRoute(
335
298
  actorRef: ActorRef,
336
299
  signal?: AbortSignal,
337
- options: {
338
- readonly confirmRemoteSessionBinding?: boolean | 'send';
339
- readonly releaseSeal?: {
340
- readonly sealId: string;
341
- };
342
- } = {}
300
+ options: ZLinkActorRouteCommitOptions = {}
343
301
  ): Promise<void> {
344
302
  const normalizedActorRef = normalizeActorRef(
345
303
  actorRef as ActorRef & { readonly generation?: bigint | number },
@@ -350,45 +308,38 @@ export class ZLinkSessionActorCoordinator {
350
308
  const route = await this.routes.route(normalizedActorRef.actorId);
351
309
  if (route === undefined) return;
352
310
  requireSameIncarnation(route.actor.ref, normalizedActorRef);
353
- if (routingIdsEqual(route.actor.ref.nodeRid, normalizedActorRef.nodeRid)) {
354
- const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
355
- if (
356
- options.releaseSeal !== undefined &&
357
- !(await this.routes.validateSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))
358
- ) {
359
- throw createInternalFrameworkException(
360
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
361
- `Actor '${normalizedActorRef.actorId}' route switch did not match its relocation seal.`,
362
- true
363
- );
364
- }
365
- // A location refresh never changes the route's Session binding
366
- // generation; the native bind owns it.
367
- route.actor.updateRef(
368
- withBindingGeneration(normalizedActorRef, bindingGenerationOf(route.actor.ref), undefined)
369
- );
370
- if (authorityFence !== undefined) {
371
- await this.routes.updateAuthorityFence(normalizedActorRef.actorId, authorityFence);
372
- }
373
- if (
374
- options.releaseSeal !== undefined &&
375
- !(await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))
376
- ) {
377
- throw createInternalFrameworkException(
378
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
379
- `Actor '${normalizedActorRef.actorId}' route switch lost its relocation seal.`,
380
- true
381
- );
382
- }
383
- return;
384
- }
385
- await this.replaceBinding(
386
- route.context,
311
+ const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
312
+ // Relocation changes only the Actor route of this physical binding.
313
+ // Publish the ref and authority together in the binding registry's turn;
314
+ // a native bind would issue a different binding generation.
315
+ const boundActorRef = withBindingGeneration(
387
316
  normalizedActorRef,
388
- signal,
389
- options.confirmRemoteSessionBinding,
390
- options.releaseSeal
317
+ bindingGenerationOf(route.actor.ref),
318
+ undefined
391
319
  );
320
+ const commitActor = () => route.actor.updateRef(boundActorRef);
321
+ if (options.releaseSeal !== undefined) {
322
+ await this.routes.replaceAndReleaseSeal(
323
+ route,
324
+ route.context,
325
+ route.actor,
326
+ route.bindingToken,
327
+ options.releaseSeal.sealId,
328
+ authorityFence,
329
+ route.sessionIdentity,
330
+ commitActor
331
+ );
332
+ } else {
333
+ await this.routes.replace(
334
+ route,
335
+ route.context,
336
+ route.actor,
337
+ route.bindingToken,
338
+ authorityFence,
339
+ route.sessionIdentity,
340
+ commitActor
341
+ );
342
+ }
392
343
  });
393
344
  }
394
345
 
@@ -39,15 +39,8 @@ export interface ZLinkStreamActorLifecyclePort {
39
39
 
40
40
  export interface ZLinkActorRouteCommitOptions {
41
41
  /**
42
- * Relocation already carries the binding identity to the target actor. The
43
- * follow-up confirmation can use a one-way route submission because a
44
- * request/ACK would create a nested route request while the Session
45
- * ownership command is being dispatched.
46
- */
47
- readonly confirmRemoteSessionBinding?: boolean | 'send';
48
- /**
49
- * Command 44 keeps ingress sealed while the native route is prepared, then
50
- * publishes the new route and releases this exact seal in one owner turn.
42
+ * Command 44 publishes the Actor route of the existing binding and releases
43
+ * this exact seal in one owner turn.
51
44
  */
52
45
  readonly releaseSeal?: {
53
46
  readonly sealId: string;
@@ -143,6 +136,7 @@ export interface ZLinkNativeFallbackBoundSessionPort {
143
136
  disconnectNativeBoundSession(
144
137
  node: ZLinkBackendActorSessionNode,
145
138
  actorRef: ActorRef,
139
+ timeoutMs: number,
146
140
  signal?: AbortSignal
147
141
  ): Promise<void>;
148
142
  disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
@@ -9,7 +9,7 @@ import {
9
9
  ZLinkDispatchMessageKind,
10
10
  ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
11
11
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
12
- import { throwIfAborted } from '../abort';
12
+ import { isPromiseLike, throwIfAborted } from '../abort';
13
13
  import { type ZLinkApplicationWorkClaim, shouldCompactBackingArray } from '../admission';
14
14
 
15
15
  import {
@@ -95,29 +95,6 @@ const systemLivenessClock: ZLinkStreamLivenessClock = {
95
95
  clearTimer: (timer) => clearTimeout(timer as ReturnType<typeof setTimeout>)
96
96
  };
97
97
 
98
- class ZLinkStreamReceiveWake {
99
- private pending?: Promise<void>;
100
- private resolvePending?: () => void;
101
- private readonly finish = (): void => {
102
- const resolve = this.resolvePending;
103
- this.pending = undefined;
104
- this.resolvePending = undefined;
105
- resolve?.();
106
- };
107
-
108
- wait(): Promise<void> {
109
- if (this.pending !== undefined) return this.pending;
110
- this.pending = new Promise<void>((resolve) => {
111
- this.resolvePending = resolve;
112
- });
113
- return this.pending;
114
- }
115
-
116
- wake(): void {
117
- this.finish();
118
- }
119
- }
120
-
121
98
  export interface ZLinkStreamSessionContextFactory {
122
99
  createSessionContext(
123
100
  stream: ZLinkManagedStream,
@@ -928,7 +905,7 @@ export class ZLinkStreamSessionNodeRuntime {
928
905
  private readonly receiveAbortController = new AbortController();
929
906
  private receiveLoop: Promise<void> | undefined;
930
907
  private monitorLoop: Promise<void> | undefined;
931
- private readonly receiveWake = new ZLinkStreamReceiveWake();
908
+ private receiveWake: AbortController | undefined;
932
909
  private receiveWorkSinceYield = 0;
933
910
  constructor(
934
911
  private readonly options: ZLinkStreamSessionNodeRuntimeOptions & ZLinkStreamLivenessOptions
@@ -1455,14 +1432,20 @@ export class ZLinkStreamSessionNodeRuntime {
1455
1432
  }
1456
1433
 
1457
1434
  private async waitReceiveLoopWake(signal: AbortSignal): Promise<void> {
1458
- await Promise.race([
1459
- this.options.readablePoller.waitForReadable(signal),
1460
- this.receiveWake.wait()
1461
- ]);
1435
+ const wake = new AbortController();
1436
+ this.receiveWake = wake;
1437
+ try {
1438
+ // Readiness, internal wake and shutdown share one cancellable wait;
1439
+ // no losing Promise retains reactions across receive cycles.
1440
+ await this.options.readablePoller.waitForReadable(AbortSignal.any([signal, wake.signal]));
1441
+ } finally {
1442
+ wake.abort();
1443
+ this.receiveWake = undefined;
1444
+ }
1462
1445
  }
1463
1446
 
1464
1447
  private wakeReceiveLoop(): void {
1465
- this.receiveWake.wake();
1448
+ this.receiveWake?.abort();
1466
1449
  }
1467
1450
 
1468
1451
  private getOrCreateSession(routingId: unknown): ZLinkStreamSessionRuntime | undefined {
@@ -1511,10 +1494,6 @@ function streamMonitorHasEndpoint(event: ZLinkBackendSocketMonitorEvent): boolea
1511
1494
  return endpoint.localAddr !== undefined || endpoint.remoteAddr !== undefined;
1512
1495
  }
1513
1496
 
1514
- function isPromiseLike<T>(value: T | Promise<T>): value is Promise<T> {
1515
- return typeof (value as { then?: unknown }).then === 'function';
1516
- }
1517
-
1518
1497
  function normalizeStreamCloseReason(reason: string): string {
1519
1498
  switch (reason) {
1520
1499
  case 'client_close':
@@ -503,7 +503,7 @@ export class DefaultZLinkWorkerCall<T> implements ZLinkWorkerCall<T> {
503
503
  yield(signal?: AbortSignal): Promise<T> {
504
504
  const turn = requireZLinkYieldTurn(this.turn);
505
505
  const pending = this.begin(signal);
506
- return turn.yieldPromise(pending);
506
+ return turn.yieldFrameworkPromise(pending);
507
507
  }
508
508
 
509
509
  private begin(signal?: AbortSignal): Promise<T> {