@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
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkNativeFallbackBoundSession = void 0;
4
+ const Registration_1 = require("../../contracts/Configuration/Registration");
4
5
  const framework_errors_internal_1 = require("../framework-errors-internal");
5
6
  const contracts_1 = require("../../contracts");
6
7
  const submission_result_1 = require("../messaging/submission-result");
7
8
  const actors_1 = require("../actors");
8
9
  const actor_packet_relay_wire_1 = require("../actors/actor-packet-relay-wire");
9
10
  const bound_session_wire_1 = require("../actors/bound-session-wire");
10
- const actor_routed_json_request_1 = require("../actors/actor-routed-json-request");
11
- const protocol_1 = require("./protocol");
12
11
  const packet_name_1 = require("../messaging/packet-name");
13
12
  const flow_context_1 = require("../diagnostics/flow-context");
14
13
  class ZLinkNativeFallbackBoundSession {
@@ -20,40 +19,12 @@ class ZLinkNativeFallbackBoundSession {
20
19
  return new ZLinkNativeFallbackBoundSessionSendCall(this.options, message);
21
20
  }
22
21
  async disconnect(signal) {
23
- const remoteTarget = this.options.remoteBoundSessionTargetProvider();
24
- if (remoteTarget !== undefined) {
25
- const spotKind = 'spotKind' in remoteTarget
26
- ? remoteTarget.spotKind
27
- : undefined;
28
- const payload = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
29
- actorId: this.options.actorId,
30
- routerChannelId: remoteTarget.routerChannelId,
31
- header: (0, protocol_1.encodeStreamHeader)(disconnectedFrameHeader()),
32
- payload: Buffer.alloc(0)
33
- });
34
- const target = {
35
- routerChannelId: remoteTarget.routerChannelId,
36
- targetNodeRid: remoteTarget.targetNodeRid,
37
- spotId: remoteTarget.spotId,
38
- spotKind: spotKind ?? contracts_1.ZLinkSpotKind.Entry
39
- };
40
- if (await (0, actor_routed_json_request_1.tryRequestRoutedJson)(this.options.routedTransport, target, payload, {
41
- timeoutMs: this.options.requestTimeoutMs,
42
- signal
43
- })) {
44
- return;
45
- }
46
- await this.options.routedTransport.sendToSpot(target, payload, {
47
- packetName: actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
48
- });
49
- return;
50
- }
51
22
  const actorRef = this.options.actorRefProvider();
52
23
  const node = this.options.nativeActorNodeProvider();
53
24
  if (actorRef !== undefined &&
54
25
  node !== undefined &&
55
26
  currentBindingGeneration(actorRef) !== undefined) {
56
- await this.options.runtime.disconnectNativeBoundSession(node, actorRef, signal);
27
+ await this.options.runtime.disconnectNativeBoundSession(node, actorRef, this.options.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS, signal);
57
28
  return;
58
29
  }
59
30
  await this.options.runtime.disconnectBoundSession(this.options.actorId, signal);
