@zlink-systems/framework 0.30.3 → 0.32.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 (398) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
  3. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
  4. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
  5. package/dist/contracts/Actors/index.d.ts +1 -0
  6. package/dist/contracts/Actors/index.js +1 -0
  7. package/dist/contracts/Common/CoreTypes.d.ts +1 -0
  8. package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
  9. package/dist/contracts/Common/HandlerMessageType.js +41 -0
  10. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
  11. package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
  12. package/dist/contracts/Common/ZLinkMessage.js +11 -7
  13. package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
  14. package/dist/contracts/Common/encoded-payload-storage.js +4 -16
  15. package/dist/contracts/Common/index.d.ts +1 -1
  16. package/dist/contracts/Common/payload-slab.d.ts +4 -0
  17. package/dist/contracts/Common/payload-slab.js +30 -0
  18. package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
  19. package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
  20. package/dist/contracts/Handlers/Contexts.d.ts +1 -0
  21. package/dist/contracts/Locations/Authority.d.ts +2 -0
  22. package/dist/internal.d.ts +9 -0
  23. package/dist/internal.js +23 -1
  24. package/dist/nest-integration.d.ts +1 -0
  25. package/dist/nest-integration.js +3 -1
  26. package/dist/runtime/actors/actor-client.d.ts +6 -2
  27. package/dist/runtime/actors/actor-client.js +120 -82
  28. package/dist/runtime/actors/actor-context.js +16 -5
  29. package/dist/runtime/actors/actor-execution-context.js +2 -2
  30. package/dist/runtime/actors/actor-handoff.d.ts +12 -1
  31. package/dist/runtime/actors/actor-handoff.js +79 -34
  32. package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
  33. package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
  34. package/dist/runtime/actors/actor-local-native-join.js +19 -17
  35. package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
  36. package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
  37. package/dist/runtime/actors/actor-remote-joiner.js +4 -4
  38. package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
  39. package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
  40. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
  41. package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
  42. package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
  43. package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
  44. package/dist/runtime/admission.d.ts +6 -4
  45. package/dist/runtime/admission.js +21 -10
  46. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
  47. package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
  48. package/dist/runtime/backend/contracts/index.d.ts +26 -10
  49. package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
  50. package/dist/runtime/backend/mesh-completion-table.js +84 -20
  51. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
  52. package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
  53. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
  54. package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
  55. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
  56. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
  57. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  58. package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
  59. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
  60. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
  61. package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
  62. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
  63. package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
  64. package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
  65. package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
  66. package/dist/runtime/channels/channel-clients.js +3 -3
  67. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
  68. package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
  69. package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
  70. package/dist/runtime/channels/channel-dispatch-services.js +7 -6
  71. package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
  72. package/dist/runtime/channels/channel-dispatchers.js +57 -36
  73. package/dist/runtime/channels/channel-envelope.d.ts +2 -2
  74. package/dist/runtime/channels/channel-envelope.js +609 -83
  75. package/dist/runtime/channels/channel-multipart.d.ts +1 -0
  76. package/dist/runtime/channels/channel-multipart.js +10 -6
  77. package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
  78. package/dist/runtime/channels/channel-outbound-operations.js +107 -105
  79. package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
  80. package/dist/runtime/channels/channel-receive-loops.js +126 -90
  81. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
  82. package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
  83. package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
  84. package/dist/runtime/channels/channel-runtime-manager.js +32 -14
  85. package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
  86. package/dist/runtime/channels/channel-socket-registry.js +9 -1
  87. package/dist/runtime/channels/channel-transports.d.ts +23 -16
  88. package/dist/runtime/channels/channel-transports.js +139 -119
  89. package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
  90. package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
  91. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  92. package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
  93. package/dist/runtime/channels/local-spot-route-transport.js +15 -18
  94. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
  95. package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
  96. package/dist/runtime/channels/source-spot-router.d.ts +6 -3
  97. package/dist/runtime/channels/source-spot-router.js +34 -23
  98. package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
  99. package/dist/runtime/channels/spot-node-route-transport.js +23 -17
  100. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
  101. package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
  102. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
  103. package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
  104. package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
  105. package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
  106. package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
  107. package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
  108. package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
  109. package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
  110. package/dist/runtime/diagnostics/message-flow-record.js +228 -0
  111. package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
  112. package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
  113. package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
  114. package/dist/runtime/diagnostics/message-flow.js +42 -290
  115. package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
  116. package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
  117. package/dist/runtime/execution/index.d.ts +1 -0
  118. package/dist/runtime/execution/index.js +6 -3
  119. package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
  120. package/dist/runtime/execution/serial-execution-queue.js +75 -71
  121. package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
  122. package/dist/runtime/foundation/durable-service-request.js +158 -73
  123. package/dist/runtime/foundation/operation-registry.d.ts +33 -3
  124. package/dist/runtime/foundation/operation-registry.js +272 -33
  125. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
  126. package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
  127. package/dist/runtime/foundation/request-runtime.d.ts +17 -0
  128. package/dist/runtime/foundation/request-runtime.js +163 -0
  129. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  130. package/dist/runtime/foundation/service-discovery-registry.js +6 -0
  131. package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
  132. package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
  133. package/dist/runtime/foundation/service-mailbox.js +4 -1
  134. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
  135. package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
  136. package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
  137. package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
  138. package/dist/runtime/foundation/service-stateful-registry.js +38 -17
  139. package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
  140. package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
  141. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
  142. package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
  143. package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
  144. package/dist/runtime/foundation/service-topology-registry.js +13 -3
  145. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  146. package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
  147. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
  148. package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
  149. package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
  150. package/dist/runtime/host/actor-packet-relay.js +58 -57
  151. package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
  152. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  153. package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
  154. package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
  155. package/dist/runtime/host/application-job-queue.d.ts +7 -5
  156. package/dist/runtime/host/application-job-queue.js +33 -21
  157. package/dist/runtime/host/bound-session-relay.js +0 -1
  158. package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
  159. package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
  160. package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
  161. package/dist/runtime/host/entry-actor-runtime.js +2 -2
  162. package/dist/runtime/host/index.d.ts +106 -37
  163. package/dist/runtime/host/index.js +303 -151
  164. package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
  165. package/dist/runtime/host/location-runtime-owner.js +1 -1
  166. package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
  167. package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
  168. package/dist/runtime/host/spot-address-transport.d.ts +3 -0
  169. package/dist/runtime/host/spot-address-transport.js +73 -76
  170. package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
  171. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
  172. package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
  173. package/dist/runtime/internal-observation.d.ts +1 -0
  174. package/dist/runtime/internal-observation.js +5 -0
  175. package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
  176. package/dist/runtime/locations/actor-location-claims.js +15 -6
  177. package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
  178. package/dist/runtime/locations/auto-connect-loop.js +25 -19
  179. package/dist/runtime/locations/auto-connect-planner.js +2 -5
  180. package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
  181. package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
  182. package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
  183. package/dist/runtime/locations/in-memory-authority-store.js +15 -5
  184. package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
  185. package/dist/runtime/locations/in-memory-location-store.js +1 -38
  186. package/dist/runtime/locations/lifecycle.d.ts +1 -1
  187. package/dist/runtime/locations/lifecycle.js +2 -2
  188. package/dist/runtime/locations/location-store-repository.d.ts +0 -1
  189. package/dist/runtime/locations/location-store-repository.js +163 -246
  190. package/dist/runtime/locations/resolvers.d.ts +8 -1
  191. package/dist/runtime/locations/resolvers.js +16 -2
  192. package/dist/runtime/locations/runtime.d.ts +3 -3
  193. package/dist/runtime/locations/runtime.js +12 -16
  194. package/dist/runtime/messaging/creation-payload-codec.js +8 -7
  195. package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
  196. package/dist/runtime/messaging/framework-json-v1.js +6 -2
  197. package/dist/runtime/messaging/payload-codec.js +21 -35
  198. package/dist/runtime/messaging/request-deadline.d.ts +4 -2
  199. package/dist/runtime/messaging/request-deadline.js +40 -25
  200. package/dist/runtime/messaging/request-result.d.ts +14 -1
  201. package/dist/runtime/messaging/request-result.js +74 -13
  202. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
  203. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
  204. package/dist/runtime/spots/index.d.ts +28 -7
  205. package/dist/runtime/spots/index.js +31 -6
  206. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
  207. package/dist/runtime/spots/spot-activation-registry.js +13 -8
  208. package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
  209. package/dist/runtime/spots/spot-activation-state.js +1 -0
  210. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
  211. package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
  212. package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
  213. package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
  214. package/dist/runtime/spots/spot-actor-membership.js +3 -3
  215. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
  216. package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
  217. package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
  218. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
  219. package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
  220. package/dist/runtime/spots/spot-entry-activation.js +7 -12
  221. package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
  222. package/dist/runtime/spots/spot-handler-registry.js +31 -15
  223. package/dist/runtime/spots/spot-manager-public.js +3 -2
  224. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
  225. package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
  226. package/dist/runtime/spots/spot-outbound.d.ts +8 -2
  227. package/dist/runtime/spots/spot-outbound.js +5 -5
  228. package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
  229. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
  230. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
  231. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
  232. package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
  233. package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
  234. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
  235. package/dist/runtime/spots/spot-timer.d.ts +1 -1
  236. package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
  237. package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
  238. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
  239. package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
  240. package/dist/runtime/streams/bound-session-service.js +6 -7
  241. package/dist/runtime/streams/index.d.ts +3 -3
  242. package/dist/runtime/streams/index.js +22 -2
  243. package/dist/runtime/streams/managed-stream.js +2 -1
  244. package/dist/runtime/streams/session-calls.d.ts +1 -1
  245. package/dist/runtime/streams/session-calls.js +3 -9
  246. package/dist/runtime/streams/session-context.d.ts +2 -2
  247. package/dist/runtime/streams/session-context.js +2 -2
  248. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
  249. package/dist/runtime/streams/stream-session-runtime.js +64 -33
  250. package/package.json +3 -3
  251. package/src/contracts/Actors/ZLinkActor.ts +6 -0
  252. package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
  253. package/src/contracts/Actors/index.ts +1 -0
  254. package/src/contracts/Common/CoreTypes.ts +1 -0
  255. package/src/contracts/Common/HandlerMessageType.ts +50 -0
  256. package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
  257. package/src/contracts/Common/ZLinkMessage.ts +11 -7
  258. package/src/contracts/Common/encoded-payload-storage.ts +4 -16
  259. package/src/contracts/Common/index.ts +1 -1
  260. package/src/contracts/Common/payload-slab.ts +29 -0
  261. package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
  262. package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
  263. package/src/contracts/Handlers/Contexts.ts +1 -0
  264. package/src/contracts/Locations/Authority.ts +7 -1
  265. package/src/internal.ts +17 -0
  266. package/src/nest-integration.ts +1 -0
  267. package/src/runtime/actors/actor-client.ts +257 -163
  268. package/src/runtime/actors/actor-context.ts +26 -14
  269. package/src/runtime/actors/actor-execution-context.ts +2 -2
  270. package/src/runtime/actors/actor-handoff.ts +86 -51
  271. package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
  272. package/src/runtime/actors/actor-local-native-join.ts +38 -17
  273. package/src/runtime/actors/actor-mailbox.ts +1 -1
  274. package/src/runtime/actors/actor-remote-joiner.ts +8 -4
  275. package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
  276. package/src/runtime/actors/actor-routed-json-request.ts +3 -0
  277. package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
  278. package/src/runtime/actors/actor-runtime-state.ts +1 -1
  279. package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
  280. package/src/runtime/admission.ts +42 -15
  281. package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
  282. package/src/runtime/backend/contracts/index.ts +77 -10
  283. package/src/runtime/backend/mesh-completion-table.ts +106 -15
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
  285. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
  286. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
  287. package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
  288. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
  289. package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
  290. package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
  291. package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
  292. package/src/runtime/backend/raw-binding-port.ts +13 -5
  293. package/src/runtime/channels/channel-clients.ts +26 -11
  294. package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
  295. package/src/runtime/channels/channel-dispatch-services.ts +7 -12
  296. package/src/runtime/channels/channel-dispatchers.ts +93 -39
  297. package/src/runtime/channels/channel-envelope.ts +680 -144
  298. package/src/runtime/channels/channel-multipart.ts +17 -13
  299. package/src/runtime/channels/channel-outbound-operations.ts +204 -178
  300. package/src/runtime/channels/channel-receive-loops.ts +160 -107
  301. package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
  302. package/src/runtime/channels/channel-runtime-manager.ts +74 -27
  303. package/src/runtime/channels/channel-socket-registry.ts +20 -5
  304. package/src/runtime/channels/channel-transports.ts +414 -287
  305. package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
  306. package/src/runtime/channels/local-spot-route-transport.ts +27 -29
  307. package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
  308. package/src/runtime/channels/source-spot-router.ts +75 -38
  309. package/src/runtime/channels/spot-node-route-transport.ts +67 -37
  310. package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
  311. package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
  312. package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
  313. package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
  314. package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
  315. package/src/runtime/diagnostics/message-flow-record.ts +295 -0
  316. package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
  317. package/src/runtime/diagnostics/message-flow.ts +49 -362
  318. package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
  319. package/src/runtime/execution/index.ts +6 -0
  320. package/src/runtime/execution/serial-execution-queue.ts +94 -96
  321. package/src/runtime/foundation/durable-service-request.ts +212 -89
  322. package/src/runtime/foundation/operation-registry.ts +287 -38
  323. package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
  324. package/src/runtime/foundation/request-runtime.ts +227 -0
  325. package/src/runtime/foundation/service-discovery-registry.ts +7 -0
  326. package/src/runtime/foundation/service-liveness-registry.ts +1 -1
  327. package/src/runtime/foundation/service-mailbox.ts +7 -2
  328. package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
  329. package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
  330. package/src/runtime/foundation/service-stateful-registry.ts +52 -19
  331. package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
  332. package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
  333. package/src/runtime/foundation/service-topology-registry.ts +21 -3
  334. package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
  335. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
  336. package/src/runtime/host/actor-packet-relay.ts +160 -156
  337. package/src/runtime/host/actor-placement-coordinator.ts +1 -1
  338. package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
  339. package/src/runtime/host/actor-transfer-runtime.ts +3 -3
  340. package/src/runtime/host/application-job-queue.ts +56 -27
  341. package/src/runtime/host/bound-session-relay.ts +0 -1
  342. package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
  343. package/src/runtime/host/entry-actor-runtime.ts +14 -6
  344. package/src/runtime/host/index.ts +388 -113
  345. package/src/runtime/host/location-runtime-owner.ts +3 -3
  346. package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
  347. package/src/runtime/host/spot-address-transport.ts +110 -95
  348. package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
  349. package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
  350. package/src/runtime/internal-observation.ts +2 -0
  351. package/src/runtime/locations/actor-location-claims.ts +42 -16
  352. package/src/runtime/locations/auto-connect-loop.ts +24 -16
  353. package/src/runtime/locations/auto-connect-planner.ts +2 -5
  354. package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
  355. package/src/runtime/locations/in-memory-authority-store.ts +27 -7
  356. package/src/runtime/locations/in-memory-location-store.ts +1 -74
  357. package/src/runtime/locations/lifecycle.ts +4 -2
  358. package/src/runtime/locations/location-store-repository.ts +228 -308
  359. package/src/runtime/locations/resolvers.ts +20 -8
  360. package/src/runtime/locations/runtime.ts +16 -28
  361. package/src/runtime/messaging/creation-payload-codec.ts +12 -10
  362. package/src/runtime/messaging/framework-json-v1.ts +10 -1
  363. package/src/runtime/messaging/payload-codec.ts +50 -75
  364. package/src/runtime/messaging/request-deadline.ts +47 -39
  365. package/src/runtime/messaging/request-result.ts +88 -17
  366. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  367. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  368. package/src/runtime/spots/index.ts +57 -10
  369. package/src/runtime/spots/spot-activation-registry.ts +12 -8
  370. package/src/runtime/spots/spot-activation-state.ts +2 -0
  371. package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
  372. package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
  373. package/src/runtime/spots/spot-actor-membership.ts +8 -5
  374. package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
  375. package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
  376. package/src/runtime/spots/spot-entry-activation.ts +25 -35
  377. package/src/runtime/spots/spot-handler-registry.ts +72 -15
  378. package/src/runtime/spots/spot-manager-public.ts +4 -2
  379. package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
  380. package/src/runtime/spots/spot-outbound.ts +26 -10
  381. package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
  382. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
  383. package/src/runtime/spots/spot-runtime-ports.ts +5 -2
  384. package/src/runtime/spots/spot-serial-executor.ts +1 -1
  385. package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
  386. package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
  387. package/src/runtime/spots/spot-timer.ts +1 -1
  388. package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
  389. package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
  390. package/src/runtime/streams/bound-session-service.ts +10 -7
  391. package/src/runtime/streams/index.ts +30 -4
  392. package/src/runtime/streams/managed-stream.ts +2 -1
  393. package/src/runtime/streams/session-calls.ts +9 -14
  394. package/src/runtime/streams/session-context.ts +6 -11
  395. package/src/runtime/streams/stream-session-runtime.ts +79 -40
  396. package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
  397. package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
  398. package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
