@zlink-systems/framework 0.26.0 → 0.28.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 (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -20,25 +20,19 @@ class OperationCancelledError extends Error {
20
20
  }
21
21
  exports.OperationCancelledError = OperationCancelledError;
22
22
  const systemClock = {
23
- setTimeout(callback, delayMs) {
24
- // A request promise is live work. Raw RouteMesh polling deliberately
25
- // uses unref'ed timers, so this deadline is the handle that keeps a
26
- // submit() caller alive until a reply, cancellation, or deadline settles.
27
- return setTimeout(callback, delayMs);
28
- },
29
- clearTimeout(handle) {
30
- clearTimeout(handle);
31
- }
23
+ now: () => performance.now()
32
24
  };
33
25
  /** Owns request completion so reply, timeout, cancellation, and shutdown race safely. */
34
26
  class OperationRegistry {
35
27
  clock;
28
+ onPendingChanged;
36
29
  entries = new Map();
37
30
  nextId = 1n;
38
- generation = 1n;
31
+ deadlineCursor;
39
32
  closed = false;
40
- constructor(clock = systemClock) {
33
+ constructor(clock = systemClock, onPendingChanged) {
41
34
  this.clock = clock;
35
+ this.onPendingChanged = onPendingChanged;
42
36
  }
43
37
  register(timeoutMs, timeoutOwner = 'registry') {
44
38
  if (this.closed)
@@ -47,20 +41,20 @@ class OperationRegistry {
47
41
  throw new RangeError('timeoutMs must be a non-negative finite number.');
48
42
  }
49
43
  const id = this.nextId++;
50
- const generation = this.generation;
51
44
  let resolve;
52
45
  let reject;
53
46
  const promise = new Promise((onResolve, onReject) => {
54
47
  resolve = onResolve;
55
48
  reject = onReject;
56
49
  });
57
- const entry = { generation, resolve, reject };
50
+ const entry = {
51
+ deadlineMs: timeoutOwner === 'registry' ? this.clock.now() + timeoutMs : undefined,
52
+ resolve,
53
+ reject
54
+ };
58
55
  this.entries.set(id, entry);
59
- // Durable senders classify exhaustion from admission history. Keep their
60
- // identity and cancellation here without racing that decision with a timer.
61
- if (timeoutOwner === 'registry') {
62
- entry.timer = this.clock.setTimeout(() => this.rejectIfCurrent(id, generation, new OperationTimeoutError(id)), timeoutMs);
63
- }
56
+ if (this.entries.size === 1)
57
+ this.onPendingChanged?.();
64
58
  return { id, promise };
65
59
  }
66
60
  complete(id, value) {
@@ -71,9 +65,6 @@ class OperationRegistry {
71
65
  return true;
72
66
  }
73
67
  fail(id, reason) {
74
- return this.failCore(id, reason);
75
- }
76
- failCore(id, reason) {
77
68
  const entry = this.take(id);
78
69
  if (entry === undefined)
79
70
  return false;
@@ -81,7 +72,7 @@ class OperationRegistry {
81
72
  return true;
82
73
  }
83
74
  cancel(id, message) {
84
- return this.failCore(id, new OperationCancelledError(id, message));
75
+ return this.fail(id, new OperationCancelledError(id, message));
85
76
  }
86
77
  isPending(id) {
87
78
  return this.entries.has(id);
@@ -90,39 +81,38 @@ class OperationRegistry {
90
81
  if (this.closed)
91
82
  return;
92
83
  this.closed = true;
93
- this.generation++;
94
- const pending = [...this.entries.entries()];
95
- this.entries.clear();
96
- for (const [, entry] of pending)
97
- this.clearTimer(entry);
98
- for (const [id, entry] of pending) {
99
- entry.reject(new OperationCancelledError(id, reason));
100
- }
84
+ for (const id of this.entries.keys())
85
+ this.cancel(id, reason);
86
+ this.deadlineCursor = undefined;
101
87
  }
102
88
  get size() {
103
89
  return this.entries.size;
104
90
  }
105
- rejectIfCurrent(id, generation, reason) {
106
- const entry = this.entries.get(id);
107
- if (entry === undefined || entry.generation !== generation)
108
- return;
109
- this.entries.delete(id);
110
- this.clearTimer(entry);
111
- entry.reject(reason);
91
+ expire(nowMs, turnDeadlineMs) {
92
+ let expired = 0;
93
+ while (this.clock.now() < turnDeadlineMs) {
94
+ this.deadlineCursor ??= this.entries.entries();
95
+ const current = this.deadlineCursor.next();
96
+ if (current.done === true) {
97
+ this.deadlineCursor = undefined;
98
+ break;
99
+ }
100
+ const [id, entry] = current.value;
101
+ if (entry.deadlineMs !== undefined && entry.deadlineMs <= nowMs) {
102
+ if (this.fail(id, new OperationTimeoutError(id)))
103
+ expired++;
104
+ }
105
+ }
106
+ return expired;
112
107
  }
113
108
  take(id) {
114
109
  const entry = this.entries.get(id);
115
110
  if (entry === undefined)
116
111
  return undefined;
117
112
  this.entries.delete(id);
118
- this.clearTimer(entry);
113
+ if (this.entries.size === 0)
114
+ this.onPendingChanged?.();
119
115
  return entry;
120
116
  }
121
- clearTimer(entry) {
122
- if (entry.timer === undefined)
123
- return;
124
- this.clock.clearTimeout(entry.timer);
125
- entry.timer = undefined;
126
- }
127
117
  }
128
118
  exports.OperationRegistry = OperationRegistry;
@@ -1,7 +1,7 @@
1
+ import { ApplicationIngressRecordOwner } from '../application-jobs/application-ingress-record-owner';
2
+ import type { ApplicationJobQueuePort } from '../application-jobs/contracts';
1
3
  import type { ZLinkRawBindingPort } from '../backend/raw-binding-port';
2
4
  import { SubmitResult } from '../backend/runtime-values';
3
- import type { ApplicationJobQueuePort } from '../application-jobs/contracts';
4
- import { ApplicationIngressRecordOwner } from '../application-jobs/application-ingress-record-owner';
5
5
  import { type PendingOperation } from './operation-registry';
6
6
  import { ServiceLivenessRegistry, type ServiceLivenessTick } from './service-liveness-registry';
7
7
  import { ServiceMailbox, type ServiceMailboxRecord } from './service-mailbox';
@@ -29,6 +29,7 @@ export interface RawServiceIngressRecord {
29
29
  }
30
30
  export type RawServiceIngressHandler = (record: RawServiceIngressRecord) => RawServicePumpResult | undefined | Promise<RawServicePumpResult | undefined>;
31
31
  export interface RawServiceMeshRuntimeOptions {
32
+ readonly onPendingOperationsChanged?: () => void;
32
33
  readonly descriptor: ServiceNodeDescriptor;
33
34
  readonly resolveAdvertisedEndpoint?: (boundEndpoint: string) => string;
34
35
  readonly probeIntervalMs?: number;
@@ -47,6 +48,7 @@ export interface RawServiceMeshRuntimeOptions {
47
48
  readonly command?: number;
48
49
  }) => void;
49
50
  }
51
+ export declare const RAW_MESH_RECEIVE_TIME_BUDGET_MS = 2;
50
52
  /**
51
53
  * RouteMesh M6A runtime built only on the public raw binding package.
52
54
  * It owns protocol, admission, mailbox, request and liveness state.
@@ -105,7 +107,6 @@ export declare class RawServiceMeshRuntime {
105
107
  requestToNode(targetNodeRoutingId: string, payload: ServiceApplicationPayloadInput, timeoutMs: number): PendingOperation<RawServiceRequestResult>;
106
108
  requestToChannel(channelName: string, payload: ServiceApplicationPayloadInput, timeoutMs: number): PendingOperation<RawServiceRequestResult>;
107
109
  private selectChannelTarget;
108
- private isLocalOrReadyPeer;
109
110
  setServiceIngress(handler: RawServiceIngressHandler): void;
110
111
  reserveLocalIngress(signal?: AbortSignal): Promise<ApplicationIngressRecordOwner>;
111
112
  sendService(targetNodeRoutingId: string, parts: readonly Uint8Array[]): Promise<boolean>;
@@ -113,13 +114,15 @@ export declare class RawServiceMeshRuntime {
113
114
  replyService(record: Pick<RawServiceIngressRecord, 'sourceRoutingId' | 'sourceRoute' | 'requestSequence' | 'reply'>, parts: readonly Uint8Array[]): void;
114
115
  reply(request: ServiceMailboxRecord, payload: ServiceApplicationPayloadInput, terminalResult?: number, failureCode?: number): void;
115
116
  pumpOne(nowMs?: number, observe?: RawServicePumpObserver): Promise<RawServicePumpResult>;
116
- setReadableHandler(handler: () => void): void;
117
+ setReadableHandler(handler: (receiveReady: boolean, routeReady: boolean) => void): void;
117
118
  /** Returns whether a receive budget ended before no-data; idle ticks only maintain peers. */
118
- pumpBatch(receiveReady?: boolean): Promise<boolean>;
119
+ pumpBatch(receiveReady?: boolean, routeReady?: boolean): Promise<boolean>;
119
120
  private receiveOne;
120
121
  private reportProtocolError;
121
122
  private replyGenericProtocolError;
122
123
  private processReceived;
124
+ expireOperations(nowMs: number, turnDeadlineMs: number): number;
125
+ get pendingOperationCount(): number;
123
126
  tickLiveness(nowMs?: number): Promise<ServiceLivenessTick>;
124
127
  /**
125
128
  * The socket's one route observer (Core ROUTER §10.1). It replaces the
@@ -1,21 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RawServiceMeshRuntime = void 0;
4
- const runtime_values_1 = require("../backend/runtime-values");
3
+ exports.RawServiceMeshRuntime = exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS = void 0;
4
+ const node_os_1 = require("node:os");
5
5
  const application_ingress_record_owner_1 = require("../application-jobs/application-ingress-record-owner");
6
+ const submission_result_1 = require("../messaging/submission-result");
7
+ const runtime_values_1 = require("../backend/runtime-values");
8
+ const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
6
9
  const operation_registry_1 = require("./operation-registry");
7
10
  const service_liveness_registry_1 = require("./service-liveness-registry");
8
11
  const service_mailbox_1 = require("./service-mailbox");
9
12
  const service_topology_registry_1 = require("./service-topology-registry");
10
- const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
11
13
  const service_wire_codec_1 = require("./service-wire-codec");
12
14
  const service_wire_constants_generated_1 = require("./service-wire-constants.generated");
15
+ const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
16
+ const nativeErrnoValues = node_os_1.constants.errno;
13
17
  // Framework error code 13 (RequestTargetNotFound) is encoded as 14 on a
14
18
  // RequestResult.NotFound reply. Boundary transport results keep failureCode 0.
15
- const REQUEST_TARGET_NOT_FOUND_FAILURE_CODE = 14;
19
+ const RAW_MESH_RECEIVE_RECORD_BUDGET = 64;
20
+ const RAW_MESH_RECEIVE_BYTE_BUDGET = 4 * 1024 * 1024;
21
+ exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS = 2;
22
+ const REQUEST_TARGET_NOT_FOUND_FAILURE_CODE = service_wire_constants_generated_1.ServiceWireFrameworkErrorCode.requestTargetNotFound;
16
23
  const livenessCodec = (0, service_wire_codec_1.createServiceWireCodec)({
17
- magic: [0x5a, 0x4d],
18
- major: 1,
24
+ magic: service_wire_constants_generated_1.SERVICE_WIRE_MAGIC,
25
+ major: service_wire_constants_generated_1.SERVICE_WIRE_MAJOR,
19
26
  commands: service_wire_m6a_codec_1.M6aServiceWireCommand
20
27
  });
21
28
  /**
@@ -26,7 +33,7 @@ class RawServiceMeshRuntime {
26
33
  topology;
27
34
  mailbox;
28
35
  liveness;
29
- operations = new operation_registry_1.OperationRegistry();
36
+ operations;
30
37
  expectedPeers = new Map();
31
38
  endpointOnlyPeers = new Set();
32
39
  peerConnectionIntentRemoved = new Set();
@@ -51,6 +58,7 @@ class RawServiceMeshRuntime {
51
58
  serviceIngress;
52
59
  closed = false;
53
60
  constructor(options) {
61
+ this.operations = new operation_registry_1.OperationRegistry(undefined, options.onPendingOperationsChanged);
54
62
  this.descriptor = options.descriptor;
55
63
  this.topology = new service_topology_registry_1.ServiceTopologyRegistry(options.descriptor);
56
64
  this.mailbox = new service_mailbox_1.ServiceMailbox(options.onMailboxReady);
@@ -102,32 +110,32 @@ class RawServiceMeshRuntime {
102
110
  }
103
111
  connectPeer(endpoint, expected) {
104
112
  this.requireStarted().connectToRoutingId(expected.nodeRoutingId, endpoint);
105
- this.expectedPeers.set(expected.nodeRoutingId, {
113
+ this.expectedPeers.set(expected.nodeRoutingId, Object.assign(this.expectedPeers.get(expected.nodeRoutingId) ?? {}, {
106
114
  meshName: expected.meshName,
107
115
  nodeRoutingId: expected.nodeRoutingId,
108
116
  endpoint,
109
117
  securityIdentity: expected.securityIdentity,
110
118
  lifecycleGeneration: expected.lifecycleGeneration
111
- });
119
+ }));
112
120
  }
113
121
  connectPeerByRoutingId(endpoint, nodeRoutingId, securityIdentity, lifecycleGeneration) {
114
122
  this.requireStarted().connectToRoutingId(nodeRoutingId, endpoint);
115
- this.expectedPeers.set(nodeRoutingId, {
123
+ this.expectedPeers.set(nodeRoutingId, Object.assign(this.expectedPeers.get(nodeRoutingId) ?? {}, {
116
124
  meshName: this.topology.localDescriptor().meshName,
117
125
  nodeRoutingId,
118
126
  endpoint,
119
127
  securityIdentity,
120
128
  lifecycleGeneration
121
- });
129
+ }));
122
130
  }
123
131
  expectPeerByRoutingId(endpoint, nodeRoutingId, securityIdentity, lifecycleGeneration) {
124
- this.expectedPeers.set(nodeRoutingId, {
132
+ this.expectedPeers.set(nodeRoutingId, Object.assign(this.expectedPeers.get(nodeRoutingId) ?? {}, {
125
133
  meshName: this.topology.localDescriptor().meshName,
126
134
  nodeRoutingId,
127
135
  endpoint,
128
136
  securityIdentity,
129
137
  lifecycleGeneration
130
- });
138
+ }));
131
139
  }
132
140
  connectPeerEndpoint(endpoint) {
133
141
  this.requireStarted().connect(endpoint);
@@ -215,11 +223,21 @@ class RawServiceMeshRuntime {
215
223
  listener(nodeRoutingId);
216
224
  }
217
225
  async announcePeer(nodeRoutingId) {
218
- if (!this.expectedPeers.has(nodeRoutingId) || this.peerAdmissionSealed?.() === true)
226
+ const expected = this.expectedPeers.get(nodeRoutingId);
227
+ const generation = this.selectedRoutes.get(nodeRoutingId);
228
+ if (expected === undefined ||
229
+ generation === undefined ||
230
+ expected.helloSubmittedGeneration === generation ||
231
+ this.peerAdmissionSealed?.() === true)
219
232
  return false;
220
- return this.send(nodeRoutingId, [
233
+ const accepted = await this.send(nodeRoutingId, [
221
234
  (0, service_wire_m6a_codec_1.encodeRouteMeshAdmission)(service_wire_m6a_codec_1.M6aServiceWireCommand.hello, this.topology.localDescriptor())
222
235
  ]);
236
+ if (accepted &&
237
+ this.expectedPeers.get(nodeRoutingId) === expected &&
238
+ this.selectedRoutes.get(nodeRoutingId) === generation)
239
+ expected.helloSubmittedGeneration = generation;
240
+ return accepted;
223
241
  }
224
242
  isPeerRouteReady(nodeRoutingId, lifecycleGeneration) {
225
243
  // Admission is bound to the observed selected route: the route observer
@@ -233,11 +251,6 @@ class RawServiceMeshRuntime {
233
251
  async announceExpectedPeers() {
234
252
  let accepted = 0;
235
253
  for (const nodeRoutingId of this.expectedPeers.keys()) {
236
- // Admission is a one-time fence for the current selected route.
237
- // Re-sending Hello after the peer is admitted would re-run admission on
238
- // every poll and reset the liveness record before application traffic
239
- // can use the route. A peer whose selected route ended is removed by the
240
- // route observer and remains eligible for the next admission attempt.
241
254
  if (this.topology.peer(nodeRoutingId) !== undefined)
242
255
  continue;
243
256
  if (await this.announcePeer(nodeRoutingId))
@@ -271,7 +284,6 @@ class RawServiceMeshRuntime {
271
284
  for (const peer of this.topology.peers()) {
272
285
  await this.send(peer.descriptor.nodeRoutingId, [update]);
273
286
  }
274
- await this.announceExpectedPeers();
275
287
  }
276
288
  replaceDiscoveredNotRequired(descriptors) {
277
289
  this.topology.replaceDiscoveredNotRequired(descriptors);
@@ -291,25 +303,6 @@ class RawServiceMeshRuntime {
291
303
  return selection.submitResult;
292
304
  const selected = selection.peer;
293
305
  const applicationFrame = this.applicationFrame(payload);
294
- if (selected.descriptor.nodeRoutingId === this.descriptor.nodeRoutingId) {
295
- const applicationJobOwner = await this.reserveLocalIngress();
296
- try {
297
- const applicationJob = await applicationJobOwner.acquire('application');
298
- const accepted = this.mailbox.tryEnqueue({
299
- owner: `channel:${channelName}`,
300
- domain: 'application',
301
- parts: [(0, service_wire_m6a_codec_1.encodeChannelSendHeader)(channelName), applicationFrame],
302
- sourceRoutingId: this.descriptor.nodeRoutingId,
303
- applicationJob
304
- });
305
- if (!accepted)
306
- applicationJob.close();
307
- return accepted ? runtime_values_1.SubmitResult.Ok : runtime_values_1.SubmitResult.NotAdmitted;
308
- }
309
- finally {
310
- applicationJobOwner.close();
311
- }
312
- }
313
306
  return (await this.send(selected.descriptor.nodeRoutingId, [
314
307
  (0, service_wire_m6a_codec_1.encodeChannelSendHeader)(channelName),
315
308
  applicationFrame
@@ -330,7 +323,7 @@ class RawServiceMeshRuntime {
330
323
  return this.requestToTarget(selection.peer.descriptor.nodeRoutingId, payload, timeoutMs, channelName);
331
324
  }
332
325
  selectChannelTarget(channelName) {
333
- const selected = this.topology.selectChannel(channelName, (peer) => this.isLocalOrReadyPeer(peer.descriptor.nodeRoutingId));
326
+ const selected = this.topology.selectChannel(channelName, (peer) => this.isPeerRouteReady(peer.descriptor.nodeRoutingId));
334
327
  if (selected !== undefined)
335
328
  return { kind: 'selected', peer: selected };
336
329
  return this.topology.hasKnownChannelTarget(channelName)
@@ -348,9 +341,6 @@ class RawServiceMeshRuntime {
348
341
  }
349
342
  };
350
343
  }
351
- isLocalOrReadyPeer(nodeRoutingId) {
352
- return nodeRoutingId === this.descriptor.nodeRoutingId || this.isPeerRouteReady(nodeRoutingId);
353
- }
354
344
  setServiceIngress(handler) {
355
345
  if (this.serviceIngress !== undefined && this.serviceIngress !== handler) {
356
346
  throw new Error('Raw service ingress is already registered.');
@@ -399,15 +389,16 @@ class RawServiceMeshRuntime {
399
389
  this.requireStarted().setReadableHandler(handler);
400
390
  }
401
391
  /** Returns whether a receive budget ended before no-data; idle ticks only maintain peers. */
402
- async pumpBatch(receiveReady = true) {
403
- await this.observeSelectedRoutes();
392
+ async pumpBatch(receiveReady = true, routeReady = false) {
393
+ if (routeReady)
394
+ await this.observeSelectedRoutes();
404
395
  const startedAtMs = performance.now();
405
396
  let messages = 0;
406
397
  let bytes = 0;
407
398
  const observe = (_source, byteCount) => {
408
399
  bytes += byteCount;
409
400
  };
410
- while (receiveReady && messages < 64 && !this.closed) {
401
+ while (receiveReady && messages < RAW_MESH_RECEIVE_RECORD_BUDGET && !this.closed) {
411
402
  const result = await this.receiveOne(performance.now(), observe);
412
403
  if (result === 'noData') {
413
404
  receiveReady = false;
@@ -416,7 +407,8 @@ class RawServiceMeshRuntime {
416
407
  messages += 1;
417
408
  // Core owns the per-peer fair-queue cursor. The Framework limit bounds
418
409
  // the entire round, so changing peers does not renew its byte/count budget.
419
- if (bytes >= 4 * 1024 * 1024 || performance.now() - startedAtMs >= 2)
410
+ if (bytes >= RAW_MESH_RECEIVE_BYTE_BUDGET ||
411
+ performance.now() - startedAtMs >= exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS)
420
412
  break;
421
413
  }
422
414
  if (!this.closed) {
@@ -527,7 +519,9 @@ class RawServiceMeshRuntime {
527
519
  if (expected !== undefined &&
528
520
  (expected.meshName !== descriptor.meshName ||
529
521
  expected.nodeRoutingId !== descriptor.nodeRoutingId)) {
530
- await this.send(received.sourceRid, [(0, service_wire_m6a_codec_1.encodeReject)(3)]);
522
+ await this.send(received.sourceRid, [
523
+ (0, service_wire_m6a_codec_1.encodeReject)((0, service_wire_codec_generated_1.enumWireRejectReason)('identityMismatch'))
524
+ ]);
531
525
  return 'infrastructure';
532
526
  }
533
527
  const result = this.admitPeer(descriptor, routeConnectionId(received.routeGeneration), nowMs, expected);
@@ -558,23 +552,7 @@ class RawServiceMeshRuntime {
558
552
  if (header.command === service_wire_m6a_codec_1.M6aServiceWireCommand.reject) {
559
553
  if (received.parts.length !== 1)
560
554
  return 'protocolError';
561
- const reason = (0, service_wire_m6a_codec_1.decodeReject)(received.parts[0]);
562
- // Keep an already admitted peer: a reject of an earlier Hello on the
563
- // same selected route does not end the admission that succeeded.
564
- if (reason === 4 && this.topology.peer(received.sourceRid) === undefined) {
565
- const expected = this.expectedPeers.get(received.sourceRid);
566
- const local = this.topology.localDescriptor();
567
- this.topology.markNotRequired({
568
- ...local,
569
- nodeRoutingId: received.sourceRid,
570
- lifecycleGeneration: 1n,
571
- descriptorRevision: 1n,
572
- advertisedEndpoint: expected?.endpoint ?? local.advertisedEndpoint,
573
- channels: [],
574
- objectRole: 'client'
575
- });
576
- this.retireNotRequiredExpectedPeer(received.sourceRid);
577
- }
555
+ (0, service_wire_m6a_codec_1.decodeReject)(received.parts[0]);
578
556
  return 'infrastructure';
579
557
  }
580
558
  const peer = this.topology.peer(received.sourceRid);
@@ -587,16 +565,16 @@ class RawServiceMeshRuntime {
587
565
  const record = livenessCodec.decodeLivenessRecord(received.parts[0]);
588
566
  if (record.command === service_wire_m6a_codec_1.M6aServiceWireCommand.livenessProbe) {
589
567
  const ack = this.liveness.acknowledgeProbe(received.sourceRid, peer.connectionId, record.probeId);
590
- const sent = ack !== undefined &&
591
- (await this.send(received.sourceRid, [
592
- livenessCodec.encodeLivenessRecord({
593
- command: service_wire_m6a_codec_1.M6aServiceWireCommand.livenessAck,
594
- probeId: record.probeId
595
- })
596
- ]));
597
- if (!sent) {
568
+ if (ack === undefined)
598
569
  return 'protocolError';
599
- }
570
+ const sent = await this.send(received.sourceRid, [
571
+ livenessCodec.encodeLivenessRecord({
572
+ command: service_wire_m6a_codec_1.M6aServiceWireCommand.livenessAck,
573
+ probeId: record.probeId
574
+ })
575
+ ]);
576
+ if (!sent)
577
+ return 'dropped';
600
578
  }
601
579
  else {
602
580
  this.liveness.acknowledge(received.sourceRid, peer.connectionId, record.probeId, nowMs);
@@ -700,6 +678,12 @@ class RawServiceMeshRuntime {
700
678
  throw error;
701
679
  }
702
680
  }
681
+ expireOperations(nowMs, turnDeadlineMs) {
682
+ return this.operations.expire(nowMs, turnDeadlineMs);
683
+ }
684
+ get pendingOperationCount() {
685
+ return this.operations.size;
686
+ }
703
687
  async tickLiveness(nowMs = performance.now()) {
704
688
  const result = this.liveness.tick(nowMs);
705
689
  this.requireStarted();
@@ -739,6 +723,9 @@ class RawServiceMeshRuntime {
739
723
  if (observed.get(nodeRoutingId) === generation)
740
724
  continue;
741
725
  changes++;
726
+ const expected = this.expectedPeers.get(nodeRoutingId);
727
+ if (expected !== undefined)
728
+ delete expected.helloSubmittedGeneration;
742
729
  const peer = this.topology.peer(nodeRoutingId);
743
730
  if (peer !== undefined && peer.connectionId === routeConnectionId(generation)) {
744
731
  this.removePeer(peer);
@@ -761,7 +748,6 @@ class RawServiceMeshRuntime {
761
748
  close() {
762
749
  if (this.closed)
763
750
  return;
764
- this.closed = true;
765
751
  this.applicationJobStop.abort(new Error('Raw service runtime application job admission stopped.'));
766
752
  this.mailbox.close();
767
753
  this.operations.close('Raw service runtime closed.');
@@ -771,10 +757,11 @@ class RawServiceMeshRuntime {
771
757
  this.applicationJobQueue.unregisterReceiveFlowTarget?.(router);
772
758
  }
773
759
  const host = this.host;
774
- this.router = undefined;
775
- this.host = undefined;
776
760
  if (host !== undefined)
777
761
  host.close();
762
+ this.router = undefined;
763
+ this.host = undefined;
764
+ this.closed = true;
778
765
  }
779
766
  requestToTarget(targetNodeRoutingId, payload, timeoutMs, channelName) {
780
767
  const correlation = this.nextCorrelation++;
@@ -796,13 +783,12 @@ class RawServiceMeshRuntime {
796
783
  for (;;) {
797
784
  const alternate = this.topology.selectChannel(channelName, (peer) => {
798
785
  const candidate = peer.descriptor.nodeRoutingId;
799
- return !excludedTargets.has(candidate) && this.isLocalOrReadyPeer(candidate);
786
+ return !excludedTargets.has(candidate) && this.isPeerRouteReady(candidate);
800
787
  });
801
788
  if (alternate === undefined)
802
789
  break;
803
790
  selectedTargetNodeRoutingId = alternate.descriptor.nodeRoutingId;
804
- if (selectedTargetNodeRoutingId === this.descriptor.nodeRoutingId ||
805
- this.isPeerRouteReady(selectedTargetNodeRoutingId)) {
791
+ if (this.isPeerRouteReady(selectedTargetNodeRoutingId)) {
806
792
  break;
807
793
  }
808
794
  excludedTargets.add(selectedTargetNodeRoutingId);
@@ -824,9 +810,7 @@ class RawServiceMeshRuntime {
824
810
  return;
825
811
  }
826
812
  const accepted = this.mailbox.tryEnqueue({
827
- owner: channelName === undefined
828
- ? `node:${this.descriptor.nodeRoutingId}`
829
- : `channel:${channelName}`,
813
+ owner: `node:${this.descriptor.nodeRoutingId}`,
830
814
  domain: 'application',
831
815
  parts,
832
816
  sourceRoutingId: this.descriptor.nodeRoutingId,
@@ -979,8 +963,13 @@ class RawServiceMeshRuntime {
979
963
  await this.requireStarted().send(targetNodeRoutingId, parts);
980
964
  return true;
981
965
  }
982
- catch {
983
- return false;
966
+ catch (error) {
967
+ if ((0, runtime_values_1.isZLinkBackendResultError)(error) && error.operation === 'submit') {
968
+ const terminal = (0, submission_result_1.submitToRequestResult)(error.result, error.phase);
969
+ if (terminal === runtime_values_1.RequestResult.NotConnected || terminal === runtime_values_1.RequestResult.NotFound)
970
+ return false;
971
+ }
972
+ throw error;
984
973
  }
985
974
  }
986
975
  }
@@ -1019,7 +1008,7 @@ function isAlreadyDisconnectedError(error) {
1019
1008
  if (typeof error !== 'object' || error === null || !('nativeErrno' in error)) {
1020
1009
  return false;
1021
1010
  }
1022
- return error.nativeErrno === 2;
1011
+ return error.nativeErrno === nativeErrnoValues.ENOENT;
1023
1012
  }
1024
1013
  /**
1025
1014
  * An admission belongs to one Core selected route. Its connection identity is
@@ -1081,14 +1070,10 @@ function immutableDescriptorMismatch(current, descriptor) {
1081
1070
  function admissionReason(result) {
1082
1071
  switch (result) {
1083
1072
  case 'meshMismatch':
1084
- return 2;
1073
+ return (0, service_wire_codec_generated_1.enumWireRejectReason)('topologyMismatch');
1085
1074
  case 'staleDescriptor':
1086
- return 7;
1075
+ return (0, service_wire_codec_generated_1.enumWireRejectReason)('descriptorRevisionStale');
1087
1076
  case 'invalidDescriptor':
1088
- return 11;
1089
- case 'notRequired':
1090
- return 4;
1091
- case 'admitted':
1092
- return 1;
1077
+ return (0, service_wire_codec_generated_1.enumWireRejectReason)('invalidDescriptor');
1093
1078
  }
1094
1079
  }
@@ -1,4 +1,6 @@
1
- import { ZLinkFrameworkRuntimeState } from '../../contracts';
1
+ import { ZLinkFrameworkRuntimeState, ZLinkTopologyState } from '../../contracts';
2
+ export declare function runtimeObservationIsTerminal(state: ZLinkFrameworkRuntimeState): boolean;
3
+ export declare function topologyObservationIsTerminal(state: ZLinkTopologyState): boolean;
2
4
  export type MaintenanceAdmissionState = 'preparing' | 'serving' | 'retiring' | 'draining' | 'stopped' | 'error';
3
5
  export type DiscoveryAvailability = 'preparing' | 'serving' | 'retiring' | 'stopped' | 'error' | 'disconnected';
4
6
  /** Derives public readiness from the public runtime state authority. */
@@ -1,11 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runtimeObservationIsTerminal = runtimeObservationIsTerminal;
4
+ exports.topologyObservationIsTerminal = topologyObservationIsTerminal;
3
5
  exports.runtimeStateIsReady = runtimeStateIsReady;
4
6
  exports.runtimeAcceptsWork = runtimeAcceptsWork;
5
7
  exports.maintenanceAdmissionState = maintenanceAdmissionState;
6
8
  exports.discoveryAvailabilityForRuntimeState = discoveryAvailabilityForRuntimeState;
7
9
  exports.topologyRuntimeIsReady = topologyRuntimeIsReady;
8
10
  const contracts_1 = require("../../contracts");
11
+ function runtimeObservationIsTerminal(state) {
12
+ return state === contracts_1.ZLinkFrameworkRuntimeState.Stopped;
13
+ }
14
+ function topologyObservationIsTerminal(state) {
15
+ return state === contracts_1.ZLinkTopologyState.Stopped || state === contracts_1.ZLinkTopologyState.Failed;
16
+ }
9
17
  /** Derives public readiness from the public runtime state authority. */
10
18
  function runtimeStateIsReady(state) {
11
19
  return state === contracts_1.ZLinkFrameworkRuntimeState.Serving;