@@ -96,30 +67,11 @@ class ZLinkNativeFallbackBoundSessionSendCall {
96
67
  async executeScoped(packetName) {
97
68
  const localActor = this.options.localActorProvider?.() === true;
98
69
  const remoteTarget = this.options.remoteBoundSessionTargetProvider();
99
- let nativeAttempted = false;
100
- if (localActor) {
101
- const result = await this.options.runtime.submitLocalBoundSession(this.options.actorId, this.message, packetName, this.selectedMetadata);
102
- if (result.status !== submission_result_1.ZLinkSubmitStatus.TargetNotFound) {
103
- this.traceSubmitted(result, packetName);
104
- return result;
105
- }
106
- // A local Actor with a concrete native owner has a direct binding path.
107
- // Use that path before a routed transfer target. The transfer target is
108
- // retained for actors whose current owner is remote or whose native
109
- // binding is no longer available.
110
- const actorRef = this.options.actorRefProvider();
111
- const node = this.options.nativeActorNodeProvider();
112
- const bindingGeneration = currentBindingGeneration(actorRef);
113
- if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
114
- nativeAttempted = true;
115
- const result = await this.options.runtime.sendNativeBoundSession(node, actorRef, this.message, packetName, this.selectedMetadata);
116
- if (result.status !== submission_result_1.ZLinkSubmitStatus.TargetNotFound) {
117
- this.traceSubmitted(result, packetName);
118
- return result;
119
- }
120
- if (remoteTarget === undefined) {
121
- return result;
122
- }
70
+ if (localActor || remoteTarget === undefined) {
71
+ const localResult = await this.options.runtime.submitLocalBoundSession(this.options.actorId, this.message, packetName, this.selectedMetadata);
72
+ if (localResult.status !== submission_result_1.ZLinkSubmitStatus.TargetNotFound) {
73
+ this.traceSubmitted(localResult, packetName);
74
+ return localResult;
123
75
  }
124
76
  }
125
77
  if (remoteTarget !== undefined) {
@@ -152,18 +104,10 @@ class ZLinkNativeFallbackBoundSessionSendCall {
152
104
  this.traceSubmitted(result, packetName);
153
105
  return result;
154
106
  }
155
- const localResult = await this.options.runtime.submitLocalBoundSession(this.options.actorId, this.message, packetName, this.selectedMetadata);
156
- if (localResult.status !== submission_result_1.ZLinkSubmitStatus.TargetNotFound) {
157
- this.traceSubmitted(localResult, packetName);
158
- return localResult;
159
- }
160
107
  const actorRef = this.options.actorRefProvider();
161
108
  const node = this.options.nativeActorNodeProvider();
162
109
  const bindingGeneration = currentBindingGeneration(actorRef);
163
- if (!nativeAttempted &&
164
- actorRef !== undefined &&
165
- node !== undefined &&
166
- bindingGeneration !== undefined) {
110
+ if (actorRef !== undefined && node !== undefined && bindingGeneration !== undefined) {
167
111
  const result = await this.options.runtime.sendNativeBoundSession(node, actorRef, this.message, packetName, this.selectedMetadata);
168
112
  this.traceSubmitted(result, packetName);
169
113
  return result;
@@ -189,12 +133,3 @@ function currentBindingGeneration(actorRef) {
189
133
  function positiveBindingGeneration(generation) {
190
134
  return generation !== undefined && generation > 0n ? generation : undefined;
191
135
  }
192
- function disconnectedFrameHeader() {
193
- return {
194
- kind: protocol_1.ZLinkStreamMessageKind.Send,
195
- codec: protocol_1.ZLinkStreamCodec.Raw,
196
- flags: protocol_1.ZLinkStreamHeaderFlags.None,
197
- name: actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
198
- metadata: new Map()
199
- };
200
- }
@@ -3,7 +3,7 @@ import type { ZLinkRuntimeMetrics } from '../diagnostics';
3
3
  import { ZLinkActorSessionBindingRegistry, type ZLinkActorSessionAuthorityFence } from './actor-session-binding-registry';
4
4
  import { ZLinkActorSessionLifecycleCoordinator } from './actor-session-lifecycle-coordinator';
5
5
  import { DefaultZLinkSessionActor, DefaultZLinkSessionContext } from './session-context';
6
- import type { ZLinkSessionBindingConfirmationOptions } from './stream-binding-runtime-ports';
6
+ import type { ZLinkActorRouteCommitOptions, ZLinkSessionBindingConfirmationOptions } from './stream-binding-runtime-ports';
7
7
  export interface ZLinkSessionActorCoordinatorOptions {
8
8
  readonly actorBindTimeoutMs?: number;
9
9
  readonly actorRefResolver?: (actor: ZLinkActor) => ActorRef;
@@ -28,17 +28,11 @@ export declare class ZLinkSessionActorCoordinator {
28
28
  constructor(routes: ZLinkActorSessionBindingRegistry<DefaultZLinkSessionContext, DefaultZLinkSessionActor>, sessionActorRuntime: ConstructorParameters<typeof DefaultZLinkSessionActor>[0], options?: ZLinkSessionActorCoordinatorOptions, lifecycle?: ZLinkActorSessionLifecycleCoordinator);
29
29
  bind(context: DefaultZLinkSessionContext, actorOrRef: ZLinkActor | ActorRef, signal?: AbortSignal): Promise<DefaultZLinkSessionActor>;
30
30
  private replaceBinding;
31
- private replaceBindingCore;
32
31
  private resolveAuthorityFence;
33
32
  bindOrGet(context: DefaultZLinkSessionContext, actorRef: ActorRef, signal?: AbortSignal): Promise<DefaultZLinkSessionActor>;
34
33
  rebindActor(actorRef: ActorRef, signal?: AbortSignal): Promise<void>;
35
34
  refreshActor(actorRef: ActorRef, signal?: AbortSignal): Promise<void>;
36
- commitActorRoute(actorRef: ActorRef, signal?: AbortSignal, options?: {
37
- readonly confirmRemoteSessionBinding?: boolean | 'send';
38
- readonly releaseSeal?: {
39
- readonly sealId: string;
40
- };
41
- }): Promise<void>;
35
+ commitActorRoute(actorRef: ActorRef, signal?: AbortSignal, options?: ZLinkActorRouteCommitOptions): Promise<void>;
42
36
  retireRemoteBinding(actorRef: ActorRef, sessionRid: ActorRef['nodeRid'], bindingGeneration: bigint, signal?: AbortSignal): Promise<boolean>;
43
37
  authorityFence(actorId: string): Promise<{
44
38
  readonly authorityOwnerGeneration: bigint;
@@ -26,10 +26,7 @@ class ZLinkSessionActorCoordinator {
26
26
  : this.resolveActorRef(actorOrRef);
27
27
  return await this.lifecycle.run(actorRef.actorId, async () => this.replaceBinding(context, actorRef, signal));
28
28
  }
29
- async replaceBinding(context, actorRef, signal, confirmRemoteSessionBinding = true, releaseSeal) {
30
- return await this.replaceBindingCore(context, actorRef, signal, confirmRemoteSessionBinding, releaseSeal);
31
- }
32
- async replaceBindingCore(context, actorRef, signal, confirmRemoteSessionBinding = true, releaseSeal) {
29
+ async replaceBinding(context, actorRef, signal) {
33
30
  (0, abort_1.throwIfAborted)(signal);
34
31
  if (actorRef.actorId.trim().length === 0) {
35
32
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound, 'Actor id must not be empty.');
@@ -60,22 +57,15 @@ class ZLinkSessionActorCoordinator {
60
57
  : undefined, previous?.actor.ref);
61
58
  const sessionActor = reuseActor ??
62
59
  new session_context_1.DefaultZLinkSessionActor(this.sessionActorRuntime, boundActorRef, bindingToken);
63
- const sessionIdentity = String(this.actorBindingRoutingId(context));
60
+ const sessionIdentity = this.actorBindingRoutingId(context);
64
61
  if (previous === undefined) {
65
- if (releaseSeal !== undefined) {
66
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorSessionNotBound, `Actor '${actorRef.actorId}' route switch has no Session binding to release.`, true);
67
- }
68
62
  await this.routes.bind(context, sessionActor, bindingToken, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
69
63
  }
70
- else if (releaseSeal !== undefined) {
71
- await this.routes.replaceAndReleaseSeal(previous, context, sessionActor, bindingToken, releaseSeal.sealId, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
72
- }
73
64
  else {
74
65
  await this.routes.replace(previous, context, sessionActor, bindingToken, authorityFence, sessionIdentity, () => sessionActor.updateRef(boundActorRef));
75
66
  }
76
- if (confirmRemoteSessionBinding !== false &&
77
- this.options.confirmRemoteActorSessionBinding !== undefined) {
78
- const waitForAcknowledgement = previous === undefined && confirmRemoteSessionBinding !== 'send';
67
+ if (this.options.confirmRemoteActorSessionBinding !== undefined) {
68
+ const waitForAcknowledgement = previous === undefined;
79
69
  const confirmation = this.options.confirmRemoteActorSessionBinding(boundActorRef, this.actorBindingRoutingId(context), undefined, {
80
70
  waitForAcknowledgement,
81
71
  binding: context.stream instanceof managed_stream_1.ZLinkManagedStream
@@ -204,25 +194,18 @@ class ZLinkSessionActorCoordinator {
204
194
  if (route === undefined)
205
195
  return;
206
196
  requireSameIncarnation(route.actor.ref, normalizedActorRef);
207
- if ((0, routing_id_1.routingIdsEqual)(route.actor.ref.nodeRid, normalizedActorRef.nodeRid)) {
208
- const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
209
- if (options.releaseSeal !== undefined &&
210
- !(await this.routes.validateSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))) {
211
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${normalizedActorRef.actorId}' route switch did not match its relocation seal.`, true);
212
- }
213
- // A location refresh never changes the route's Session binding
214
- // generation; the native bind owns it.
215
- route.actor.updateRef(withBindingGeneration(normalizedActorRef, bindingGenerationOf(route.actor.ref), undefined));
216
- if (authorityFence !== undefined) {
217
- await this.routes.updateAuthorityFence(normalizedActorRef.actorId, authorityFence);
218
- }
219
- if (options.releaseSeal !== undefined &&
220
- !(await this.routes.abortSeal(normalizedActorRef.actorId, options.releaseSeal.sealId))) {
221
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${normalizedActorRef.actorId}' route switch lost its relocation seal.`, true);
222
- }
223
- return;
197
+ const authorityFence = await this.resolveAuthorityFence(normalizedActorRef, signal);
198
+ // Relocation changes only the Actor route of this physical binding.
199
+ // Publish the ref and authority together in the binding registry's turn;
200
+ // a native bind would issue a different binding generation.
201
+ const boundActorRef = withBindingGeneration(normalizedActorRef, bindingGenerationOf(route.actor.ref), undefined);
202
+ const commitActor = () => route.actor.updateRef(boundActorRef);
203
+ if (options.releaseSeal !== undefined) {
204
+ await this.routes.replaceAndReleaseSeal(route, route.context, route.actor, route.bindingToken, options.releaseSeal.sealId, authorityFence, route.sessionIdentity, commitActor);
205
+ }
206
+ else {
207
+ await this.routes.replace(route, route.context, route.actor, route.bindingToken, authorityFence, route.sessionIdentity, commitActor);
224
208
  }
225
- await this.replaceBinding(route.context, normalizedActorRef, signal, options.confirmRemoteSessionBinding, options.releaseSeal);
226
209
  });
227
210
  }
228
211
  async retireRemoteBinding(actorRef, sessionRid, bindingGeneration, signal) {
@@ -26,15 +26,8 @@ export interface ZLinkStreamActorLifecyclePort {
26
26
  }
27
27
  export interface ZLinkActorRouteCommitOptions {
28
28
  /**
29
- * Relocation already carries the binding identity to the target actor. The
30
- * follow-up confirmation can use a one-way route submission because a
31
- * request/ACK would create a nested route request while the Session
32
- * ownership command is being dispatched.
33
- */
34
- readonly confirmRemoteSessionBinding?: boolean | 'send';
35
- /**
36
- * Command 44 keeps ingress sealed while the native route is prepared, then
37
- * publishes the new route and releases this exact seal in one owner turn.
29
+ * Command 44 publishes the Actor route of the existing binding and releases
30
+ * this exact seal in one owner turn.
38
31
  */
39
32
  readonly releaseSeal?: {
40
33
  readonly sealId: string;
@@ -68,7 +61,7 @@ export interface ZLinkRemoteBoundSessionPort extends ZLinkStreamActorLifecyclePo
68
61
  sendNativeBoundSessionError(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, packetName: string, requestSeq: bigint, error: unknown, metadata: ReadonlyMap<string, string>, signal?: AbortSignal): Promise<void>;
69
62
  }
70
63
  export interface ZLinkNativeFallbackBoundSessionPort {
71
- disconnectNativeBoundSession(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, signal?: AbortSignal): Promise<void>;
64
+ disconnectNativeBoundSession(node: ZLinkBackendActorSessionNode, actorRef: ActorRef, timeoutMs: number, signal?: AbortSignal): Promise<void>;
72
65
  disconnectBoundSession(actorId: string, signal?: AbortSignal): Promise<void>;
73
66
  sendLocalBoundSession(actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>): Promise<boolean>;
74
67
  submitLocalBoundSession(actorId: string, message: unknown, packetName: string | undefined, metadata: ReadonlyMap<string, string>, signal?: AbortSignal): Promise<ZLinkSubmitResult>;
@@ -134,7 +134,7 @@ export declare class ZLinkStreamSessionNodeRuntime {
134
134
  private readonly receiveAbortController;
135
135
  private receiveLoop;
136
136
  private monitorLoop;
137
- private readonly receiveWake;
137
+ private receiveWake;
138
138
  private receiveWorkSinceYield;
139
139
  constructor(options: ZLinkStreamSessionNodeRuntimeOptions & ZLinkStreamLivenessOptions);
140
140
  start(): void;
@@ -33,27 +33,6 @@ const systemLivenessClock = {
33
33
  setTimer: (callback, delayMs) => setTimeout(callback, Math.min(delayMs, MAX_TIMER_DELAY_MS)),
34
34
  clearTimer: (timer) => clearTimeout(timer)
35
35
  };
36
- class ZLinkStreamReceiveWake {
37
- pending;
38
- resolvePending;
39
- finish = () => {
40
- const resolve = this.resolvePending;
41
- this.pending = undefined;
42
- this.resolvePending = undefined;
43
- resolve?.();
44
- };
45
- wait() {
46
- if (this.pending !== undefined)
47
- return this.pending;
48
- this.pending = new Promise((resolve) => {
49
- this.resolvePending = resolve;
50
- });
51
- return this.pending;
52
- }
53
- wake() {
54
- this.finish();
55
- }
56
- }
57
36
  class ZLinkStreamSessionRuntime {
58
37
  options;
59
38
  removeSession;
@@ -87,7 +66,7 @@ class ZLinkStreamSessionRuntime {
87
66
  this.traceFrameWritten(kind, packetName, correlationId);
88
67
  });
89
68
  const sessionOrPromise = options.sessionFactory(this.context);
90
- this.sessionReady = isPromiseLike(sessionOrPromise)
69
+ this.sessionReady = (0, abort_1.isPromiseLike)(sessionOrPromise)
91
70
  ? sessionOrPromise.then((session) => this.completeSessionCreation(session), (error) => {
92
71
  this.context.completeConfiguration();
93
72
  throw error;
@@ -650,7 +629,7 @@ class ZLinkStreamSessionNodeRuntime {
650
629
  receiveAbortController = new AbortController();
651
630
  receiveLoop;
652
631
  monitorLoop;
653
- receiveWake = new ZLinkStreamReceiveWake();
632
+ receiveWake;
654
633
  receiveWorkSinceYield = 0;
655
634
  constructor(options) {
656
635
  this.options = options;
@@ -1113,13 +1092,20 @@ class ZLinkStreamSessionNodeRuntime {
1113
1092
  });
1114
1093
  }
1115
1094
  async waitReceiveLoopWake(signal) {
1116
- await Promise.race([
1117
- this.options.readablePoller.waitForReadable(signal),
1118
- this.receiveWake.wait()
1119
- ]);
1095
+ const wake = new AbortController();
1096
+ this.receiveWake = wake;
1097
+ try {
1098
+ // Readiness, internal wake and shutdown share one cancellable wait;
1099
+ // no losing Promise retains reactions across receive cycles.
1100
+ await this.options.readablePoller.waitForReadable(AbortSignal.any([signal, wake.signal]));
1101
+ }
1102
+ finally {
1103
+ wake.abort();
1104
+ this.receiveWake = undefined;
1105
+ }
1120
1106
  }
1121
1107
  wakeReceiveLoop() {
1122
- this.receiveWake.wake();
1108
+ this.receiveWake?.abort();
1123
1109
  }
1124
1110
  getOrCreateSession(routingId) {
1125
1111
  const sessionId = (0, managed_stream_1.streamSessionIdFromRoutingId)(routingId);
@@ -1153,9 +1139,6 @@ function streamMonitorHasEndpoint(event) {
1153
1139
  const endpoint = event;
1154
1140
  return endpoint.localAddr !== undefined || endpoint.remoteAddr !== undefined;
1155
1141
  }
1156
- function isPromiseLike(value) {
1157
- return typeof value.then === 'function';
1158
- }
1159
1142
  function normalizeStreamCloseReason(reason) {
1160
1143
  switch (reason) {
1161
1144
  case 'client_close':
@@ -409,7 +409,7 @@ class DefaultZLinkWorkerCall {
409
409
  yield(signal) {
410
410
  const turn = (0, execution_1.requireZLinkYieldTurn)(this.turn);
411
411
  const pending = this.begin(signal);
412
- return turn.yieldPromise(pending);
412
+ return turn.yieldFrameworkPromise(pending);
413
413
  }
414
414
  begin(signal) {
415
415
  if (this.terminatorSelected) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zlink-systems/framework",
3
- "version": "0.30.0",
3
+ "version": "0.30.2",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "dependencies": {
20
20
  "@opentelemetry/api": "^1.9.1",
21
21
  "@opentelemetry/api-logs": "^0.221.0",
22
- "@zlink-systems/stream-wire": "0.30.0",
23
- "@zlink-systems/zlink": "1.19.0"
22
+ "@zlink-systems/stream-wire": "0.30.2",
23
+ "@zlink-systems/zlink": "1.20.0"
24
24
  }
25
25
  }
@@ -1,4 +1,5 @@
1
1
  import type { ActorId } from '../Common';
2
+ import type { ZLinkRequest } from '../Handlers/Attributes';
2
3
 
3
4
  export interface ZLinkActorClient {
4
5
  sendToActor(actorId: ActorId, message: unknown): ZLinkActorSendCall;
@@ -13,6 +14,6 @@ export interface ZLinkActorSendCall {
13
14
  export interface ZLinkActorRequestCall {
14
15
  metadata(key: string, value: string): this;
15
16
  timeout(timeoutMs: number): this;
16
- submit<TReply>(signal?: AbortSignal): Promise<TReply>;
17
+ submit<TReply>(signal?: AbortSignal): ZLinkRequest<TReply>;
17
18
  yield<TReply>(signal?: AbortSignal): Promise<TReply>;
18
19
  }
@@ -1,4 +1,5 @@
1
1
  import type { ZLinkMessageMetadata } from '../Common';
2
+ import type { ZLinkRequest } from '../Handlers/Attributes';
2
3
 
3
4
  export interface ZLinkSendCall {
4
5
  metadata(key: string, value: string): this;
@@ -10,7 +11,7 @@ export interface ZLinkRequestCall {
10
11
  metadata(key: string, value: string): this;
11
12
  metadata(metadata: ZLinkMessageMetadata): this;
12
13
  timeout(timeoutMs: number): this;
13
- submit<TReply>(signal?: AbortSignal): Promise<TReply>;
14
+ submit<TReply>(signal?: AbortSignal): ZLinkRequest<TReply>;
14
15
  }
15
16
 
16
17
  export interface ZLinkChannelRequestCall extends ZLinkRequestCall {
@@ -1,18 +1,38 @@
1
- import { borrowEncodedPayload, storeEncodedPayload } from './encoded-payload-storage';
1
+ import {
2
+ adoptEncodedPayload,
3
+ borrowEncodedPayload,
4
+ storeEncodedPayload
5
+ } from './encoded-payload-storage';
2
6
 
3
7
  export class ZLinkEncodedPayload {
4
- private constructor(bytes: Uint8Array) {
5
- storeEncodedPayload(this, bytes);
8
+ private constructor(bytes: Uint8Array, owned: boolean) {
9
+ if (owned) {
10
+ adoptEncodedPayload(this, bytes);
11
+ } else {
12
+ storeEncodedPayload(this, bytes);
13
+ }
6
14
  }
7
15
 
16
+ /** Copies the supplied bytes. */
8
17
  static from(bytes: Uint8Array): ZLinkEncodedPayload {
9
- return new ZLinkEncodedPayload(bytes);
18
+ return new ZLinkEncodedPayload(bytes, false);
19
+ }
20
+
21
+ /** Retains the supplied bytes without copying. Do not modify them afterward; mutation changes the payload. */
22
+ static fromOwned(bytes: Uint8Array): ZLinkEncodedPayload {
23
+ return new ZLinkEncodedPayload(bytes, true);
10
24
  }
11
25
 
26
+ /** Returns a copy of the stored bytes. */
12
27
  data(): Uint8Array {
13
28
  return new Uint8Array(this.stored());
14
29
  }
15
30
 
31
+ /** Returns the stored bytes without copying. Do not modify this view or its backing buffer. */
32
+ view(): Readonly<Uint8Array> {
33
+ return this.stored();
34
+ }
35
+
16
36
  toBytes(): Uint8Array {
17
37
  return this.data();
18
38
  }
@@ -11,7 +11,7 @@ export interface ZLinkMessageMetadataPolicy {
11
11
  class ImmutableZLinkMessageMetadata implements ZLinkMessageMetadata {
12
12
  readonly values: ReadonlyMap<string, string>;
13
13
 
14
- constructor(values: ReadonlyMap<string, string> | Readonly<Record<string, string>> = new Map()) {
14
+ constructor(values: Iterable<readonly [string, string]> = []) {
15
15
  this.values = Object.freeze(new ImmutableMetadataMap(values));
16
16
  }
17
17
 
@@ -23,12 +23,8 @@ class ImmutableZLinkMessageMetadata implements ZLinkMessageMetadata {
23
23
  class ImmutableMetadataMap implements ReadonlyMap<string, string> {
24
24
  readonly #values: Map<string, string>;
25
25
 
26
- constructor(values: ReadonlyMap<string, string> | Readonly<Record<string, string>>) {
27
- this.#values = new Map(
28
- typeof (values as ReadonlyMap<string, string>)[Symbol.iterator] === 'function'
29
- ? (values as ReadonlyMap<string, string>)
30
- : Object.entries(values)
31
- );
26
+ constructor(values: Iterable<readonly [string, string]>) {
27
+ this.#values = new Map(values);
32
28
  }
33
29
 
34
30
  get size(): number {
@@ -74,5 +70,14 @@ export const ZLinkMessageMetadataEmpty: ZLinkMessageMetadata = Object.freeze(
74
70
  export function zlinkMessageMetadata(
75
71
  values: ReadonlyMap<string, string> | Readonly<Record<string, string>>
76
72
  ): ZLinkMessageMetadata {
77
- return Object.freeze(new ImmutableZLinkMessageMetadata(values));
73
+ const entries =
74
+ typeof (values as ReadonlyMap<string, string>)[Symbol.iterator] === 'function'
75
+ ? (values as ReadonlyMap<string, string>)
76
+ : Object.entries(values);
77
+ const size = Array.isArray(entries)
78
+ ? entries.length
79
+ : (entries as ReadonlyMap<string, string>).size;
80
+ return size === 0
81
+ ? ZLinkMessageMetadataEmpty
82
+ : Object.freeze(new ImmutableZLinkMessageMetadata(entries));
78
83
  }
@@ -6,9 +6,12 @@ export function storeEncodedPayload(owner: object, bytes: Uint8Array): Buffer {
6
6
  return stored;
7
7
  }
8
8
 
9
- export function adoptEncodedPayload(owner: object, bytes: Buffer): Buffer {
10
- encodedPayloadStorage.set(owner, bytes);
11
- return bytes;
9
+ export function adoptEncodedPayload(owner: object, bytes: Uint8Array): Buffer {
10
+ const stored = Buffer.isBuffer(bytes)
11
+ ? bytes
12
+ : Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
13
+ encodedPayloadStorage.set(owner, stored);
14
+ return stored;
12
15
  }
13
16
 
14
17
  export function borrowEncodedPayload(owner: object): Buffer | undefined {
@@ -141,7 +141,10 @@ export interface ZLinkMeshObjectRoleBuilder {
141
141
  export interface ZLinkMeshObjectClientBuilder {}
142
142
 
143
143
  export interface ZLinkMeshObjectServerBuilder {
144
- addEntrySpot<TEntrySpot extends ZLinkEntrySpot>(entrySpotType: Type<TEntrySpot>): this;
144
+ addEntrySpot<TEntrySpot extends ZLinkEntrySpot>(
145
+ entrySpotType: Type<TEntrySpot>,
146
+ actorType: string
147
+ ): this;
145
148
  addSpotFactory<TSpot extends ZLinkSpot>(
146
149
  spotType: string,
147
150
  implementation: Type<TSpot>,
@@ -68,13 +68,18 @@ export function validateSessionReplacementCallbackTimeout(timeoutMs: number): nu
68
68
  }
69
69
 
70
70
  export function registerEntrySpot(
71
- options: { entrySpotType?: Type<ZLinkEntrySpot> },
72
- entrySpotType: Type<ZLinkEntrySpot>
71
+ options: { entrySpotType?: Type<ZLinkEntrySpot>; entrySpotActorType?: string },
72
+ entrySpotType: Type<ZLinkEntrySpot>,
73
+ actorType: string
73
74
  ): void {
74
75
  if (options.entrySpotType !== undefined) {
75
76
  throw new ZLinkConfigurationException('Duplicate Entry Spot registration on SpotNode.');
76
77
  }
78
+ if (typeof actorType !== 'string' || actorType.length === 0) {
79
+ throw new ZLinkConfigurationException('Entry Spot Actor type must be a non-empty string.');
80
+ }
77
81
  options.entrySpotType = entrySpotType;
82
+ options.entrySpotActorType = actorType;
78
83
  }
79
84
 
80
85
  export function registerSpotFactory(
@@ -1234,8 +1234,11 @@ class DefaultMeshObjectServerBuilder implements ZLinkMeshObjectServerBuilder {
1234
1234
  private readonly node: MutableSpotNodeOptions
1235
1235
  ) {}
1236
1236
 
1237
- addEntrySpot<TEntrySpot extends ZLinkEntrySpot>(entrySpotType: Type<TEntrySpot>): this {
1238
- registerEntrySpot(this.node, entrySpotType);
1237
+ addEntrySpot<TEntrySpot extends ZLinkEntrySpot>(
1238
+ entrySpotType: Type<TEntrySpot>,
1239
+ actorType: string
1240
+ ): this {
1241
+ registerEntrySpot(this.node, entrySpotType, actorType);
1239
1242
  return this;
1240
1243
  }
1241
1244
 
@@ -1646,6 +1649,7 @@ interface MutableSpotNodeOptions {
1646
1649
  router?: MutableSpotRouterCapabilityOptions;
1647
1650
  pubSub?: MutableSpotPubSubCapabilityOptions;
1648
1651
  entrySpotType?: Type<ZLinkEntrySpot>;
1652
+ entrySpotActorType?: string;
1649
1653
  spotFactories?: Type<ZLinkSpot>[];
1650
1654
  spotFactoryRegistrations?: Record<
1651
1655
  string,
@@ -268,6 +268,7 @@ export interface ZLinkSpotNodeOptions {
268
268
  readonly router?: ZLinkSpotRouterCapabilityOptions;
269
269
  readonly pubSub?: ZLinkSpotPubSubCapabilityOptions;
270
270
  readonly entrySpotType?: Type<ZLinkEntrySpot>;
271
+ readonly entrySpotActorType?: string;
271
272
  readonly spotFactories?: readonly Type<ZLinkSpot>[];
272
273
  readonly spotFactoryRegistrations?: Readonly<
273
274
  Record<
@@ -85,7 +85,7 @@ export interface ZLinkRuntimeMessageFlowEvent {
85
85
  readonly commandId?: number;
86
86
  readonly messageSize?: number;
87
87
  readonly durationSeconds?: number;
88
- readonly errorReason?: ZLinkDispatchErrorReason;
88
+ readonly errorReason?: ZLinkDispatchErrorReason | 'activation_timeout' | 'activation_rejected';
89
89
  readonly errorAction?: ZLinkDispatchErrorAction;
90
90
  readonly errorType?: string;
91
91
  readonly errorMessage?: string;
@@ -195,6 +195,7 @@ export type ZLinkDispatchErrorReason =
195
195
  | 'unexpected_reply'
196
196
  | 'backpressure'
197
197
  | 'target_closed'
198
+ | 'location_unavailable'
198
199
  | 'stale_target'
199
200
  | 'shutdown';
200
201
 
@@ -4,23 +4,25 @@ import {
4
4
  type ZLinkPacketJsonContract
5
5
  } from './JsonContract';
6
6
 
7
- export const ZLINK_DECORATOR_METADATA = Symbol.for('@zlink-systems/framework:decorator');
8
-
9
- export interface ZLinkDecoratorMetadata {
10
- readonly kind: string;
11
- readonly packetName?: string;
12
- readonly groupName?: string;
13
- readonly methodName?: string;
14
- readonly meshName?: string;
15
- readonly channelName?: string;
16
- readonly topic?: string;
17
- readonly jsonContract?: ZLinkPacketJsonContract;
18
- }
7
+ import {
8
+ ZLINK_DECORATOR_METADATA,
9
+ readZLinkDecoratorMetadata,
10
+ type ZLinkDecoratorMetadata
11
+ } from '@zlink-systems/stream-wire/internal/json';
12
+ export {
13
+ ZLINK_DECORATOR_METADATA,
14
+ readZLinkDecoratorMetadata
15
+ } from '@zlink-systems/stream-wire/internal/json';
16
+ export type { ZLinkDecoratorMetadata } from '@zlink-systems/stream-wire/internal/json';
19
17
 
20
18
  export function ZLinkHandlerGroup(groupName: string): ClassDecorator {
21
19
  return classDecorator({ kind: 'handlerGroup', groupName });
22
20
  }
23
21
 
22
+ export interface ZLinkRequest<TReply> extends Promise<TReply> {
23
+ readonly admitted: Promise<void>;
24
+ }
25
+
24
26
  export function ZLinkRequest(packetName?: string): MethodDecorator {
25
27
  return methodDecorator({ kind: 'request', packetName });
26
28
  }
@@ -106,12 +108,3 @@ function appendMetadata(target: object, metadata: ZLinkDecoratorMetadata): void
106
108
  writable: false
107
109
  });
108
110
  }
109
-
110
- export function readZLinkDecoratorMetadata(target: object): readonly ZLinkDecoratorMetadata[] {
111
- if (!Object.prototype.hasOwnProperty.call(target, ZLINK_DECORATOR_METADATA)) {
112
- return [];
113
- }
114
- return (target as Record<symbol, unknown>)[
115
- ZLINK_DECORATOR_METADATA
116
- ] as readonly ZLinkDecoratorMetadata[];
117
- }