@@ -1,3 +1,4 @@
1
+ import { inspectRuntime } from '../internal-observation';
1
2
  import type { ApplicationJobOrigin } from '../application-jobs/contracts';
2
3
  import type { ActorRef, RoutingId, Type, ZLinkMessageSerializer, ZLinkInstanceSpot, ZLinkActor, ZLinkChannelClient, ZLinkFanoutClient, ZLinkSpot, ZLinkSpotActorJoinResult, ZLinkSpotInfo, ZLinkSpotPublisherClient } from '../../contracts';
3
4
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
@@ -9,7 +10,7 @@ export { ZLinkSpotActorAdmissionCoordinator } from './spot-actor-admission-coord
9
10
  import type { ZLinkSpotRouteResolver, ZLinkSpotRouteTarget } from './spot-routing-internal';
10
11
  import type { Message } from '../../contracts/Common/Message';
11
12
  import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
12
- import { ZLinkMessage, ZLinkFrameworkRuntimeState } from '../../contracts';
13
+ import { ZLinkMessage, ZLinkFrameworkRuntimeState, ZLinkSpotCloseReason } from '../../contracts';
13
14
  import { type ZLinkRuntimeEventPublisher } from '../diagnostics';
14
15
  import { type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
15
16
  import type { ZLinkBackendSpot, ZLinkBackendSpotNode } from '../backend/contracts';
@@ -26,9 +27,11 @@ export { DefaultZLinkSpotOutbound, type ZLinkSpotAddressCallOptions, type ZLinkS
26
27
  import { type ZLinkSpotRoutedTransport } from './spot-outbound';
27
28
  export { DefaultZLinkSpotHandlerRegistry, type ZLinkSpotHandlerRegistration } from './spot-handler-registry';
28
29
  export { ZLinkRuntimeSpotPublisherTransport } from './spot-publisher-transport';
30
+ import { ZLinkSpotActivationRegistry } from './spot-activation-registry';
29
31
  import type { ZLinkSpotActivation } from './spot-activation-state';
30
32
  import type { ZLinkSpotPreparationCompletion } from './spot-serial-executor';
31
33
  import { type ZLinkNativeSpotAuthority } from './spot-activation';
34
+ import { ZLinkFormalRemoteActorAdmissionRegistry } from './formal-remote-actor-admission-registry';
32
35
  import type { ZLinkSpotActorHandoffRuntime, ZLinkSpotActorTransferRuntime, ZLinkSpotBoundSessionRuntime } from './spot-runtime-ports';
33
36
  import type { ZLinkRuntimeAdmissionGate, ZLinkMeshDispatchAdmission } from '../admission';
34
37
  import type { ZLinkActivationAdmission } from '../activation-admission';
@@ -40,6 +43,7 @@ export { ZLinkEntrySpotActivation } from './spot-entry-activation';
40
43
  export { createFrameworkEntrySpotId, registrationAcceptsNewActor, ZLinkSpotNodeRuntimeManager, type ZLinkSpotNodeRuntimeManagerOptions } from './spot-node-runtime-manager';
41
44
  export { ZLinkPublicSpotManager, type ZLinkPublicSpotManagerOptions } from './spot-manager-public';
42
45
  export interface ZLinkSpotManagerOptions {
46
+ readonly defaultRequestTimeoutMs?: number;
43
47
  readonly spotFactories: readonly Type<ZLinkSpot>[];
44
48
  readonly instanceSpotFactories?: ReadonlyMap<string, ReadonlyMap<string, Type<ZLinkInstanceSpot>>>;
45
49
  readonly instanceSpotIdleTimeoutMs?: ReadonlyMap<string, number>;
@@ -124,20 +128,33 @@ export interface ZLinkSpotManagerOptions {
124
128
  };
125
129
  readonly activationAdmission?: ZLinkActivationAdmission;
126
130
  }
131
+ interface ZLinkTargetSpotCloseOperation {
132
+ readonly activation: ZLinkSpotActivation;
133
+ readonly reason: ZLinkSpotCloseReason;
134
+ readonly beginAuthority: (onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined>;
135
+ authority?: import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority;
136
+ authorityDecision?: Promise<void>;
137
+ ready?: Promise<boolean>;
138
+ canExecuteApplication?(record: import('../execution/serial-execution-queue').ZLinkSerialWorkRecord<unknown>): boolean;
139
+ }
127
140
  export declare class DefaultZLinkSpotManager {
128
141
  private readonly options;
142
+ [inspectRuntime](): Readonly<{
143
+ activeActivationCount: number;
144
+ hasCloseableActivation: (meshName: string, spotId: RoutingId) => boolean;
145
+ }>;
129
146
  private readonly factories;
130
- private readonly activations;
147
+ readonly activations: ZLinkSpotActivationRegistry;
131
148
  private readonly workerRuntime;
132
149
  private readonly locationClaim;
133
150
  private readonly routedSpotPackets;
134
151
  private readonly actorMembership;
135
152
  private readonly activationLifecycle;
136
153
  private readonly formalRemoteTransfers;
137
- private readonly formalRemoteActorAdmissions;
154
+ readonly formalRemoteActorAdmissions: ZLinkFormalRemoteActorAdmissionRegistry;
138
155
  private readonly pendingInstanceMaterializations;
139
156
  private readonly pendingInstanceMaterializationsByPrefix;
140
- private readonly closeOperations;
157
+ readonly closeOperations: Map<string, ZLinkTargetSpotCloseOperation>;
141
158
  private readonly pendingInstanceTerminals;
142
159
  private readonly pendingInstanceTerminalGenerations;
143
160
  private readonly deferredInstanceAuthorityReleases;
@@ -187,7 +204,7 @@ export declare class DefaultZLinkSpotManager {
187
204
  list(meshName: string): Promise<readonly ZLinkSpotInfo[]>;
188
205
  drainForShutdown(meshName: string, signal?: AbortSignal, deadline?: Date): Promise<void>;
189
206
  close(meshName: string, spotId: RoutingId, signal?: AbortSignal): Promise<boolean>;
190
- closeUserWithAuthority(meshName: string, spotId: RoutingId, beginAuthority: (onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority>, signal?: AbortSignal): Promise<boolean>;
207
+ closeUserWithAuthority(meshName: string, spotId: RoutingId, beginAuthority: (onCommitted: () => void) => Promise<import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority>, signal?: AbortSignal, deadline?: Date): Promise<boolean>;
191
208
  private closeFromContext;
192
209
  private closeWithReason;
193
210
  private runCloseOperation;
@@ -207,9 +224,11 @@ export declare class DefaultZLinkSpotManager {
207
224
  beginActorTransfer(spotId: RoutingId, actorId: string): Promise<void>;
208
225
  cancelActorTransfer(spotId: RoutingId, actorId: string): Promise<void>;
209
226
  notifyJoinedSpotActorDisconnected(spotId: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<boolean>;
210
- dispatchRoutedActorPacket(origin: ApplicationJobOrigin, spotId: RoutingId, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef): Promise<unknown>;
227
+ dispatchRoutedActorPacket(origin: ApplicationJobOrigin, spotId: RoutingId, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
211
228
  /** Resolves the current Actor FIFO owner for both Entry and User membership. */
212
229
  admitSourceActorPacketPrefix(actorId: string, records: readonly ZLinkActorHandoffPrefixRecord[]): ZLinkActorHandoffPrefixAdmission;
230
+ /** Runs an owner-side lifecycle decision in the Actor's existing execution gate. */
231
+ executeActorTurn<T>(meshName: string, spotId: RoutingId | undefined, actorId: string, operation: () => Promise<T>): Promise<T>;
213
232
  dispatchRoutedSpotSend(spotId: RoutingId, packetName: string | undefined, message: unknown, context: {
214
233
  readonly channelName: string;
215
234
  readonly contentType?: string;
@@ -232,7 +251,9 @@ export declare class DefaultZLinkSpotManager {
232
251
  private traceInstanceMessage;
233
252
  dispatchMeshActor(origin: ApplicationJobOrigin, meshName: string, owner: ReadyRecord, record: ReceiveRecord, admit?: ZLinkMeshDispatchAdmission): Promise<void>;
234
253
  dispatchMeshActorJoin(meshName: string, owner: ReadyRecord, record: ReceiveRecord): Promise<void>;
235
- private dispatchMeshActorJoinCore;
254
+ dispatchMeshActorJoinCore(meshName: string, owner: ReadyRecord, record: ReceiveRecord, replyState: {
255
+ targetCommitPublished: boolean;
256
+ }): Promise<void>;
236
257
  dispatchMeshSpotControl(meshName: string, owner: ReadyRecord, record: ReceiveRecord): Promise<void>;
237
258
  private dispatchMeshSpotControlCore;
238
259
  completeFormalSourceLeaveTerminal(actorId: string, transferId: string, succeeded: boolean): Promise<boolean>;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkSpotManager = exports.ZLinkPublicSpotManager = exports.ZLinkSpotNodeRuntimeManager = exports.registrationAcceptsNewActor = exports.createFrameworkEntrySpotId = exports.ZLinkEntrySpotActivation = exports.ZLinkRuntimeSpotPublisherTransport = exports.DefaultZLinkSpotHandlerRegistry = exports.DefaultZLinkSpotOutbound = exports.ZLinkSpotTimerRegistry = exports.ZLinkManagedTimer = exports.ZLinkSpotSerialExecutor = exports.ZLinkSpotSerialTurnExecutor = exports.ZLinkSpotActorAdmissionCoordinator = exports.ZLinkSpotRoutedBoundSessionDispatch = exports.sendToSpotHandle = exports.requestToSpotHandle = exports.resolveSpotHandle = exports.createSpotHandle = void 0;
4
+ const internal_observation_1 = require("../internal-observation");
5
+ const Registration_1 = require("../../contracts/Configuration/Registration");
4
6
  const actor_reply_1 = require("../actors/actor-reply");
5
7
  const bound_session_response_target_1 = require("../streams/bound-session-response-target");
6
8
  const actor_handoff_1 = require("../actors/actor-handoff");
@@ -67,6 +69,12 @@ var spot_manager_public_1 = require("./spot-manager-public");
67
69
  Object.defineProperty(exports, "ZLinkPublicSpotManager", { enumerable: true, get: function () { return spot_manager_public_1.ZLinkPublicSpotManager; } });
68
70
  class DefaultZLinkSpotManager {
69
71
  options;
72
+ [internal_observation_1.inspectRuntime]() {
73
+ return Object.freeze({
74
+ activeActivationCount: this.activations.activeActivations().length,
75
+ hasCloseableActivation: (meshName, spotId) => this.activations.activationForClose(meshName, spotId) !== undefined
76
+ });
77
+ }
70
78
  factories;
71
79
  activations;
72
80
  workerRuntime;
@@ -629,8 +637,8 @@ class DefaultZLinkSpotManager {
629
637
  async close(meshName, spotId, signal) {
630
638
  return await this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose);
631
639
  }
632
- async closeUserWithAuthority(meshName, spotId, beginAuthority, signal) {
633
- return await this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose, undefined, beginAuthority);
640
+ async closeUserWithAuthority(meshName, spotId, beginAuthority, signal, deadline) {
641
+ return await this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose, deadline, beginAuthority);
634
642
  }
635
643
  closeFromContext(activation, objectGeneration, signal) {
636
644
  const { meshName, spotId } = activation;
@@ -650,6 +658,9 @@ class DefaultZLinkSpotManager {
650
658
  return this.closeWithReason(meshName, spotId, signal, contracts_1.ZLinkSpotCloseReason.ExplicitClose, undefined, beginUserAuthority, activation);
651
659
  }
652
660
  async closeWithReason(meshName, spotId, signal, reason = contracts_1.ZLinkSpotCloseReason.ExplicitClose, deadline, beginUserAuthority, contextActivation) {
661
+ if (reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose) {
662
+ deadline ??= new Date(Date.now() + (this.options.defaultRequestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS));
663
+ }
653
664
  requireMeshName(meshName);
654
665
  const key = `${meshName}\0${String(spotId)}`;
655
666
  let operation = this.closeOperations.get(key);
@@ -902,12 +913,12 @@ class DefaultZLinkSpotManager {
902
913
  async notifyJoinedSpotActorDisconnected(spotId, actor, signal) {
903
914
  return await this.actorMembership.notifyJoinedActorDisconnected(spotId, actor, signal);
904
915
  }
905
- dispatchRoutedActorPacket(origin, spotId, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef) {
916
+ dispatchRoutedActorPacket(origin, spotId, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, messageFollowOrigin) {
906
917
  const activation = this.activations.resolveUnique(spotId);
907
918
  if (activation === undefined) {
908
919
  throw new configuration_1.ZLinkConfigurationException(`Spot '${spotId}' is not active.`);
909
920
  }
910
- return this.dispatchActorPacket(origin, activation, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef);
921
+ return this.dispatchActorPacket(origin, activation, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, messageFollowOrigin);
911
922
  }
912
923
  /** @internal Replays a record already owned by the Actor handoff queue. */
913
924
  dispatchRoutedActorPacketDirect(origin, spotId, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef) {
@@ -939,6 +950,20 @@ class DefaultZLinkSpotManager {
939
950
  }
940
951
  return this.admitRoutedActorPacketPrefix(owner.spotId, actorId, records);
941
952
  }
953
+ /** Runs an owner-side lifecycle decision in the Actor's existing execution gate. */
954
+ executeActorTurn(meshName, spotId, actorId, operation) {
955
+ if (spotId === undefined) {
956
+ if (this.options.executeEntryActor === undefined) {
957
+ throw new configuration_1.ZLinkConfigurationException(`Entry Spot Actor '${actorId}' has no execution gate for MeshNode '${meshName}'.`);
958
+ }
959
+ return this.options.executeEntryActor(meshName, actorId, operation);
960
+ }
961
+ const activation = this.resolveApplicationActivation(spotId, meshName);
962
+ if (activation === undefined) {
963
+ throw new configuration_1.ZLinkConfigurationException(`Actor '${actorId}' has no active Spot execution gate for '${String(spotId)}'.`);
964
+ }
965
+ return activation.executeActor(actorId, operation);
966
+ }
942
967
  async dispatchRoutedSpotSend(spotId, packetName, message, context) {
943
968
  await this.routedSpotPackets.send(spotId, packetName, message, context);
944
969
  }
@@ -967,7 +992,7 @@ class DefaultZLinkSpotManager {
967
992
  const codecs = this.options.messageSerializers === undefined
968
993
  ? undefined
969
994
  : { serializers: this.options.messageSerializers };
970
- const decodePayload = () => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs);
995
+ const decodePayload = (messageType) => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs, messageType);
971
996
  const context = {
972
997
  channelName: envelope.header.channelName,
973
998
  contentType: envelope.header.contentType,
@@ -1040,7 +1065,7 @@ class DefaultZLinkSpotManager {
1040
1065
  const codecs = this.options.messageSerializers === undefined
1041
1066
  ? undefined
1042
1067
  : { serializers: this.options.messageSerializers };
1043
- const decodePayload = () => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs);
1068
+ const decodePayload = (messageType) => (0, channel_envelope_1.decodeChannelPayload)(envelope, codecs, messageType);
1044
1069
  const context = {
1045
1070
  channelName: envelope.header.channelName,
1046
1071
  contentType: envelope.header.contentType,
@@ -13,6 +13,7 @@ export interface ZLinkSpotCloseOperation {
13
13
  readonly started: boolean;
14
14
  }
15
15
  export declare class ZLinkSpotActivationRegistry {
16
+ private readonly metrics?;
16
17
  private nextId;
17
18
  private readonly activations;
18
19
  private readonly staged;
@@ -20,9 +21,9 @@ export declare class ZLinkSpotActivationRegistry {
20
21
  private readonly closing;
21
22
  private readonly failedClose;
22
23
  private readonly emptyWaiters;
23
- private readonly lifecycleMetrics;
24
24
  private activeScan;
25
- constructor(metrics?: import('../diagnostics').ZLinkRuntimeMetrics);
25
+ constructor(metrics?: import("../diagnostics").ZLinkRuntimeMetrics | undefined);
26
+ private recordPopulation;
26
27
  allocateSpotId(meshName: string): RoutingId;
27
28
  resolve(meshName: string, spotId: RoutingId): ZLinkSpotActivation | undefined;
28
29
  resolveUnique(spotId: RoutingId): ZLinkSpotActivation | undefined;
@@ -4,11 +4,11 @@ exports.ZLinkSpotActivationRegistry = exports.ZLinkSpotActivation = void 0;
4
4
  const contracts_1 = require("../../contracts");
5
5
  const abort_1 = require("../abort");
6
6
  const framework_errors_internal_1 = require("../framework-errors-internal");
7
- const spot_lifecycle_metrics_1 = require("./spot-lifecycle-metrics");
8
7
  const DEFAULT_ACTIVE_ACTIVATION_BATCH_SIZE = 64;
9
8
  var spot_activation_state_1 = require("./spot-activation-state");
10
9
  Object.defineProperty(exports, "ZLinkSpotActivation", { enumerable: true, get: function () { return spot_activation_state_1.ZLinkSpotActivation; } });
11
10
  class ZLinkSpotActivationRegistry {
11
+ metrics;
12
12
  nextId = 1;
13
13
  activations = new Map();
14
14
  staged = new Set();
@@ -16,10 +16,12 @@ class ZLinkSpotActivationRegistry {
16
16
  closing = new Map();
17
17
  failedClose = new Set();
18
18
  emptyWaiters = new Set();
19
- lifecycleMetrics;
20
19
  activeScan;
21
20
  constructor(metrics) {
22
- this.lifecycleMetrics = new spot_lifecycle_metrics_1.ZLinkSpotLifecycleMetrics(metrics);
21
+ this.metrics = metrics;
22
+ }
23
+ recordPopulation(activation, delta) {
24
+ this.metrics?.recordSpotCount(activation.meshName, activation.domain.kind, delta);
23
25
  }
24
26
  allocateSpotId(meshName) {
25
27
  let spotId;
@@ -60,8 +62,11 @@ class ZLinkSpotActivationRegistry {
60
62
  }
61
63
  finishClose(meshName, spotId) {
62
64
  const key = spotActivationKey(meshName, spotId);
63
- if (this.activations.delete(key))
64
- this.lifecycleMetrics.closed('user');
65
+ const activation = this.activations.get(key);
66
+ if (activation !== undefined) {
67
+ this.activations.delete(key);
68
+ this.recordPopulation(activation, -1);
69
+ }
65
70
  this.staged.delete(key);
66
71
  this.failedClose.delete(key);
67
72
  this.resolveEmptyWaiters();
@@ -124,7 +129,7 @@ class ZLinkSpotActivationRegistry {
124
129
  }
125
130
  if (existing === undefined) {
126
131
  this.activations.set(key, activation);
127
- this.lifecycleMetrics.opened('user');
132
+ this.recordPopulation(activation, 1);
128
133
  }
129
134
  return this.staged.has(key) ? undefined : activation;
130
135
  }
@@ -147,7 +152,7 @@ class ZLinkSpotActivationRegistry {
147
152
  this.activations.delete(key);
148
153
  this.staged.delete(key);
149
154
  this.failedClose.delete(key);
150
- this.lifecycleMetrics.closed('user');
155
+ this.recordPopulation(activation, -1);
151
156
  this.resolveEmptyWaiters();
152
157
  return activation;
153
158
  }
@@ -182,7 +187,7 @@ class ZLinkSpotActivationRegistry {
182
187
  if (completed || resourcesReleased(activation)) {
183
188
  this.activations.delete(key);
184
189
  this.staged.delete(key);
185
- this.lifecycleMetrics.closed('user');
190
+ this.recordPopulation(activation, -1);
186
191
  this.failedClose.delete(key);
187
192
  }
188
193
  else {
@@ -8,6 +8,7 @@ import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
8
8
  import { ZLinkSpotSerialExecutor } from './spot-serial-executor';
9
9
  import type { ZLinkSpotTimerRegistry } from './spot-timer';
10
10
  import type { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
11
+ import type { ZLinkSpotActorPacketDispatch } from './spot-actor-packet-dispatch';
11
12
  import { ZLinkExecutionBarrier, type ZLinkExecutionBarrierSeal } from '../execution';
12
13
  import type { ZLinkTimerRelocationState } from './spot-timer';
13
14
  export type ZLinkSpotActivationDomain = {
@@ -54,6 +55,7 @@ export declare class ZLinkSpotActivation {
54
55
  readonly nativeSpot?: ZLinkBackendSpot;
55
56
  readonly executionBarrier: ZLinkExecutionBarrier;
56
57
  actorDispatch?: ZLinkSpotActorJoinDispatch;
58
+ actorPacketDispatch?: ZLinkSpotActorPacketDispatch;
57
59
  private readonly joinedActors;
58
60
  private readonly departedActorIds;
59
61
  private readonly externalActorCount;
@@ -21,6 +21,7 @@ class ZLinkSpotActivation {
21
21
  nativeSpot;
22
22
  executionBarrier;
23
23
  actorDispatch;
24
+ actorPacketDispatch;
24
25
  joinedActors = new Map();
25
26
  departedActorIds = new Set();
26
27
  externalActorCount;
@@ -1,12 +1,13 @@
1
1
  import type { ApplicationJobOrigin } from '../application-jobs/contracts';
2
- import type { ActorRef } from '../../contracts';
2
+ import type { ActorRef, ZLinkActor } from '../../contracts';
3
3
  import type { Message } from '../../contracts/Common/Message';
4
4
  import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
5
5
  import type { ZLinkBackendSpot } from '../backend/contracts';
6
- import { type ZLinkRemoteBoundSessionTarget } from '../actors';
6
+ import { type ZLinkActorHandoffPacket, type ZLinkActorHandoffResult, type ZLinkRemoteBoundSessionTarget } from '../actors';
7
7
  import type { ZLinkSpotActivationLifecycleOptions } from './spot-activation';
8
8
  import { ZLinkSpotActivation } from './spot-activation-state';
9
9
  import { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
10
+ import type { ZLinkActorPacketExecution } from './spot-actor-packet-dispatch';
10
11
  type AdmissionOptions = Pick<ZLinkSpotActivationLifecycleOptions, 'actorHandoffRuntime' | 'admission' | 'actorResolver' | 'actorTransferRuntime' | 'boundSessionRuntime' | 'detachedTaskRunner' | 'dispatchErrors' | 'locationClaim' | 'messageSerializers' | 'nativeSpotNodeProvider' | 'createTopicMessage' | 'providerResolver' | 'runtimeEventPublisher' | 'routeToActorJoinPrewarm'>;
11
12
  export declare class ZLinkSpotActorAdmissionCoordinator {
12
13
  private readonly options;
@@ -14,8 +15,12 @@ export declare class ZLinkSpotActorAdmissionCoordinator {
14
15
  dispatchActorPacket(origin: ApplicationJobOrigin, activation: ZLinkSpotActivation, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
15
16
  attachNativeActorJoinDispatch(activation: ZLinkSpotActivation, nativeSpot: ZLinkBackendSpot | undefined): ZLinkSpotActorJoinDispatch | undefined;
16
17
  private dispatchActorPacketInActorTurn;
17
- private resolveActor;
18
- private commitTransferredActorTransaction;
18
+ private actorPacketDispatch;
19
+ /** Resolves native lifecycle records; messages use resolveActorIngress. */
20
+ private resolveLifecycleActor;
21
+ commitTransferredActorTransaction(activation: ZLinkSpotActivation, actor: ZLinkActor, backlog: readonly ZLinkActorHandoffPacket[], sealedSession: ZLinkRemoteBoundSessionTarget | undefined): Promise<readonly ZLinkActorHandoffResult[]>;
19
22
  private replayActorBacklog;
20
23
  }
24
+ /** Releases the Actor FIFO before awaiting a transferred admission terminal. */
25
+ export declare function dispatchActorPacketInMailbox<TSerial>(enqueue: (operation: (serial: TSerial) => Promise<ZLinkActorPacketExecution>) => Promise<ZLinkActorPacketExecution>, dispatch: (serial: TSerial) => Promise<ZLinkActorPacketExecution>): Promise<unknown>;
21
26
  export {};
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkSpotActorAdmissionCoordinator = void 0;
4
+ exports.dispatchActorPacketInMailbox = dispatchActorPacketInMailbox;
4
5
  const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
5
6
  const actor_handoff_1 = require("../actors/actor-handoff");
6
7
  const routing_id_1 = require("../routing-id");
@@ -12,10 +13,16 @@ class ZLinkSpotActorAdmissionCoordinator {
12
13
  this.options = options;
13
14
  }
14
15
  async dispatchActorPacket(origin, activation, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal, messageFollowOrigin) {
15
- const handoff = this.options.actorHandoffRuntime?.capture(origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, undefined, messageFollowOrigin);
16
- if (handoff !== undefined)
17
- return await handoff;
18
- return await this.dispatchActorPacketDirect(origin, activation, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
16
+ return dispatchActorPacketInMailbox((operation) => activation.executeActor(actorId, operation), (serial) => this.actorPacketDispatch(activation).admitDelivery(serial, {
17
+ origin,
18
+ actorId,
19
+ parts,
20
+ returnResponse,
21
+ remoteBoundSessionTarget,
22
+ fallbackActorRef,
23
+ requestTerminal,
24
+ messageFollowOrigin
25
+ }, this.options.actorHandoffRuntime));
19
26
  }
20
27
  attachNativeActorJoinDispatch(activation, nativeSpot) {
21
28
  if (nativeSpot === undefined)
@@ -25,7 +32,7 @@ class ZLinkSpotActorAdmissionCoordinator {
25
32
  createTopicMessage: requireBackendValueFactory(this.options.createTopicMessage, 'TopicMessage'),
26
33
  serial: activation.serial,
27
34
  actors: {
28
- resolveActor: (actorId) => this.resolveActor(activation, actorId),
35
+ resolveActor: (actorId) => this.resolveLifecycleActor(activation, actorId),
29
36
  getTarget: () => activation.spot,
30
37
  defaultAccept: false,
31
38
  transfer: this.options.actorTransferRuntime === undefined
@@ -38,7 +45,7 @@ class ZLinkSpotActorAdmissionCoordinator {
38
45
  commitTransferredActor: (actor, backlog, sealedSession) => this.commitTransferredActorTransaction(activation, actor, backlog, sealedSession)
39
46
  },
40
47
  packets: {
41
- handle: (delivery) => this.dispatchActorPacket('remote', activation, delivery.actorId, delivery.parts, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef),
48
+ handle: (delivery) => this.dispatchActorPacket('remote', activation, delivery.actorId, delivery.parts, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef, delivery.requestTerminal, delivery.messageFollowOrigin),
42
49
  bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
43
50
  const node = this.options.nativeSpotNodeProvider?.(activation.meshName);
44
51
  if (node === undefined || (0, routing_id_1.routingIdsEqual)(sourceNodeRid, node.routingId))
@@ -76,13 +83,20 @@ class ZLinkSpotActorAdmissionCoordinator {
76
83
  return activation.admitActorPacketPrefix(actorId, records, (actorSerial, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => this.dispatchActorPacketInActorTurn((0, application_job_queue_scope_1.currentApplicationJobOrigin)(), activation, actorSerial, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef));
77
84
  }
78
85
  dispatchActorPacketInActorTurn(origin, activation, actorSerial, actorId, parts, returnResponse = false, remoteBoundSessionTarget, fallbackActorRef, requestTerminal) {
79
- return new spot_actor_packet_dispatch_1.ZLinkSpotActorPacketDispatch({
86
+ return this.actorPacketDispatch(activation).dispatch(actorSerial, origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
87
+ }
88
+ actorPacketDispatch(activation) {
89
+ if (activation.actorPacketDispatch !== undefined)
90
+ return activation.actorPacketDispatch;
91
+ activation.actorPacketDispatch = new spot_actor_packet_dispatch_1.ZLinkSpotActorPacketDispatch({
92
+ admission: this.options.admission,
80
93
  spot: activation.spot,
81
94
  spotId: () => String(activation.spotId),
82
95
  registry: activation.actorHandlers,
83
- serial: actorSerial,
84
- resolveActor: (targetActorId) => this.resolveActor(activation, targetActorId),
85
- actorLeft: (targetActorId) => activation.hasDepartedActor(targetActorId),
96
+ resolveActor: (targetActorId) => this.options.actorResolver === undefined
97
+ ? activation.resolveJoinedActor(targetActorId)
98
+ : this.options.actorResolver(targetActorId),
99
+ hasDepartedActor: (targetActorId) => activation.hasDepartedActor(targetActorId),
86
100
  onDisconnectActor: (actor) => activation.serial.execute(() => activation.spot.onDisconnectActor?.(actor)),
87
101
  actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(this.options.boundSessionRuntime),
88
102
  actorErrorSender: this.options.boundSessionRuntime?.sendActorError.bind(this.options.boundSessionRuntime),
@@ -90,9 +104,11 @@ class ZLinkSpotActorAdmissionCoordinator {
90
104
  messageSerializers: this.options.messageSerializers,
91
105
  dispatchErrors: this.options.dispatchErrors,
92
106
  routeToActorJoinPrewarm: this.options.routeToActorJoinPrewarm
93
- }).dispatch(origin, actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal);
107
+ });
108
+ return activation.actorPacketDispatch;
94
109
  }
95
- resolveActor(activation, actorId) {
110
+ /** Resolves native lifecycle records; messages use resolveActorIngress. */
111
+ resolveLifecycleActor(activation, actorId) {
96
112
  if (activation.hasDepartedActor(actorId))
97
113
  return undefined;
98
114
  // The manager owns relocation visibility. Membership alone cannot publish
@@ -150,3 +166,8 @@ function requireBackendValueFactory(factory, valueName) {
150
166
  return factory();
151
167
  };
152
168
  }
169
+ /** Releases the Actor FIFO before awaiting a transferred admission terminal. */
170
+ async function dispatchActorPacketInMailbox(enqueue, dispatch) {
171
+ const result = await enqueue(dispatch);
172
+ return 'terminal' in result ? await result.terminal : result.response;
173
+ }
@@ -0,0 +1,40 @@
1
+ import type { ActorRef, ZLinkActor } from '../../contracts';
2
+ import type { ZLinkActorPacketDelivery, ZLinkActorRequestTerminal } from './spot-actor-packet-dispatch';
3
+ import type { ZLinkRemoteBoundSessionTarget } from '../actors';
4
+ import type { ApplicationJobOrigin } from '../application-jobs/contracts';
5
+ import type { ZLinkSpotActorHandoffRuntime } from './spot-runtime-ports';
6
+ import { createInternalFrameworkException } from '../framework-errors-internal';
7
+ /** Parks an exact Actor incarnation while its accepted Join prepares the target. */
8
+ export type ZLinkRouteToActorJoinPrewarm = (actorId: string, objectGeneration: bigint, arrival: {
9
+ readonly origin: ApplicationJobOrigin;
10
+ readonly header: Buffer;
11
+ readonly payload: Buffer;
12
+ readonly returnResponse: boolean;
13
+ readonly remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget;
14
+ readonly fallbackActorRef?: ActorRef;
15
+ readonly requestTerminal?: ZLinkActorRequestTerminal;
16
+ readonly resolve: (value: unknown) => void;
17
+ readonly reject: (reason: unknown) => void;
18
+ }) => 'parked' | 'not-found';
19
+ export type ZLinkActorIngressRoute = (delivery: ZLinkActorPacketDelivery) => {
20
+ readonly handled: boolean;
21
+ readonly response?: unknown;
22
+ } | undefined;
23
+ export type ZLinkActorIngressAdmission = {
24
+ readonly kind: 'local';
25
+ readonly actor: ZLinkActor;
26
+ } | {
27
+ readonly kind: 'follow' | 'prewarm';
28
+ readonly terminal: Promise<unknown>;
29
+ } | {
30
+ readonly kind: 'stale';
31
+ readonly error: ReturnType<typeof createInternalFrameworkException>;
32
+ };
33
+ /** Fixes one packet owner synchronously at the Actor FIFO head. */
34
+ export declare function resolveActorIngress(delivery: ZLinkActorPacketDelivery, request: boolean, options: {
35
+ readonly handoffRuntime?: ZLinkSpotActorHandoffRuntime;
36
+ readonly routeBeforeLocal?: ZLinkActorIngressRoute;
37
+ readonly resolveActor: (actorId: string) => ZLinkActor | undefined;
38
+ readonly hasDepartedActor?: (actorId: string) => boolean;
39
+ readonly routeToActorJoinPrewarm?: ZLinkRouteToActorJoinPrewarm;
40
+ }): ZLinkActorIngressAdmission;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveActorIngress = resolveActorIngress;
4
+ const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
5
+ const framework_errors_internal_1 = require("../framework-errors-internal");
6
+ /** Fixes one packet owner synchronously at the Actor FIFO head. */
7
+ function resolveActorIngress(delivery, request, options) {
8
+ const handoff = options.handoffRuntime?.capture(delivery.origin, delivery.actorId, delivery.parts, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef, undefined, delivery.messageFollowOrigin);
9
+ if (handoff !== undefined)
10
+ return { kind: 'follow', terminal: handoff };
11
+ const route = options.routeBeforeLocal?.(delivery);
12
+ if (route?.handled === true)
13
+ return { kind: 'follow', terminal: Promise.resolve(route.response) };
14
+ const actor = options.hasDepartedActor?.(delivery.actorId) === true
15
+ ? undefined
16
+ : options.resolveActor(delivery.actorId);
17
+ if (actor !== undefined)
18
+ return { kind: 'local', actor };
19
+ if (options.routeToActorJoinPrewarm !== undefined &&
20
+ delivery.fallbackActorRef !== undefined &&
21
+ (!request || delivery.returnResponse || delivery.requestTerminal !== undefined)) {
22
+ const parked = parkForActorJoinPrewarm(delivery.origin, options.routeToActorJoinPrewarm, delivery.actorId, delivery.parts, request, delivery.returnResponse, delivery.remoteBoundSessionTarget, delivery.fallbackActorRef, delivery.requestTerminal);
23
+ if (parked !== undefined)
24
+ return { kind: 'prewarm', terminal: parked };
25
+ }
26
+ return {
27
+ kind: 'stale',
28
+ error: (0, framework_errors_internal_1.createInternalFrameworkException)((0, actor_message_follow_context_1.actorMessageFollowContext)(delivery.fallbackActorRef) === undefined
29
+ ? framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorRouteNotFound
30
+ : framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale, `SPOT actor is not registered locally: ${delivery.actorId}`)
31
+ };
32
+ }
33
+ function parkForActorJoinPrewarm(origin, routeToActorJoinPrewarm, actorId, parts, isRequest, returnResponse, remoteBoundSessionTarget, fallbackActorRef, requestTerminal) {
34
+ let resolve = () => undefined;
35
+ let reject = () => undefined;
36
+ const result = new Promise((res, rej) => {
37
+ resolve = res;
38
+ reject = rej;
39
+ });
40
+ // A Request's real reply must still travel through the exact mailbox
41
+ // correlation the original caller captured in `requestTerminal` — not
42
+ // through this method's own return value, which the caller only uses
43
+ // to decide whether it still owes a reply itself. Wrapping keeps that
44
+ // reply route intact across the (possibly much later) redelivery at
45
+ // migration time while also releasing the original caller once the
46
+ // real reply has gone out, so it never sends a premature empty one.
47
+ const wrappedRequestTerminal = requestTerminal === undefined
48
+ ? undefined
49
+ : Object.assign(async (response, preparedReply) => {
50
+ try {
51
+ await requestTerminal(response, preparedReply);
52
+ resolve(undefined);
53
+ }
54
+ catch (error) {
55
+ reject(error);
56
+ throw error;
57
+ }
58
+ }, { prepare: requestTerminal.prepare });
59
+ const route = routeToActorJoinPrewarm(actorId, fallbackActorRef.objectGeneration, {
60
+ origin,
61
+ header: Buffer.from(parts[0].data()),
62
+ payload: Buffer.from(parts[1].data()),
63
+ returnResponse,
64
+ remoteBoundSessionTarget,
65
+ fallbackActorRef,
66
+ requestTerminal: wrappedRequestTerminal,
67
+ resolve,
68
+ reject
69
+ });
70
+ if (route !== 'parked')
71
+ return undefined;
72
+ // A Send has no reply to wait for: the migrated redelivery still runs
73
+ // in order later, but this caller's own await is done once parking is
74
+ // confirmed.
75
+ if (!isRequest)
76
+ resolve(undefined);
77
+ return result;
78
+ }
@@ -58,7 +58,7 @@ class ZLinkSpotActorMembership {
58
58
  async leaveActor(spotId, actor, signal, meshName) {
59
59
  (0, abort_1.throwIfAborted)(signal);
60
60
  const activation = this.requireActivation(spotId, meshName);
61
- await this.runLifecycleOperation(activation, () => this.leaveActorCore(activation, actor, signal, meshName));
61
+ await this.runLifecycleOperation(activation, () => this.leaveActorCore(activation, actor, undefined, meshName), signal);
62
62
  }
63
63
  async leaveActorCore(activation, actor, signal, meshName) {
64
64
  const localEntryNodeRid = (meshName === undefined ? undefined : this.options.nodeRidProvider?.(meshName)) ??
@@ -141,8 +141,8 @@ class ZLinkSpotActorMembership {
141
141
  }
142
142
  return activation;
143
143
  }
144
- async runLifecycleOperation(activation, operation) {
145
- const pending = activation.serial.executeLifecycleOperation(operation);
144
+ async runLifecycleOperation(activation, operation, signal) {
145
+ const pending = (0, abort_1.awaitWithAbort)(activation.serial.executeLifecycleOperation(operation), signal);
146
146
  return activation.serial.isCurrentTurn
147
147
  ? await activation.serial.currentTurn.yieldFrameworkPromise(pending)
148
148
  : await pending;