@zlink-systems/framework 0.30.1 → 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 (340) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  3. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  4. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  5. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  6. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  7. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  8. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  9. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  10. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  11. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  12. package/dist/contracts/Locations/Rows.d.ts +2 -0
  13. package/dist/contracts/Spots/Contracts.d.ts +4 -0
  14. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  15. package/dist/runtime/abort.d.ts +5 -0
  16. package/dist/runtime/abort.js +10 -0
  17. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  18. package/dist/runtime/actors/actor-client.d.ts +0 -1
  19. package/dist/runtime/actors/actor-client.js +38 -45
  20. package/dist/runtime/actors/actor-context.d.ts +2 -0
  21. package/dist/runtime/actors/actor-context.js +46 -9
  22. package/dist/runtime/actors/actor-handoff.d.ts +7 -3
  23. package/dist/runtime/actors/actor-handoff.js +212 -88
  24. package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
  25. package/dist/runtime/actors/actor-local-native-join.js +4 -0
  26. package/dist/runtime/actors/actor-mailbox.js +27 -1
  27. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  28. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  29. package/dist/runtime/actors/actor-reply.js +29 -0
  30. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  31. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  32. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  33. package/dist/runtime/actors/index.d.ts +6 -2
  34. package/dist/runtime/actors/index.js +37 -21
  35. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  36. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  37. package/dist/runtime/admission.d.ts +9 -1
  38. package/dist/runtime/admission.js +55 -32
  39. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
  40. package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
  41. package/dist/runtime/application-jobs/contracts.d.ts +2 -0
  42. package/dist/runtime/backend/contracts/index.d.ts +19 -3
  43. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  44. package/dist/runtime/backend/mesh-completion-table.js +5 -0
  45. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
  46. package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
  47. package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
  48. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
  49. package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
  50. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  51. package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
  52. package/dist/runtime/channels/channel-clients.d.ts +1 -0
  53. package/dist/runtime/channels/channel-clients.js +20 -5
  54. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
  55. package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
  56. package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
  57. package/dist/runtime/channels/channel-dispatchers.js +44 -37
  58. package/dist/runtime/channels/channel-envelope.d.ts +1 -0
  59. package/dist/runtime/channels/channel-envelope.js +74 -31
  60. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  62. package/dist/runtime/channels/channel-runtime-manager.d.ts +3 -2
  63. package/dist/runtime/channels/channel-runtime-manager.js +4 -4
  64. package/dist/runtime/channels/channel-transports.d.ts +0 -1
  65. package/dist/runtime/channels/channel-transports.js +35 -33
  66. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  67. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  68. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  69. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  70. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  71. package/dist/runtime/diagnostics/flow-context.js +19 -7
  72. package/dist/runtime/diagnostics/index.js +4 -9
  73. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  74. package/dist/runtime/diagnostics/message-flow.js +35 -5
  75. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  76. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  77. package/dist/runtime/execution/index.d.ts +4 -2
  78. package/dist/runtime/execution/index.js +33 -10
  79. package/dist/runtime/execution/serial-execution-queue.d.ts +4 -0
  80. package/dist/runtime/execution/serial-execution-queue.js +21 -2
  81. package/dist/runtime/execution/state-lane.d.ts +2 -0
  82. package/dist/runtime/execution/state-lane.js +5 -0
  83. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  84. package/dist/runtime/foundation/operation-registry.js +86 -18
  85. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +39 -3
  86. package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
  87. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  88. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  89. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  90. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  91. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -3
  92. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
  93. package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
  94. package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -1
  95. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  96. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  97. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  98. package/dist/runtime/foundation/service-stateful-runtime.d.ts +72 -6
  99. package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
  100. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  102. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  103. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  104. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  105. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  106. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +10 -0
  107. package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
  108. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  109. package/dist/runtime/host/actor-packet-relay.js +59 -72
  110. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  111. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  112. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  113. package/dist/runtime/host/application-job-queue.d.ts +24 -3
  114. package/dist/runtime/host/application-job-queue.js +28 -41
  115. package/dist/runtime/host/index.d.ts +5 -1
  116. package/dist/runtime/host/index.js +171 -97
  117. package/dist/runtime/host/location-runtime-owner.js +2 -6
  118. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  119. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  120. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  121. package/dist/runtime/host/remote-bound-session-relay.js +71 -190
  122. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  123. package/dist/runtime/host/route-mesh-runtime.js +5 -3
  124. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  125. package/dist/runtime/host/runtime-shutdown.js +3 -2
  126. package/dist/runtime/host/service-relocation-host-runtime.d.ts +17 -7
  127. package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
  128. package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
  129. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  130. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  131. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  132. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  133. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  134. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  135. package/dist/runtime/locations/descriptor-publication.js +11 -0
  136. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  137. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  138. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  139. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  140. package/dist/runtime/locations/index.d.ts +1 -0
  141. package/dist/runtime/locations/index.js +1 -0
  142. package/dist/runtime/locations/lease-tracker.js +1 -6
  143. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  144. package/dist/runtime/locations/location-store-repository.js +363 -139
  145. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  146. package/dist/runtime/locations/relocation-blob.js +52 -1
  147. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  148. package/dist/runtime/locations/request-source-resolver.js +80 -0
  149. package/dist/runtime/locations/resolvers.js +1 -1
  150. package/dist/runtime/locations/runtime.d.ts +6 -2
  151. package/dist/runtime/locations/runtime.js +37 -30
  152. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  153. package/dist/runtime/messaging/payload-codec.js +7 -6
  154. package/dist/runtime/messaging/request-result.js +29 -26
  155. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
  156. package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
  157. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
  158. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
  159. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
  160. package/dist/runtime/spots/index.d.ts +18 -11
  161. package/dist/runtime/spots/index.js +234 -176
  162. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  163. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  164. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  165. package/dist/runtime/spots/spot-activation-state.js +7 -7
  166. package/dist/runtime/spots/spot-activation.d.ts +6 -3
  167. package/dist/runtime/spots/spot-activation.js +123 -44
  168. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  169. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  170. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  171. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  172. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  173. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  174. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  175. package/dist/runtime/spots/spot-entry-activation.js +14 -9
  176. package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
  177. package/dist/runtime/spots/spot-handler-registry.js +6 -2
  178. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  179. package/dist/runtime/spots/spot-manager-public.js +2 -2
  180. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  181. package/dist/runtime/spots/spot-node-autoconnect.js +18 -39
  182. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  183. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  184. package/dist/runtime/spots/spot-outbound.js +3 -3
  185. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  186. package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -1
  187. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  188. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  189. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  190. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -1
  191. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  192. package/dist/runtime/spots/spot-timer.js +287 -103
  193. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  194. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  195. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  196. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  197. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  198. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  199. package/dist/runtime/streams/bound-session-service.js +6 -11
  200. package/dist/runtime/streams/index.d.ts +3 -2
  201. package/dist/runtime/streams/index.js +6 -4
  202. package/dist/runtime/streams/managed-stream.js +3 -2
  203. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  204. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  205. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  206. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  207. package/dist/runtime/streams/stream-session-runtime.js +1 -4
  208. package/dist/runtime/workers/index.js +1 -1
  209. package/package.json +3 -3
  210. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  211. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  212. package/src/contracts/Configuration/Builders.ts +4 -1
  213. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  214. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  215. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  216. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  217. package/src/contracts/Locations/Rows.ts +2 -0
  218. package/src/contracts/Spots/Contracts.ts +8 -0
  219. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  220. package/src/runtime/abort.ts +12 -0
  221. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  222. package/src/runtime/actors/actor-client.ts +61 -70
  223. package/src/runtime/actors/actor-context.ts +49 -9
  224. package/src/runtime/actors/actor-handoff.ts +282 -106
  225. package/src/runtime/actors/actor-join-relocation.ts +2 -0
  226. package/src/runtime/actors/actor-local-native-join.ts +4 -0
  227. package/src/runtime/actors/actor-mailbox.ts +40 -2
  228. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  229. package/src/runtime/actors/actor-reply.ts +42 -0
  230. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  231. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  232. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  233. package/src/runtime/actors/index.ts +41 -27
  234. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  235. package/src/runtime/admission.ts +69 -34
  236. package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
  237. package/src/runtime/application-jobs/contracts.ts +2 -0
  238. package/src/runtime/backend/contracts/index.ts +39 -4
  239. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  240. package/src/runtime/backend/mesh-completion-table.ts +4 -0
  241. package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
  242. package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
  243. package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
  244. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
  245. package/src/runtime/channels/channel-clients.ts +49 -24
  246. package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
  247. package/src/runtime/channels/channel-dispatchers.ts +116 -72
  248. package/src/runtime/channels/channel-envelope.ts +105 -36
  249. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  250. package/src/runtime/channels/channel-runtime-manager.ts +12 -5
  251. package/src/runtime/channels/channel-transports.ts +49 -58
  252. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  253. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  254. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  255. package/src/runtime/diagnostics/flow-context.ts +20 -7
  256. package/src/runtime/diagnostics/index.ts +1 -7
  257. package/src/runtime/diagnostics/message-flow.ts +47 -9
  258. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  259. package/src/runtime/execution/index.ts +40 -14
  260. package/src/runtime/execution/serial-execution-queue.ts +31 -4
  261. package/src/runtime/execution/state-lane.ts +7 -0
  262. package/src/runtime/foundation/operation-registry.ts +98 -20
  263. package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
  264. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  265. package/src/runtime/foundation/service-mailbox.ts +8 -0
  266. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  267. package/src/runtime/foundation/service-relocation-object-owner.ts +54 -37
  268. package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
  269. package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
  270. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  271. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  272. package/src/runtime/foundation/service-stateful-runtime.ts +667 -152
  273. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
  274. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  275. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  276. package/src/runtime/foundation/service-wire-m6a-codec.ts +187 -51
  277. package/src/runtime/host/actor-packet-relay.ts +113 -94
  278. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  279. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  280. package/src/runtime/host/application-job-queue.ts +29 -44
  281. package/src/runtime/host/index.ts +286 -129
  282. package/src/runtime/host/location-runtime-owner.ts +2 -6
  283. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  284. package/src/runtime/host/remote-bound-session-relay.ts +86 -248
  285. package/src/runtime/host/route-mesh-runtime.ts +11 -5
  286. package/src/runtime/host/runtime-shutdown.ts +15 -4
  287. package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
  288. package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
  289. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  290. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  291. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  292. package/src/runtime/locations/auto-connect-types.ts +0 -1
  293. package/src/runtime/locations/descriptor-publication.ts +7 -0
  294. package/src/runtime/locations/domain-store-contract.ts +5 -0
  295. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  296. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  297. package/src/runtime/locations/index.ts +1 -0
  298. package/src/runtime/locations/lease-tracker.ts +2 -9
  299. package/src/runtime/locations/location-store-repository.ts +628 -152
  300. package/src/runtime/locations/relocation-blob.ts +75 -1
  301. package/src/runtime/locations/request-source-resolver.ts +138 -0
  302. package/src/runtime/locations/resolvers.ts +2 -2
  303. package/src/runtime/locations/runtime.ts +70 -40
  304. package/src/runtime/messaging/payload-codec.ts +8 -11
  305. package/src/runtime/messaging/request-result.ts +33 -29
  306. package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
  307. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
  308. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
  309. package/src/runtime/spots/index.ts +375 -281
  310. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  311. package/src/runtime/spots/spot-activation-state.ts +12 -19
  312. package/src/runtime/spots/spot-activation.ts +170 -86
  313. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  314. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  315. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  316. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  317. package/src/runtime/spots/spot-entry-activation.ts +24 -19
  318. package/src/runtime/spots/spot-handler-registry.ts +15 -4
  319. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  320. package/src/runtime/spots/spot-manager-public.ts +2 -2
  321. package/src/runtime/spots/spot-node-autoconnect.ts +22 -45
  322. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  323. package/src/runtime/spots/spot-outbound.ts +3 -3
  324. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  325. package/src/runtime/spots/spot-runtime-ports.ts +0 -1
  326. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  327. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  328. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -1
  329. package/src/runtime/spots/spot-timer.ts +413 -157
  330. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  331. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  332. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  333. package/src/runtime/streams/bound-session-service.ts +7 -10
  334. package/src/runtime/streams/index.ts +12 -6
  335. package/src/runtime/streams/managed-stream.ts +4 -2
  336. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  337. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  338. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  339. package/src/runtime/streams/stream-session-runtime.ts +1 -5
  340. package/src/runtime/workers/index.ts +1 -1
