@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,5 +1,6 @@
1
1
  import type { Type, ZLinkMessageContext } from '../../contracts';
2
2
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
3
+ import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
3
4
  export interface ZLinkHandlerInstanceScope {
4
5
  resolve<T>(type: Type<T>): Promise<T>;
5
6
  dispose(): Promise<void>;
@@ -7,5 +8,6 @@ export interface ZLinkHandlerInstanceScope {
7
8
  export declare function runInHandlerInstanceScope<T>(providerResolver: ZLinkProviderResolver | undefined, context: ZLinkMessageContext | undefined, callback: (scope: ZLinkHandlerInstanceScope) => Promise<T>): Promise<T>;
8
9
  export declare function resolveLifecycleHandler<T>(owner: object, type: Type<T>, providerResolver?: ZLinkProviderResolver): Promise<T>;
9
10
  export declare function runWithLifecycleHandler<THandler, TResult>(owner: object, type: Type<THandler>, providerResolver: ZLinkProviderResolver | undefined, callback: (handler: THandler) => Promise<TResult>): Promise<TResult>;
10
- export declare function disposeLifecycleHandlers(owner: object): Promise<void>;
11
+ export declare function disposeLifecycleHandlers(owner: object, detachedTaskRunner: ZLinkDetachedTaskRunner): Promise<void>;
11
12
  export declare function disposeOwnedInstance(instance: unknown): Promise<void>;
13
+ export declare function disposeOwnedInstances(instances: readonly unknown[]): Promise<void>;
@@ -5,12 +5,12 @@ exports.resolveLifecycleHandler = resolveLifecycleHandler;
5
5
  exports.runWithLifecycleHandler = runWithLifecycleHandler;
6
6
  exports.disposeLifecycleHandlers = disposeLifecycleHandlers;
7
7
  exports.disposeOwnedInstance = disposeOwnedInstance;
8
+ exports.disposeOwnedInstances = disposeOwnedInstances;
8
9
  const node_async_hooks_1 = require("node:async_hooks");
9
- const state_lane_1 = require("../execution/state-lane");
10
10
  const HANDLER_SCOPE_FACTORY = Symbol.for('@zlink-systems/framework.handler-instance-scope-factory');
11
11
  const activeHandlerScope = new node_async_hooks_1.AsyncLocalStorage();
12
12
  const activeLifecycleScope = new node_async_hooks_1.AsyncLocalStorage();
13
- const detachedStateLaneResource = new node_async_hooks_1.AsyncResource('zlink:handler-instance-scope');
13
+ const detachedLifecycleResource = new node_async_hooks_1.AsyncResource('zlink:handler-instance-scope');
14
14
  const dispatchScopes = new WeakMap();
15
15
  const lifecycleScopes = new WeakMap();
16
16
  async function runInHandlerInstanceScope(providerResolver, context, callback) {
@@ -39,27 +39,27 @@ async function runInHandlerInstanceScope(providerResolver, context, callback) {
39
39
  }
40
40
  }
41
41
  async function resolveLifecycleHandler(owner, type, providerResolver) {
42
- let scope = lifecycleScopes.get(owner);
43
- if (scope === undefined) {
44
- scope = Promise.resolve(new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver)));
45
- lifecycleScopes.set(owner, scope);
46
- }
47
- return (await scope).resolve(type);
42
+ return lifecycleHandlerScope(owner, providerResolver).resolve(type);
48
43
  }
49
44
  async function runWithLifecycleHandler(owner, type, providerResolver, callback) {
45
+ return lifecycleHandlerScope(owner, providerResolver).run(type, callback);
46
+ }
47
+ function lifecycleHandlerScope(owner, providerResolver) {
50
48
  let scope = lifecycleScopes.get(owner);
51
49
  if (scope === undefined) {
52
- scope = Promise.resolve(new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver)));
50
+ scope = new LifecycleHandlerInstanceScope(createHandlerInstanceScope(providerResolver));
53
51
  lifecycleScopes.set(owner, scope);
54
52
  }
55
- return (await scope).run(type, callback);
53
+ return scope;
56
54
  }
