@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
@@ -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,27 @@
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 runtime_values_1 = require("../backend/runtime-values");
7
+ const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
6
8
  const operation_registry_1 = require("./operation-registry");
7
9
  const service_liveness_registry_1 = require("./service-liveness-registry");
8
10
  const service_mailbox_1 = require("./service-mailbox");
9
11
  const service_topology_registry_1 = require("./service-topology-registry");
10
- const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
11
12
  const service_wire_codec_1 = require("./service-wire-codec");
12
13
  const service_wire_constants_generated_1 = require("./service-wire-constants.generated");
14
+ const service_wire_m6a_codec_1 = require("./service-wire-m6a-codec");
15
+ const nativeErrnoValues = node_os_1.constants.errno;
13
16
  // Framework error code 13 (RequestTargetNotFound) is encoded as 14 on a
14
17
  // RequestResult.NotFound reply. Boundary transport results keep failureCode 0.
15
- const REQUEST_TARGET_NOT_FOUND_FAILURE_CODE = 14;
18
+ const RAW_MESH_RECEIVE_RECORD_BUDGET = 64;
19
+ const RAW_MESH_RECEIVE_BYTE_BUDGET = 4 * 1024 * 1024;
20
+ exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS = 2;
21
+ const REQUEST_TARGET_NOT_FOUND_FAILURE_CODE = service_wire_constants_generated_1.ServiceWireFrameworkErrorCode.requestTargetNotFound;
16
22
  const livenessCodec = (0, service_wire_codec_1.createServiceWireCodec)({
17
- magic: [0x5a, 0x4d],
18
- major: 1,
23
+ magic: service_wire_constants_generated_1.SERVICE_WIRE_MAGIC,
24
+ major: service_wire_constants_generated_1.SERVICE_WIRE_MAJOR,
19
25
  commands: service_wire_m6a_codec_1.M6aServiceWireCommand
20
26
  });
