@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
@@ -7,6 +7,7 @@ exports.decodeRelocatingActorAuthorityIdentity = decodeRelocatingActorAuthorityI
7
7
  exports.rewriteActorAuthorityRoute = rewriteActorAuthorityRoute;
8
8
  exports.rewriteActorAuthorityOwner = rewriteActorAuthorityOwner;
9
9
  exports.isActorAuthorityPayload = isActorAuthorityPayload;
10
+ const routing_id_1 = require("../routing-id");
10
11
  const node_crypto_1 = require("node:crypto");
11
12
  const creation_operation_id_1 = require("../locations/creation-operation-id");
12
13
  const actor_authority_payload_codec_1 = require("./actor-authority-payload-codec");
@@ -197,7 +198,7 @@ function requireActorAuthority(snapshot, expected) {
197
198
  snapshot.allocation.objectKind !== 'actor' ||
198
199
  snapshot.allocation.stableType !== expected.actorType ||
199
200
  snapshot.allocation.descriptor.meshName !== expected.meshName ||
200
- String(snapshot.allocation.descriptor.rid) !== String(expected.actor.nodeRid) ||
201
+ !(0, routing_id_1.routingIdsEqual)(snapshot.allocation.descriptor.rid, expected.actor.nodeRid) ||
201
202
  snapshot.allocation.descriptorLifecycleGeneration !== expected.ownerNodeGeneration ||
202
203
  snapshot.ownerId !== expected.owner.ownerId ||
203
204
  snapshot.ownerLeaseGeneration !== expected.owner.leaseGeneration ||
@@ -205,7 +206,7 @@ function requireActorAuthority(snapshot, expected) {
205
206
  actual.actorType !== expected.actorType ||
206
207
  actual.actor.actorId !== expected.actor.actorId ||
207
208
  actual.actor.objectGeneration !== expected.actor.objectGeneration ||
208
- String(actual.actor.nodeRid) !== String(expected.actor.nodeRid)) {
209
+ !(0, routing_id_1.routingIdsEqual)(actual.actor.nodeRid, expected.actor.nodeRid)) {
209
210
  throw new Error(`Actor '${expected.actor.actorId}' authority fence does not match its ActorRef.`);
210
211
  }
211
212
  }
@@ -11,7 +11,7 @@ export interface ZLinkActorClientOptions {
11
11
  readonly defaultRequestTimeoutMs?: number;
12
12
  readonly staleActorRefReporter?: (meshName: string, actorId: string) => void;
13
13
  readonly staleActorRefPredicate?: (meshName: string, actor: ActorRef) => boolean;
14
- readonly handoffCapture?: (meshName: string, actorId: string, parts: readonly Message[], returnResponse: boolean, actor: ActorRef, deadlineUnixMs?: number) => Promise<unknown> | undefined;
14
+ readonly handoffCapture?: (meshName: string, actorId: string, parts: readonly Message[], returnResponse: boolean, actor: ActorRef, deadlineUnixMs?: number, onAdmitted?: () => void) => Promise<unknown> | undefined;
15
15
  readonly sendErrorReporter?: (error: unknown) => void;
16
16
  readonly routeTransport?: ZLinkActorRoutedJoinTransport;
17
17
  readonly transportDeliveryGate?: () => {
@@ -33,4 +33,3 @@ export declare class DefaultZLinkActorClient implements ZLinkActorClient {
33
33
  private submitActorRequest;
34
34
  private requireNode;
35
35
  }
36
- export declare function forwardEncodedActorPacket(node: ZLinkBackendMeshNode, completions: ZLinkMeshCompletionTable, actor: ActorRef, header: Buffer, payload: Buffer, returnResponse: boolean, timeoutMs: number | undefined, serializers?: ReadonlyMap<string, ZLinkMessageSerializer>): Promise<unknown>;
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkActorClient = void 0;
4
- exports.forwardEncodedActorPacket = forwardEncodedActorPacket;
4
+ const node_buffer_1 = require("node:buffer");
5
+ const channel_envelope_1 = require("../channels/channel-envelope");
6
+ const routing_id_1 = require("../routing-id");
5
7
  const stream_wire_1 = require("@zlink-systems/stream-wire");
8
+ const request_result_1 = require("../messaging/request-result");
6
9
  const contracts_1 = require("../../contracts");
7
10
  const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
8
11
  const abort_1 = require("../abort");
@@ -32,7 +35,7 @@ class DefaultZLinkActorClient {
32
35
  }
33
36
  requestToActor(actorId, request) {
34
37
  requireActorId(actorId);
35
- return new DefaultZLinkActorRequestCall((packetName, timeoutMs, metadata, signal) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'async'), (packetName, timeoutMs, metadata, signal) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'yield'), actorId, request, this.options.defaultRequestTimeoutMs);
38
+ return new DefaultZLinkActorRequestCall((packetName, timeoutMs, metadata, signal, onAdmitted) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'async', onAdmitted), (packetName, timeoutMs, metadata, signal) => this.request(actorId, packetName, request, timeoutMs, metadata, signal, 'yield'), actorId, request, this.options.defaultRequestTimeoutMs);
36
39
  }
