@zlink-systems/framework 0.21.0 → 0.22.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 (487) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -1,7 +1,4 @@
1
- import type {
2
- ServiceNodeDescriptor,
3
- ServiceObjectRole
4
- } from './service-topology-registry';
1
+ import type { ServiceNodeDescriptor, ServiceObjectRole } from './service-topology-registry';
5
2
 
6
3
  export function routeMeshConnectionNotRequired(
7
4
  localObjectRole: ServiceObjectRole,
@@ -9,10 +6,12 @@ export function routeMeshConnectionNotRequired(
9
6
  remoteObjectRole: ServiceObjectRole,
10
7
  remoteHasServerChannel: boolean
11
8
  ): boolean {
12
- return localObjectRole === 'client'
13
- && !localHasServerChannel
14
- && remoteObjectRole === 'client'
15
- && !remoteHasServerChannel;
9
+ return (
10
+ localObjectRole === 'client' &&
11
+ !localHasServerChannel &&
12
+ remoteObjectRole === 'client' &&
13
+ !remoteHasServerChannel
14
+ );
16
15
  }
17
16
 
18
17
  export function descriptorConnectionNotRequired(
@@ -1,20 +1,10 @@
1
1
  import { ZLinkFrameworkRuntimeState } from '../../contracts';
2
2
 
3
3
  export type MaintenanceAdmissionState =
4
- | 'preparing'
5
- | 'serving'
6
- | 'retiring'
7
- | 'draining'
8
- | 'stopped'
9
- | 'error';
4
+ 'preparing' | 'serving' | 'retiring' | 'draining' | 'stopped' | 'error';
10
5
 
11
6
  export type DiscoveryAvailability =
12
- | 'preparing'
13
- | 'serving'
14
- | 'retiring'
15
- | 'stopped'
16
- | 'error'
17
- | 'disconnected';
7
+ 'preparing' | 'serving' | 'retiring' | 'stopped' | 'error' | 'disconnected';
18
8
 
19
9
  /** Derives public readiness from the public runtime state authority. */
20
10
  export function runtimeStateIsReady(state: ZLinkFrameworkRuntimeState): boolean {
@@ -34,13 +24,19 @@ export function maintenanceAdmissionState(
34
24
  state: ZLinkFrameworkRuntimeState
35
25
  ): MaintenanceAdmissionState {
36
26
  switch (state) {
37
- case ZLinkFrameworkRuntimeState.Preparing: return 'preparing';
38
- case ZLinkFrameworkRuntimeState.Serving: return 'serving';
27
+ case ZLinkFrameworkRuntimeState.Preparing:
28
+ return 'preparing';
29
+ case ZLinkFrameworkRuntimeState.Serving:
30
+ return 'serving';
39
31
  case ZLinkFrameworkRuntimeState.Relocating:
40
- case ZLinkFrameworkRuntimeState.Relocated: return 'retiring';
41
- case ZLinkFrameworkRuntimeState.Draining: return 'draining';
42
- case ZLinkFrameworkRuntimeState.Stopped: return 'stopped';
43
- case ZLinkFrameworkRuntimeState.Error: return 'error';
32
+ case ZLinkFrameworkRuntimeState.Relocated:
33
+ return 'retiring';
34
+ case ZLinkFrameworkRuntimeState.Draining:
35
+ return 'draining';
36
+ case ZLinkFrameworkRuntimeState.Stopped:
37
+ return 'stopped';
38
+ case ZLinkFrameworkRuntimeState.Error:
39
+ return 'error';
44
40
  }
45
41
  }
46
42
 
@@ -49,13 +45,18 @@ export function discoveryAvailabilityForRuntimeState(
49
45
  state: ZLinkFrameworkRuntimeState
50
46
  ): Exclude<DiscoveryAvailability, 'disconnected'> {
51
47
  switch (state) {
52
- case ZLinkFrameworkRuntimeState.Preparing: return 'preparing';
53
- case ZLinkFrameworkRuntimeState.Serving: return 'serving';
48
+ case ZLinkFrameworkRuntimeState.Preparing:
49
+ return 'preparing';
50
+ case ZLinkFrameworkRuntimeState.Serving:
51
+ return 'serving';
54
52
  case ZLinkFrameworkRuntimeState.Relocating:
55
53
  case ZLinkFrameworkRuntimeState.Relocated:
56
- case ZLinkFrameworkRuntimeState.Draining: return 'retiring';
57
- case ZLinkFrameworkRuntimeState.Stopped: return 'stopped';
58
- case ZLinkFrameworkRuntimeState.Error: return 'error';
54
+ case ZLinkFrameworkRuntimeState.Draining:
55
+ return 'retiring';
56
+ case ZLinkFrameworkRuntimeState.Stopped:
57
+ return 'stopped';
58
+ case ZLinkFrameworkRuntimeState.Error:
59
+ return 'error';
59
60
  }
60
61
  }
61
62
 
@@ -23,7 +23,6 @@ export interface ServiceDecodedInstanceAuthority extends ServiceReadySpotAuthori
23
23
  readonly state: 'coldActivating' | 'ready' | 'closing';
24
24
  }
25
25
 
26
-
27
26
  export interface ServiceActivationRecoveryState {
28
27
  readonly reference: string;
29
28
  readonly sha256: Uint8Array;
@@ -104,11 +103,10 @@ export function replaceServiceAuthorityRelocationState(
104
103
  export function encodeServiceUserSpotAuthorityPayload(
105
104
  value: ServiceUserSpotAuthorityPayload
106
105
  ): Buffer {
107
- const spot = conditional(2, concat(
108
- rid(value.spotId, 'spotId'),
109
- text8(value.stableType, 'stableType'),
110
- Buffer.of(1)
111
- ));
106
+ const spot = conditional(
107
+ 2,
108
+ concat(rid(value.spotId, 'spotId'), text8(value.stableType, 'stableType'), Buffer.of(1))
109
+ );
112
110
  const object = conditional(2, spot);
113
111
  const body = concat(
114
112
  Buffer.of(value.state === 'creating' ? 1 : value.state === 'closing' ? 3 : 0),
@@ -137,28 +135,29 @@ export function encodeServiceInstanceAuthorityPayload(
137
135
  if (value.activationRecovery !== undefined && value.state !== 'ready') {
138
136
  throw new RangeError('activationRecovery is allowed only on a Ready Instance Spot authority.');
139
137
  }
140
- const instanceBody = concat(
141
- text8(value.stableType, 'stableType'),
142
- rid(value.spotId, 'spotId')
143
- );
138
+ const instanceBody = concat(text8(value.stableType, 'stableType'), rid(value.spotId, 'spotId'));
144
139
  const instance = conditional(
145
140
  value.state === 'coldActivating' ? 1 : value.state === 'closing' ? 3 : 2,
146
141
  instanceBody
147
142
  );
148
143
  const spot = conditional(3, instance);
149
144
  const object = conditional(2, spot);
150
- const activationRecovery = value.activationRecovery === undefined
151
- ? conditional32(0, Buffer.alloc(0))
152
- : conditional32(1, concat(
153
- text16(value.activationRecovery.reference, 'activationRecovery.reference'),
154
- sha256(value.activationRecovery.sha256),
155
- boundedU32(value.activationRecovery.encodedSize, 'activationRecovery.encodedSize'),
156
- u64(value.activationRecovery.inboxSequence, 'activationRecovery.inboxSequence'),
157
- ordinalU64(value.activationRecovery.replayCursor, 'activationRecovery.replayCursor')
158
- ));
145
+ const activationRecovery =
146
+ value.activationRecovery === undefined
147
+ ? conditional32(0, Buffer.alloc(0))
148
+ : conditional32(
149
+ 1,
150
+ concat(
151
+ text16(value.activationRecovery.reference, 'activationRecovery.reference'),
152
+ sha256(value.activationRecovery.sha256),
153
+ boundedU32(value.activationRecovery.encodedSize, 'activationRecovery.encodedSize'),
154
+ u64(value.activationRecovery.inboxSequence, 'activationRecovery.inboxSequence'),
155
+ ordinalU64(value.activationRecovery.replayCursor, 'activationRecovery.replayCursor')
156
+ )
157
+ );
159
158
  if (
160
- value.activationRecovery !== undefined
161
- && value.activationRecovery.replayCursor > value.activationRecovery.inboxSequence
159
+ value.activationRecovery !== undefined &&
160
+ value.activationRecovery.replayCursor > value.activationRecovery.inboxSequence
162
161
  ) {
163
162
  throw new RangeError('activationRecovery.replayCursor must not exceed inboxSequence.');
164
163
  }
@@ -187,9 +186,7 @@ export function decodeServiceReadySpotAuthority(
187
186
  payload: Uint8Array
188
187
  ): ServiceReadySpotAuthority | undefined {
189
188
  const decoded = decodeSpotAuthority(payload);
190
- return decoded?.state === 'ready' && decoded.operationKind === 0
191
- ? decoded
192
- : undefined;
189
+ return decoded?.state === 'ready' && decoded.operationKind === 0 ? decoded : undefined;
193
190
  }
194
191
 
195
192
  export function decodeServiceInstanceAuthorityPayload(
@@ -197,11 +194,11 @@ export function decodeServiceInstanceAuthorityPayload(
197
194
  ): ServiceDecodedInstanceAuthority | undefined {
198
195
  const decoded = decodeSpotAuthority(payload);
199
196
  if (
200
- decoded?.kind !== 'instance_spot'
201
- || !(
202
- decoded.state === 'coldActivating' && decoded.operationKind === 1
203
- || decoded.state === 'ready' && decoded.operationKind === 0
204
- || decoded.state === 'closing' && decoded.operationKind === 3
197
+ decoded?.kind !== 'instance_spot' ||
198
+ !(
199
+ (decoded.state === 'coldActivating' && decoded.operationKind === 1) ||
200
+ (decoded.state === 'ready' && decoded.operationKind === 0) ||
201
+ (decoded.state === 'closing' && decoded.operationKind === 3)
205
202
  )
206
203
  ) {
207
204
  return undefined;
@@ -260,13 +257,14 @@ function encodeRewrittenServiceAuthority(
260
257
  ownerNodeGeneration: target.nodeGeneration
261
258
  };
262
259
  if (decoded.kind === 'user_spot') {
263
- const state = decoded.operationKind === 0
264
- ? 'ready'
265
- : decoded.operationKind === 1
266
- ? 'creating'
267
- : decoded.operationKind === 3
268
- ? 'closing'
269
- : undefined;
260
+ const state =
261
+ decoded.operationKind === 0
262
+ ? 'ready'
263
+ : decoded.operationKind === 1
264
+ ? 'creating'
265
+ : decoded.operationKind === 3
266
+ ? 'closing'
267
+ : undefined;
270
268
  return state === undefined
271
269
  ? undefined
272
270
  : encodeServiceUserSpotAuthorityPayload({ ...common, state });
@@ -281,12 +279,12 @@ function encodeRewrittenServiceAuthority(
281
279
  });
282
280
  }
283
281
 
284
- function decodeSpotAuthority(
285
- payload: Uint8Array
286
- ): (ServiceReadySpotAuthority & {
287
- readonly state: 'coldActivating' | 'ready' | 'closing' | 'other';
288
- readonly operationKind: number;
289
- }) | undefined {
282
+ function decodeSpotAuthority(payload: Uint8Array):
283
+ | (ServiceReadySpotAuthority & {
284
+ readonly state: 'coldActivating' | 'ready' | 'closing' | 'other';
285
+ readonly operationKind: number;
286
+ })
287
+ | undefined {
290
288
  try {
291
289
  const reader = new AuthorityReader(payload);
292
290
  reader.expect(AUTHORITY_MAGIC);
@@ -356,27 +354,26 @@ function decodeSpotAuthority(
356
354
  };
357
355
  }
358
356
  if (
359
- activationRecovery !== undefined
360
- && (
361
- kind !== 'instance_spot'
362
- || state !== 2
363
- || operationKind !== 0
364
- )
357
+ activationRecovery !== undefined &&
358
+ (kind !== 'instance_spot' || state !== 2 || operationKind !== 0)
365
359
  ) {
366
360
  return undefined;
367
361
  }
368
362
  if (!activationRecoveryBody.done || !body.done) return undefined;
369
363
  return {
370
364
  kind,
371
- state: kind === 'instance_spot'
372
- ? state === 1
373
- ? 'coldActivating'
374
- : state === 2
365
+ state:
366
+ kind === 'instance_spot'
367
+ ? state === 1
368
+ ? 'coldActivating'
369
+ : state === 2
370
+ ? 'ready'
371
+ : state === 3
372
+ ? 'closing'
373
+ : 'other'
374
+ : state === 1
375
375
  ? 'ready'
376
- : state === 3
377
- ? 'closing'
378
- : 'other'
379
- : state === 1 ? 'ready' : 'other',
376
+ : 'other',
380
377
  operationKind,
381
378
  stableType,
382
379
  spotId,
@@ -469,7 +466,7 @@ function ordinalU64(value: bigint, name: string): Buffer {
469
466
  }
470
467
 
471
468
  function concat(...parts: readonly Uint8Array[]): Buffer {
472
- return Buffer.concat(parts.map(part => Buffer.from(part)));
469
+ return Buffer.concat(parts.map((part) => Buffer.from(part)));
473
470
  }
474
471
 
475
472
  class AuthorityReader {
@@ -33,15 +33,20 @@ export interface SelectedClientServer {
33
33
  export class ServiceDiscoveryRegistry {
34
34
  private readonly clientServers = new Map<string, Current<ClientServerDescriptor>>();
35
35
  private readonly fanoutPublishers = new Map<string, Current<FanoutPublisherDescriptor>>();
36
- private readonly clientServerSelections = new Map<string, SmoothWeightedSelection<SelectedClientServer>>();
36
+ private readonly clientServerSelections = new Map<
37
+ string,
38
+ SmoothWeightedSelection<SelectedClientServer>
39
+ >();
37
40
 
38
41
  admitClientServer(descriptor: ClientServerDescriptor, connectionId: string): boolean {
39
42
  validateClientServer(descriptor);
40
43
  const key = `${descriptor.channelName}\0${descriptor.serverRoutingId}`;
41
44
  const current = this.clientServers.get(key);
42
- if (current !== undefined
43
- && current.descriptor.state === 'disconnected'
44
- && sameClientServerDescriptorExceptState(current.descriptor, descriptor)) {
45
+ if (
46
+ current !== undefined &&
47
+ current.descriptor.state === 'disconnected' &&
48
+ sameClientServerDescriptorExceptState(current.descriptor, descriptor)
49
+ ) {
45
50
  this.clientServers.set(key, { descriptor: { ...descriptor }, connectionId });
46
51
  this.invalidateClientServerCandidates(descriptor.channelName);
47
52
  return true;
@@ -69,12 +74,12 @@ export class ServiceDiscoveryRegistry {
69
74
  return true;
70
75
  }
71
76
 
72
- removeClientServer(
73
- channelName: string,
74
- serverRoutingId: string,
75
- connectionId: string
76
- ): boolean {
77
- const removed = removeCurrent(this.clientServers, `${channelName}\0${serverRoutingId}`, connectionId);
77
+ removeClientServer(channelName: string, serverRoutingId: string, connectionId: string): boolean {
78
+ const removed = removeCurrent(
79
+ this.clientServers,
80
+ `${channelName}\0${serverRoutingId}`,
81
+ connectionId
82
+ );
78
83
  if (removed) this.invalidateClientServerCandidates(channelName);
79
84
  return removed;
80
85
  }
@@ -98,10 +103,10 @@ export class ServiceDiscoveryRegistry {
98
103
 
99
104
  clientServerDescriptors(channelName: string): readonly ClientServerDescriptor[] {
100
105
  return [...this.clientServers.values()]
101
- .map(value => value.descriptor)
102
- .filter(value => value.channelName === channelName)
106
+ .map((value) => value.descriptor)
107
+ .filter((value) => value.channelName === channelName)
103
108
  .sort((left, right) => compareOrdinal(left.serverRoutingId, right.serverRoutingId))
104
- .map(value => ({ ...value }));
109
+ .map((value) => ({ ...value }));
105
110
  }
106
111
 
107
112
  admitFanoutPublisher(descriptor: FanoutPublisherDescriptor, connectionId: string): boolean {
@@ -128,30 +133,23 @@ export class ServiceDiscoveryRegistry {
128
133
 
129
134
  fanoutEndpoints(channelName: string): readonly FanoutPublisherDescriptor[] {
130
135
  return [...this.fanoutPublishers.values()]
131
- .map(value => value.descriptor)
132
- .filter(value => value.channelName === channelName && value.state === 'serving')
136
+ .map((value) => value.descriptor)
137
+ .filter((value) => value.channelName === channelName && value.state === 'serving')
133
138
  .sort((left, right) => left.publisherRoutingId.localeCompare(right.publisherRoutingId))
134
- .map(value => ({ ...value }));
139
+ .map((value) => ({ ...value }));
135
140
  }
136
141
 
137
- private admit<T extends { readonly lifecycleGeneration: bigint; readonly descriptorRevision: bigint }>(
138
- rows: Map<string, Current<T>>,
139
- key: string,
140
- descriptor: T,
141
- connectionId: string
142
- ): boolean {
142
+ private admit<
143
+ T extends { readonly lifecycleGeneration: bigint; readonly descriptorRevision: bigint }
144
+ >(rows: Map<string, Current<T>>, key: string, descriptor: T, connectionId: string): boolean {
143
145
  requireText(connectionId, 'connectionId');
144
146
  const current = rows.get(key);
145
147
  if (
146
- current !== undefined
147
- && current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration
148
- && (
149
- current.descriptor.descriptorRevision > descriptor.descriptorRevision
150
- || (
151
- current.descriptor.descriptorRevision === descriptor.descriptorRevision
152
- && !sameDescriptor(current.descriptor, descriptor)
153
- )
154
- )
148
+ current !== undefined &&
149
+ current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration &&
150
+ (current.descriptor.descriptorRevision > descriptor.descriptorRevision ||
151
+ (current.descriptor.descriptorRevision === descriptor.descriptorRevision &&
152
+ !sameDescriptor(current.descriptor, descriptor)))
155
153
  ) {
156
154
  return false;
157
155
  }
@@ -167,13 +165,16 @@ export class ServiceDiscoveryRegistry {
167
165
 
168
166
  private clientServerCandidates(channelName: string) {
169
167
  return [...this.clientServers.values()]
170
- .filter(value =>
171
- value.descriptor.channelName === channelName
172
- && value.descriptor.state === 'serving'
173
- && value.descriptor.weight > 0)
168
+ .filter(
169
+ (value) =>
170
+ value.descriptor.channelName === channelName &&
171
+ value.descriptor.state === 'serving' &&
172
+ value.descriptor.weight > 0
173
+ )
174
174
  .sort((left, right) =>
175
- compareOrdinal(left.descriptor.serverRoutingId, right.descriptor.serverRoutingId))
176
- .map(value => ({
175
+ compareOrdinal(left.descriptor.serverRoutingId, right.descriptor.serverRoutingId)
176
+ )
177
+ .map((value) => ({
177
178
  id: value.descriptor.serverRoutingId,
178
179
  weight: value.descriptor.weight,
179
180
  value: Object.freeze({
@@ -188,33 +189,37 @@ function compareOrdinal(left: string, right: string): number {
188
189
  return left < right ? -1 : left > right ? 1 : 0;
189
190
  }
190
191
 
191
- function sameDescriptor<T extends { readonly lifecycleGeneration: bigint; readonly descriptorRevision: bigint }>(
192
- left: T,
193
- right: T
194
- ): boolean {
195
- return JSON.stringify({
196
- ...left,
197
- lifecycleGeneration: left.lifecycleGeneration.toString(),
198
- descriptorRevision: left.descriptorRevision.toString()
199
- }) === JSON.stringify({
200
- ...right,
201
- lifecycleGeneration: right.lifecycleGeneration.toString(),
202
- descriptorRevision: right.descriptorRevision.toString()
203
- });
192
+ function sameDescriptor<
193
+ T extends { readonly lifecycleGeneration: bigint; readonly descriptorRevision: bigint }
194
+ >(left: T, right: T): boolean {
195
+ return (
196
+ JSON.stringify({
197
+ ...left,
198
+ lifecycleGeneration: left.lifecycleGeneration.toString(),
199
+ descriptorRevision: left.descriptorRevision.toString()
200
+ }) ===
201
+ JSON.stringify({
202
+ ...right,
203
+ lifecycleGeneration: right.lifecycleGeneration.toString(),
204
+ descriptorRevision: right.descriptorRevision.toString()
205
+ })
206
+ );
204
207
  }
205
208
 
206
209
  function sameClientServerDescriptorExceptState(
207
210
  left: ClientServerDescriptor,
208
211
  right: ClientServerDescriptor
209
212
  ): boolean {
210
- return left.channelName === right.channelName
211
- && left.serverRoutingId === right.serverRoutingId
212
- && left.lifecycleGeneration === right.lifecycleGeneration
213
- && left.descriptorRevision === right.descriptorRevision
214
- && left.weight === right.weight
215
- && left.securityIdentity === right.securityIdentity
216
- && left.effectiveMaxMessageBytes === right.effectiveMaxMessageBytes
217
- && left.advertisedEndpoint === right.advertisedEndpoint;
213
+ return (
214
+ left.channelName === right.channelName &&
215
+ left.serverRoutingId === right.serverRoutingId &&
216
+ left.lifecycleGeneration === right.lifecycleGeneration &&
217
+ left.descriptorRevision === right.descriptorRevision &&
218
+ left.weight === right.weight &&
219
+ left.securityIdentity === right.securityIdentity &&
220
+ left.effectiveMaxMessageBytes === right.effectiveMaxMessageBytes &&
221
+ left.advertisedEndpoint === right.advertisedEndpoint
222
+ );
218
223
  }
219
224
 
220
225
  function removeCurrent<T>(
@@ -237,7 +242,10 @@ function validateClientServer(descriptor: ClientServerDescriptor): void {
237
242
  if (!Number.isInteger(descriptor.weight) || descriptor.weight < 0 || descriptor.weight > 10_000) {
238
243
  throw new RangeError('ClientServer weight must be an integer in 0..10000.');
239
244
  }
240
- if (!Number.isSafeInteger(descriptor.effectiveMaxMessageBytes) || descriptor.effectiveMaxMessageBytes < 1) {
245
+ if (
246
+ !Number.isSafeInteger(descriptor.effectiveMaxMessageBytes) ||
247
+ descriptor.effectiveMaxMessageBytes < 1
248
+ ) {
241
249
  throw new RangeError('ClientServer message bound must be positive.');
242
250
  }
243
251
  }
@@ -1,7 +1,5 @@
1
1
  import { crc32c } from './service-relocation-runtime';
2
- import {
3
- validateApplicationPayloadFrame
4
- } from './service-wire-m6a-codec';
2
+ import { validateApplicationPayloadFrame } from './service-wire-m6a-codec';
5
3
  import type { ServiceInstanceActivationTarget } from './service-stateful-wire-codec';
6
4
  import { validateServiceMetadataFrame } from './service-metadata-codec';
7
5
 
@@ -36,9 +34,8 @@ export function encodeInstanceActivationRecoveryEnvelope(
36
34
  const targetNodeRid = textBytes(value.target.targetNodeRid, 'targetNodeRid');
37
35
  const descriptorVersion = textBytes(value.target.descriptorVersion, 'targetDescriptorVersion');
38
36
  const sourceNodeRid = textBytes(value.sourceNodeRid, 'sourceNodeRid');
39
- const sourceSpotId = value.sourceSpotId === undefined
40
- ? undefined
41
- : textBytes(value.sourceSpotId, 'sourceSpotId');
37
+ const sourceSpotId =
38
+ value.sourceSpotId === undefined ? undefined : textBytes(value.sourceSpotId, 'sourceSpotId');
42
39
  validatePositiveU64(value.target.targetNodeGeneration, 'targetNodeGeneration');
43
40
  validatePositiveU64(value.sourceNodeGeneration, 'sourceNodeGeneration');
44
41
  validateU64(value.operation.high, 'operation.high');
@@ -47,26 +44,29 @@ export function encodeInstanceActivationRecoveryEnvelope(
47
44
  validatePositiveU64(value.replyRouteId!, 'replyRouteId');
48
45
  }
49
46
  validatePositiveU64(value.deadlineUnixMs, 'deadlineUnixMs');
50
- const metadataFrame = value.metadataFrame === undefined
51
- ? undefined
52
- : validateServiceMetadataFrame(value.metadataFrame);
47
+ const metadataFrame =
48
+ value.metadataFrame === undefined
49
+ ? undefined
50
+ : validateServiceMetadataFrame(value.metadataFrame);
53
51
  const bodyLength =
54
- text8Size(targetSpotId)
55
- + text8Size(stableType)
56
- + text8Size(targetMeshName)
57
- + text8Size(targetNodeRid)
58
- + 8
59
- + text8Size(descriptorVersion)
60
- + text8Size(sourceNodeRid)
61
- + 8
62
- + 1 + (sourceSpotId === undefined ? 0 : text8Size(sourceSpotId))
63
- + 1
64
- + 8
65
- + 8
66
- + (value.operationKind === 'request' ? 8 : 0)
67
- + 8
68
- + 1 + (metadataFrame?.byteLength ?? 0)
69
- + value.applicationPayloadFrame.byteLength;
52
+ text8Size(targetSpotId) +
53
+ text8Size(stableType) +
54
+ text8Size(targetMeshName) +
55
+ text8Size(targetNodeRid) +
56
+ 8 +
57
+ text8Size(descriptorVersion) +
58
+ text8Size(sourceNodeRid) +
59
+ 8 +
60
+ 1 +
61
+ (sourceSpotId === undefined ? 0 : text8Size(sourceSpotId)) +
62
+ 1 +
63
+ 8 +
64
+ 8 +
65
+ (value.operationKind === 'request' ? 8 : 0) +
66
+ 8 +
67
+ 1 +
68
+ (metadataFrame?.byteLength ?? 0) +
69
+ value.applicationPayloadFrame.byteLength;
70
70
  const envelopeLength = 4 + 1 + 2 + 4 + bodyLength;
71
71
  const encodedLength = envelopeLength + 4;
72
72
  if (encodedLength > MAX_ENCODED_BYTES) {
@@ -157,9 +157,7 @@ export function decodeInstanceActivationRecoveryEnvelope(
157
157
  if (hasMetadata !== 0 && hasMetadata !== 1) {
158
158
  throw new TypeError('Instance activation recovery metadata flag is invalid.');
159
159
  }
160
- const metadataFrame = hasMetadata === 1
161
- ? body.metadataFrame()
162
- : undefined;
160
+ const metadataFrame = hasMetadata === 1 ? body.metadataFrame() : undefined;
163
161
  const applicationPayloadFrame = body.takeRemaining();
164
162
  validateApplicationPayloadFrame(applicationPayloadFrame);
165
163
  if (!body.done) {
@@ -293,7 +291,8 @@ class RecoveryReader {
293
291
  optionalText8(): string | undefined {
294
292
  const present = this.u8();
295
293
  if (present === 0) return undefined;
296
- if (present !== 1) throw new TypeError('Instance activation recovery optional flag is invalid.');
294
+ if (present !== 1)
295
+ throw new TypeError('Instance activation recovery optional flag is invalid.');
297
296
  return this.text8();
298
297
  }
299
298
 
@@ -30,10 +30,10 @@ export class ServiceLivenessRegistry {
30
30
  private readonly peerTimeoutMs = DEFAULT_SERVICE_PEER_TIMEOUT_MS
31
31
  ) {
32
32
  if (
33
- !Number.isFinite(probeIntervalMs)
34
- || probeIntervalMs <= 0
35
- || !Number.isFinite(peerTimeoutMs)
36
- || peerTimeoutMs <= probeIntervalMs
33
+ !Number.isFinite(probeIntervalMs) ||
34
+ probeIntervalMs <= 0 ||
35
+ !Number.isFinite(peerTimeoutMs) ||
36
+ peerTimeoutMs <= probeIntervalMs
37
37
  ) {
38
38
  throw new RangeError('Liveness requires a positive probe interval and a larger timeout.');
39
39
  }
@@ -55,11 +55,12 @@ export class ServiceLivenessRegistry {
55
55
  requestProbe(nodeRoutingId: string, connectionId: string, nowMs: number): boolean {
56
56
  const current = this.peers.get(nodeRoutingId);
57
57
  if (
58
- current === undefined
59
- || current.connectionId !== connectionId
60
- || current.ready
61
- || current.outstandingProbe !== undefined
62
- ) return false;
58
+ current === undefined ||
59
+ current.connectionId !== connectionId ||
60
+ current.ready ||
61
+ current.outstandingProbe !== undefined
62
+ )
63
+ return false;
63
64
  current.nextProbeMs = Math.min(current.nextProbeMs, nowMs);
64
65
  return true;
65
66
  }
@@ -79,9 +80,9 @@ export class ServiceLivenessRegistry {
79
80
  ): boolean {
80
81
  const current = this.peers.get(nodeRoutingId);
81
82
  if (
82
- current === undefined
83
- || current.connectionId !== connectionId
84
- || current.outstandingProbe !== probeId
83
+ current === undefined ||
84
+ current.connectionId !== connectionId ||
85
+ current.outstandingProbe !== probeId
85
86
  ) {
86
87
  return false;
87
88
  }
@@ -114,7 +115,11 @@ export class ServiceLivenessRegistry {
114
115
  }
115
116
  if (peer.nextProbeMs > nowMs) continue;
116
117
  peer.outstandingProbe ??= this.allocateProbeId();
117
- probes.push({ nodeRoutingId, connectionId: peer.connectionId, probeId: peer.outstandingProbe });
118
+ probes.push({
119
+ nodeRoutingId,
120
+ connectionId: peer.connectionId,
121
+ probeId: peer.outstandingProbe
122
+ });
118
123
  do {
119
124
  peer.nextProbeMs += this.probeIntervalMs;
120
125
  } while (peer.nextProbeMs <= nowMs);