21
27
  /**
@@ -26,7 +32,7 @@ class RawServiceMeshRuntime {
26
32
  topology;
27
33
  mailbox;
28
34
  liveness;
29
- operations = new operation_registry_1.OperationRegistry();
35
+ operations;
30
36
  expectedPeers = new Map();
31
37
  endpointOnlyPeers = new Set();
32
38
  peerConnectionIntentRemoved = new Set();
@@ -51,6 +57,7 @@ class RawServiceMeshRuntime {
51
57
  serviceIngress;
52
58
  closed = false;
53
59
  constructor(options) {
60
+ this.operations = new operation_registry_1.OperationRegistry(undefined, options.onPendingOperationsChanged);
54
61
  this.descriptor = options.descriptor;
55
62
  this.topology = new service_topology_registry_1.ServiceTopologyRegistry(options.descriptor);
56
63
  this.mailbox = new service_mailbox_1.ServiceMailbox(options.onMailboxReady);
@@ -102,32 +109,32 @@ class RawServiceMeshRuntime {
102
109
  }
103
110
  connectPeer(endpoint, expected) {
104
111
  this.requireStarted().connectToRoutingId(expected.nodeRoutingId, endpoint);
105
- this.expectedPeers.set(expected.nodeRoutingId, {
112
+ this.expectedPeers.set(expected.nodeRoutingId, Object.assign(this.expectedPeers.get(expected.nodeRoutingId) ?? {}, {
106
113
  meshName: expected.meshName,
107
114
  nodeRoutingId: expected.nodeRoutingId,
108
115
  endpoint,
109
116
  securityIdentity: expected.securityIdentity,
110
117
  lifecycleGeneration: expected.lifecycleGeneration
111
- });
118
+ }));
112
119
  }
113
120
  connectPeerByRoutingId(endpoint, nodeRoutingId, securityIdentity, lifecycleGeneration) {
114
121
  this.requireStarted().connectToRoutingId(nodeRoutingId, endpoint);
115
- this.expectedPeers.set(nodeRoutingId, {
122
+ this.expectedPeers.set(nodeRoutingId, Object.assign(this.expectedPeers.get(nodeRoutingId) ?? {}, {
116
123
  meshName: this.topology.localDescriptor().meshName,
117
124
  nodeRoutingId,
118
125
  endpoint,
119
126
  securityIdentity,
120
127
  lifecycleGeneration
121
- });
128
+ }));
122
129
  }
123
130
  expectPeerByRoutingId(endpoint, nodeRoutingId, securityIdentity, lifecycleGeneration) {
124
- this.expectedPeers.set(nodeRoutingId, {
131
+ this.expectedPeers.set(nodeRoutingId, Object.assign(this.expectedPeers.get(nodeRoutingId) ?? {}, {
125
132
  meshName: this.topology.localDescriptor().meshName,
126
133
  nodeRoutingId,
127
134
  endpoint,
128
135
  securityIdentity,
129
136
  lifecycleGeneration
130
- });
137
+ }));
131
138
  }
132
139
  connectPeerEndpoint(endpoint) {
133
140
  this.requireStarted().connect(endpoint);
@@ -215,11 +222,21 @@ class RawServiceMeshRuntime {
215
222
  listener(nodeRoutingId);
216
223
  }
217
224
  async announcePeer(nodeRoutingId) {
218
- if (!this.expectedPeers.has(nodeRoutingId) || this.peerAdmissionSealed?.() === true)
225
+ const expected = this.expectedPeers.get(nodeRoutingId);
226
+ const generation = this.selectedRoutes.get(nodeRoutingId);
227
+ if (expected === undefined ||
228
+ generation === undefined ||
229
+ expected.helloSubmittedGeneration === generation ||
230
+ this.peerAdmissionSealed?.() === true)
219
231
  return false;
220
- return this.send(nodeRoutingId, [
232
+ const accepted = await this.send(nodeRoutingId, [
221
233
  (0, service_wire_m6a_codec_1.encodeRouteMeshAdmission)(service_wire_m6a_codec_1.M6aServiceWireCommand.hello, this.topology.localDescriptor())
222
234
  ]);
235
+ if (accepted &&
236
+ this.expectedPeers.get(nodeRoutingId) === expected &&
237
+ this.selectedRoutes.get(nodeRoutingId) === generation)
238
+ expected.helloSubmittedGeneration = generation;
239
+ return accepted;
223
240
  }
224
241
  isPeerRouteReady(nodeRoutingId, lifecycleGeneration) {
225
242
  // Admission is bound to the observed selected route: the route observer
@@ -233,11 +250,6 @@ class RawServiceMeshRuntime {
233
250
  async announceExpectedPeers() {
234
251
  let accepted = 0;
235
252
  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
253
  if (this.topology.peer(nodeRoutingId) !== undefined)
242
254
  continue;
243
255
  if (await this.announcePeer(nodeRoutingId))
@@ -271,7 +283,6 @@ class RawServiceMeshRuntime {
271
283
  for (const peer of this.topology.peers()) {
272
284
  await this.send(peer.descriptor.nodeRoutingId, [update]);
273
285
  }
274
- await this.announceExpectedPeers();
275
286
  }
276
287
  replaceDiscoveredNotRequired(descriptors) {
277
288
  this.topology.replaceDiscoveredNotRequired(descriptors);
@@ -291,25 +302,6 @@ class RawServiceMeshRuntime {
291
302
  return selection.submitResult;
292
303
  const selected = selection.peer;
293
304
  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
305
  return (await this.send(selected.descriptor.nodeRoutingId, [
314
306
  (0, service_wire_m6a_codec_1.encodeChannelSendHeader)(channelName),
315
307
  applicationFrame
@@ -330,7 +322,7 @@ class RawServiceMeshRuntime {
330
322
  return this.requestToTarget(selection.peer.descriptor.nodeRoutingId, payload, timeoutMs, channelName);
331
323
  }
332
324
  selectChannelTarget(channelName) {
333
- const selected = this.topology.selectChannel(channelName, (peer) => this.isLocalOrReadyPeer(peer.descriptor.nodeRoutingId));
325
+ const selected = this.topology.selectChannel(channelName, (peer) => this.isPeerRouteReady(peer.descriptor.nodeRoutingId));
334
326
  if (selected !== undefined)
335
327
  return { kind: 'selected', peer: selected };
336
328
  return this.topology.hasKnownChannelTarget(channelName)
@@ -348,9 +340,6 @@ class RawServiceMeshRuntime {
348
340
  }
349
341
  };
350
342
  }
351
- isLocalOrReadyPeer(nodeRoutingId) {
352
- return nodeRoutingId === this.descriptor.nodeRoutingId || this.isPeerRouteReady(nodeRoutingId);
353
- }
354
343
  setServiceIngress(handler) {
355
344
  if (this.serviceIngress !== undefined && this.serviceIngress !== handler) {
356
345
  throw new Error('Raw service ingress is already registered.');
@@ -399,15 +388,16 @@ class RawServiceMeshRuntime {
399
388
  this.requireStarted().setReadableHandler(handler);
400
389
  }
401
390
  /** Returns whether a receive budget ended before no-data; idle ticks only maintain peers. */