37
40
  async send(actorId, explicitPacketName, message, metadata) {
38
41
  const route = await this.resolveActorRoute(actorId);
@@ -56,7 +59,7 @@ class DefaultZLinkActorClient {
56
59
  }
57
60
  const node = this.requireNode(meshName);
58
61
  if (this.options.routeTransport !== undefined &&
59
- String(node.status().routingId) !== String(actor.nodeRid)) {
62
+ !(0, routing_id_1.routingIdsEqual)(node.status().routingId, actor.nodeRid)) {
60
63
  await this.options.routeTransport.sendToSpot(remoteActorRouteTarget(route), (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
61
64
  actorId,
62
65
  header: parts[0].data(),
@@ -68,7 +71,7 @@ class DefaultZLinkActorClient {
68
71
  }), { packetName: actor_packet_relay_wire_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET });
69
72
  return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
70
73
  }
71
- return await this.submitActorSend(meshName, toBackendActorRef(actor), parts);
74
+ return await this.submitActorSend(meshName, toBackendActorRef(actor), parts, route);
72
75
  }
73
76
  catch (error) {
74
77
  if (isStaleActorError(error)) {
@@ -82,7 +85,7 @@ class DefaultZLinkActorClient {
82
85
  closeMessages(parts);
83
86
  }
84
87
  }
85
- async request(actorId, explicitPacketName, request, timeoutMs, metadata, signal, waitPolicy = 'async') {
88
+ async request(actorId, explicitPacketName, request, timeoutMs, metadata, signal, waitPolicy = 'async', onAdmitted) {
86
89
  (0, abort_1.throwIfAborted)(signal);
87
90
  const sourceSpotId = (0, actor_execution_context_1.currentZLinkActorExecution)()?.spotId ?? (0, execution_1.currentZLinkSpotSerialSourceId)();
88
91
  const effectiveTimeoutMs = timeoutMs ?? this.options.defaultRequestTimeoutMs;
@@ -109,18 +112,18 @@ class DefaultZLinkActorClient {
109
112
  const submissionCopies = delivery === undefined
110
113
  ? 1
111
114
  : ((await (0, actor_request_deadline_1.waitActorReply)(delivery, actorId, deadlineMs, signal)) ?? 1);
112
- const handoff = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs);
115
+ const handoff = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs, onAdmitted);
113
116
  if (handoff !== undefined) {
114
117
  const submissions = [handoff];
115
118
  for (let copy = 1; copy < submissionCopies; copy++) {
116
- const duplicate = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs);
119
+ const duplicate = this.options.handoffCapture?.(meshName, actor.actorId, parts, true, routedActor, deadlineUnixMs, onAdmitted);
117
120
  if (duplicate !== undefined)
118
121
  submissions.push(duplicate);
119
122
  }
120
123
  const replies = await (0, actor_request_deadline_1.waitActorReply)(Promise.all(submissions), actorId, deadlineMs, signal);
121
124
  return replies[0];
122
125
  }
123
- return await this.submitActorRequest(meshName, toBackendActorRef(actor), parts, (0, actor_request_deadline_1.remainingActorRequestTimeout)(actorId, deadlineMs), signal, route, messageFollow);
126
+ return await this.submitActorRequest(meshName, toBackendActorRef(actor), parts, (0, actor_request_deadline_1.remainingActorRequestTimeout)(actorId, deadlineMs), signal, route, messageFollow, onAdmitted);
124
127
  }
