@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -2,6 +2,13 @@ import {
2
2
  ZLinkFrameworkInternalErrorKind,
3
3
  createInternalFrameworkException
4
4
  } from './framework-errors-internal';
5
+ const BACKING_ARRAY_COMPACTION_MIN_HEAD = 1024;
6
+
7
+ /** 소비한 배열 prefix가 정리 조건에 도달했는지 판정합니다. */
8
+ export function shouldCompactBackingArray(head: number, length: number): boolean {
9
+ return head >= BACKING_ARRAY_COMPACTION_MIN_HEAD && head * 2 >= length;
10
+ }
11
+
5
12
  export class ZLinkRuntimeAdmissionGate {
6
13
  private readonly meshes = new Map<string, ZLinkMeshAdmissionState>();
7
14
 
@@ -192,7 +199,7 @@ function compactWaiters(state: ZLinkMeshAdmissionState): void {
192
199
  if (state.waiterCount === 0) {
193
200
  state.waiters.length = 0;
194
201
  state.waiterHead = 0;
195
- } else if (state.waiterHead >= 1024 && state.waiterHead * 2 >= state.waiters.length) {
202
+ } else if (shouldCompactBackingArray(state.waiterHead, state.waiters.length)) {
196
203
  state.waiters.splice(0, state.waiterHead);
197
204
  state.waiterHead = 0;
198
205
  }
@@ -43,12 +43,12 @@ export function hasApplicationJobPermit(): boolean {
43
43
  }
44
44
 
45
45
  /** Re-enters the captured permit scope when a serial executor runs later. */
46
- export function bindApplicationJobPermit<TResult>(
47
- callback: () => Promise<TResult> | TResult
48
- ): () => Promise<TResult> | TResult {
46
+ export function bindApplicationJobPermit<TResult, TArgument>(
47
+ callback: (argument?: TArgument) => Promise<TResult> | TResult
48
+ ): (argument?: TArgument) => Promise<TResult> | TResult {
49
49
  const scope = applicationJobPermitScope.getStore();
50
50
  if (scope === undefined) return callback;
51
- return () => applicationJobPermitScope.run(scope, callback);
51
+ return (argument?: TArgument) => applicationJobPermitScope.run(scope, callback, argument);
52
52
  }
53
53
 
54
54
  /**
@@ -141,14 +141,16 @@ export interface ZLinkBackendMeshNode {
141
141
  route: ServiceInstanceRouteFence,
142
142
  parts: MessageLike | readonly MessageLike[],
143
143
  sourceSpotId?: string,
144
- metadata?: ReadonlyMap<string, string>
144
+ metadata?: ReadonlyMap<string, string>,
145
+ instanceIntent?: boolean
145
146
  ): Promise<SubmitResult>;
146
147
  requestInstanceSpot(
147
148
  route: ServiceInstanceRouteFence,
148
149
  parts: MessageLike | readonly MessageLike[],
149
150
  timeoutMs?: number,
150
151
  sourceSpotId?: string,
151
- metadata?: ReadonlyMap<string, string>
152
+ metadata?: ReadonlyMap<string, string>,
153
+ instanceIntent?: boolean
152
154
  ): MeshOperationId;
153
155
  registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
154
156
  requestUserSpotCreate(
@@ -249,6 +251,12 @@ export interface ZLinkBackendMeshNode {
249
251
  readonly objectGeneration: bigint;
250
252
  }
251
253
  | undefined;
254
+ registerInstanceIntent?(
255
+ instanceType: string,
256
+ route: import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence,
257
+ expectedCurrentRoute?:
258
+ import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence | null
259
+ ): void;
252
260
  waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
253
261
  restoreUserSpotAuthority?(
254
262
  spotId: string,
@@ -269,7 +277,7 @@ export interface ZLinkBackendMeshNode {
269
277
  stableType: string,
270
278
  generation: bigint,
271
279
  authorityOwnerGeneration: bigint,
272
- spotId: string,
280
+ spotId: string | undefined,
273
281
  spotGeneration: bigint,
274
282
  membershipEpoch: bigint
275
283
  ): ZLinkBackendActorRef;
@@ -435,27 +443,6 @@ export interface ZLinkBackendActorRecvInfo {
435
443
  readonly flags: number;
436
444
  }
437
445
 
438
- export interface ZLinkBackendActorJoinInfo {
439
- readonly sourceActor: ZLinkBackendActorRef;
440
- readonly targetActor: ZLinkBackendActorRef;
441
- readonly sourceNodeRid: RoutingId;
442
- readonly sourceSpotId: RoutingId;
443
- readonly targetNodeRid: RoutingId;
444
- readonly targetSpotId: RoutingId;
445
- readonly joinEpoch: bigint;
446
- readonly flags: number;
447
- }
448
-
449
- export interface ZLinkBackendActorJoinRequest {
450
- readonly info: ZLinkBackendActorJoinInfo;
451
- readonly message: Message;
452
- }
453
-
454
- export interface ZLinkBackendActorJoinReplyOperation {
455
- message(message: Message): ZLinkBackendActorJoinReplyOperation;
456
- submit(): void;
457
- }
458
-
459
446
  export interface ZLinkBackendSpotDispatchInfo {
460
447
  readonly event: ZLinkBackendSpotDispatchEvent;
461
448
  readonly subjectKind?: number;
@@ -465,6 +452,7 @@ export interface ZLinkBackendSpotDispatchInfo {
465
452
 
466
453
  export interface ZLinkBackendSocketMonitorEvent {
467
454
  readonly nativeEvent: MonitorEventType;
455
+ readonly readyEdge: boolean;
468
456
  readonly routingId?: unknown;
469
457
  readonly localAddr: string;
470
458
  readonly remoteAddr: string;
@@ -563,6 +551,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
563
551
  }
564
552
 
565
553
  export interface ZLinkBackendPublisherSocket extends ZLinkBackendSocket {
554
+ sendTimeoutMs: number;
566
555
  sendHighWaterMark: number;
567
556
  noDrop: boolean;
568
557
  publish(topic: string, message: Message | readonly Message[]): void;
@@ -734,11 +723,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
734
723
  payload: Message | readonly Message[],
735
724
  timeoutMs?: number
736
725
  ): Promise<readonly Message[]>;
737
- recvActorJoin(flags: ZLinkBackendRecvFlags): ZLinkBackendActorJoinRequest | null;
738
- replyActorJoin(
739
- request: ZLinkBackendActorJoinRequest,
740
- joinResultCode: number
741
- ): ZLinkBackendActorJoinReplyOperation;
742
726
  dispose(): Promise<void>;
743
727
  }
744
728
 
@@ -1,5 +1,4 @@
1
- import { SubmitResult } from './runtime-values';
2
- import { ZLinkSubmitStatus } from '../messaging/submission-result';
1
+ import { classifySubmitResult } from '../messaging/submission-result';
3
2
  import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
4
3
  import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
5
4
 
@@ -15,22 +14,7 @@ export function meshActorSessionNodeAdapter(
15
14
  parts as never,
16
15
  flags
17
16
  );
18
- switch (result) {
19
- case SubmitResult.Ok:
20
- return { status: ZLinkSubmitStatus.Submitted };
21
- case SubmitResult.Backpressured:
22
- case SubmitResult.NotAdmitted:
23
- return { status: ZLinkSubmitStatus.Backpressured };
24
- case SubmitResult.NotFound:
25
- case SubmitResult.InvalidState:
26
- return { status: ZLinkSubmitStatus.TargetNotFound };
27
- case SubmitResult.NotConnected:
28
- return { status: ZLinkSubmitStatus.RouteNotConnected };
29
- case SubmitResult.Terminated:
30
- return { status: ZLinkSubmitStatus.Shutdown };
31
- default:
32
- throw new Error(`Actor bound-session send failed with result '${result}'.`);
33
- }
17
+ return classifySubmitResult(result, 'Actor bound-session send');
34
18
  },
35
19
  async closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs, signal) {
36
20
  if (completions === undefined) {
@@ -1,6 +1,11 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { availableParallelism } from 'node:os';
3
- import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
3
+ import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
4
+ import type {
5
+ ApplicationJobPermitPort,
6
+ ApplicationJobQueuePort
7
+ } from '../application-jobs/contracts';
8
+ import { runZLinkExecutionArea } from '../execution';
4
9
  import {
5
10
  ReadyDomain,
6
11
  type ReadyBatch,
@@ -8,13 +13,20 @@ import {
8
13
  type ReceiveBatch,
9
14
  type ReceiveRecord
10
15
  } from '../foundation/service-runtime-contracts';
16
+ import {
17
+ SERVICE_WIRE_COMMAND_OFFSET,
18
+ SERVICE_WIRE_MAJOR_OFFSET,
19
+ SERVICE_WIRE_PREFIX_SIZE
20
+ } from '../foundation/service-wire-binary-primitives';
21
+ import {
22
+ SERVICE_WIRE_MAGIC,
23
+ SERVICE_WIRE_MAJOR
24
+ } from '../foundation/service-wire-constants.generated';
11
25
  import type { ZLinkBackendMeshNode } from './contracts';
12
- import { runZLinkExecutionArea } from '../execution';
13
- import type {
14
- ApplicationJobPermitPort,
15
- ApplicationJobQueuePort
16
- } from '../application-jobs/contracts';
17
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
26
+ import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
27
+ const DEFAULT_MESH_READY_CAPACITY = 32;
28
+
29
+ const DEFAULT_MESH_PART_CAPACITY = 256;
18
30
 
19
31
  const MESH_DISPATCH_YIELD_RECORDS = 16;
20
32
  const MESH_DISPATCH_YIELD_INTERVAL_MS = 2;
@@ -45,21 +57,10 @@ export interface ZLinkMeshDispatchFailureContext {
45
57
  readonly commandId?: number;
46
58
  }
47
59
 
48
- class ZLinkMeshDispatchFailure extends Error {
49
- constructor(
50
- readonly context: ZLinkMeshDispatchFailureContext,
51
- readonly dispatchCause: unknown
52
- ) {
53
- super('Mesh record dispatch failed.', { cause: dispatchCause });
54
- this.name = 'ZLinkMeshDispatchFailure';
55
- }
56
- }
57
-
58
60
  export class ZLinkMeshDispatchPump {
59
61
  private pendingDomains: number = ReadyDomain.None;
60
62
  private infrastructureScheduled = false;
61
63
  private disposed = false;
62
- private infrastructureDrainPromise?: Promise<void>;
63
64
  private readonly activeDrains = new Set<Promise<void>>();
64
65
  private readonly idleApplicationWorkers = new Set<() => void>();
65
66
  private applicationWorkerCount = 0;
@@ -152,7 +153,7 @@ export class ZLinkMeshDispatchPump {
152
153
  const readyBatch = this.node.createReadyBatch(1);
153
154
  const receiveBatch = this.node.createReceiveBatch(
154
155
  MESH_DISPATCH_RECEIVE_CAPACITY,
155
- this.options.partCapacity ?? 256
156
+ this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
156
157
  );
157
158
  try {
158
159
  for (;;) {
@@ -179,12 +180,8 @@ export class ZLinkMeshDispatchPump {
179
180
  return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
180
181
  }
181
182
 
182
- private reportDispatchError(error: unknown): void {
183
- if (error instanceof ZLinkMeshDispatchFailure) {
184
- this.options.reportError?.(error.dispatchCause, error.context);
185
- return;
186
- }
187
- this.options.reportError?.(error);
183
+ private reportDispatchError(error: unknown, context?: ZLinkMeshDispatchFailureContext): void {
184
+ this.options.reportError?.(error, context);
188
185
  }
189
186
 
190
187
  /**
@@ -205,34 +202,23 @@ export class ZLinkMeshDispatchPump {
205
202
  runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
206
203
  )
207
204
  )
208
- .catch((error) => {
209
- if (error instanceof ZLinkMeshDispatchFailure) {
210
- this.options.reportError?.(error.dispatchCause, error.context);
211
- return;
212
- }
213
- this.options.reportError?.(error);
214
- });
205
+ .catch((error) => this.reportDispatchError(error));
215
206
  this.activeDrains.add(drain);
216
- this.infrastructureDrainPromise = drain;
217
207
  void drain.finally(() => {
218
208
  this.activeDrains.delete(drain);
219
- if (this.infrastructureDrainPromise === drain) {
220
- this.infrastructureDrainPromise = undefined;
221
- this.infrastructureScheduled = false;
222
- if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
223
- this.scheduleInfrastructure();
224
- }
209
+ this.infrastructureScheduled = false;
210
+ if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
211
+ this.scheduleInfrastructure();
225
212
  }
226
213
  });
227
214
  }
228
215
 
229
216
  private async drainInfrastructure(): Promise<void> {
230
217
  const readyBatch = this.node.createReadyBatch(
231
- Math.min(this.options.readyCapacity ?? 32, MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET)
232
- );
233
- const receiveBatch = this.node.createReceiveBatch(
234
- MESH_DISPATCH_RECEIVE_CAPACITY,
235
- this.options.partCapacity ?? 256
218
+ Math.min(
219
+ this.options.readyCapacity ?? DEFAULT_MESH_READY_CAPACITY,
220
+ MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
221
+ )
236
222
  );
237
223
  try {
238
224
  while (!this.disposed) {
@@ -246,7 +232,7 @@ export class ZLinkMeshDispatchPump {
246
232
  const lifecycleBudgetExhausted = await this.drainDomain(
247
233
  ReadyDomain.Infrastructure,
248
234
  readyBatch,
249
- receiveBatch,
235
+ undefined,
250
236
  MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
251
237
  );
252
238
  if (lifecycleBudgetExhausted) {
@@ -255,7 +241,6 @@ export class ZLinkMeshDispatchPump {
255
241
  }
256
242
  }
257
243
  } finally {
258
- receiveBatch.close();
259
244
  readyBatch.close();
260
245
  }
261
246
  }
@@ -263,7 +248,7 @@ export class ZLinkMeshDispatchPump {
263
248
  private async drainDomain(
264
249
  domain: number,
265
250
  readyBatch: ReadyBatch,
266
- receiveBatch: ReceiveBatch,
251
+ receiveBatch: ReceiveBatch | undefined,
267
252
  claimBudget?: number
268
253
  ): Promise<boolean> {
269
254
  let claimsDrained = 0;
@@ -285,85 +270,91 @@ export class ZLinkMeshDispatchPump {
285
270
  for (let index = 0; index < drained.records.length; index += 1) {
286
271
  const claim = readyBatch.takeClaim(index);
287
272
  claimsDrained += 1;
288
- const owner = drained.records[index];
273
+ const owner = drained.records[index]!;
289
274
  // Raw ingress already attached one host permit to each record.
290
275
  // A claim that reserves admission here may receive only that permit's record.
291
- try {
292
- const capacity =
293
- owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
294
- for (;;) {
295
- let claimPermit =
296
- owner.terminalCompletion === true ||
297
- owner.ordinaryIngressPreAdmitted === true ||
298
- domain === ReadyDomain.Infrastructure
299
- ? undefined
300
- : await this.acquirePermit();
301
- try {
302
- if (this.capacityStop.signal.aborted) return false;
303
- receiveBatch.reset(capacity);
304
- const received = claim.recvBatch(receiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
305
- if (!received.ok) break;
306
- // This owner keeps its claim while it drains. Other owners and
307
- // infrastructure may progress if one of its handlers suspends.
308
- if (domain === ReadyDomain.Infrastructure) {
309
- this.infrastructureScheduled = false;
310
- this.infrastructureDrainPromise = undefined;
311
- if ((this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
312
- this.scheduleInfrastructure();
313
- }
314
- }
276
+ const drainClaim = async () => {
277
+ let ownerReceiveBatch = receiveBatch;
278
+ try {
279
+ ownerReceiveBatch ??= this.node.createReceiveBatch(
280
+ MESH_DISPATCH_RECEIVE_CAPACITY,
281
+ this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
282
+ );
283
+ const capacity =
284
+ owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
285
+ for (;;) {
286
+ let claimPermit =
287
+ owner.terminalCompletion === true ||
288
+ owner.ordinaryIngressPreAdmitted === true ||
289
+ domain === ReadyDomain.Infrastructure
290
+ ? undefined
291
+ : await this.acquirePermit();
315
292
  try {
316
- for (const record of received.records) {
317
- if (this.disposed) break;
318
- const permit = record.applicationJobPermit ?? claimPermit;
319
- if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
320
- throw new Error(
321
- 'Pre-admitted raw ingress record lost its Application Job Queue permit.'
322
- );
323
- }
324
- this.recordsSinceYield += 1;
325
- const dispatch = async () => {
326
- try {
327
- await this.options.dispatch(drained.records[index], record);
328
- } catch (error) {
329
- throw new ZLinkMeshDispatchFailure(
330
- meshDispatchFailureContext(record),
331
- error
293
+ if (this.capacityStop.signal.aborted) return;
294
+ ownerReceiveBatch.reset(capacity);
295
+ const received = claim.recvBatch(ownerReceiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
296
+ if (!received.ok) break;
297
+ // This owner keeps its claim while it drains, so its records stay in FIFO order.
298
+ try {
299
+ for (const record of received.records) {
300
+ if (this.disposed) break;
301
+ const permit = record.applicationJobPermit ?? claimPermit;
302
+ if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
303
+ throw new Error(
304
+ 'Pre-admitted raw ingress record lost its Application Job Queue permit.'
332
305
  );
333
306
  }
334
- await record.onTerminalCompletion?.();
335
- };
336
- if (permit === undefined) {
337
- await dispatch();
338
- } else {
339
- if (
340
- domain === ReadyDomain.Application &&
341
- record.applicationJobPermit === undefined
342
- )
343
- permit.markApplicationQueued();
344
- // The scope now owns this reservation, including failure
345
- // and detached handler handoff. Only unused permits remain
346
- // owned by the receive attempt's finally block.
347
- if (permit === claimPermit) claimPermit = undefined;
348
- await runWithApplicationJobPermit(permit, dispatch);
307
+ this.recordsSinceYield += 1;
308
+ const dispatch = async () => {
309
+ try {
310
+ await this.options.dispatch(owner, record);
311
+ await record.onTerminalCompletion?.();
312
+ } catch (error) {
313
+ this.reportDispatchError(error, meshDispatchFailureContext(record));
314
+ }
315
+ };
316
+ if (permit === undefined) {
317
+ await dispatch();
318
+ } else {
319
+ if (
320
+ domain === ReadyDomain.Application &&
321
+ record.applicationJobPermit === undefined
322
+ )
323
+ permit.markApplicationQueued();
324
+ // The scope now owns this reservation, including failure
325
+ // and detached handler handoff. Only unused permits remain
326
+ // owned by the receive attempt's finally block.
327
+ if (permit === claimPermit) claimPermit = undefined;
328
+ await runWithApplicationJobPermit(permit, dispatch);
329
+ }
330
+ const yieldTurn = this.yieldIfNeeded();
331
+ if (yieldTurn !== undefined) await yieldTurn;
332
+ }
333
+ } finally {
334
+ // Batch ownership includes records whose dispatch never began,
335
+ // including on failure or shutdown in the middle of the batch.
336
+ for (const record of received.records) {
337
+ for (const part of record.parts) part.close();
338
+ record.releaseRetainedIngress?.();
349
339
  }
350
- const yieldTurn = this.yieldIfNeeded();
351
- if (yieldTurn !== undefined) await yieldTurn;
352
340
  }
353
341
  } finally {
354
- // Batch ownership includes records whose dispatch never began,
355
- // including on failure or shutdown in the middle of the batch.
356
- for (const record of received.records) {
357
- for (const part of record.parts) part.close();
358
- record.releaseRetainedIngress?.();
359
- }
342
+ claimPermit?.releaseAfterInternalProcessing();
360
343
  }
361
- } finally {
362
- claimPermit?.releaseAfterInternalProcessing();
363
344
  }
345
+ } finally {
346
+ claim.release();
347
+ if (receiveBatch === undefined) ownerReceiveBatch?.close();
364
348
  }
365
- } finally {
366
- claim.release();
349
+ };
350
+ // An application worker drains the one owner it claimed. Infrastructure owners
351
+ // drain independently, so a suspended owner does not hold the other claims.
352
+ if (receiveBatch !== undefined) {
353
+ await drainClaim();
354
+ } else {
355
+ const drain = drainClaim().catch((error) => this.reportDispatchError(error));
356
+ this.activeDrains.add(drain);
357
+ void drain.finally(() => this.activeDrains.delete(drain));
367
358
  }
368
359
  }
369
360
  if (claimBudget !== undefined && claimsDrained >= claimBudget) {
@@ -425,8 +416,11 @@ function meshDispatchFailureContext(record: ReceiveRecord): ZLinkMeshDispatchFai
425
416
  function serviceWireCommand(record: ReceiveRecord): number | undefined {
426
417
  if (record.parts.length !== 1) return undefined;
427
418
  const bytes = record.parts[0]!.data();
428
- return bytes.byteLength >= 5 && bytes[0] === 0x5a && bytes[1] === 0x4d && bytes[2] === 1
429
- ? bytes[3]
419
+ return bytes.byteLength >= SERVICE_WIRE_PREFIX_SIZE &&
420
+ bytes[0] === SERVICE_WIRE_MAGIC[0] &&
421
+ bytes[1] === SERVICE_WIRE_MAGIC[1] &&
422
+ bytes[SERVICE_WIRE_MAJOR_OFFSET] === SERVICE_WIRE_MAJOR
423
+ ? bytes[SERVICE_WIRE_COMMAND_OFFSET]
430
424
  : undefined;
431
425
  }
432
426
 
@@ -1,6 +1,8 @@
1
+ import { constants as osConstants } from 'node:os';
2
+ import { requireOneWayCompletion, ZLinkSubmitStatus } from '../../messaging/submission-result';
1
3
  import { loadBinding } from '../node-backend-adapter';
2
4
  import { SubmitResult, ZLinkBackendResultError } from '../runtime-values';
3
- import { requireOneWayCompletion, ZLinkSubmitStatus } from '../../messaging/submission-result';
5
+ const nativeErrnoValues = osConstants.errno;
4
6
 
5
7
  export type ZLinkBindingModule = typeof import('@zlink-systems/zlink');
6
8
  export const zlink = loadBinding() as ZLinkBindingModule;
@@ -46,7 +48,7 @@ interface ZLinkBindingRequestSubmitOperation {
46
48
  }
47
49
 
48
50
  export function isBindingNotFound(error: unknown): boolean {
49
- return error instanceof zlink.ConfigError && error.result === zlink.ConfigResult.NotFound;
51
+ return error instanceof zlink.ConnectError && error.result === zlink.ConnectResult.NotFound;
50
52
  }
51
53
 
52
54
  function isNonBlockingRecvEmpty(error: unknown): boolean {
@@ -64,7 +66,10 @@ export function isRouteRecvRetryable(error: unknown): boolean {
64
66
  }
65
67
 
66
68
  function isNativeBadAddress(error: { nativeErrno?: unknown; message?: unknown }): boolean {
67
- return error.nativeErrno === 14 || /Bad address/i.test(String(error.message ?? ''));
69
+ return (
70
+ error.nativeErrno === nativeErrnoValues.EFAULT ||
71
+ /Bad address/i.test(String(error.message ?? ''))
72
+ );
68
73
  }
69
74
 
70
75
  export function submitBindingPublish(
@@ -189,7 +194,13 @@ function isSuccessfulOrAlreadyShutdownCloseError(error: unknown): boolean {
189
194
  isContextTerminatedError(error) ||
190
195
  (error instanceof Error &&
191
196
  'code' in error &&
192
- [0, 402, 403].includes((error as { code: number }).code))
197
+ (
198
+ [
199
+ zlink.CloseResult.Ok,
200
+ zlink.CloseResult.Shutdown,
201
+ zlink.CloseResult.InvalidHandle
202
+ ] as readonly number[]
203
+ ).includes((error as { code: number }).code))
193
204
  );
194
205
  }
195
206
 
@@ -239,9 +250,15 @@ function toNativeMessageLike(message: unknown): unknown {
239
250
  return message;
240
251
  }
241
252
 
242
- export function translateBindingResultError(error: unknown): unknown {
253
+ export function translateBindingResultError(
254
+ error: unknown,
255
+ phase: 'submit' | 'completion' = 'completion'
256
+ ): unknown {
243
257
  if (error instanceof zlink.SubmitError) {
244
- return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, { cause: error });
258
+ return new ZLinkBackendResultError('submit', error.result, error.nativeErrno, {
259
+ cause: error,
260
+ phase
261
+ });
245
262
  }
246
263
  if (error instanceof zlink.RequestError) {
247
264
  return new ZLinkBackendResultError('request', error.result, error.nativeErrno, {
@@ -9,13 +9,13 @@ import { zlink } from './node-backend-adapter-support';
9
9
  export class ZLinkNodeEventLoopPoller {
10
10
  private readonly poller = zlink.createPoller();
11
11
  private readonly events = zlink.createPollEvents(1);
12
- private readableHandler: () => void;
12
+ private readableHandler: (receiveReady: boolean, routeReady: boolean) => void;
13
13
  private disposed = false;
14
14
 
15
15
  constructor(
16
16
  socket: Socket,
17
17
  pollCompletion: boolean,
18
- readableHandler: () => void,
18
+ readableHandler: (receiveReady: boolean, routeReady: boolean) => void,
19
19
  pollRoute = false
20
20
  ) {
21
21
  this.readableHandler = readableHandler;
@@ -34,26 +34,22 @@ export class ZLinkNodeEventLoopPoller {
34
34
  }
35
35
  }
36
36
 
37
- setReadableHandler(handler: () => void): void {
37
+ setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void {
38
38
  this.readableHandler = handler;
39
39
  }
40
40
 
41
41
  dispose(): void {
42
42
  if (this.disposed) return;
43
- this.disposed = true;
44
- this.events.close();
45
43
  this.poller.close();
44
+ this.events.close();
45
+ this.disposed = true;
46
46
  }
47
47
 
48
48
  private readonly onReady = (): void => {
49
49
  if (this.disposed) return;
50
50
  const ready = this.poller.wait(this.events, 0);
51
- if (
52
- ready === 0 ||
53
- this.events.hasEvent(0, zlink.PollEventFlag.PollIn) ||
54
- this.events.hasEvent(0, zlink.PollEventFlag.PollRoute)
55
- ) {
56
- this.readableHandler();
57
- }
51
+ const receiveReady = ready === 0 || this.events.hasEvent(0, zlink.PollEventFlag.PollIn);
52
+ const routeReady = ready > 0 && this.events.hasEvent(0, zlink.PollEventFlag.PollRoute);
53
+ if (receiveReady || routeReady) this.readableHandler(receiveReady, routeReady);
58
54
  };
59
55
  }
@@ -32,6 +32,7 @@ export function wrapMonitorSocket(nativeInstance: {
32
32
  function toBackendMonitorEvent(event: MonitorEvent): ZLinkBackendSocketMonitorEvent {
33
33
  return {
34
34
  nativeEvent: event.event,
35
+ readyEdge: (event.flags & zlink.MonitorEventFlag.ConnectionReadyEdge) !== 0,
35
36
  routingId: event.routingId ?? undefined,
36
37
  localAddr: event.localAddr,
37
38
  remoteAddr: event.remoteAddr,