@zlink-systems/framework 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkRuntimeAdmissionGate = void 0;
4
4
  exports.shouldCompactBackingArray = shouldCompactBackingArray;
5
5
  const framework_errors_internal_1 = require("./framework-errors-internal");
6
+ const abort_1 = require("./abort");
6
7
  const BACKING_ARRAY_COMPACTION_MIN_HEAD = 1024;
7
8
  /** 소비한 배열 prefix가 정리 조건에 도달했는지 판정합니다. */
8
9
  function shouldCompactBackingArray(head, length) {
@@ -57,35 +58,59 @@ class ZLinkRuntimeAdmissionGate {
57
58
  }
58
59
  }
59
60
  claim(meshName, operation) {
61
+ const state = this.enter(meshName, operation);
62
+ let closed = false;
63
+ return {
64
+ close: () => {
65
+ if (closed)
66
+ return;
67
+ closed = true;
68
+ exitAdmission(state);
69
+ }
70
+ };
71
+ }
72
+ /**
73
+ * Runs one admitted unit of work. Work that completes synchronously leaves
74
+ * admission in the same turn; asynchronous work leaves it from the single
75
+ * continuation on its result.
76
+ */
77
+ run(meshName, operation, work, onRejected) {
78
+ let state;
79
+ let result;
80
+ try {
81
+ state = this.enter(meshName, operation);
82
+ }
83
+ catch (error) {
84
+ // The domain owns admission rejection completion, just as it owns handler failure.
85
+ return onRejected === undefined ? Promise.reject(error) : onRejected(error);
86
+ }
87
+ try {
88
+ result = work();
89
+ }
90
+ catch (error) {
91
+ exitAdmission(state);
92
+ return Promise.reject(error);
93
+ }
94
+ if (!(0, abort_1.isPromiseLike)(result)) {
95
+ exitAdmission(state);
96
+ return result;
97
+ }
98
+ return Promise.resolve(result).then((value) => {
99
+ exitAdmission(state);
100
+ return value;
101
+ }, (error) => {
102
+ exitAdmission(state);
103
+ throw error;
104
+ });
105
+ }
106
+ enter(meshName, operation) {
60
107
  const state = this.requireState(meshName);
61
108
  if (this.ownerAdmissionOpen() && !state.sealed) {
62
109
  state.active += 1;
63
- let closed = false;
64
- return {
65
- close: () => {
66
- if (closed)
67
- return;
68
- closed = true;
69
- state.active -= 1;
70
- if (state.active === 0) {
71
- let resolve;
72
- while ((resolve = takeWaiter(state)) !== undefined)
73
- resolve();
74
- }
75
- }
76
- };
110
+ return state;
77
111
  }
78
112
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(state.sealedReason, `${operation} was rejected because framework admission is closed.`);
79
113
  }
80
- async run(meshName, operation, work) {
81
- const claim = this.claim(meshName, operation);
82
- try {
83
- return await work();
84
- }
85
- finally {
86
- claim.close();
87
- }
88
- }
89
114
  awaitZero(meshName, signal) {
90
115
  const state = this.requireState(meshName);
91
116
  if (state.active === 0)
@@ -150,6 +175,14 @@ class ZLinkRuntimeAdmissionGate {
150
175
  }
151
176
  }
152
177
  exports.ZLinkRuntimeAdmissionGate = ZLinkRuntimeAdmissionGate;