125
128
  catch (error) {
126
129
  if (isStaleActorError(error)) {
@@ -190,11 +193,12 @@ class DefaultZLinkActorClient {
190
193
  throw error;
191
194
  }
192
195
  }
193
- async submitActorSend(meshName, actor, parts) {
196
+ async submitActorSend(meshName, actor, parts, route) {
194
197
  const node = this.requireNode(meshName);
195
198
  try {
196
199
  return (0, submission_result_1.classifySubmitResult)(await node.sendToActor(actor, toMessageLikeParts(parts), {
197
- flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE
200
+ flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
201
+ routeFence: nativeActorRouteFence(route, actor)
198
202
  }), 'Actor send');
199
203
  }
200
204
  catch (error) {
@@ -204,11 +208,10 @@ class DefaultZLinkActorClient {
204
208
  throw mapSubmitError(error, 'Actor send');
205
209
  }
206
210
  }
207
- async submitActorRequest(meshName, actor, parts, timeoutMs, signal, route, messageFollowContext) {
211
+ async submitActorRequest(meshName, actor, parts, timeoutMs, signal, route, messageFollowContext, onAdmitted) {
208
212
  const node = this.requireNode(meshName);
209
213
  if (this.options.routeTransport !== undefined &&
210
- String(node.status().routingId) !== String(actor.nodeRid) &&
211
- route !== undefined) {
214
+ !(0, routing_id_1.routingIdsEqual)(node.status().routingId, actor.nodeRid)) {
212
215
  const relay = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
213
216
  actorId: actor.actorId,
214
217
  header: parts[0].data(),
@@ -228,7 +231,7 @@ class DefaultZLinkActorClient {
228
231
  returnResponse: true,
229
232
  messageFollowContext
230
233
  });
231
- const reply = await (0, actor_routed_json_request_1.requestRoutedJsonReply)(this.options.routeTransport, remoteActorRouteTarget(route), relay, { timeoutMs, signal }, `Remote Actor request is not available for '${actor.actorId}'.`, (replyParts) => JSON.parse(replyParts[0]?.getString('utf8') ?? '{}'));
234
+ const reply = await (0, actor_routed_json_request_1.requestRoutedJsonReply)(this.options.routeTransport, remoteActorRouteTarget(route), relay, { timeoutMs, signal, onAdmitted }, `Remote Actor request is not available for '${actor.actorId}'.`, (replyParts) => JSON.parse(replyParts[0]?.getString('utf8') ?? '{}'));
232
235
  if (reply.ok !== true) {
233
236
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(remoteRelayErrorKind(reply.errorKind), typeof reply.error === 'string'
234
237
  ? reply.error
@@ -242,7 +245,9 @@ class DefaultZLinkActorClient {
242
245
  }
243
246
  const completion = await completions.submit(() => node.requestToActor(actor, toMessageLikeParts(parts), {
244
247
  flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
245
- timeoutMs
248
+ routeFence: nativeActorRouteFence(route, actor),
249
+ timeoutMs,
250
+ onAdmitted
246
251
  }), signal);
247
252
  if (completion.terminalResult !== runtime_values_1.RequestResult.Ok) {
248
253
  (0, backend_1.closeMeshCompletion)(completion);
@@ -259,6 +264,14 @@ class DefaultZLinkActorClient {
259
264
  }
260
265
  }
261
266
  exports.DefaultZLinkActorClient = DefaultZLinkActorClient;
267
+ function nativeActorRouteFence(route, actor) {
268
+ return {
269
+ actor,
270
+ targetNodeGeneration: route.ownerNodeGeneration,
271
+ authorityOwnerGeneration: route.authorityOwnerGeneration,
272
+ ownerLeaseGeneration: route.ownerLeaseGeneration
273
+ };
274
+ }
262
275
  function remoteActorRouteTarget(route) {
263
276
  if (route.enclosingSpotRoute !== undefined) {
264
277
  return route.enclosingSpotRoute;
@@ -302,27 +315,6 @@ function requireActorId(actorId) {
302
315
  throw new configuration_1.ZLinkConfigurationException(`Actor ID must contain 1..${CoreTypes_1.ZLINK_MAX_ACTOR_ID_BYTES} UTF-8 bytes.`);
303
316
  }
304
317
  }
305
- async function forwardEncodedActorPacket(node, completions, actor, header, payload, returnResponse, timeoutMs, serializers) {
306
- const target = toBackendActorRef(actor);
307
- const parts = [header, payload];
308
- const packetName = (0, protocol_1.decodeStreamHeader)(header).name;
309
- if (!returnResponse) {
310
- if ((await node.sendToActor(target, parts, { flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE })) !==
311
- runtime_values_1.SubmitResult.Ok) {
312
- throw routeNotConnected('Actor handoff send submit was not accepted.');
313
- }
314
- return undefined;
315
- }
316
- const completion = await completions.submit(() => node.requestToActor(target, parts, {
317
- flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
318
- timeoutMs
319
- }));
320
- if (completion.terminalResult !== runtime_values_1.RequestResult.Ok) {
321
- (0, backend_1.closeMeshCompletion)(completion);
322
- throw mapRequestResult(completion.terminalResult, completion.failureErrno, 'Actor handoff request');
323
- }
324
- return decodeActorReply(completion.parts, serializers, packetName);
325
- }
326
318
  function toBackendActorRef(actor) {
327
319
  return {
328
320
  nodeRid: actor.nodeRid,
@@ -405,21 +397,21 @@ class DefaultZLinkActorRequestCall {
405
397
  return this;
406
398
  }
407
399
  submit(signal) {
408
- return this.execute('async', signal);
400
+ this.rejectSelfActorRequest();
401
+ return (0, request_result_1.createZLinkRequest)((onAdmitted) => this.execute('async', signal, onAdmitted));
409
402
  }
410
403
  yield(signal) {
411
404
  this.rejectSelfActorRequest();
412
405
  const turn = (0, execution_1.requireZLinkYieldTurn)(this.turn);
413
406
  const pending = this.execute('yield', signal);
414
- return turn.yieldPromise(pending);
407
+ return turn.yieldFrameworkPromise(pending);
415
408
  }
416
- execute(waitPolicy, signal) {
409
+ execute(waitPolicy, signal, onAdmitted) {
417
410
  ensureSingleSubmit(this.executed);
418
- this.rejectSelfActorRequest();
419
411
  this.executed = true;
420
412
  (0, abort_1.throwIfAborted)(signal);
421
413
  const submitter = waitPolicy === 'async' ? this.asyncSubmitter : this.yieldSubmitter;
422
- return submitter(this.packet ?? (0, packet_name_1.resolveFrameworkPacketName)(this.request, undefined, 'Actor'), this.timeoutMs ?? this.defaultRequestTimeoutMs, this.selectedMetadata, signal);
414
+ return submitter(this.packet ?? (0, packet_name_1.resolveFrameworkPacketName)(this.request, undefined, 'Actor'), this.timeoutMs ?? this.defaultRequestTimeoutMs, this.selectedMetadata, signal, onAdmitted);
423
415
  }
424
416
  rejectSelfActorRequest() {
425
417
  const current = (0, actor_execution_context_1.currentZLinkActorExecution)();
@@ -440,18 +432,14 @@ function decodeActorReply(reply, serializers, packetName) {
440
432
  const header = (0, protocol_1.decodeStreamHeader)(frame.header);
441
433
  const payload = runtime_message_1.ZLinkBufferMessage.from(frame.payload);
442
434
  try {
443
- return decodeActorReplyPayload(header.kind, payload, serializers, packetName);
435
+ return decodeActorReplyPayload(header.kind, header.codec, payload, serializers, packetName);
444
436
  }
445
437
  finally {
446
438
  payload.close();
447
439
  }
448
440
  }
449
441
  }
450
- if (reply.length >= 2) {
451
- const header = (0, protocol_1.decodeStreamHeader)(reply[0].data());
452
- return decodeActorReplyPayload(header.kind, reply[1], serializers, packetName);
453
- }
454
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor request reply is empty.');
442
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor request reply must contain one valid STREAM frame.');
455
443
  }
456
444
  finally {
457
445
  closeMessages(reply);
@@ -461,17 +449,24 @@ function closeMessages(parts) {
461
449
  for (const part of parts)
462
450
  part.close();
463
451
  }
464
- function decodeActorReplyPayload(kind, payload, serializers, packetName) {
452
+ function decodeActorReplyPayload(kind, codec, payload, serializers, packetName) {
465
453
  if (kind === protocol_1.ZLinkStreamMessageKind.Error) {
466
- const error = (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload, serializers);
467
- const wireKind = error.kind;
468
- const publicKind = typeof wireKind === 'number' &&
469
- Number.isInteger(wireKind) &&
470
- wireKind >= contracts_1.ZLinkFrameworkErrorKind.NotFound &&
471
- wireKind <= contracts_1.ZLinkFrameworkErrorKind.InternalFailure
472
- ? wireKind
473
- : contracts_1.ZLinkFrameworkErrorKind.InternalFailure;
474
- throw new contracts_1.ZLinkFrameworkException(publicKind, error.message ?? 'Actor request failed.');
454
+ if (codec !== protocol_1.ZLinkStreamCodec.Json || !(0, node_buffer_1.isUtf8)(payload.data())) {
455
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor Error reply requires UTF-8 JSON.');
456
+ }
457
+ const error = (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload);
458
+ if (typeof error !== 'object' ||
459
+ error === null ||
460
+ typeof error.code !== 'string' ||
461
+ typeof error.message !== 'string') {
462
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor Error reply requires code and message strings.');
463
+ }
464
+ const wire = error;
465
+ const kind = (0, channel_envelope_1.channelErrorKindFromCode)(wire.code);
466
+ if (kind === undefined) {
467
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Actor Error reply uses an unknown error code '${wire.code}'.`);
468
+ }
469
+ throw new contracts_1.ZLinkFrameworkException(kind, wire.message);
475
470
  }
476
471
  return (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload, serializers, undefined, stream_wire_1.ZlinkStreamContentType.Json, packetName, 'reply');
477
472
  }
@@ -13,6 +13,8 @@ export declare class DefaultZLinkActorContext implements ZLinkActorContext {
13
13
  constructor(state: ZLinkActorRuntimeState, joinCoordinator: ZLinkActorJoinCoordinator | undefined, boundSessionFactory: ZLinkActorBoundSessionFactory | undefined, messageSerializers: ReadonlyMap<string, ZLinkMessageSerializer> | undefined, meshNameProvider: ZLinkActorManagerOptions['actorMeshNameProvider']);
14
14
  get meshName(): string;
15
15
  get actorId(): string;
16
+ /** Actor-turn view of the single current Session binding (§7). */
17
+ get currentSessionBinding(): import("./actor-runtime-state").ZLinkRemoteBoundSessionTarget | undefined;
16
18
  get objectGeneration(): bigint;
17
19
  get spotId(): SpotId | undefined;
18
20
  [ZLINK_ACTOR_LIFECYCLE_SNAPSHOT](): ZLinkActorLifecycleSnapshotSource;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkActorContext = exports.ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME = void 0;
4
+ const routing_id_1 = require("../routing-id");
4
5
  const contracts_1 = require("../../contracts");
5
6
  const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
6
7
  const runtime_message_1 = require("../backend/runtime-message");
@@ -53,6 +54,10 @@ class DefaultZLinkActorContext {
53
54
  get actorId() {
54
55
  return this.state.actorId;
55
56
  }
57
+ /** Actor-turn view of the single current Session binding (§7). */
58
+ get currentSessionBinding() {
59
+ return this.state.boundSession;
60
+ }
56
61
  get objectGeneration() {
57
62
  return this.state.nativeActorRef?.generation ?? 1n;
58
63
  }
@@ -200,10 +205,25 @@ class DefaultZLinkActorJoinSpotCall {
200
205
  deadline.close();
201
206
  requestMessage.close();
202
207
  }
208
+ if (result.sourceCleanup !== undefined) {
209
+ // Infrastructure cleanup has its own terminal, outside the public Failed conversion.
210
+ try {
211
+ const cleanup = result.sourceCleanup();
212
+ await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
213
+ }
214
+ catch (error) {
215
+ traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop);
216
+ throw error;
217
+ }
218
+ finally {
219
+ this.state.endDeferredJoin();
220
+ }
221
+ return;
222
+ }
203
223
  if (!result.accepted ||
204
224
  sourceNodeRid === undefined ||
205
225
  result.actor === undefined ||
206
- String(sourceNodeRid) === String(result.actor.nodeRid)) {
226
+ (0, routing_id_1.routingIdsEqual)(sourceNodeRid, result.actor.nodeRid)) {
207
227
  await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
208
228
  }
209
229
  else {
@@ -322,10 +342,25 @@ class DefaultZLinkActorJoinEntrySpotCall {
322
342
  deadline.close();
323
343
  requestMessage.close();
324
344
  }
345
+ if (result.sourceCleanup !== undefined) {
346
+ // Infrastructure cleanup has its own terminal, outside the public Failed conversion.
347
+ try {
348
+ const cleanup = result.sourceCleanup();
349
+ await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
350
+ }
351
+ catch (error) {
352
+ traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop);
353
+ throw error;
354
+ }
355
+ finally {
356
+ this.state.endDeferredJoin();
357
+ }
358
+ return;
359
+ }
325
360
  if (!result.accepted ||
326
361
  sourceNodeRid === undefined ||
327
362
  result.actor === undefined ||
328
- String(sourceNodeRid) === String(result.actor.nodeRid)) {
363
+ (0, routing_id_1.routingIdsEqual)(sourceNodeRid, result.actor.nodeRid)) {
329
364
  await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
330
365
  }
331
366
  else {
@@ -430,10 +465,17 @@ async function notifyJoinCompletion(actor, operationId, result, _messageSerializ
430
465
  await actor.onJoinCompleted?.(completion);
431
466
  }
432
467
  async function notifyJoinFailure(actor, operationId, error, coordinator) {
433
- console.error(`actor join failure actor=${actor.context.actorId}`, error);
434
468
  const frameworkError = error instanceof contracts_1.ZLinkFrameworkException
435
469
  ? error
436
470
  : (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'Deferred actor join failed.', false, error);
471
+ traceJoinError(actor, error, coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError);
472
+ await actor.onJoinCompleted?.({
473
+ status: 'failed',
474
+ operationId,
475
+ kind: frameworkError.kind
476
+ });
477
+ }
478
+ function traceJoinError(actor, error, coordinator, errorAction) {
437
479
  // The completion carries only an error kind, so trace the cause on the
438
480
  // message flow under the same flow id as the Join that produced it.
439
481
  const tracePoint = coordinator?.messageFlow?.()?.begin(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error);
@@ -445,13 +487,8 @@ async function notifyJoinFailure(actor, operationId, error, coordinator) {
445
487
  packetName: 'JoinSpot',
446
488
  actorId: actor.context.actorId,
447
489
  errorReason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
448
- errorAction: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError,
490
+ errorAction,
449
491
  errorType: errorDetails?.errorType,
450
492
  errorMessage: errorDetails?.errorMessage
451
493
  });
452
- await actor.onJoinCompleted?.({
453
- status: 'failed',
454
- operationId,
455
- kind: frameworkError.kind
456
- });
457
494
  }
@@ -8,6 +8,7 @@ import { type ZLinkActorMessageFollowContext, type ZLinkActorMessageFollowOwnerF
8
8
  import type { ZLinkActorRoutedJoinTransport } from './actor-routed-join-transport';
9
9
  import type { ZLinkRemoteBoundSessionTarget } from './actor-runtime-state';
10
10
  export declare const DEFAULT_MESSAGE_FOLLOW_DURATION_MS: number;
11
+ export declare const RELOCATED_REQUEST_OWNED_BY_REQUESTER: unique symbol;
11
12
  export interface ZLinkActorHandoffPacket {
12
13
  readonly index: number;
13
14
  readonly header: string;
@@ -36,6 +37,7 @@ export interface ZLinkActorHandoffRequestSource {
36
37
  readonly ownerId: string;
37
38
  readonly ownerLeaseGeneration: string;
38
39
  readonly nodeRid: string;
40
+ readonly nodeRidHex?: string;
39
41
  readonly nodeGeneration: string;
40
42
  readonly replyRouteId: string;
41
43
  }
@@ -63,6 +65,7 @@ export interface ZLinkActorHandoffPrefixAdmission {
63
65
  readonly terminal: Promise<void>;
64
66
  }
65
67
  export interface ZLinkActorHandoffPrefixRecord {
68
+ readonly onWithdrawable?: (withdraw: () => boolean) => void;
66
69
  readonly drain: (dispatch: ZLinkActorHandoffDispatch) => Promise<void>;
67
70
  readonly preparation?: {
68
71
  prepare(signal: AbortSignal): Promise<void>;
@@ -118,13 +121,15 @@ export declare class ZLinkActorHandoffCoordinator {
118
121
  begin(actorId: string, oldGeneration: bigint): void;
119
122
  beginProvisional(actorId: string, oldGeneration: bigint): void;
120
123
  private startHandoff;
124
+ /** True while a hold owns this Actor's ingress, before its release to the Actor FIFO. */
121
125
  isActive(actorId: string): boolean;
122
126
  isProvisional(actorId: string): boolean;
123
- promoteProvisional(actorId: string): void;
124
127
  sealConnectionBoundIngress(actorId: string): void;
125
128
  activeSourceOwner(actorId: string): ZLinkActorMessageFollowOwnerFence | undefined;
126
129
  releaseDeferred(actorId: string, dispatch?: ZLinkActorHandoffDispatch, admission?: ZLinkActorHandoffReplayAdmission): Promise<void>;
127
130
  releaseCanceled(actorId: string, dispatch: ZLinkActorHandoffDispatch, admission?: ZLinkActorHandoffReplayAdmission): Promise<void>;
131
+ /** Installs a restored target's payload in the same owner used by local handoffs. */
132
+ admitTransferredPrefix(actorId: string, objectGeneration: bigint, packets: readonly ZLinkActorHandoffPacket[], queue: ZLinkActorHandoffPrefixQueue, preparation: ZLinkActorHandoffReplayPreparation | undefined, start: Promise<void>, onResult: (packet: ZLinkActorHandoffPacket, result: ZLinkActorHandoffResult) => void): ZLinkActorHandoffPrefixAdmission;
128
133
  private admitHandoffPrefix;
129
134
  private admitPendingPrefix;
130
135
  private createPrefixRecord;
@@ -142,9 +147,8 @@ export declare class ZLinkActorHandoffCoordinator {
142
147
  */
143
148
  failPending(actorId: string, reason: unknown): void;
144
149
  cancel(actorId: string): void;
145
- capture(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, deadlineUnixMs?: number, messageFollowOrigin?: ZLinkMessageFollowOrigin, provisionalReplay?: ZLinkActorHandoffDispatch): Promise<unknown> | undefined;
150
+ capture(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, deadlineUnixMs?: number, messageFollowOrigin?: ZLinkMessageFollowOrigin, provisionalReplay?: ZLinkActorHandoffDispatch, onAdmitted?: () => void): Promise<unknown> | undefined;
146
151
  snapshot(actorId: string): readonly ZLinkActorHandoffPacket[];
147
- snapshotCoreBacklog(actorId: string): readonly ZLinkActorHandoffPacket[];
148
152
  /**
149
153
  * Freezes the post-capture ingress segment immediately before the caller
150
154
  * appends the one-way cutover on the same relocation lane. Records returned
@@ -152,7 +156,7 @@ export declare class ZLinkActorHandoffCoordinator {
152
156
  * from the later Message Follow tail.
153
157
  */
154
158
  takeRelocationRelay(actorId: string): readonly ZLinkActorHandoffPacket[];
155
- complete(actorId: string, target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, results: readonly ZLinkActorHandoffResult[], targetOwnerFence: ZLinkActorMessageFollowOwnerFence): void;
159
+ complete(actorId: string, target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, results: readonly ZLinkActorHandoffResult[], targetOwnerFence: ZLinkActorMessageFollowOwnerFence | null): void;
156
160
  messageFollowCount(actorId?: string): number;
157
161
  pendingCount(actorId: string): number;
158
162
  isKnownStale(actor: ActorRef): boolean;