@@ -1,3 +1,6 @@
1
+ import { isUtf8 } from 'node:buffer';
2
+ import { channelErrorKindFromCode } from '../channels/channel-envelope';
3
+ import { routingIdsEqual } from '../routing-id';
1
4
  import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
2
5
  import { createZLinkRequest } from '../messaging/request-result';
3
6
  import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
@@ -8,7 +11,6 @@ import {
8
11
  type ZLinkActorRequestCall,
9
12
  type ZLinkActorSendCall,
10
13
  type ZLinkMessageSerializer,
11
- ZLinkFrameworkErrorKind,
12
14
  ZLinkFrameworkException,
13
15
  ZLinkSpotKind
14
16
  } from '../../contracts';
@@ -27,7 +29,6 @@ import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message
27
29
  import {
28
30
  isZLinkBackendResultError,
29
31
  RequestResult,
30
- SubmitResult,
31
32
  ZLINK_BACKEND_SEND_NONE
32
33
  } from '../backend/runtime-values';
33
34
  import { ZLinkConfigurationException } from '../configuration';
@@ -60,6 +61,7 @@ import {
60
61
  encodeStreamHeader,
61
62
  streamCodecForContentType,
62
63
  tryDecodeStreamFrame,
64
+ ZLinkStreamCodec,
63
65
  ZLinkStreamHeaderFlags,
64
66
  ZLinkStreamMessageKind
65
67
  } from '../streams/protocol';