402
- async pumpBatch(receiveReady = true) {
403
- await this.observeSelectedRoutes();
391
+ async pumpBatch(receiveReady = true, routeReady = false) {
392
+ if (routeReady)
393
+ await this.observeSelectedRoutes();
404
394
  const startedAtMs = performance.now();
405
395
  let messages = 0;
406
396
  let bytes = 0;
407
397
  const observe = (_source, byteCount) => {
408
398
  bytes += byteCount;
409
399
  };
410
- while (receiveReady && messages < 64 && !this.closed) {
400
+ while (receiveReady && messages < RAW_MESH_RECEIVE_RECORD_BUDGET && !this.closed) {
411
401
  const result = await this.receiveOne(performance.now(), observe);
412
402
  if (result === 'noData') {
413
403
  receiveReady = false;
@@ -416,7 +406,8 @@ class RawServiceMeshRuntime {
416
406
  messages += 1;
417
407
  // Core owns the per-peer fair-queue cursor. The Framework limit bounds
418
408
  // the entire round, so changing peers does not renew its byte/count budget.
419
- if (bytes >= 4 * 1024 * 1024 || performance.now() - startedAtMs >= 2)
409
+ if (bytes >= RAW_MESH_RECEIVE_BYTE_BUDGET ||
410
+ performance.now() - startedAtMs >= exports.RAW_MESH_RECEIVE_TIME_BUDGET_MS)
420
411
  break;
421
412
  }
422
413
  if (!this.closed) {
@@ -527,7 +518,9 @@ class RawServiceMeshRuntime {
527
518
  if (expected !== undefined &&
528
519
  (expected.meshName !== descriptor.meshName ||
529
520
  expected.nodeRoutingId !== descriptor.nodeRoutingId)) {
530
- await this.send(received.sourceRid, [(0, service_wire_m6a_codec_1.encodeReject)(3)]);
521
+ await this.send(received.sourceRid, [
522
+ (0, service_wire_m6a_codec_1.encodeReject)((0, service_wire_codec_generated_1.enumWireRejectReason)('identityMismatch'))
523
+ ]);
531
524
  return 'infrastructure';
532
525
  }
533
526
  const result = this.admitPeer(descriptor, routeConnectionId(received.routeGeneration), nowMs, expected);
@@ -558,23 +551,7 @@ class RawServiceMeshRuntime {
558
551
  if (header.command === service_wire_m6a_codec_1.M6aServiceWireCommand.reject) {
559
552
  if (received.parts.length !== 1)
560
553
  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
- }
554
+ (0, service_wire_m6a_codec_1.decodeReject)(received.parts[0]);
578
555
  return 'infrastructure';
579
556
  }
580
557
  const peer = this.topology.peer(received.sourceRid);
@@ -700,6 +677,12 @@ class RawServiceMeshRuntime {
700
677
  throw error;
701
678
  }
702
679
  }
680
+ expireOperations(nowMs, turnDeadlineMs) {
681
+ return this.operations.expire(nowMs, turnDeadlineMs);
682
+ }
683
+ get pendingOperationCount() {
684
+ return this.operations.size;
685
+ }
703
686
  async tickLiveness(nowMs = performance.now()) {
704
687
  const result = this.liveness.tick(nowMs);
705
688
  this.requireStarted();
@@ -739,6 +722,9 @@ class RawServiceMeshRuntime {
739
722
  if (observed.get(nodeRoutingId) === generation)
740
723
  continue;
741
724
  changes++;
725
+ const expected = this.expectedPeers.get(nodeRoutingId);
726
+ if (expected !== undefined)
727
+ delete expected.helloSubmittedGeneration;
742
728
  const peer = this.topology.peer(nodeRoutingId);
743
729
  if (peer !== undefined && peer.connectionId === routeConnectionId(generation)) {
744
730
  this.removePeer(peer);
@@ -761,7 +747,6 @@ class RawServiceMeshRuntime {
761
747
  close() {
762
748
  if (this.closed)
763
749
  return;
764
- this.closed = true;
765
750
  this.applicationJobStop.abort(new Error('Raw service runtime application job admission stopped.'));
766
751
  this.mailbox.close();
767
752
  this.operations.close('Raw service runtime closed.');
@@ -771,10 +756,11 @@ class RawServiceMeshRuntime {
771
756
  this.applicationJobQueue.unregisterReceiveFlowTarget?.(router);
772
757
  }
773
758
  const host = this.host;
774
- this.router = undefined;
775
- this.host = undefined;
776
759
  if (host !== undefined)
777
760
  host.close();
761
+ this.router = undefined;
762
+ this.host = undefined;
763
+ this.closed = true;
778
764
  }
779
765
  requestToTarget(targetNodeRoutingId, payload, timeoutMs, channelName) {
780
766
  const correlation = this.nextCorrelation++;
@@ -796,13 +782,12 @@ class RawServiceMeshRuntime {
796
782
  for (;;) {
797
783
  const alternate = this.topology.selectChannel(channelName, (peer) => {
798
784
  const candidate = peer.descriptor.nodeRoutingId;
799
- return !excludedTargets.has(candidate) && this.isLocalOrReadyPeer(candidate);
785
+ return !excludedTargets.has(candidate) && this.isPeerRouteReady(candidate);
800
786
  });
801
787
  if (alternate === undefined)
802
788
  break;
803
789
  selectedTargetNodeRoutingId = alternate.descriptor.nodeRoutingId;
804
- if (selectedTargetNodeRoutingId === this.descriptor.nodeRoutingId ||
805
- this.isPeerRouteReady(selectedTargetNodeRoutingId)) {
790
+ if (this.isPeerRouteReady(selectedTargetNodeRoutingId)) {
806
791
  break;
807
792
  }
808
793
  excludedTargets.add(selectedTargetNodeRoutingId);
@@ -824,9 +809,7 @@ class RawServiceMeshRuntime {
824
809
  return;
825
810
  }
826
811
  const accepted = this.mailbox.tryEnqueue({
827
- owner: channelName === undefined
828
- ? `node:${this.descriptor.nodeRoutingId}`
829
- : `channel:${channelName}`,
812
+ owner: `node:${this.descriptor.nodeRoutingId}`,
830
813
  domain: 'application',
831
814
  parts,
832
815
  sourceRoutingId: this.descriptor.nodeRoutingId,
@@ -1019,7 +1002,7 @@ function isAlreadyDisconnectedError(error) {
1019
1002
  if (typeof error !== 'object' || error === null || !('nativeErrno' in error)) {
1020
1003
  return false;
1021
1004
  }
1022
- return error.nativeErrno === 2;
1005
+ return error.nativeErrno === nativeErrnoValues.ENOENT;
1023
1006
  }
1024
1007
  /**
1025
1008
  * An admission belongs to one Core selected route. Its connection identity is
@@ -1081,14 +1064,10 @@ function immutableDescriptorMismatch(current, descriptor) {
1081
1064
  function admissionReason(result) {
1082
1065
  switch (result) {
1083
1066
  case 'meshMismatch':
1084
- return 2;
1067
+ return (0, service_wire_codec_generated_1.enumWireRejectReason)('topologyMismatch');
1085
1068
  case 'staleDescriptor':
1086
- return 7;
1069
+ return (0, service_wire_codec_generated_1.enumWireRejectReason)('descriptorRevisionStale');
1087
1070
  case 'invalidDescriptor':
1088
- return 11;
1089
- case 'notRequired':
1090
- return 4;
1091
- case 'admitted':
1092
- return 1;
1071
+ return (0, service_wire_codec_generated_1.enumWireRejectReason)('invalidDescriptor');
1093
1072
  }
1094
1073
  }
@@ -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;
@@ -8,7 +8,15 @@ exports.decodeServiceClosingSpotAuthority = decodeServiceClosingSpotAuthority;
8
8
  exports.decodeServiceInstanceAuthorityPayload = decodeServiceInstanceAuthorityPayload;
9
9
  exports.rewriteServiceAuthorityOwner = rewriteServiceAuthorityOwner;
10
10
  exports.rewriteServiceAuthorityRoute = rewriteServiceAuthorityRoute;
11
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
12
+ const contracts_1 = require("../../contracts");
13
+ const actor_join_recovery_codec_1 = require("./actor-join-recovery-codec");
11
14
  const service_relocation_runtime_1 = require("./service-relocation-runtime");
15
+ const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
16
+ const SPOT_AUTHORITY_OBJECT_KIND = 2;
17
+ const USER_SPOT_WIRE_KIND = (0, contracts_1.zlinkSpotKindToWire)(contracts_1.ZLinkSpotKind.User);
18
+ const INSTANCE_SPOT_WIRE_KIND = (0, contracts_1.zlinkSpotKindToWire)(contracts_1.ZLinkSpotKind.Instance);
19
+ const AUTHORITY_TEXT16_MAX_BYTES = 0xffff;
12
20
  const AUTHORITY_MAGIC = Buffer.from([0x5a, 0x4c, 0x41, 0x55]);
13
21
  const AUTHORITY_FORMAT_VERSION = 1;
14
22
  const AUTHORITY_FLAGS = 0;
@@ -171,7 +179,7 @@ function decodeSpotAuthority(payload) {
171
179
  const operationKind = body.u8();
172
180
  const objectKind = body.u8();
173
181
  const object = body.takeReader(body.u16());
174
- if (objectKind !== 2)
182
+ if (objectKind !== SPOT_AUTHORITY_OBJECT_KIND)
175
183
  return undefined;
176
184
  const spotKind = object.u8();
177
185
  const spot = object.takeReader(object.u16());
@@ -181,13 +189,13 @@ function decodeSpotAuthority(payload) {
181
189
  let state;
182
190
  let stableType;
183
191
  let spotId;
184
- if (spotKind === 2) {
192
+ if (spotKind === USER_SPOT_WIRE_KIND) {
185
193
  kind = 'user_spot';
186
194
  spotId = spot.rid();
187
195
  stableType = spot.text8();
188
196
  state = spot.u8();
189
197
  }
190
- else if (spotKind === 3) {
198
+ else if (spotKind === INSTANCE_SPOT_WIRE_KIND) {
191
199
  kind = 'instance_spot';
192
200
  state = spot.u8();
193
201
  const instance = spot.takeReader(spot.u16());
@@ -279,21 +287,23 @@ function rid(value, name) {
279
287
  }
280
288
  function text16(value, name) {
281
289
  const bytes = Buffer.from(value);
282
- if (bytes.byteLength < 1 || bytes.byteLength > 0xffff || bytes.includes(0)) {
283
- throw new RangeError(`${name} must contain 1..65535 UTF-8 bytes without NUL.`);
290
+ if (bytes.byteLength < 1 || bytes.byteLength > AUTHORITY_TEXT16_MAX_BYTES || bytes.includes(0)) {
291
+ throw new RangeError(`${name} must contain 1..${AUTHORITY_TEXT16_MAX_BYTES} UTF-8 bytes without NUL.`);
284
292
  }
285
293
  return concat(u16(bytes.byteLength), bytes);
286
294
  }
287
295
  function sha256(value) {
288
- if (value.byteLength !== 32) {
289
- throw new RangeError('activationRecovery.sha256 must contain exactly 32 bytes.');
296
+ if (value.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
297
+ throw new RangeError(`activationRecovery.sha256 must contain exactly ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
290
298
  }
291
- return concat(Buffer.of(32), value);
299
+ return concat(Buffer.of(actor_join_recovery_codec_1.SHA256_DIGEST_BYTES), value);
292
300
  }
293
301
  function sized8(value, name) {
294
302
  const bytes = Buffer.from(value);
295
- if (bytes.byteLength < 1 || bytes.byteLength > 255 || bytes.includes(0)) {
296
- throw new RangeError(`${name} must contain 1..255 UTF-8 bytes without NUL.`);
303
+ if (bytes.byteLength < 1 ||
304
+ bytes.byteLength > service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES ||
305
+ bytes.includes(0)) {
306
+ throw new RangeError(`${name} must contain 1..${service_wire_binary_primitives_1.SERVICE_WIRE_TEXT8_MAX_BYTES} UTF-8 bytes without NUL.`);
297
307
  }
298
308
  return concat(Buffer.of(bytes.byteLength), bytes);
299
309
  }
@@ -314,7 +324,7 @@ function boundedU32(value, name) {
314
324
  return u32(value);
315
325
  }
316
326
  function u64(value, name) {
317
- if (value <= 0n || value > 0xffffffffffffffffn) {
327
+ if (value <= 0n || value > stream_wire_1.UINT64_MAX) {
318
328
  throw new RangeError(`${name} must be a non-zero u64.`);
319
329
  }
320
330
  const result = Buffer.alloc(8);
@@ -322,7 +332,7 @@ function u64(value, name) {
322
332
  return result;
323
333
  }
324
334
  function ordinalU64(value, name) {
325
- if (value < 0n || value > 0xffffffffffffffffn) {
335
+ if (value < 0n || value > stream_wire_1.UINT64_MAX) {
326
336
  throw new RangeError(`${name} must be a u64.`);
327
337
  }
328
338
  const result = Buffer.alloc(8);
@@ -23,6 +23,9 @@ export interface SelectedClientServer {
23
23
  }
24
24
  /** Dedicated discovery state; fanout publishers never reuse RouteMesh peer rows. */
25
25
  export declare class ServiceDiscoveryRegistry {
26
+ private readonly clientServerChanged;
27
+ onClientServerChanged(listener: (error?: Error) => void): () => void;
28
+ dispose(error: Error): void;
26
29
  private readonly clientServers;
27
30
  private readonly fanoutPublishers;
28
31
  private readonly clientServerSelections;
@@ -32,6 +35,7 @@ export declare class ServiceDiscoveryRegistry {
32
35
  selectClientServer(channelName: string): ClientServerDescriptor | undefined;
33
36
  selectClientServerConnection(channelName: string): SelectedClientServer | undefined;
34
37
  private selectClientServerConnectionCore;
38
+ hasReadyClientServer(channelName: string): boolean;
35
39
  clientServerDescriptors(channelName: string): readonly ClientServerDescriptor[];
36
40
  admitFanoutPublisher(descriptor: FanoutPublisherDescriptor, connectionId: string): boolean;
37
41
  removeFanoutPublisher(channelName: string, publisherRoutingId: string, connectionId: string): boolean;