57
- async function disposeLifecycleHandlers(owner) {
55
+ async function disposeLifecycleHandlers(owner, detachedTaskRunner) {
56
+ if (detachedTaskRunner === undefined) {
57
+ throw new Error('Lifecycle handler disposal requires a detached task runner.');
58
+ }
58
59
  const scope = lifecycleScopes.get(owner);
59
60
  if (scope === undefined)
60
61
  return;
61
- const resolved = await scope;
62
- await resolved.dispose();
62
+ await scope.dispose(detachedTaskRunner);
63
63
  // Keep the closed scope as a tombstone for the lifetime of the owner object.
64
64
  // A late dispatch must fail instead of creating a second activation.
65
65
  }
@@ -79,68 +79,49 @@ function isHandlerInstanceScopeFactory(value) {
79
79
  }
80
80
  class DefaultHandlerInstanceScope {
81
81
  providerResolver;
82
- lane = new state_lane_1.ZLinkStateLane();
83
82
  instances = new Map();
84
83
  owned = [];
85
84
  disposed = false;
86
85
  constructor(providerResolver) {
87
86
  this.providerResolver = providerResolver;
88
87
  }
89
- async resolve(type) {
90
- const resolution = await this.lane.run(() => this.resolveCore(type));
91
- if (resolution.activation !== undefined) {
92
- startOutsideStateLane(() => {
93
- void this.activate(type, resolution.activation);
94
- });
95
- }
96
- return await resolution.promise;
97
- }
98
- async dispose() {
99
- const disposal = await this.lane.run(() => this.beginDisposeCore());
100
- if (disposal === undefined)
101
- return;
102
- await Promise.allSettled(disposal.pending);
103
- for (const instance of disposal.owned) {
104
- await disposeOwnedInstance(instance);
105
- }
106
- await this.lane.run(() => this.completeDisposeCore());
107
- }
108
- resolveCore(type) {
88
+ resolve(type) {
109
89
  if (this.disposed) {
110
- throw new Error('Handler instance scope is already disposed.');
90
+ return Promise.reject(new Error('Handler instance scope is already disposed.'));
111
91
  }
112
- let instance = this.instances.get(type);
113
- if (instance !== undefined)
114
- return { promise: instance };
92
+ const existing = this.instances.get(type);
93
+ if (existing !== undefined)
94
+ return existing;
115
95
  const activation = createDeferred();
116
- instance = activation.promise;
117
96
  this.instances.set(type, activation.promise);
118
- return { promise: instance, activation };
97
+ void this.activate(type, activation);
98
+ return activation.promise;
119
99
  }
120
- beginDisposeCore() {
100
+ async dispose() {
121
101
  if (this.disposed)
122
- return undefined;
102
+ return;
123
103
  this.disposed = true;
124
- return {
125
- pending: [...this.instances.values()],
126
- owned: [...this.owned].reverse()
127
- };
128
- }
129
- completeDisposeCore() {
130
- this.owned.length = 0;
131
- this.instances.clear();
104
+ await Promise.allSettled(this.instances.values());
105
+ try {
106
+ await disposeOwnedInstances(this.owned);
107
+ }
108
+ finally {
109
+ this.owned.length = 0;
110
+ this.instances.clear();
111
+ }
132
112
  }
133
113
  async activate(type, activation) {
134
114
  let instance;
135
115
  try {
136
- instance = (await this.providerResolver?.create?.(type)) ?? new type();
116
+ const created = this.providerResolver?.create?.(type);
117
+ instance = created === undefined ? new type() : await created;
137
118
  }
138
119
  catch (error) {
139
120
  activation.reject(error);
140
121
  return;
141
122
  }
142
- const accepted = await this.lane.run(() => this.acceptActivationCore(instance));
143
- if (accepted) {
123
+ if (!this.disposed) {
124
+ this.owned.push(instance);
144
125
  activation.resolve(instance);
145
126
  return;
146
127
  }
@@ -152,16 +133,9 @@ class DefaultHandlerInstanceScope {
152
133
  activation.reject(error);
153
134
  }
154
135
  }
155
- acceptActivationCore(instance) {
156
- if (this.disposed)
157
- return false;
158
- this.owned.push(instance);
159
- return true;
160
- }
161
136
  }
162
137
  class LifecycleHandlerInstanceScope {
163
138
  instances;
164
- lane = new state_lane_1.ZLinkStateLane();
165
139
  activeInvocations = 0;
166
140
  closing = false;
167
141
  idle;
@@ -170,36 +144,34 @@ class LifecycleHandlerInstanceScope {
170
144
  constructor(instances) {
171
145
  this.instances = instances;
172
146
  }
173
- async resolve(type) {
174
- const resolution = await this.lane.run(() => ({ promise: this.resolveCore(type) }));
175
- return await resolution.promise;
176
- }
177
- resolveCore(type) {
147
+ resolve(type) {
178
148
  this.throwIfClosingCore();
179
149
  return this.instances.resolve(type);
180
150
  }
181
151
  async run(type, callback) {
182
- await this.lane.run(() => this.beginInvocationCore());
152
+ this.beginInvocationCore();
183
153
  try {
184
154
  return await activeLifecycleScope.run(this, async () => callback(await this.instances.resolve(type)));
185
155
  }
186
156
  finally {
187
- await this.lane.run(() => this.completeInvocationCore());
157
+ this.completeInvocationCore();
188
158
  }
189
159
  }
190
- async dispose() {
160
+ async dispose(detachedTaskRunner) {
191
161
  const disposeFromActiveInvocation = activeLifecycleScope.getStore() === this;
192
- const disposal = await this.lane.run(() => this.beginDisposeCore());
162
+ const disposal = this.beginDisposeCore();
193
163
  if (disposal.deferred !== undefined) {
194
- startOutsideStateLane(() => {
164
+ startOutsideLifecycleInvocation(() => {
195
165
  void this.disposeWhenIdle(disposal);
166
+ if (disposeFromActiveInvocation) {
167
+ detachedTaskRunner.runDetached(LifecycleHandlerInstanceScope.name, () => disposal.completion);
168
+ }
196
169
  });
197
170
  }
198
171
  if (disposeFromActiveInvocation) {
199
172
  // Waiting here would make the current handler wait for its own terminal
200
173
  // completion. The same disposal promise continues after run() releases
201
174
  // the final active invocation.
202
- void disposal.completion.catch(() => undefined);
203
175
  return;
204
176
  }
205
177
  await disposal.completion;
@@ -245,7 +217,7 @@ class LifecycleHandlerInstanceScope {
245
217
  deferred.resolve();
246
218
  }
247
219
  catch (error) {
248
- await this.lane.run(() => this.failDisposalCore(deferred.promise));
220
+ this.failDisposalCore(deferred.promise);
249
221
  deferred.reject(error);
250
222
  }
251
223
  }
@@ -264,8 +236,8 @@ function createDeferred() {
264
236
  });
265
237
  return { promise, resolve, reject };
266
238
  }
267
- function startOutsideStateLane(work) {
268
- return detachedStateLaneResource.runInAsyncScope(work);
239
+ function startOutsideLifecycleInvocation(work) {
240
+ return detachedLifecycleResource.runInAsyncScope(work);
269
241
  }
270
242
  async function disposeOwnedInstance(instance) {
271
243
  if (instance === null || instance === undefined)
@@ -281,3 +253,18 @@ async function disposeOwnedInstance(instance) {
281
253
  await value.onModuleDestroy();
282
254
  }
283
255
  }
256
+ async function disposeOwnedInstances(instances) {
257
+ const failures = [];
258
+ for (let index = instances.length - 1; index >= 0; index -= 1) {
259
+ try {
260
+ await disposeOwnedInstance(instances[index]);
261
+ }
262
+ catch (error) {
263
+ failures.push(error);
264
+ }
265
+ }
266
+ if (failures.length === 1)
267
+ throw failures[0];
268
+ if (failures.length > 1)
269
+ throw new AggregateError(failures, 'Handler scope cleanup failed.');
270
+ }
@@ -5,7 +5,7 @@ import { type ZLinkActorRoutedJoinTransport, type ZLinkRemoteActorPacketTarget,
5
5
  import type { DefaultZLinkActorManager } from '../actors';
6
6
  import type { DefaultZLinkSpotManager, ZLinkSpotNodeRuntimeManager } from '../spots';
7
7
  import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
8
- import type { ZLinkBoundSessionResponsePort, ZLinkStreamActorLookupPort } from '../streams/stream-binding-runtime-ports';
8
+ import type { ZLinkBoundSessionResponsePort, ZLinkSessionBindingConfirmationOptions, ZLinkStreamActorLookupPort } from '../streams/stream-binding-runtime-ports';
9
9
  import { type ZLinkStreamFrameHeader } from '../streams/protocol';
10
10
  import type { MeshRouterResolver } from './mesh-router-resolver';
11
11
  import type { ZLinkStoreLocationResolvers } from '../locations';
@@ -32,7 +32,7 @@ export declare class ZLinkActorPacketRelay {
32
32
  notifyBoundActorDisconnected(actor: ZLinkSessionActor, signal?: AbortSignal): Promise<void>;
33
33
  clearRemoteActorPacketTarget(actorId: string): void;
34
34
  updateRemoteActorPacketTarget(actorId: string, value: unknown): Promise<void>;
35
- actorPacketTargetForState(actorId: string, routerChannelIdHint?: string): ZLinkRemoteActorPacketTarget | undefined;
35
+ actorPacketTargetForState(actorId: string): ZLinkRemoteActorPacketTarget | undefined;
36
36
  notifyActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void>;
37
37
  notifyLocalActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void>;
38
38
  receiveRemoteActorPacketRelay(payload: unknown, _routeContext: ZLinkRouteMessageContext): Promise<{
@@ -44,10 +44,13 @@ export declare class ZLinkActorPacketRelay {
44
44
  readonly actorPacketTarget?: unknown;
45
45
  }>;
46
46
  relayActorPacket(actor: ZLinkSessionActor, frameHeader: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal): Promise<boolean>;
47
- confirmRemoteSessionBinding(actor: ActorRef, sessionNodeRid: RoutingId, sessionRid: RoutingId, signal?: AbortSignal, options?: {
48
- readonly waitForAcknowledgement?: boolean;
49
- }): Promise<void>;
50
- private retryRemoteSessionBindingSend;
47
+ confirmRemoteSessionBinding(actor: ActorRef, sessionNodeRid: RoutingId, sessionRid: RoutingId, signal?: AbortSignal, options?: ZLinkSessionBindingConfirmationOptions): Promise<void>;
48
+ /**
49
+ * Session–Actor binding §5·§6 (.NET ZLinkSessionActorCoordinator rule): a
50
+ * same-node bind installs the Session owner's registry identity through the
51
+ * same install a remote command 38 uses, so relocation seals and carries it.
52
+ */
53
+ private installSameNodeSessionBinding;
51
54
  relayRemoteActorPacket(actor: ZLinkSessionActor, frameHeader: ZLinkStreamFrameHeader, payload: Message, signal?: AbortSignal): Promise<boolean>;
52
55
  notifyRemoteActorDisconnected(actorId: string, remoteTarget: ZLinkRemoteBoundSessionTarget | ZLinkRemoteActorPacketTarget, signal?: AbortSignal, bindingActorRef?: ActorRef): Promise<void>;
53
56
  private requireCurrentRemoteBinding;
@@ -6,7 +6,6 @@ const runtime_message_1 = require("../backend/runtime-message");
6
6
  const contracts_1 = require("../../contracts");
7
7
  const ConfigurationException_1 = require("../../contracts/Configuration/ConfigurationException");
8
8
  const actors_1 = require("../actors");
9
- const actor_runtime_state_1 = require("../actors/actor-runtime-state");
10
9
  const actor_packet_relay_wire_1 = require("../actors/actor-packet-relay-wire");
11
10
  const actor_routed_json_request_1 = require("../actors/actor-routed-json-request");
12
11
  const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
@@ -16,9 +15,6 @@ const submission_result_1 = require("../messaging/submission-result");
16
15
  const actor_session_binding_runtime_owner_1 = require("../streams/actor-session-binding-runtime-owner");
17
16
  const protocol_1 = require("../streams/protocol");
18
17
  const remote_actor_packet_target_store_1 = require("./remote-actor-packet-target-store");
19
- const REMOTE_SESSION_BIND_RETRY_DEADLINE_MS = 30_000;
20
- const REMOTE_SESSION_BIND_RETRY_INITIAL_DELAY_MS = 25;
21
- const REMOTE_SESSION_BIND_RETRY_MAX_DELAY_MS = 1_000;
22
18
  class ZLinkActorPacketRelay {
23
19
  options;
24
20
  targets;
@@ -38,9 +34,7 @@ class ZLinkActorPacketRelay {
38
34
  }
39
35
  async notifyBoundActorDisconnected(actor, signal) {
40
36
  const state = this.options.actorManager()?.getState(actor.actorId);
41
- const currentRemoteBoundSessionTarget = state?.spotId === undefined
42
- ? undefined
43
- : (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
37
+ const currentRemoteBoundSessionTarget = state?.spotId === undefined ? undefined : state.remoteBoundSessionTarget;
44
38
  const currentRemoteActorPacketTarget = state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
45
39
  const remoteTarget = currentRemoteBoundSessionTarget ??
46
40
  currentRemoteActorPacketTarget ??
@@ -68,14 +62,14 @@ class ZLinkActorPacketRelay {
68
62
  async updateRemoteActorPacketTarget(actorId, value) {
69
63
  await this.targets.updateFromWire(actorId, value);
70
64
  }
71
- actorPacketTargetForState(actorId, routerChannelIdHint) {
72
- return this.targets.targetForState(actorId, routerChannelIdHint);
65
+ actorPacketTargetForState(actorId) {
66
+ return this.targets.targetForState(actorId);
73
67
  }
74
68
  async notifyActorDisconnectedById(actorId, signal) {
75
69
  const state = this.options.actorManager()?.getState(actorId);
76
70
  const remoteTarget = state === undefined
77
71
  ? undefined
78
- : ((0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget) ?? state.remoteActorPacketTarget);
72
+ : (state.remoteBoundSessionTarget ?? state.remoteActorPacketTarget);
79
73
  if (remoteTarget !== undefined) {
80
74
  await this.notifyRemoteActorDisconnected(actorId, remoteTarget, signal);
81
75
  return;
@@ -152,48 +146,25 @@ class ZLinkActorPacketRelay {
152
146
  if (frameHeader.kind !== protocol_1.ZLinkStreamMessageKind.Send) {
153
147
  throw new Error('Remote actor session binding requires a send frame.');
154
148
  }
155
- const { sessionNodeRid, sessionRid } = (0, actor_packet_relay_wire_1.decodeRemoteActorSessionBinding)((0, protocol_1.messageToBytes)(body));
149
+ const { sessionNodeRid } = (0, actor_packet_relay_wire_1.decodeRemoteActorSessionBinding)((0, protocol_1.messageToBytes)(body));
156
150
  if (!(0, routing_id_1.routingIdsEqual)(sessionNodeRid, _routeContext.sourceNodeRid)) {
157
151
  throw new Error('Remote actor session binding source did not match the declared session node.');
158
152
  }
153
+ // The Actor owner installs the binding from the Session owner's
154
+ // command 38 (Session–Actor binding §5); this relay confirmation only
155
+ // acknowledges that the Actor is still owned here.
159
156
  const state = this.options.actorManager()?.getState(relay.actorId);
160
- const actorRef = state?.nativeActorRef;
161
- if (state === undefined || actorRef === undefined) {
157
+ if (state?.nativeActorRef === undefined) {
162
158
  throw new Error(`Actor '${relay.actorId}' does not have a concrete actor ref.`);
163
159
  }
164
- if (this.requireSpotNodeRuntime().primaryMeshNode === undefined) {
165
- throw new Error('MeshNode actor runtime is not started.');
166
- }
167
- const target = relay.routerChannelId === undefined
168
- ? this.options.meshRouters.remoteBoundSessionTargetForSource(sessionNodeRid)
169
- : {
170
- routerChannelId: relay.routerChannelId,
171
- targetNodeRid: sessionNodeRid,
172
- spotId: sessionNodeRid
173
- };
174
- if (target === undefined) {
175
- throw new Error('Remote actor session binding did not declare a return router.');
176
- }
177
- const bindingGeneration = fallbackActorRef?.bindingGeneration;
178
- const refreshedTarget = (0, actor_runtime_state_1.mergeRemoteBoundSessionTarget)({
179
- ...target,
180
- sessionNodeRid,
181
- sessionRid,
182
- ...(bindingGeneration === undefined ? {} : { bindingGeneration })
183
- }, (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget));
184
- state.setRemoteBoundSessionTarget(refreshedTarget);
185
160
  return { ok: true, response: { acknowledged: true } };
186
161
  }
187
162
  if (frameHeader.name === actors_1.ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
188
163
  this.requireCurrentRemoteBinding(relay, _routeContext);
189
- this.options
190
- .actorManager()
191
- ?.getState(relay.actorId)
192
- ?.setRemoteBoundSessionTarget(undefined);
193
164
  await this.notifyLocalActorDisconnectedById(relay.actorId);
194
165
  return {
195
166
  ok: true,
196
- actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId, relay.routerChannelId))
167
+ actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
197
168
  };
198
169
  }
199
170
  if (remoteBoundSessionTarget !== undefined) {
@@ -229,7 +200,7 @@ class ZLinkActorPacketRelay {
229
200
  });
230
201
  return {
231
202
  ok: true,
232
- actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId, relay.routerChannelId))
203
+ actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
233
204
  };
234
205
  }
235
206
  if (frameHeader.kind === protocol_1.ZLinkStreamMessageKind.Request &&
@@ -274,7 +245,7 @@ class ZLinkActorPacketRelay {
274
245
  return {
275
246
  ok: true,
276
247
  deferredResponse: true,
277
- actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId, relay.routerChannelId))
248
+ actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
278
249
  };
279
250
  }
280
251
  const response = state?.spotId === undefined
@@ -283,7 +254,7 @@ class ZLinkActorPacketRelay {
283
254
  return {
284
255
  ok: true,
285
256
  response,
286
- actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId, relay.routerChannelId))
257
+ actorPacketTarget: (0, actor_packet_relay_wire_1.encodeRemoteActorPacketTarget)(this.actorPacketTargetForState(relay.actorId))
287
258
  };
288
259
  }
289
260
  catch (error) {
@@ -303,36 +274,17 @@ class ZLinkActorPacketRelay {
303
274
  }
304
275
  }
305
276
  async relayActorPacket(actor, frameHeader, payload, signal) {
306
- // Spec 32:87 — a route/owner that is not currently usable is
307
- // Unavailable and retryable within the request deadline. Right after a
308
- // relocation the cached packet target can carry a transiently
309
- // incomplete Ready authority fence (route publication still
310
- // converging); failing the request on the fence check would surface a
311
- // NotFound for a Spot that exists and is Ready on its owner. Clear the
312
- // stale hint and re-resolve with a short bound instead.
313
- const fenceRetryDeadlineMs = performance.now() + 1_000;
314
- for (;;) {
315
- try {
316
- if (await this.relayRemoteActorPacket(actor, frameHeader, payload, signal)) {
317
- return true;
318
- }
319
- return await this.relayLocalActorPacket(actor, frameHeader, payload, signal);
320
- }
321
- catch (error) {
322
- if (!(error instanceof Error && error.message.includes('no complete Ready authority fence')) ||
323
- performance.now() >= fenceRetryDeadlineMs) {
324
- throw error;
325
- }
326
- this.targets.clear(actor.actorId);
327
- this.options.actorManager()?.getState(actor.actorId)?.setRemoteActorPacketTarget(undefined);
328
- await new Promise((resolve) => setTimeout(resolve, 25));
329
- }
277
+ if (await this.relayRemoteActorPacket(actor, frameHeader, payload, signal)) {
278
+ return true;
330
279
  }
280
+ return this.relayLocalActorPacket(actor, frameHeader, payload, signal);
331
281
  }
332
282
  async confirmRemoteSessionBinding(actor, sessionNodeRid, sessionRid, signal, options) {
333
283
  const target = this.targets.targetForActorRef(actor);
334
- if (target === undefined)
284
+ if (target === undefined) {
285
+ this.installSameNodeSessionBinding(actor.actorId, options?.binding);
335
286
  return;
287
+ }
336
288
  const header = (0, protocol_1.encodeStreamHeader)({
337
289
  kind: protocol_1.ZLinkStreamMessageKind.Send,
338
290
  codec: protocol_1.ZLinkStreamCodec.Json,
@@ -350,7 +302,9 @@ class ZLinkActorPacketRelay {
350
302
  payload: (0, actor_packet_relay_wire_1.encodeRemoteActorSessionBinding)({ sessionNodeRid, sessionRid })
351
303
  });
352
304
  if (options?.waitForAcknowledgement === false) {
353
- await this.retryRemoteSessionBindingSend(withDefaultSpotKind(target), request, performance.now() + REMOTE_SESSION_BIND_RETRY_DEADLINE_MS, REMOTE_SESSION_BIND_RETRY_INITIAL_DELAY_MS);
305
+ await this.options.routeTransport.sendToSpot(withDefaultSpotKind(target), request, {
306
+ packetName: actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
307
+ });
354
308
  return;
355
309
  }
356
310
  const reply = await this.requestRemoteTarget(withDefaultSpotKind(target), request, `Remote actor session binding is not available for '${actor.actorId}'.`, (parts) => JSON.parse(parts[0]?.getString('utf8') ?? '{}'), signal);
@@ -369,26 +323,31 @@ class ZLinkActorPacketRelay {
369
323
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(remoteKind, `Actor '${actor.actorId}' did not acknowledge its remote session binding: ${JSON.stringify(reply)}`, reply.error);
370
324
  }
371
325
  }
372
- async retryRemoteSessionBindingSend(target, request, deadline, delayMs) {
373
- try {
374
- await this.options.routeTransport.sendToSpot(target, request, {
375
- packetName: actors_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET
376
- });
377
- }
378
- catch (error) {
379
- if (performance.now() >= deadline) {
380
- // Spec 32-framework-error-model: DeadlineExceeded(7). Retry
381
- // exhaustion on the one-way bind send remains diagnostics-only but
382
- // the caller waits for its bounded submission terminal so later
383
- // application relay cannot overtake it.
384
- this.options
385
- .errorSink()
386
- .reportRuntimeTaskException('remote session binding send', (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, 'Remote actor session binding send retries exceeded their deadline.', error));
387
- return;
388
- }
389
- await new Promise((resolve) => setTimeout(resolve, delayMs));
390
- await this.retryRemoteSessionBindingSend(target, request, deadline, Math.min(delayMs * 2, REMOTE_SESSION_BIND_RETRY_MAX_DELAY_MS));
391
- }
326
+ /**
327
+ * Session–Actor binding §5·§6 (.NET ZLinkSessionActorCoordinator rule): a
328
+ * same-node bind installs the Session owner's registry identity through the
329
+ * same install a remote command 38 uses, so relocation seals and carries it.
330
+ */
331
+ installSameNodeSessionBinding(actorId, binding) {
332
+ // The Actor is gone (destroyed or relocated away): nothing to record.
333
+ const state = this.options.actorManager()?.getState(actorId);
334
+ // No registry binding exists only for a native-fallback bind, which has no
335
+ // Session owner registry (managed-stream.ts `bindActor` fallback).
336
+ if (state === undefined || binding === undefined)
337
+ return;
338
+ const route = this.options.meshRouters.remoteBoundSessionTargetForSource(binding.sessionOwnerNodeRid);
339
+ if (route === undefined) {
340
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `Actor '${actorId}' Session route is unavailable.`);
341
+ }
342
+ state.installBoundSessionBinding({
343
+ ...route,
344
+ sessionNodeRid: binding.sessionOwnerNodeRid,
345
+ sessionRid: binding.sessionRid,
346
+ sessionOwnerNodeGeneration: binding.sessionOwnerNodeGeneration,
347
+ sessionOwnerId: binding.sessionOwnerId,
348
+ sessionOwnerLeaseGeneration: binding.sessionOwnerLeaseGeneration,
349
+ bindingGeneration: binding.bindingGeneration
350
+ });
392
351
  }
393
352
  async relayRemoteActorPacket(actor, frameHeader, payload, signal) {
394
353
  const streamRuntime = this.options.streamBindingRuntime();
@@ -544,9 +503,7 @@ class ZLinkActorPacketRelay {
544
503
  }
545
504
  requireCurrentRemoteBinding(relay, routeContext) {
546
505
  const state = this.options.actorManager()?.getState(relay.actorId);
547
- const current = state === undefined
548
- ? undefined
549
- : (0, actor_runtime_state_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
506
+ const current = state?.boundSession;
550
507
  if (current === undefined ||
551
508
  current.sessionNodeRid === undefined ||
552
509
  !(0, routing_id_1.routingIdsEqual)(current.sessionNodeRid, routeContext.sourceNodeRid) ||
@@ -7,6 +7,7 @@ const runtime_values_1 = require("../backend/runtime-values");
7
7
  const contracts_1 = require("../../contracts");
8
8
  const authority_key_codec_1 = require("../locations/authority-key-codec");
9
9
  const creation_operation_id_1 = require("../locations/creation-operation-id");
10
+ const diagnostic_text_1 = require("../diagnostics/diagnostic-text");
10
11
  const actor_authority_publication_1 = require("../actors/actor-authority-publication");
11
12
  const user_spot_creation_coordinator_1 = require("./user-spot-creation-coordinator");
12
13
  const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
@@ -20,9 +21,10 @@ class ZLinkActorPlacementCoordinator {
20
21
  this.options = options;
21
22
  }
22
23
  async create(actorId, stableType, createOnly, meshName, requestPayload, timeoutMs, signal) {
23
- const deadline = createDeadline(timeoutMs, signal);
24
- const deadlineMs = performance.now() + timeoutMs;
25
24
  const deadlineUnixMs = Date.now() + timeoutMs;
25
+ const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
26
+ const deadline = createDeadline(remainingMs, signal);
27
+ const deadlineMs = performance.now() + remainingMs;
26
28
  const contentReference = (0, user_spot_creation_coordinator_1.encodeLocationCreationContent)(requestPayload);
27
29
  const requestSha256 = (0, node_crypto_1.createHash)('sha256').update(requestPayload).digest();
28
30
  const excluded = new Set();
@@ -60,7 +62,7 @@ class ZLinkActorPlacementCoordinator {
60
62
  target: reservationTarget(target),
61
63
  creatingPayload,
62
64
  capacity: { actors: 1, spots: 0 }
63
- }, deadline.signal);
65
+ }, deadline.signal, BigInt(deadlineUnixMs));
64
66
  const existing = existingActor(reserved, actorId, stableType);
65
67
  if (existing !== undefined) {
66
68
  if (createOnly) {
@@ -110,13 +112,13 @@ class ZLinkActorPlacementCoordinator {
110
112
  // 83-118, 99-108). Backpressured(113) still surfaces as target
111
113
  // placement capacity -> Unavailable through the shared path.
112
114
  throw (0, framework_errors_internal_1.wireReplyFailureException)(remote.terminalResult, remote.failureCode, `Remote Actor '${actorId}' creation failed with result ${remote.terminalResult}, ` +
113
- `failure code ${remote.failureCode}, and tail ${remote.tail?.kind ?? 'none'}.`);
115
+ `failure code ${remote.failureCode}, and tail ${(0, diagnostic_text_1.diagnosticTextOrAbsent)(remote.tail?.kind)}.`);
114
116
  }
115
117
  if (remote.tail?.kind !== 'actorCreate') {
116
118
  // An OK terminal whose reply lacks the actorCreate tail is a
117
119
  // protocol violation, not a create failure.
118
120
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Remote Actor '${actorId}' create reply carried tail ` +
119
- `${remote.tail?.kind ?? 'none'} on an OK terminal.`);
121
+ `${(0, diagnostic_text_1.diagnosticTextOrAbsent)(remote.tail?.kind)} on an OK terminal.`);
120
122
  }
121
123
  if (remote.tail.createResult === 'rejected') {
122
124
  return {
@@ -29,6 +29,8 @@ export interface ZLinkActorRuntimeOptionsFactoryOptions {
29
29
  readonly meshNode: (meshName: string) => ZLinkBackendMeshNode | undefined;
30
30
  readonly meshCompletions: (meshName: string) => ZLinkMeshCompletionTable | undefined;
31
31
  readonly notifyEntrySpotActorCreated: (nodeRid: RoutingId, actor: ZLinkActor, createRequest: ZLinkMessage, signal?: AbortSignal) => Promise<import('../../contracts').ZLinkActorCreateResponse | undefined>;
32
+ readonly notifyEntrySpotActorJoined: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
33
+ readonly notifyEntrySpotActorLeft: (actor: ZLinkActor, signal?: AbortSignal) => Promise<void>;
32
34
  readonly locationLifecycle: () => ZLinkLocationLifecycle | undefined;
33
35
  readonly primaryMeshName: () => string | undefined;
34
36
  readonly actorMeshName: (actorType: string) => string | undefined;
@@ -27,6 +27,22 @@ class ZLinkActorRuntimeOptionsFactory {
27
27
  completionTableProvider: this.options.primaryMeshCompletions,
28
28
  spotRouteResolver: this.options.createLocationSpotRouteResolver(),
29
29
  locationLifecycle: this.options.locationLifecycle(),
30
+ localSpotJoin: (spotId, actor, request, commit, signal, leaveSource, contentType) => {
31
+ const manager = this.options.spotManager();
32
+ if (manager === undefined)
33
+ throw new Error('Actor Spot membership runtime is not started.');
34
+ return manager.admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType);
35
+ },
36
+ localEntryJoin: this.options.notifyEntrySpotActorJoined,
37
+ reportSourceLeaveError: this.options.reportPostCommitError,
38
+ localSourceLeave: async (actor, spotId, signal) => {
39
+ if (spotId === undefined)
40
+ return this.options.notifyEntrySpotActorLeft(actor, signal);
41
+ const manager = this.options.spotManager();
42
+ if (manager === undefined)
43
+ throw new Error('Actor Spot membership runtime is not started.');
44
+ return manager.notifyActorLeftAfterTransfer(spotId, actor, signal);
45
+ },
30
46
  postCommitErrorReporter: this.options.reportPostCommitError,
31
47
  sourceTransfer: this.options.actorTransferRuntime,
32
48
  actorJoinRelocation: this.options.actorJoinRelocation,
@@ -89,10 +105,7 @@ class ZLinkActorRuntimeOptionsFactory {
89
105
  return node === undefined ? undefined : (0, backend_1.meshActorSessionNodeAdapter)(node, completions);
90
106
  },
91
107
  localActorProvider: () => this.options.actorManager()?.getState(actorId)?.actor !== undefined,
92
- remoteBoundSessionTargetProvider: () => {
93
- const state = this.options.actorManager()?.getState(actorId);
94
- return (0, actors_1.preferredRemoteBoundSessionTarget)(state?.remoteBoundSessionTarget, state?.boundSessionTransferTarget);
95
- },
108
+ remoteBoundSessionTargetProvider: () => this.options.actorManager()?.getState(actorId)?.remoteBoundSessionTarget,
96
109
  remoteActorPacketTargetProvider: () => this.options.actorPacketTargetForState(actorId),
97
110
  requestTimeoutMs: this.options.registration.requestTimeoutMs,
98
111
  actorId,