@@ -186,7 +188,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
186
188
  const node = this.requireNode(meshName);
187
189
  if (
188
190
  this.options.routeTransport !== undefined &&
189
- String(node.status().routingId) !== String(actor.nodeRid)
191
+ !routingIdsEqual(node.status().routingId, actor.nodeRid)
190
192
  ) {
191
193
  await this.options.routeTransport.sendToSpot(
192
194
  remoteActorRouteTarget(route),
@@ -203,7 +205,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
203
205
  );
204
206
  return { status: ZLinkSubmitStatus.Submitted };
205
207
  }
206
- return await this.submitActorSend(meshName, toBackendActorRef(actor), parts);
208
+ return await this.submitActorSend(meshName, toBackendActorRef(actor), parts, route);
207
209
  } catch (error) {
208
210
  if (isStaleActorError(error)) {
209
211
  this.invalidateActorRoute(actorId);
@@ -414,13 +416,15 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
414
416
  private async submitActorSend(
415
417
  meshName: string,
416
418
  actor: ZLinkBackendActorRef,
417
- parts: readonly Message[]
419
+ parts: readonly Message[],
420
+ route: ZLinkResolvedActorRoute
418
421
  ): Promise<ZLinkSubmitResult> {
419
422
  const node = this.requireNode(meshName);
420
423
  try {
421
424
  return classifySubmitResult(
422
425
  await node.sendToActor(actor, toMessageLikeParts(parts), {
423
- flags: ZLINK_BACKEND_SEND_NONE
426
+ flags: ZLINK_BACKEND_SEND_NONE,
427
+ routeFence: nativeActorRouteFence(route, actor)
424
428
  }),
425
429
  'Actor send'
426
430
  );
@@ -437,16 +441,15 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
437
441
  actor: ZLinkBackendActorRef,
438
442
  parts: readonly Message[],
439
443
  timeoutMs: number | undefined,
440
- signal?: AbortSignal,
441
- route?: ZLinkResolvedActorRoute,
442
- messageFollowContext?: ZLinkActorMessageFollowContext,
444
+ signal: AbortSignal | undefined,
445
+ route: ZLinkResolvedActorRoute,
446
+ messageFollowContext: ZLinkActorMessageFollowContext,
443
447
  onAdmitted?: () => void
444
448
  ): Promise<TReply> {
445
449
  const node = this.requireNode(meshName);
446
450
  if (
447
451
  this.options.routeTransport !== undefined &&
448
- String(node.status().routingId) !== String(actor.nodeRid) &&
449
- route !== undefined
452
+ !routingIdsEqual(node.status().routingId, actor.nodeRid)
450
453
  ) {
451
454
  const relay = encodeRemoteActorPacketRelayPayload({
452
455
  actorId: actor.actorId,
@@ -498,6 +501,7 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
498
501
  () =>
499
502
  node.requestToActor(actor, toMessageLikeParts(parts), {
500
503
  flags: ZLINK_BACKEND_SEND_NONE,
504
+ routeFence: nativeActorRouteFence(route, actor),
501
505
  timeoutMs,
502
506
  onAdmitted
503
507
  }),
@@ -527,6 +531,15 @@ export class DefaultZLinkActorClient implements ZLinkActorClient {
527
531
  }
528
532
  }
529
533
 
534
+ function nativeActorRouteFence(route: ZLinkResolvedActorRoute, actor: ZLinkBackendActorRef) {
535
+ return {
536
+ actor,
537
+ targetNodeGeneration: route.ownerNodeGeneration,
538
+ authorityOwnerGeneration: route.authorityOwnerGeneration,
539
+ ownerLeaseGeneration: route.ownerLeaseGeneration
540
+ };
541
+ }
542
+
530
543
  function remoteActorRouteTarget(route: ZLinkResolvedActorRoute) {
531
544
  if (route.enclosingSpotRoute !== undefined) {
532
545
  return route.enclosingSpotRoute;
@@ -597,45 +610,6 @@ function requireActorId(actorId: string): void {
597
610
  }
598
611
  }
599
612
 
600
- export async function forwardEncodedActorPacket(
601
- node: ZLinkBackendMeshNode,
602
- completions: ZLinkMeshCompletionTable,
603
- actor: ActorRef,
604
- header: Buffer,
605
- payload: Buffer,
606
- returnResponse: boolean,
607
- timeoutMs: number | undefined,
608
- serializers?: ReadonlyMap<string, ZLinkMessageSerializer>
609
- ): Promise<unknown> {
610
- const target = toBackendActorRef(actor);
611
- const parts = [header, payload];
612
- const packetName = decodeStreamHeader(header).name;
613
- if (!returnResponse) {
614
- if (
615
- (await node.sendToActor(target, parts, { flags: ZLINK_BACKEND_SEND_NONE })) !==
616
- SubmitResult.Ok
617
- ) {
618
- throw routeNotConnected('Actor handoff send submit was not accepted.');
619
- }
620
- return undefined;
621
- }
622
- const completion = await completions.submit(() =>
623
- node.requestToActor(target, parts, {
624
- flags: ZLINK_BACKEND_SEND_NONE,
625
- timeoutMs
626
- })
627
- );
628
- if (completion.terminalResult !== RequestResult.Ok) {
629
- closeMeshCompletion(completion);
630
- throw mapRequestResult(
631
- completion.terminalResult,
632
- completion.failureErrno,
633
- 'Actor handoff request'
634
- );
635
- }
636
- return decodeActorReply(completion.parts, serializers, packetName);
637
- }
638
-
639
613
  function toBackendActorRef(actor: ActorRef): ZLinkBackendActorRef {
640
614
  return {
641
615
  nodeRid: actor.nodeRid,
@@ -756,7 +730,7 @@ class DefaultZLinkActorRequestCall implements ZLinkActorRequestCall {
756
730
  this.rejectSelfActorRequest();
757
731
  const turn = requireZLinkYieldTurn(this.turn);
758
732
  const pending = this.execute<TReply>('yield', signal);
759
- return turn.yieldPromise(pending);
733
+ return turn.yieldFrameworkPromise(pending);
760
734
  }
761
735
 
762
736
  private execute<TReply>(
@@ -804,19 +778,21 @@ function decodeActorReply<TReply>(
804
778
  const header = decodeStreamHeader(frame.header);
805
779
  const payload = RuntimeMessage.from(frame.payload) as Message;
806
780
  try {
807
- return decodeActorReplyPayload<TReply>(header.kind, payload, serializers, packetName);
781
+ return decodeActorReplyPayload<TReply>(
782
+ header.kind,
783
+ header.codec,
784
+ payload,
785
+ serializers,
786
+ packetName
787
+ );
808
788
  } finally {
809
789
  payload.close();
810
790
  }
811
791
  }
812
792
  }
813
- if (reply.length >= 2) {
814
- const header = decodeStreamHeader(reply[0].data());
815
- return decodeActorReplyPayload<TReply>(header.kind, reply[1], serializers, packetName);
816
- }
817
793
  throw createInternalFrameworkException(
818
794
  ZLinkFrameworkInternalErrorKind.RequestProtocolError,
819
- 'Actor request reply is empty.'
795
+ 'Actor request reply must contain one valid STREAM frame.'
820
796
  );
821
797
  } finally {
822
798
  closeMessages(reply);
@@ -829,24 +805,39 @@ function closeMessages(parts: readonly Message[]): void {
829
805
 
830
806
  function decodeActorReplyPayload<TReply>(
831
807
  kind: ZLinkStreamMessageKind,
808
+ codec: ZLinkStreamCodec,
832
809
  payload: Message,
833
810
  serializers?: ReadonlyMap<string, ZLinkMessageSerializer>,
834
811
  packetName?: string
835
812
  ): TReply {
836
813
  if (kind === ZLinkStreamMessageKind.Error) {
837
- const error = decodeFrameworkPayloadMessage<{
838
- readonly message?: string;
839
- readonly kind?: number;
840
- }>(payload, serializers);
841
- const wireKind = error.kind;
842
- const publicKind =
843
- typeof wireKind === 'number' &&
844
- Number.isInteger(wireKind) &&
845
- wireKind >= ZLinkFrameworkErrorKind.NotFound &&
846
- wireKind <= ZLinkFrameworkErrorKind.InternalFailure
847
- ? (wireKind as ZLinkFrameworkErrorKind)
848
- : ZLinkFrameworkErrorKind.InternalFailure;
849
- throw new ZLinkFrameworkException(publicKind, error.message ?? 'Actor request failed.');
814
+ if (codec !== ZLinkStreamCodec.Json || !isUtf8(payload.data())) {
815
+ throw createInternalFrameworkException(
816
+ ZLinkFrameworkInternalErrorKind.RequestProtocolError,
817
+ 'Actor Error reply requires UTF-8 JSON.'
818
+ );
819
+ }
820
+ const error = decodeFrameworkPayloadMessage<unknown>(payload);
821
+ if (
822
+ typeof error !== 'object' ||
823
+ error === null ||
824
+ typeof (error as { code?: unknown }).code !== 'string' ||
825
+ typeof (error as { message?: unknown }).message !== 'string'
826
+ ) {
827
+ throw createInternalFrameworkException(
828
+ ZLinkFrameworkInternalErrorKind.RequestProtocolError,
829
+ 'Actor Error reply requires code and message strings.'
830
+ );
831
+ }
832
+ const wire = error as { code: string; message: string };
833
+ const kind = channelErrorKindFromCode(wire.code);
834
+ if (kind === undefined) {
835
+ throw createInternalFrameworkException(
836
+ ZLinkFrameworkInternalErrorKind.RequestProtocolError,
837
+ `Actor Error reply uses an unknown error code '${wire.code}'.`
838
+ );
839
+ }
840
+ throw new ZLinkFrameworkException(kind, wire.message);
850
841
  }
851
842
  return decodeFrameworkPayloadMessage<TReply>(
852
843
  payload,
@@ -1,3 +1,4 @@
1
+ import { routingIdsEqual } from '../routing-id';
1
2
  import {
2
3
  type RoutingId,
3
4
  type SpotId,
@@ -90,6 +91,11 @@ export class DefaultZLinkActorContext implements ZLinkActorContext {
90
91
  return this.state.actorId;
91
92
  }
92
93
 
94
+ /** Actor-turn view of the single current Session binding (§7). */
95
+ get currentSessionBinding() {
96
+ return this.state.boundSession;
97
+ }
98
+
93
99
  get objectGeneration(): bigint {
94
100
  return this.state.nativeActorRef?.generation ?? 1n;
95
101
  }
@@ -282,11 +288,24 @@ class DefaultZLinkActorJoinSpotCall implements ZLinkActorJoinSpotCall {
282
288
  deadline.close();
283
289
  requestMessage.close();
284
290
  }
291
+ if (result.sourceCleanup !== undefined) {
292
+ // Infrastructure cleanup has its own terminal, outside the public Failed conversion.
293
+ try {
294
+ const cleanup = result.sourceCleanup();
295
+ await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
296
+ } catch (error) {
297
+ traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchErrorAction.Drop);
298
+ throw error;
299
+ } finally {
300
+ this.state.endDeferredJoin();
301
+ }
302
+ return;
303
+ }
285
304
  if (
286
305
  !result.accepted ||
287
306
  sourceNodeRid === undefined ||
288
307
  result.actor === undefined ||
289
- String(sourceNodeRid) === String(result.actor.nodeRid)
308
+ routingIdsEqual(sourceNodeRid, result.actor.nodeRid)
290
309
  ) {
291
310
  await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
292
311
  } else {
@@ -417,11 +436,24 @@ class DefaultZLinkActorJoinEntrySpotCall implements ZLinkActorJoinEntrySpotCall
417
436
  deadline.close();
418
437
  requestMessage.close();
419
438
  }
439
+ if (result.sourceCleanup !== undefined) {
440
+ // Infrastructure cleanup has its own terminal, outside the public Failed conversion.
441
+ try {
442
+ const cleanup = result.sourceCleanup();
443
+ await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
444
+ } catch (error) {
445
+ traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchErrorAction.Drop);
446
+ throw error;
447
+ } finally {
448
+ this.state.endDeferredJoin();
449
+ }
450
+ return;
451
+ }
420
452
  if (
421
453
  !result.accepted ||
422
454
  sourceNodeRid === undefined ||
423
455
  result.actor === undefined ||
424
- String(sourceNodeRid) === String(result.actor.nodeRid)
456
+ routingIdsEqual(sourceNodeRid, result.actor.nodeRid)
425
457
  ) {
426
458
  await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
427
459
  } else {
@@ -580,7 +612,6 @@ async function notifyJoinFailure(
580
612
  error: unknown,
581
613
  coordinator?: ZLinkActorJoinCoordinator
582
614
  ): Promise<void> {
583
- console.error(`actor join failure actor=${actor.context.actorId}`, error);
584
615
  const frameworkError =
585
616
  error instanceof ZLinkFrameworkException
586
617
  ? error
@@ -590,6 +621,20 @@ async function notifyJoinFailure(
590
621
  false,
591
622
  error
592
623
  );
624
+ traceJoinError(actor, error, coordinator, ZLinkDispatchErrorAction.ReplyError);
625
+ await actor.onJoinCompleted?.({
626
+ status: 'failed',
627
+ operationId,
628
+ kind: frameworkError.kind
629
+ });
630
+ }
631
+
632
+ function traceJoinError(
633
+ actor: ZLinkActor,
634
+ error: unknown,
635
+ coordinator: ZLinkActorJoinCoordinator | undefined,
636
+ errorAction: ZLinkDispatchErrorAction
637
+ ): void {
593
638
  // The completion carries only an error kind, so trace the cause on the
594
639
  // message flow under the same flow id as the Join that produced it.
595
640
  const tracePoint = coordinator?.messageFlow?.()?.begin(ZLinkMessageFlowOutcome.Error);
@@ -601,13 +646,8 @@ async function notifyJoinFailure(
601
646
  packetName: 'JoinSpot',
602
647
  actorId: actor.context.actorId,
603
648
  errorReason: ZLinkDispatchErrorReason.HandlerException,
604
- errorAction: ZLinkDispatchErrorAction.ReplyError,
649
+ errorAction,
605
650
  errorType: errorDetails?.errorType,
606
651
  errorMessage: errorDetails?.errorMessage
607
652
  });
608
- await actor.onJoinCompleted?.({
609
- status: 'failed',
610
- operationId,
611
- kind: frameworkError.kind
612
- });
613
653
  }