178
+ function exitAdmission(state) {
179
+ state.active -= 1;
180
+ if (state.active === 0) {
181
+ let resolve;
182
+ while ((resolve = takeWaiter(state)) !== undefined)
183
+ resolve();
184
+ }
185
+ }
153
186
  function takeWaiter(state) {
154
187
  advanceWaiterHead(state);
155
188
  const waiter = state.waiters[state.waiterHead];
@@ -10,33 +10,31 @@ export interface IngressRecordPort {
10
10
  */
11
11
  export declare class ApplicationIngressRecordOwner {
12
12
  private readonly shared;
13
- private readonly stop;
13
+ private stop?;
14
14
  private closed;
15
15
  private constructor();
16
16
  static create(queue: ApplicationJobQueuePort, initialPermit: ApplicationJobPermitPort, record: IngressRecordPort): ApplicationIngressRecordOwner;
17
17
  retain(): ApplicationIngressRecordOwner;
18
18
  takeInitial(domain: ApplicationJobRecordDomain): ApplicationJobRecordLease;
19
- acquire(domain: ApplicationJobRecordDomain, signal?: AbortSignal): Promise<ApplicationJobRecordLease>;
19
+ acquire(domain: ApplicationJobRecordDomain, signal?: AbortSignal): ApplicationJobRecordLease | Promise<ApplicationJobRecordLease>;
20
+ private acquireAdditional;
20
21
  close(): void;
21
22
  private requireOpen;
22
23
  }
23
24
  /** Queue-permit child of one shared raw ingress record. */
24
25
  export declare class ApplicationJobRecordLease implements ApplicationJobPermitPort {
25
26
  private readonly shared;
26
- private readonly permit;
27
+ private permit;
27
28
  private ingressClosed;
28
- private permitReleased;
29
29
  private processingTerminal;
30
- private detachedForHandlerTurn;
31
- private jobReleased;
32
- constructor(shared: SharedIngressRecordState, permit: ApplicationJobPermitPort);
30
+ detachedForHandlerTurn: boolean;
31
+ constructor(shared: SharedIngressRecordState, permit: ApplicationJobPermitPort | undefined);
33
32
  get origin(): ApplicationJobOrigin;
34
33
  markApplicationQueued(): void;
35
34
  detachForHandlerTurn(): void;
36
35
  releaseBeforeHandler(): void;
37
36
  releaseAfterInternalProcessing(): void;
38
37
  close(): void;
39
- private releasePermit;
40
38
  private releaseJobIfTerminal;
41
39
  }
42
40
  declare class SharedIngressRecordState {
@@ -8,7 +8,7 @@ exports.ApplicationJobRecordLease = exports.ApplicationIngressRecordOwner = void
8
8
  */
9
9
  class ApplicationIngressRecordOwner {
10
10
  shared;
11
- stop = new AbortController();
11
+ stop;
12
12
  closed = false;
13
13
  constructor(shared) {
14
14
  this.shared = shared;
@@ -29,13 +29,30 @@ class ApplicationIngressRecordOwner {
29
29
  }
30
30
  return job;
31
31
  }
32
- async acquire(domain, signal) {
33
- this.requireOpen();
34
- const initial = this.shared.takeInitialPermit(domain);
35
- if (initial !== undefined)
36
- return initial;
37
- const waitSignal = signal === undefined ? this.stop.signal : AbortSignal.any([this.stop.signal, signal]);
38
- const permit = await this.shared.acquirePermit(waitSignal);
32
+ acquire(domain, signal) {
33
+ try {
34
+ this.requireOpen();
35
+ const initial = this.shared.takeInitialPermit(domain);
36
+ if (initial !== undefined)
37
+ return initial;
38
+ }
39
+ catch (error) {
40
+ return Promise.reject(error);
41
+ }
42
+ return this.acquireAdditional(domain, signal);
43
+ }
44
+ async acquireAdditional(domain, signal) {
45
+ const stop = (this.stop ??= new AbortController());
46
+ const waitSignal = signal === undefined ? stop.signal : AbortSignal.any([stop.signal, signal]);
47
+ let permit;
48
+ try {
49
+ permit = await this.shared.acquirePermit(waitSignal);
50
+ }
51
+ catch (error) {
52
+ if (error === ownerClosedError)
53
+ throw ownerClosedError();
54
+ throw error;
55
+ }
39
56
  if (this.closed) {
40
57
  permit.releaseAfterInternalProcessing();
41
58
  throw ownerClosedError();
@@ -46,7 +63,8 @@ class ApplicationIngressRecordOwner {
46
63
  if (this.closed)
47
64
  return;
48
65
  this.closed = true;
49
- this.stop.abort(ownerClosedError());
66
+ // The queue forwards this reason; only a rejected acquisition constructs the error.
67
+ this.stop?.abort(ownerClosedError);
50
68
  this.shared.releaseOwner();
51
69
  }
52
70
  requireOpen() {
@@ -60,10 +78,8 @@ class ApplicationJobRecordLease {
60
78
  shared;
61
79
  permit;
62
80
  ingressClosed = false;
63
- permitReleased = false;
64
81
  processingTerminal = false;
65
82
  detachedForHandlerTurn = false;
66
- jobReleased = false;
67
83
  constructor(shared, permit) {
68
84
  this.shared = shared;
69
85
  this.permit = permit;
@@ -79,11 +95,11 @@ class ApplicationJobRecordLease {
79
95
  this.detachedForHandlerTurn = true;
80
96
  }
81
97
  releaseBeforeHandler() {
82
- this.releasePermit(() => this.permit.releaseBeforeHandler());
98
+ this.permit?.releaseBeforeHandler();
83
99
  }
84
100
  releaseAfterInternalProcessing() {
85
101
  this.processingTerminal = true;
86
- this.releasePermit(() => this.permit.releaseAfterInternalProcessing());
102
+ this.permit?.releaseAfterInternalProcessing();
87
103
  this.releaseJobIfTerminal();
88
104
  }
89
105
  close() {
@@ -96,17 +112,17 @@ class ApplicationJobRecordLease {
96
112
  }
97
113
  this.releaseJobIfTerminal();
98
114
  }
99
- releasePermit(release) {
100
- if (this.permitReleased)
101
- return;
102
- this.permitReleased = true;
103
- release();
104
- }
105
115
  releaseJobIfTerminal() {
106
- if (this.jobReleased || !this.ingressClosed || !this.processingTerminal)
116
+ const permit = this.permit;
117
+ if (permit === undefined || !this.ingressClosed || !this.processingTerminal)
107
118
  return;
108
- this.jobReleased = true;
109
- this.shared.releaseJob();
119
+ this.permit = undefined;
120
+ try {
121
+ this.shared.releaseJob();
122
+ }
123
+ finally {
124
+ permit.releaseStorage?.();
125
+ }
110
126
  }
111
127
  }
112
128
  exports.ApplicationJobRecordLease = ApplicationJobRecordLease;
@@ -174,6 +190,7 @@ class SharedIngressRecordState {
174
190
  this.initialPermit?.releaseAfterInternalProcessing();
175
191
  }
176
192
  finally {
193
+ this.initialPermit?.releaseStorage?.();
177
194
  this.initialPermit = undefined;
178
195
  this.record.close();
179
196
  }
@@ -1,13 +1,27 @@
1
1
  import type { ApplicationJobOrigin, ApplicationJobPermitPort } from './contracts';
2
+ /** Ends the internal processing of one record turn unless its handler detached the permit. */
3
+ export declare function releaseApplicationJobPermitTurn(permit: ApplicationJobPermitPort | undefined): void;
4
+ /**
5
+ * Makes `permit` the current record's permit for the synchronous part of a
6
+ * dispatch. The caller restores the returned previous scope with
7
+ * {@link leaveApplicationJobPermitScope} and releases the turn itself, so a
8
+ * dispatcher that already continues on the handler result needs no second
9
+ * continuation here.
10
+ */
11
+ export declare function enterApplicationJobPermitScope(permit: ApplicationJobPermitPort): ApplicationJobPermitPort | undefined;
12
+ export declare function leaveApplicationJobPermitScope(previous: ApplicationJobPermitPort | undefined): void;
2
13
  /**
3
14
  * Carries the host-owned queue permit through internal async dispatch without
4
15
  * leaking capacity ownership into public handler contracts.
5
16
  */
6
- export declare function runWithApplicationJobPermit<TResult>(permit: ApplicationJobPermitPort, callback: () => Promise<TResult> | TResult): Promise<TResult>;
17
+ export declare function runWithApplicationJobPermit<TResult>(permit: ApplicationJobPermitPort, callback: () => Promise<TResult>): Promise<TResult>;
18
+ export declare function runWithApplicationJobPermit<TResult, TFirst = undefined, TSecond = undefined>(permit: ApplicationJobPermitPort, callback: (first: TFirst, second: TSecond) => Promise<TResult> | TResult, first?: TFirst, second?: TSecond): TResult | Promise<TResult>;
7
19
  /** Releases the current job permit immediately before the first user callback. */
8
20
  export declare function releaseApplicationJobPermitBeforeHandler(): void;
9
21
  /** True while dispatch already owns the host-wide application job permit. */
10
22
  export declare function hasApplicationJobPermit(): boolean;
23
+ /** The current ingress reservation; capacity remains owned by its host queue. */
24
+ export declare function currentApplicationJobPermit(): ApplicationJobPermitPort | undefined;
11
25
  /** Keeps the ingress origin when a durable record later reacquires its permit. */
12
26
  export declare function currentApplicationJobOrigin(): ApplicationJobOrigin;
13
27
  /** Re-enters the captured permit scope when a serial executor runs later. */
@@ -1,45 +1,87 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.releaseApplicationJobPermitTurn = releaseApplicationJobPermitTurn;
4
+ exports.enterApplicationJobPermitScope = enterApplicationJobPermitScope;
5
+ exports.leaveApplicationJobPermitScope = leaveApplicationJobPermitScope;
3
6
  exports.runWithApplicationJobPermit = runWithApplicationJobPermit;
4
7
  exports.releaseApplicationJobPermitBeforeHandler = releaseApplicationJobPermitBeforeHandler;
5
8
  exports.releaseApplicationJobPermitForDurableHandoff = releaseApplicationJobPermitForDurableHandoff;
6
9
  exports.hasApplicationJobPermit = hasApplicationJobPermit;
10
+ exports.currentApplicationJobPermit = currentApplicationJobPermit;
7
11
  exports.currentApplicationJobOrigin = currentApplicationJobOrigin;
8
12
  exports.bindApplicationJobPermit = bindApplicationJobPermit;
9
13
  exports.detachApplicationJobPermit = detachApplicationJobPermit;
10
14
  const node_async_hooks_1 = require("node:async_hooks");
11
15
  const applicationJobPermitScope = new node_async_hooks_1.AsyncLocalStorage();
16
+ function releasePermitTurn() {
17
+ releaseApplicationJobPermitTurn(applicationJobPermitScope.getStore());
18
+ }
19
+ /** Ends the internal processing of one record turn unless its handler detached the permit. */
20
+ function releaseApplicationJobPermitTurn(permit) {
21
+ if (permit !== undefined && !permit.detachedForHandlerTurn)
22
+ permit.releaseAfterInternalProcessing();
23
+ }
12
24
  /**
13
- * Carries the host-owned queue permit through internal async dispatch without
14
- * leaking capacity ownership into public handler contracts.
25
+ * Makes `permit` the current record's permit for the synchronous part of a
26
+ * dispatch. The caller restores the returned previous scope with
27
+ * {@link leaveApplicationJobPermitScope} and releases the turn itself, so a
28
+ * dispatcher that already continues on the handler result needs no second
29
+ * continuation here.
15
30
  */
16
- async function runWithApplicationJobPermit(permit, callback) {
17
- const scope = { permit, detached: false };
18
- return applicationJobPermitScope.run(scope, async () => {
19
- try {
20
- return await callback();
21
- }
22
- finally {
23
- if (!scope.detached)
24
- permit.releaseAfterInternalProcessing();
31
+ function enterApplicationJobPermitScope(permit) {
32
+ const previous = applicationJobPermitScope.getStore();
33
+ applicationJobPermitScope.enterWith(permit);
34
+ return previous;
35
+ }
36
+ function leaveApplicationJobPermitScope(previous) {
37
+ applicationJobPermitScope.enterWith(previous);
38
+ }
39
+ function releasePermitSuccess(value) {
40
+ releasePermitTurn();
41
+ return value;
42
+ }
43
+ function releasePermitFailure(error) {
44
+ releasePermitTurn();
45
+ throw error;
46
+ }
47
+ function runWithApplicationJobPermit(permit, callback, first, second) {
48
+ const previous = applicationJobPermitScope.getStore();
49
+ applicationJobPermitScope.enterWith(permit);
50
+ try {
51
+ const result = callback(first, second);
52
+ if (result !== null && (typeof result === 'object' || typeof result === 'function')) {
53
+ return Promise.resolve(result).then(releasePermitSuccess, releasePermitFailure);
25
54
  }
26
- });
55
+ releasePermitTurn();
56
+ return result;
57
+ }
58
+ catch (error) {
59
+ releasePermitTurn();
60
+ return Promise.reject(error);
61
+ }
62
+ finally {
63
+ applicationJobPermitScope.enterWith(previous);
64
+ }
27
65
  }
28
66
  /** Releases the current job permit immediately before the first user callback. */
29
67
  function releaseApplicationJobPermitBeforeHandler() {
30
- applicationJobPermitScope.getStore()?.permit.releaseBeforeHandler();
68
+ applicationJobPermitScope.getStore()?.releaseBeforeHandler();
31
69
  }
32
70
  /** @internal Returns an ingress permit after a durable queue takes record ownership. */
33
71
  function releaseApplicationJobPermitForDurableHandoff() {
34
- applicationJobPermitScope.getStore()?.permit.releaseAfterInternalProcessing();
72
+ applicationJobPermitScope.getStore()?.releaseAfterInternalProcessing();
35
73
  }
36
74
  /** True while dispatch already owns the host-wide application job permit. */
37
75
  function hasApplicationJobPermit() {
38
76
  return applicationJobPermitScope.getStore() !== undefined;
39
77
  }
78
+ /** The current ingress reservation; capacity remains owned by its host queue. */
79
+ function currentApplicationJobPermit() {
80
+ return applicationJobPermitScope.getStore();
81
+ }
40
82
  /** Keeps the ingress origin when a durable record later reacquires its permit. */
41
83
  function currentApplicationJobOrigin() {
42
- return applicationJobPermitScope.getStore().permit.origin;
84
+ return applicationJobPermitScope.getStore().origin;
43
85
  }
44
86
  /** Re-enters the captured permit scope when a serial executor runs later. */
45
87
  function bindApplicationJobPermit(callback) {
@@ -53,10 +95,9 @@ function bindApplicationJobPermit(callback) {
53
95
  * detached owner must release it at handler entry or at a pre-start terminal.
54
96
  */
55
97
  function detachApplicationJobPermit() {
56
- const scope = applicationJobPermitScope.getStore();
57
- if (scope === undefined)
98
+ const permit = applicationJobPermitScope.getStore();
99
+ if (permit === undefined)
58
100
  return undefined;
59
- scope.permit.detachForHandlerTurn?.();
60
- scope.detached = true;
61
- return scope.permit;
101
+ permit.detachForHandlerTurn();
102
+ return permit;
62
103
  }
@@ -1,13 +1,24 @@
1
1
  export type ApplicationJobOrigin = 'local' | 'remote';
2
2
  export interface ApplicationJobPermitPort {
3
+ /** Reacquires this record's host supply after durable FIFO ownership. */
4
+ reacquire?(signal: AbortSignal): Promise<ApplicationJobPermitPort>;
3
5
  readonly origin: ApplicationJobOrigin;
6
+ readonly detachedForHandlerTurn: boolean;
4
7
  markApplicationQueued(): void;
5
8
  /** Transfers ingress-record cleanup to a detached exact-target handler turn. */
6
- detachForHandlerTurn?(): void;
9
+ detachForHandlerTurn(): void;
7
10
  releaseBeforeHandler(): void;
8
11
  releaseAfterInternalProcessing(): void;
12
+ /** Returns reusable reservation storage only after its ingress lifetime ends. */
13
+ releaseStorage?(): void;
14
+ }
15
+ export interface ApplicationJobReceiveRotationPort {
16
+ reserve(): void;
17
+ take(): ApplicationJobPermitPort | undefined;
18
+ releaseUnused(): void;
9
19
  }
10
20
  export interface ApplicationJobQueuePort {
21
+ createReceiveRotation(capacity: number, origin: ApplicationJobOrigin): ApplicationJobReceiveRotationPort;
11
22
  acquire(signal: AbortSignal | undefined, origin: ApplicationJobOrigin): Promise<ApplicationJobPermitPort>;
12
23
  /** Returns a grant now, or registers one FIFO waiter that later calls resume. */
13
24
  acquireOrResume(resume: (permit: ApplicationJobPermitPort) => void, reject: (reason: unknown) => void, signal: AbortSignal | undefined, origin: ApplicationJobOrigin): ApplicationJobPermitPort | undefined;
@@ -32,9 +32,17 @@ export type ZLinkBackendObjectPlacement = {
32
32
  } | {
33
33
  readonly kind: 'unavailable';
34
34
  };
35
+ export type ZLinkBackendRequestSourceAcceptance = (nodeRid: string, nodeGeneration: bigint, nodeRidStorageHex: string, signal?: AbortSignal) => import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined | Promise<import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined>;
35
36
  export interface ZLinkBackendMeshNode {
37
+ acceptRelocatedActorTerminal?(operation: {
38
+ readonly high: bigint;
39
+ readonly low: bigint;
40
+ }, replyRouteId: bigint, result: import('../../foundation/service-stateful-runtime').ServiceStatefulResult): 'terminalReceived' | 'alreadyTerminal' | undefined;
41
+ readonly routingId?: RoutingId;
42
+ cancelPendingOperations?(reason: unknown): void;
36
43
  completeClosedInstance?(spotId: string, objectGeneration: bigint): void;
37
44
  setDispatchErrorReporter?(reporter: import('../../channels/dispatch-error-reporter').ZLinkDispatchErrorReporter, meshName: string): void;
45
+ setSessionOwnerDescriptors?(source: import('../../foundation/service-stateful-runtime').ServiceSessionOwnerDescriptors): void;
38
46
  setRoutingId(routingId: unknown): void;
39
47
  setBind(endpoint: string): void;
40
48
  setAdvertiseHost(host: string): void;
@@ -51,9 +59,9 @@ export interface ZLinkBackendMeshNode {
51
59
  }) => void): void;
52
60
  setMessageFollowHandler?(handler: (record: import('../../foundation/service-stateful-wire-codec').ServiceMessageFollowRecord) => void): void;
53
61
  sendMessageFollowNotification?(targetNodeRid: string, record: Omit<import('../../foundation/service-stateful-wire-codec').ServiceMessageFollowRecord, 'kind'>): Promise<boolean>;
54
- shutdown(timeoutMs: number): RequestResult;
62
+ shutdown(timeoutMs: number): Promise<RequestResult>;
55
63
  publishDraining?(): Promise<void>;
56
- close(): void;
64
+ close(): Promise<void>;
57
65
  addChannelName(name: string): void;
58
66
  setChannelWeight(name: string, weight: number): Promise<void>;
59
67
  setPlacementWeight(weight: number): Promise<void>;
@@ -68,9 +76,9 @@ export interface ZLinkBackendMeshNode {
68
76
  selectObjectPlacement(stableType: string): ZLinkBackendObjectPlacement;
69
77
  instanceSpotPlacementTypes?(): readonly string[];
70
78
  sendToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>): Promise<SubmitResult>;
71
- requestToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>): MeshOperationId;
79
+ requestToMissingInstanceSpot(target: ServiceInstanceColdActivationTarget, parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[], deadlineUnixMs: bigint, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, onAdmitted?: () => void): MeshOperationId;
72
80
  sendToInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean): Promise<SubmitResult>;
73
- requestInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], timeoutMs?: number, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean): MeshOperationId;
81
+ requestInstanceSpot(route: ServiceInstanceRouteFence, parts: MessageLike | readonly MessageLike[], timeoutMs?: number, sourceSpotId?: string, metadata?: ReadonlyMap<string, string>, instanceIntent?: boolean, onAdmitted?: () => void): MeshOperationId;
74
82
  registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
75
83
  requestUserSpotCreate(targetNodeRid: string, request: Omit<ServiceUserSpotCreateRecord, 'kind' | 'correlation' | 'operation'>, timeoutMs: number): Promise<ServiceUserSpotOperationResult>;
76
84
  requestUserSpotClose(targetNodeRid: string, request: Omit<ServiceUserSpotCloseRecord, 'kind' | 'correlation' | 'operation'>, timeoutMs: number): Promise<ServiceUserSpotOperationResult>;
@@ -96,11 +104,19 @@ export interface ZLinkBackendMeshNode {
96
104
  readonly securityIdentity?: string;
97
105
  readonly lifecycleGeneration: bigint;
98
106
  }): void;
107
+ /**
108
+ * Installs the source request owner check the first accepting owner runs on Actor and Spot
109
+ * ingress (Location runtime §9.3). Undefined from the check ends the request Unavailable.
110
+ */
111
+ setRequestSourceAcceptance?(acceptance: ZLinkBackendRequestSourceAcceptance): void;
99
112
  isObjectClientNodeDirectTarget?(targetRid: unknown): boolean;
113
+ observePeerRoute?(targetRid: unknown): import('../../foundation/durable-service-request').PeerRouteObservation;
114
+ hasPeerRouteOrConnectionIntent?(targetRid: unknown, endpoint: string): boolean;
100
115
  isPeerRouteReady?(targetRid: unknown, lifecycleGeneration?: bigint): boolean;
116
+ waitForPeerRoute?(targetRid: unknown, lifecycleGeneration: bigint, deadlineUnixMs: bigint, signal?: AbortSignal): Promise<void>;
101
117
  sendToNode(targetRid: unknown, parts: MessageLike | readonly MessageLike[], options?: {
102
118
  flags?: number;
103
- }): Promise<SubmitResult>;
119
+ }): SubmitResult | Promise<SubmitResult>;
104
120
  /**
105
121
  * Sends service-wire infrastructure frames directly to a peer. Relocation
106
122
  * Prepare may add NODE-INTERNAL sideband frames after its canonical frame.
@@ -114,11 +130,14 @@ export interface ZLinkBackendMeshNode {
114
130
  */
115
131
  requestInfrastructureControlFrames?(targetRid: unknown, frames: readonly Uint8Array[], options?: {
116
132
  readonly timeoutMs?: number;
133
+ readonly signal?: AbortSignal;
134
+ readonly onSubmitted?: (signal: AbortSignal) => Promise<void>;
117
135
  }): Promise<readonly Uint8Array[]>;
118
136
  requestToNode(targetRid: unknown, parts: MessageLike | readonly MessageLike[], options?: {
119
137
  flags?: number;
120
138
  timeoutMs?: number;
121
139
  applicationMetadata?: Buffer;
140
+ onAdmitted?: () => void;
122
141
  }): MeshOperationId;
123
142
  sendToChannel(channelName: string, parts: MessageLike | readonly MessageLike[], options?: {
124
143
  flags?: number;
@@ -127,6 +146,7 @@ export interface ZLinkBackendMeshNode {
127
146
  flags?: number;
128
147
  timeoutMs?: number;
129
148
  applicationMetadata?: Buffer;
149
+ onAdmitted?: () => void;
130
150
  }): MeshOperationId;
131
151
  status(): MeshNodeStatus;
132
152
  peers(): MeshPeerEntry[];
@@ -165,7 +185,8 @@ export interface ZLinkBackendMeshNode {
165
185
  forgetSpotRoute?(spot: ServiceDirectSpotRouteFence['spot'], authorityOwnerGeneration: bigint, storeVersion?: string): void;
166
186
  sealSpotMessageFollowIngress?(source: ServiceDirectSpotRouteFence): ServiceSpotMessageFollowSeal | undefined;
167
187
  abortSpotMessageFollowIngress?(seal: ServiceSpotMessageFollowSeal): boolean;
168
- commitSpotMessageFollowIngress?(seal: ServiceSpotMessageFollowSeal, target: ServiceDirectSpotRouteFence, durationMs: number): Promise<boolean>;
188
+ /** A null target consumes the committed seal without installing a Follow route. */
189
+ commitSpotMessageFollowIngress?(seal: ServiceSpotMessageFollowSeal, target: ServiceDirectSpotRouteFence | null, durationMs: number): Promise<boolean>;
169
190
  joinActorSpot(actor: ZLinkBackendActorRef, targetNodeRid: unknown, targetSpotId: unknown, targetSpotGeneration: bigint, request: ServiceApplicationPayload, timeoutMs?: number): MeshOperationId;
170
191
  joinActorSpotCanonical(actor: ZLinkBackendActorRef, targetNodeRid: unknown, targetSpotId: unknown, targetSpotGeneration: bigint, request: ServiceApplicationPayload, actorFence: {
171
192
  readonly targetNodeGeneration: bigint;
@@ -186,11 +207,14 @@ export interface ZLinkBackendMeshNode {
186
207
  }, timeoutMs?: number): MeshOperationId;
187
208
  sendToActor(actor: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
188
209
  flags?: number;
210
+ routeFence?: import('../../foundation/service-stateful-wire-codec').ServiceActorRouteFence;
189
211
  }): Promise<SubmitResult>;
190
212
  requestToActor(actor: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
191
213
  flags?: number;
192
214
  timeoutMs?: number;
193
215
  applicationMetadata?: Buffer;
216
+ onAdmitted?: () => void;
217
+ routeFence?: import('../../foundation/service-stateful-wire-codec').ServiceActorRouteFence;
194
218
  }): MeshOperationId;
195
219
  actorSendToActor(source: ZLinkBackendActorRef, target: ZLinkBackendActorRef, parts: MessageLike | readonly MessageLike[], options?: {
196
220
  flags?: number;
@@ -199,6 +223,7 @@ export interface ZLinkBackendMeshNode {
199
223
  flags?: number;
200
224
  timeoutMs?: number;
201
225
  applicationMetadata?: Buffer;
226
+ onAdmitted?: () => void;
202
227
  }): MeshOperationId;
203
228
  sendActorBoundSession(actor: ZLinkBackendActorRef, expectedBindingGeneration: bigint, parts: MessageLike | readonly MessageLike[], flags?: number): Promise<SubmitResult>;
204
229
  closeActorBoundSession(actor: ZLinkBackendActorRef, expectedBindingGeneration: bigint, timeoutMs?: number): MeshOperationId;
@@ -283,7 +308,7 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
283
308
  receiveTimeoutMs: number;
284
309
  maxMessageSize: number;
285
310
  send(message: Message | readonly Message[]): Promise<void>;
286
- request(message: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
311
+ request(message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
287
312
  recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
288
313
  }
289
314
  export interface ZLinkBackendReplyOperation {
@@ -297,7 +322,7 @@ export interface ZLinkBackendSendOperation {
297
322
  export interface ZLinkBackendRequestOperation {
298
323
  message(message: MessageLike): ZLinkBackendRequestOperation;
299
324
  timeout(timeoutMs: number): ZLinkBackendRequestOperation;
300
- submit(): Promise<readonly Message[]>;
325
+ submit(onAdmitted?: () => void): Promise<readonly Message[]>;
301
326
  }
302
327
  export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket {
303
328
  setReceiveFlowState(state: ReceiveFlowState): void;
@@ -311,9 +336,9 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
311
336
  setRoutingId(routingId: RoutingId): void;
312
337
  recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
313
338
  send(routingId: RoutingId, message: Message | readonly Message[]): Promise<void>;
314
- request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
339
+ request(routingId: RoutingId, message: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
315
340
  sendToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], flags?: ZLinkBackendSendFlags): Promise<void>;
316
- requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
341
+ requestToSpot(targetNodeRid: RoutingId, targetSpotId: RoutingId, parts: readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
317
342
  disconnectPeer(routingId: RoutingId): void;
318
343
  reply(routingId: RoutingId, replyToken: unknown): ZLinkBackendReplyOperation;
319
344
  reply(routingId: RoutingId, replyToken: unknown, message: Message | readonly Message[]): void;
@@ -413,11 +438,11 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
413
438
  drainReply(): number;
414
439
  drainChannelReply(subjectHandle: bigint): number;
415
440
  setDispatchHandler(handler: (info: ZLinkBackendSpotDispatchInfo) => void): void;
416
- requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
441
+ requestToChannel(channelName: string, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
417
442
  sendToChannel(channelName: string, payload: Message | readonly Message[]): Promise<void>;
418
443
  publish(topic: string, payload: Message | readonly Message[], flags: ZLinkBackendSendFlags): boolean;
419
444
  sendToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[]): Promise<void>;
420
- requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs?: number): Promise<readonly Message[]>;
445
+ requestToSpot(targetRid: RoutingId, spotId: RoutingId, payload: Message | readonly Message[], timeoutMs?: number, onAdmitted?: () => void): Promise<readonly Message[]>;
421
446
  dispose(): Promise<void>;
422
447
  }
423
448
  export interface ZLinkChannelBackendAdapter {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.meshActorSessionNodeAdapter = meshActorSessionNodeAdapter;
4
+ const framework_errors_internal_1 = require("../framework-errors-internal");
4
5
  const submission_result_1 = require("../messaging/submission-result");
5
6
  const mesh_completion_table_1 = require("./mesh-completion-table");
6
7
  function meshActorSessionNodeAdapter(node, completions) {
@@ -16,8 +17,7 @@ function meshActorSessionNodeAdapter(node, completions) {
16
17
  const completion = await completions.submit(() => node.closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs), signal);
17
18
  try {
18
19
  if (completion.terminalResult !== 0 || completion.failureErrno !== 0) {
19
- throw new Error(`Actor '${actor.actorId}' bound-session close failed with result ` +
20
- `'${completion.terminalResult}' and errno '${completion.failureErrno}'.`);
20
+ throw (0, framework_errors_internal_1.wireReplyFailureException)(completion.terminalResult, completion.failureErrno, `Actor '${actor.actorId}' bound-session close failed.`);
21
21
  }
22
22
  }
23
23
  finally {
@@ -16,9 +16,17 @@ export type ZLinkMeshCompletionTerminal = Pick<ReceiveRecord, 'operationId' | 't
16
16
  export type ZLinkMeshCompletionHandler = (terminal: ZLinkMeshCompletionTerminal, materialize: () => ReceiveRecord) => void;
17
17
  export declare class ZLinkMeshCompletionTable {
18
18
  private readonly onDiagnostic?;
19
- private readonly pending;
19
+ private buckets;
20
+ private readonly slots;
21
+ private free;
22
+ private activeCount;
20
23
  private disposed;
21
24
  constructor(onDiagnostic?: ((diagnostic: ZLinkMeshCompletionDiagnostic) => void) | undefined);
25
+ private prepareSlots;
26
+ private bucket;
27
+ private indexSlot;
28
+ private findSlot;
29
+ private releaseSlot;
22
30
  /**
23
31
  * Reserves the dispatcher slot before transport submission. The backend
24
32
  * observes native terminals through Promises, so identity binding finishes