@zlink-systems/framework 0.21.0 → 0.23.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 (516) 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/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -60,15 +60,9 @@ import type {
60
60
  ZLinkSpotLocationQueryStore
61
61
  } from './internal-store-contracts';
62
62
  import type { ZLinkDomainLocationStore } from './domain-store-contract';
63
- import {
64
- zlinkLocationAutoConnectTypeName,
65
- zlinkLocationRoleName
66
- } from './canonical-codec';
63
+ import { zlinkLocationAutoConnectTypeName, zlinkLocationRoleName } from './canonical-codec';
67
64
  import { ZLinkLocationKeyCodec } from './key-codec';
68
- import {
69
- ZLinkLiveRowFilter,
70
- ZLinkOwnerLeaseTracker
71
- } from './lease-tracker';
65
+ import { ZLinkLiveRowFilter, ZLinkOwnerLeaseTracker } from './lease-tracker';
72
66
  import type { ZLinkOwnershipLostEvent } from './lifecycle-runtime';
73
67
 
74
68
  export interface ZLinkLocationRuntimeStores {
@@ -158,7 +152,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
158
152
  private ownerCleanupComplete = true;
159
153
  private readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
160
154
  private readonly meshNames: readonly string[];
161
- private readonly leaseScopes: readonly { readonly kind: 'mesh' | 'channel'; readonly name: string }[];
155
+ private readonly leaseScopes: readonly {
156
+ readonly kind: 'mesh' | 'channel';
157
+ readonly name: string;
158
+ }[];
162
159
  private readonly rewriteAuthorityPayloadForOwner?: ZLinkLocationRuntimeOptions['rewriteAuthorityPayloadForOwner'];
163
160
  private nextLeaseRenewAtMs?: number;
164
161
  private ownerToken?: ZLinkLocationOwnerToken;
@@ -170,9 +167,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
170
167
  lastError?: string;
171
168
 
172
169
  get ownerLeaseUsable(): boolean {
173
- return this.ownerToken !== undefined
174
- && this.ownerLeaseDeadlineMs !== undefined
175
- && this.monotonicNowMs() < this.ownerLeaseDeadlineMs;
170
+ return (
171
+ this.ownerToken !== undefined &&
172
+ this.ownerLeaseDeadlineMs !== undefined &&
173
+ this.monotonicNowMs() < this.ownerLeaseDeadlineMs
174
+ );
176
175
  }
177
176
 
178
177
  constructor(runtimeOptions: ZLinkLocationRuntimeOptions) {
@@ -182,16 +181,21 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
182
181
  this.events = runtimeOptions.events;
183
182
  this.metrics = runtimeOptions.metrics;
184
183
  this.meshNames = [...new Set(runtimeOptions.meshNames ?? [])];
185
- this.leaseScopes = runtimeOptions.leaseScopes ?? this.meshNames.map(name => ({ kind: 'mesh', name }));
184
+ this.leaseScopes =
185
+ runtimeOptions.leaseScopes ?? this.meshNames.map((name) => ({ kind: 'mesh', name }));
186
186
  this.rewriteAuthorityPayloadForOwner = runtimeOptions.rewriteAuthorityPayloadForOwner;
187
187
  this.monotonicNowMs = runtimeOptions.monotonicNowMs ?? (() => performance.now());
188
- this.setTimer = runtimeOptions.setTimer ?? ((callback, delayMs) => setTimeout(callback, delayMs));
189
- this.clearTimer = runtimeOptions.clearTimer ?? ((handle) => clearTimeout(handle as NodeJS.Timeout));
190
- const leaseTracker = runtimeOptions.leaseTracker ?? new ZLinkOwnerLeaseTracker({
191
- store: this.stores.ownerLeaseStore,
192
- options: this.options,
193
- monotonicNowMs: this.monotonicNowMs
194
- });
188
+ this.setTimer =
189
+ runtimeOptions.setTimer ?? ((callback, delayMs) => setTimeout(callback, delayMs));
190
+ this.clearTimer =
191
+ runtimeOptions.clearTimer ?? ((handle) => clearTimeout(handle as NodeJS.Timeout));
192
+ const leaseTracker =
193
+ runtimeOptions.leaseTracker ??
194
+ new ZLinkOwnerLeaseTracker({
195
+ store: this.stores.ownerLeaseStore,
196
+ options: this.options,
197
+ monotonicNowMs: this.monotonicNowMs
198
+ });
195
199
  this.liveRows = new ZLinkLiveRowFilter(leaseTracker);
196
200
  }
197
201
 
@@ -221,8 +225,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
221
225
  const failures: unknown[] = [];
222
226
  for (const entry of entries) {
223
227
  const snapshot = entry.snapshot;
224
- if (snapshot.ownerId !== owner.ownerId
225
- || snapshot.ownerLeaseGeneration === owner.leaseGeneration) {
228
+ if (
229
+ snapshot.ownerId !== owner.ownerId ||
230
+ snapshot.ownerLeaseGeneration === owner.leaseGeneration
231
+ ) {
226
232
  continue;
227
233
  }
228
234
  try {
@@ -237,8 +243,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
237
243
  },
238
244
  targetOwner: owner,
239
245
  payload: Buffer.from(
240
- this.rewriteAuthorityPayloadForOwner?.(snapshot.payload, owner)
241
- ?? snapshot.payload
246
+ this.rewriteAuthorityPayloadForOwner?.(snapshot.payload, owner) ?? snapshot.payload
242
247
  )
243
248
  },
244
249
  signal
@@ -246,16 +251,18 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
246
251
  if (result.kind === 'stored') continue;
247
252
  if (result.kind === 'conflict') {
248
253
  const current = result.current;
249
- if (current.kind === 'snapshot'
250
- && current.ownerId === owner.ownerId
251
- && current.ownerLeaseGeneration === owner.leaseGeneration) {
254
+ if (
255
+ current.kind === 'snapshot' &&
256
+ current.ownerId === owner.ownerId &&
257
+ current.ownerLeaseGeneration === owner.leaseGeneration
258
+ ) {
252
259
  continue;
253
260
  }
254
261
  continue;
255
262
  }
256
- failures.push(new Error(
257
- `Authority '${entry.key.value}' recovery returned '${result.kind}'.`
258
- ));
263
+ failures.push(
264
+ new Error(`Authority '${entry.key.value}' recovery returned '${result.kind}'.`)
265
+ );
259
266
  } catch (error) {
260
267
  failures.push(error);
261
268
  }
@@ -352,10 +359,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
352
359
  return;
353
360
  }
354
361
  try {
355
- const owner = this.ownerToken ?? this.lastOwnerToken ?? {
356
- ownerId: this.ownerId,
357
- leaseGeneration: 0n
358
- };
362
+ const owner = this.ownerToken ??
363
+ this.lastOwnerToken ?? {
364
+ ownerId: this.ownerId,
365
+ leaseGeneration: 0n
366
+ };
359
367
  await this.stores.locationStore.removeAllByOwner(owner, signal);
360
368
  const currentLease = await this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, signal);
361
369
  if (currentLease.kind === 'found') {
@@ -382,11 +390,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
382
390
  try {
383
391
  const renewStartedAtMs = this.monotonicNowMs();
384
392
  const result = await withTimeout(
385
- (renewSignal) => this.stores.ownerLeaseStore.renewOwnerLease(
393
+ (renewSignal) =>
394
+ this.stores.ownerLeaseStore.renewOwnerLease(
386
395
  this.ownerToken as ZLinkLocationOwnerToken,
387
396
  this.options.ownerLeaseTtlMs,
388
397
  renewSignal
389
- ),
398
+ ),
390
399
  this.options.ownerLeaseRenewTimeoutMs,
391
400
  signal
392
401
  );
@@ -453,10 +462,8 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
453
462
  // not install a token into a stopped runtime or leave an orphan lease.
454
463
  try {
455
464
  await withTimeout(
456
- releaseSignal => this.stores.ownerLeaseStore.releaseOwnerLease(
457
- claim.token,
458
- releaseSignal
459
- ),
465
+ (releaseSignal) =>
466
+ this.stores.ownerLeaseStore.releaseOwnerLease(claim.token, releaseSignal),
460
467
  remainingTimeoutMs(timeoutDeadline)
461
468
  );
462
469
  } catch (error) {
@@ -499,11 +506,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
499
506
  let claim: Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>;
500
507
  try {
501
508
  claim = await withTimeout(
502
- (claimSignal) => this.stores.ownerLeaseStore.claimOwnerLease(
503
- this.ownerId,
504
- this.options.ownerLeaseTtlMs,
505
- claimSignal
506
- ),
509
+ (claimSignal) =>
510
+ this.stores.ownerLeaseStore.claimOwnerLease(
511
+ this.ownerId,
512
+ this.options.ownerLeaseTtlMs,
513
+ claimSignal
514
+ ),
507
515
  remainingTimeoutMs(timeoutDeadline),
508
516
  signal
509
517
  );
@@ -515,27 +523,27 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
515
523
  }
516
524
  if (claim.kind !== 'conflict') return claim;
517
525
  const conflict = new ZLinkOwnerLeaseClaimError(claim.kind);
518
- return await this.confirmOwnerLease(conflict, timeoutDeadline, signal) ?? claim;
526
+ return (await this.confirmOwnerLease(conflict, timeoutDeadline, signal)) ?? claim;
519
527
  }
520
528
 
521
529
  private async confirmOwnerLease(
522
530
  originalError: unknown,
523
531
  timeoutDeadline: number,
524
532
  signal?: AbortSignal
525
- ): Promise<Extract<Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>, { kind: 'claimed' }> | undefined> {
533
+ ): Promise<
534
+ | Extract<Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>, { kind: 'claimed' }>
535
+ | undefined
536
+ > {
526
537
  const confirmationTimeoutMs = remainingTimeoutMs(timeoutDeadline);
527
538
  if (confirmationTimeoutMs <= 0) throw originalError;
528
539
  let confirmed: Awaited<ReturnType<ZLinkOwnerLeaseStore['readOwnerLease']>>;
529
540
  try {
530
541
  confirmed = await withTimeout(
531
- readSignal => this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, readSignal),
542
+ (readSignal) => this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, readSignal),
532
543
  confirmationTimeoutMs
533
544
  );
534
545
  } catch (confirmationError) {
535
- this.recordFailure(
536
- errorMessage(confirmationError),
537
- 'owner_lease_claim_confirmation'
538
- );
546
+ this.recordFailure(errorMessage(confirmationError), 'owner_lease_claim_confirmation');
539
547
  throw originalError;
540
548
  }
541
549
  if (confirmed.kind !== 'found' || confirmed.token.ownerId !== this.ownerId) {
@@ -544,10 +552,8 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
544
552
  if (signal?.aborted === true) {
545
553
  try {
546
554
  await withTimeout(
547
- releaseSignal => this.stores.ownerLeaseStore.releaseOwnerLease(
548
- confirmed.token,
549
- releaseSignal
550
- ),
555
+ (releaseSignal) =>
556
+ this.stores.ownerLeaseStore.releaseOwnerLease(confirmed.token, releaseSignal),
551
557
  remainingTimeoutMs(timeoutDeadline)
552
558
  );
553
559
  } catch (releaseError) {
@@ -574,10 +580,9 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
574
580
  // The Store's remaining TTL is measured at an unknown point during the
575
581
  // request. Subtract the full observed round trip and the fencing margin
576
582
  // so local eligibility cannot outlive the conservative pre-request bound.
577
- this.ownerLeaseDeadlineMs = requestCompletedAtMs + Math.max(
578
- 0,
579
- remainingTtlMs - roundTripMs - this.options.ownerLeaseFencingMarginMs
580
- );
583
+ this.ownerLeaseDeadlineMs =
584
+ requestCompletedAtMs +
585
+ Math.max(0, remainingTtlMs - roundTripMs - this.options.ownerLeaseFencingMarginMs);
581
586
  }
582
587
 
583
588
  async publishDraining(signal?: AbortSignal): Promise<boolean> {
@@ -600,10 +605,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
600
605
  }
601
606
 
602
607
  async writeMeshNode(
603
- descriptor: Omit<
604
- ZLinkMeshNodeDescriptor,
605
- 'ownerId' | 'leaseGeneration' | 'updatedAt'
606
- >,
608
+ descriptor: Omit<ZLinkMeshNodeDescriptor, 'ownerId' | 'leaseGeneration' | 'updatedAt'>,
607
609
  intent: ZLinkLocationWriteIntent,
608
610
  signal?: AbortSignal
609
611
  ): Promise<ZLinkLocationWriteResult> {
@@ -622,22 +624,20 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
622
624
  updatedAt: new Date()
623
625
  };
624
626
  let result = await this.guardWrite(() =>
625
- this.stores.locationStore.updateMeshNode(stamped, intent, signal));
627
+ this.stores.locationStore.updateMeshNode(stamped, intent, signal)
628
+ );
626
629
  if (
627
- intent === ZLinkLocationWriteIntent.Renew
628
- && (result.status === ZLinkLocationWriteStatus.RejectedConflict
629
- || result.status === ZLinkLocationWriteStatus.IgnoredStale)
630
+ intent === ZLinkLocationWriteIntent.Renew &&
631
+ (result.status === ZLinkLocationWriteStatus.RejectedConflict ||
632
+ result.status === ZLinkLocationWriteStatus.IgnoredStale)
630
633
  ) {
631
634
  // A Store restart can remove the descriptor while retaining the
632
635
  // in-process owner token. Renew cannot recreate an absent row, so use
633
636
  // NewClaim as a bounded fallback. If another owner has recreated the
634
637
  // row, NewClaim remains rejected and the caller keeps the conflict.
635
638
  result = await this.guardWrite(() =>
636
- this.stores.locationStore.updateMeshNode(
637
- stamped,
638
- ZLinkLocationWriteIntent.NewClaim,
639
- signal
640
- ));
639
+ this.stores.locationStore.updateMeshNode(stamped, ZLinkLocationWriteIntent.NewClaim, signal)
640
+ );
641
641
  }
642
642
  this.notifyIfStale(
643
643
  result,
@@ -660,7 +660,9 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
660
660
  // row was stored under.
661
661
  const normalizedEndpoint = normalizeEndpoint(peer.endpoint);
662
662
  const stamped = { ...peer, endpoint: normalizedEndpoint, ownerId: this.ownerId };
663
- const result = await this.guardWrite(() => this.stores.peerStore.updatePeer(stamped, intent, signal));
663
+ const result = await this.guardWrite(() =>
664
+ this.stores.peerStore.updatePeer(stamped, intent, signal)
665
+ );
664
666
  const key: ZLinkPeerLocationKey = {
665
667
  autoConnectType: peer.autoConnectType,
666
668
  meshName: peer.meshName,
@@ -670,7 +672,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
670
672
  };
671
673
  const rowKey = ZLinkLocationKeyCodec.encodePeerKey(key);
672
674
  if (result.status === ZLinkLocationWriteStatus.Stored) {
673
- this.events?.peerRowUpdated({ kind: ZLinkLocationKind.Peer, key }, { ...stamped, generation: result.generation, updatedAt: result.updatedAt });
675
+ this.events?.peerRowUpdated(
676
+ { kind: ZLinkLocationKind.Peer, key },
677
+ { ...stamped, generation: result.generation, updatedAt: result.updatedAt }
678
+ );
674
679
  }
675
680
  this.notifyIfStale(result, ZLinkLocationKind.Peer, rowKey);
676
681
  return result;
@@ -684,7 +689,9 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
684
689
  const owner = this.ownerToken;
685
690
  if (owner === undefined) throw new Error('Spot location write requires a claimed owner token.');
686
691
  const stamped = { ...spot, ownerId: owner.ownerId, leaseGeneration: owner.leaseGeneration };
687
- const result = await this.guardWrite(() => this.stores.spotStore.updateSpot(stamped, intent, signal));
692
+ const result = await this.guardWrite(() =>
693
+ this.stores.spotStore.updateSpot(stamped, intent, signal)
694
+ );
688
695
  const key = { meshName: spot.meshName, spotId: spot.spotId };
689
696
  if (result.status === ZLinkLocationWriteStatus.Stored) {
690
697
  this.events?.spotRowUpdated(key, { ...stamped, updatedAt: result.updatedAt });
@@ -699,14 +706,17 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
699
706
  signal?: AbortSignal
700
707
  ): Promise<ZLinkLocationWriteResult> {
701
708
  const owner = this.ownerToken;
702
- if (owner === undefined) throw new Error('Actor location write requires a claimed owner token.');
709
+ if (owner === undefined)
710
+ throw new Error('Actor location write requires a claimed owner token.');
703
711
  const stamped = {
704
712
  ...actor,
705
713
  actorType: actor.actorType,
706
714
  ownerId: owner.ownerId,
707
715
  leaseGeneration: owner.leaseGeneration
708
716
  };
709
- const result = await this.guardWrite(() => this.stores.actorStore.updateActor(stamped, intent, signal));
717
+ const result = await this.guardWrite(() =>
718
+ this.stores.actorStore.updateActor(stamped, intent, signal)
719
+ );
710
720
  const key = { meshName: stamped.meshName, actorId: stamped.actorId };
711
721
  if (result.status === ZLinkLocationWriteStatus.Stored) {
712
722
  this.events?.actorRowUpdated(key, { ...stamped, updatedAt: result.updatedAt });
@@ -721,19 +731,33 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
721
731
  signal?: AbortSignal
722
732
  ): Promise<ZLinkLocationWriteResult> {
723
733
  const stamped = { ...route, ownerId: this.ownerId };
724
- const result = await this.guardWrite(() => this.stores.routeStore.updateRoute(stamped, intent, signal));
734
+ const result = await this.guardWrite(() =>
735
+ this.stores.routeStore.updateRoute(stamped, intent, signal)
736
+ );
725
737
  const key = { routeKind: route.routeKind, routeKey: route.routeKey };
726
738
  if (result.status === ZLinkLocationWriteStatus.Stored) {
727
- this.events?.routeRowUpdated(key, { ...stamped, generation: result.generation, updatedAt: result.updatedAt });
739
+ this.events?.routeRowUpdated(key, {
740
+ ...stamped,
741
+ generation: result.generation,
742
+ updatedAt: result.updatedAt
743
+ });
728
744
  }
729
745
  this.notifyIfStale(result, ZLinkLocationKind.Route, ZLinkLocationKeyCodec.encodeRouteKey(key));
730
746
  return result;
731
747
  }
732
748
 
733
- async removePeer(key: ZLinkPeerLocationKey, generation: bigint, signal?: AbortSignal): Promise<ZLinkLocationWriteResult> {
749
+ async removePeer(
750
+ key: ZLinkPeerLocationKey,
751
+ generation: bigint,
752
+ signal?: AbortSignal
753
+ ): Promise<ZLinkLocationWriteResult> {
734
754
  const result = await this.guardWrite(() =>
735
755
  this.stores.peerStore.removePeer(
736
- key, { ownerId: this.ownerId, leaseGeneration: generation }, signal));
756
+ key,
757
+ { ownerId: this.ownerId, leaseGeneration: generation },
758
+ signal
759
+ )
760
+ );
737
761
  if (result.status === ZLinkLocationWriteStatus.Stored) {
738
762
  this.events?.peerRowRemoved({ kind: ZLinkLocationKind.Peer, key });
739
763
  }
@@ -741,32 +765,64 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
741
765
  return result;
742
766
  }
743
767
 
744
- async removeSpot(key: ZLinkSpotLocationKey, generation: bigint, signal?: AbortSignal): Promise<ZLinkLocationWriteStatus> {
768
+ async removeSpot(
769
+ key: ZLinkSpotLocationKey,
770
+ generation: bigint,
771
+ signal?: AbortSignal
772
+ ): Promise<ZLinkLocationWriteStatus> {
745
773
  const status = await this.guardStatusWrite(() =>
746
774
  this.stores.spotStore.removeSpot(
747
- key, { ownerId: this.ownerId, leaseGeneration: generation }, signal));
775
+ key,
776
+ { ownerId: this.ownerId, leaseGeneration: generation },
777
+ signal
778
+ )
779
+ );
748
780
  if (status === ZLinkLocationWriteStatus.Stored) {
749
781
  this.events?.spotRowRemoved(key);
750
782
  }
751
- this.notifyIfStaleStatus(status, ZLinkLocationKind.Spot, ZLinkLocationKeyCodec.encodeSpotKey(key));
783
+ this.notifyIfStaleStatus(
784
+ status,
785
+ ZLinkLocationKind.Spot,
786
+ ZLinkLocationKeyCodec.encodeSpotKey(key)
787
+ );
752
788
  return status;
753
789
  }
754
790
 
755
- async removeActor(key: ZLinkActorLocationKey, generation: bigint, signal?: AbortSignal): Promise<ZLinkLocationWriteStatus> {
791
+ async removeActor(
792
+ key: ZLinkActorLocationKey,
793
+ generation: bigint,
794
+ signal?: AbortSignal
795
+ ): Promise<ZLinkLocationWriteStatus> {
756
796
  const status = await this.guardStatusWrite(() =>
757
797
  this.stores.actorStore.removeActor(
758
- key, { ownerId: this.ownerId, leaseGeneration: generation }, signal));
798
+ key,
799
+ { ownerId: this.ownerId, leaseGeneration: generation },
800
+ signal
801
+ )
802
+ );
759
803
  if (status === ZLinkLocationWriteStatus.Stored) {
760
804
  this.events?.actorRowRemoved(key);
761
805
  }
762
- this.notifyIfStaleStatus(status, ZLinkLocationKind.Actor, ZLinkLocationKeyCodec.encodeActorKey(key));
806
+ this.notifyIfStaleStatus(
807
+ status,
808
+ ZLinkLocationKind.Actor,
809
+ ZLinkLocationKeyCodec.encodeActorKey(key)
810
+ );
763
811
  return status;
764
812
  }
765
813
 
766
- async removeRoute(key: ZLinkRouteLocationKey, generation: bigint, signal?: AbortSignal): Promise<ZLinkLocationWriteResult> {
814
+ async removeRoute(
815
+ key: ZLinkRouteLocationKey,
816
+ generation: bigint,
817
+ signal?: AbortSignal
818
+ ): Promise<ZLinkLocationWriteResult> {
767
819
  const result = await this.guardWrite(() =>
768
820
  this.stores.routeStore.removeRoute(
769
- key, { ownerId: this.ownerId, leaseGeneration: generation }, signal));
821
+ key,
822
+ { ownerId: this.ownerId, leaseGeneration: generation },
823
+ signal
824
+ )
825
+ );
770
826
  if (result.status === ZLinkLocationWriteStatus.Stored) {
771
827
  this.events?.routeRowRemoved(key);
772
828
  }
@@ -790,7 +846,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
790
846
  this.recordFailure(errorMessage(error), 'read');
791
847
  }
792
848
 
793
- async listPeerLocations(filter: ZLinkPeerLocationFilter, signal?: AbortSignal): Promise<readonly ZLinkPeerLocation[]> {
849
+ async listPeerLocations(
850
+ filter: ZLinkPeerLocationFilter,
851
+ signal?: AbortSignal
852
+ ): Promise<readonly ZLinkPeerLocation[]> {
794
853
  const rows = await this.stores.peerStore.listPeers(filter, signal);
795
854
  const live = await this.filterLive(rows, (row) => row.ownerId, signal);
796
855
  // Location Store rows may have been written before this process adopted
@@ -814,7 +873,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
814
873
  page?: ZLinkPageRequest,
815
874
  signal?: AbortSignal
816
875
  ): Promise<ZLinkLocationPage<ZLinkMeshNodeDescriptor>> {
817
- const rows = await this.stores.locationStore.listMeshNodes(meshName, this.pageRequest(page), signal);
876
+ const rows = await this.stores.locationStore.listMeshNodes(
877
+ meshName,
878
+ this.pageRequest(page),
879
+ signal
880
+ );
818
881
  const live = await this.filterLive(rows.items, (row) => row.ownerId, signal);
819
882
  return {
820
883
  items: live.map((row) => ({ ...row, endpoint: normalizeEndpoint(row.endpoint) })),
@@ -827,10 +890,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
827
890
  page?: ZLinkPageRequest,
828
891
  signal?: AbortSignal
829
892
  ): Promise<ZLinkLocationPage<ZLinkSpotLocation>> {
830
- const queryStore = this.stores.spotStore as ZLinkSpotLocationStore
831
- & Partial<ZLinkSpotLocationQueryStore>;
893
+ const queryStore = this.stores.spotStore as ZLinkSpotLocationStore &
894
+ Partial<ZLinkSpotLocationQueryStore>;
832
895
  if (queryStore.listSpots === undefined) {
833
- throw new Error('The configured Spot location store does not provide operational list queries.');
896
+ throw new Error(
897
+ 'The configured Spot location store does not provide operational list queries.'
898
+ );
834
899
  }
835
900
  const rows = await queryStore.listSpots(filter, this.pageRequest(page), signal);
836
901
  return {
@@ -844,10 +909,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
844
909
  page?: ZLinkPageRequest,
845
910
  signal?: AbortSignal
846
911
  ): Promise<ZLinkLocationPage<ZLinkActorLocation>> {
847
- const queryStore = this.stores.actorStore as ZLinkActorLocationStore
848
- & Partial<ZLinkActorLocationQueryStore>;
912
+ const queryStore = this.stores.actorStore as ZLinkActorLocationStore &
913
+ Partial<ZLinkActorLocationQueryStore>;
849
914
  if (queryStore.listActors === undefined) {
850
- throw new Error('The configured Actor location store does not provide operational list queries.');
915
+ throw new Error(
916
+ 'The configured Actor location store does not provide operational list queries.'
917
+ );
851
918
  }
852
919
  const rows = await queryStore.listActors(filter, this.pageRequest(page), signal);
853
920
  return {
@@ -864,9 +931,8 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
864
931
  const normalizedPage = this.pageRequest(page);
865
932
  const pageSize = normalizedPage.pageSize ?? this.options.listPageSize;
866
933
  const requestedCursor = normalizedPage.continuationToken;
867
- let cursor = requestedCursor === undefined
868
- ? undefined
869
- : PublicAuthorityScanCursor.from(requestedCursor);
934
+ let cursor =
935
+ requestedCursor === undefined ? undefined : PublicAuthorityScanCursor.from(requestedCursor);
870
936
  const items: ZLinkLocationObjectEntry[] = [];
871
937
  for (;;) {
872
938
  // Keep the Store cursor at the public page boundary. Scanning 1000 rows
@@ -878,15 +944,18 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
878
944
  for (const entry of result.items) {
879
945
  const identity = decodeAuthorityKey(entry.key);
880
946
  const allocation = entry.snapshot.allocation;
881
- if (allocation.objectKind !== filter.objectKind
882
- || (filter.stableType !== undefined && allocation.stableType !== filter.stableType)
883
- || (filter.meshName !== undefined && allocation.descriptor.meshName !== filter.meshName)
884
- ) continue;
885
- const live = await this.liveRows.resolve(
886
- entry,
887
- (candidate) => candidate.snapshot.ownerId,
888
- signal
889
- ) !== undefined;
947
+ if (
948
+ allocation.objectKind !== filter.objectKind ||
949
+ (filter.stableType !== undefined && allocation.stableType !== filter.stableType) ||
950
+ (filter.meshName !== undefined && allocation.descriptor.meshName !== filter.meshName)
951
+ )
952
+ continue;
953
+ const live =
954
+ (await this.liveRows.resolve(
955
+ entry,
956
+ (candidate) => candidate.snapshot.ownerId,
957
+ signal
958
+ )) !== undefined;
890
959
  items.push(this.objectLocationEntry(identity.globalId, entry.snapshot, live));
891
960
  if (items.length >= pageSize) break;
892
961
  }
@@ -917,8 +986,8 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
917
986
  signal
918
987
  );
919
988
  if (found.kind === 'missing' || found.allocation.objectKind === 'actor') return undefined;
920
- const live = await this.liveRows.resolve(found, (snapshot) => snapshot.ownerId, signal)
921
- !== undefined;
989
+ const live =
990
+ (await this.liveRows.resolve(found, (snapshot) => snapshot.ownerId, signal)) !== undefined;
922
991
  return this.objectLocationEntry(String(spotId), found, live);
923
992
  }
924
993
 
@@ -932,8 +1001,8 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
932
1001
  signal
933
1002
  );
934
1003
  if (found.kind === 'missing' || found.allocation.objectKind !== kind) return undefined;
935
- const live = await this.liveRows.resolve(found, (snapshot) => snapshot.ownerId, signal)
936
- !== undefined;
1004
+ const live =
1005
+ (await this.liveRows.resolve(found, (snapshot) => snapshot.ownerId, signal)) !== undefined;
937
1006
  return this.objectLocationEntry(globalId, found, live);
938
1007
  }
939
1008
 
@@ -948,9 +1017,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
948
1017
  objectGeneration: snapshot.objectGeneration,
949
1018
  meshName: allocation.descriptor.meshName,
950
1019
  nodeRid: allocation.descriptor.rid,
951
- state: allocation.state === 'reserved'
952
- ? 'creating'
953
- : ownerLive ? 'ready' : 'unavailable',
1020
+ state: allocation.state === 'reserved' ? 'creating' : ownerLive ? 'ready' : 'unavailable',
954
1021
  stableType: allocation.stableType
955
1022
  };
956
1023
  }
@@ -975,7 +1042,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
975
1042
  const entries: ZLinkLocationTopologyEntry[] = [];
976
1043
  for (const meshName of this.meshNamesOf(filter.meshName)) {
977
1044
  for (const descriptor of await this.listAllMeshNodeDescriptors(meshName, signal)) {
978
- const live = (await this.filterLive([descriptor], row => row.ownerId, signal)).length > 0;
1045
+ const live = (await this.filterLive([descriptor], (row) => row.ownerId, signal)).length > 0;
979
1046
  const entry: ZLinkLocationTopologyEntry = {
980
1047
  meshName: descriptor.meshName,
981
1048
  nodeRid: descriptor.rid,
@@ -985,14 +1052,16 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
985
1052
  // 않는다고 정한다. Host lifecycle의 `Draining`만 보면 relocate로 빠지는
986
1053
  // node가 계속 accepting으로 보인다.
987
1054
  draining:
988
- descriptor.state === ZLinkFrameworkRuntimeState.Draining
989
- || descriptor.state === ZLinkFrameworkRuntimeState.Relocating
990
- || descriptor.state === ZLinkFrameworkRuntimeState.Relocated,
1055
+ descriptor.state === ZLinkFrameworkRuntimeState.Draining ||
1056
+ descriptor.state === ZLinkFrameworkRuntimeState.Relocating ||
1057
+ descriptor.state === ZLinkFrameworkRuntimeState.Relocated,
991
1058
  state: live ? ZLinkLocationTopologyState.Ready : ZLinkLocationTopologyState.Lost,
992
1059
  updatedAt: descriptor.updatedAt
993
1060
  };
994
- if ((filter.nodeRid === undefined || entry.nodeRid === filter.nodeRid)
995
- && (filter.state === undefined || entry.state === filter.state)) {
1061
+ if (
1062
+ (filter.nodeRid === undefined || entry.nodeRid === filter.nodeRid) &&
1063
+ (filter.state === undefined || entry.state === filter.state)
1064
+ ) {
996
1065
  entries.push(entry);
997
1066
  }
998
1067
  }
@@ -1001,9 +1070,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1001
1070
  }
1002
1071
 
1003
1072
  private pageRequest(page: ZLinkPageRequest | undefined): ZLinkPageRequest {
1004
- return page?.pageSize === undefined
1005
- ? { ...page, pageSize: this.options.listPageSize }
1006
- : page;
1073
+ return page?.pageSize === undefined ? { ...page, pageSize: this.options.listPageSize } : page;
1007
1074
  }
1008
1075
 
1009
1076
  async listServiceSummaries(
@@ -1015,16 +1082,16 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1015
1082
  for (const meshName of this.meshNamesOf(filter.meshName)) {
1016
1083
  const descriptors = await this.listAllMeshNodeDescriptors(meshName, signal);
1017
1084
  if (descriptors.length === 0) continue;
1018
- const live = await this.filterLive(descriptors, row => row.ownerId, signal);
1019
- const liveOwners = new Set(live.map(row => row.ownerId));
1085
+ const live = await this.filterLive(descriptors, (row) => row.ownerId, signal);
1086
+ const liveOwners = new Set(live.map((row) => row.ownerId));
1020
1087
  summaries.push({
1021
1088
  meshName,
1022
1089
  totalCount: descriptors.length,
1023
- readyCount: descriptors.filter(row => liveOwners.has(row.ownerId)).length,
1090
+ readyCount: descriptors.filter((row) => liveOwners.has(row.ownerId)).length,
1024
1091
  errorCount: 0,
1025
- stoppedCount: descriptors.filter(row => !liveOwners.has(row.ownerId)).length,
1092
+ stoppedCount: descriptors.filter((row) => !liveOwners.has(row.ownerId)).length,
1026
1093
  lastUpdatedAt: descriptors.reduce(
1027
- (latest, row) => row.updatedAt > latest ? row.updatedAt : latest,
1094
+ (latest, row) => (row.updatedAt > latest ? row.updatedAt : latest),
1028
1095
  descriptors[0].updatedAt
1029
1096
  )
1030
1097
  });
@@ -1054,7 +1121,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1054
1121
  return rows;
1055
1122
  }
1056
1123
 
1057
- private pageInMemory<T>(entries: readonly T[], page: ZLinkPageRequest | undefined): ZLinkLocationPage<T> {
1124
+ private pageInMemory<T>(
1125
+ entries: readonly T[],
1126
+ page: ZLinkPageRequest | undefined
1127
+ ): ZLinkLocationPage<T> {
1058
1128
  const normalized = this.pageRequest(page);
1059
1129
  const parsedOffset = Number.parseInt(normalized.continuationToken ?? '0', 10);
1060
1130
  const offset = Number.isFinite(parsedOffset) && parsedOffset >= 0 ? parsedOffset : 0;
@@ -1079,8 +1149,8 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1079
1149
  if (!this.started) {
1080
1150
  return;
1081
1151
  }
1082
- const scheduledAt = this.nextLeaseRenewAtMs
1083
- ?? this.monotonicNowMs() + this.options.ownerLeaseRenewIntervalMs;
1152
+ const scheduledAt =
1153
+ this.nextLeaseRenewAtMs ?? this.monotonicNowMs() + this.options.ownerLeaseRenewIntervalMs;
1084
1154
  const delayMs = Math.max(0, scheduledAt - this.monotonicNowMs());
1085
1155
  this.heartbeatTimer = this.setTimer(() => {
1086
1156
  this.heartbeatTimer = undefined;
@@ -1089,27 +1159,33 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1089
1159
  this.metrics?.recordOwnerLeaseRenewLateness(lateness, scope.kind, scope.name);
1090
1160
  }
1091
1161
  this.nextLeaseRenewAtMs = scheduledAt + this.options.ownerLeaseRenewIntervalMs;
1092
- if (this.ownerLeaseDeadlineMs !== undefined
1093
- && this.monotonicNowMs() >= this.ownerLeaseDeadlineMs) {
1162
+ if (
1163
+ this.ownerLeaseDeadlineMs !== undefined &&
1164
+ this.monotonicNowMs() >= this.ownerLeaseDeadlineMs
1165
+ ) {
1094
1166
  this.ownerLeaseHealthy = false;
1095
1167
  this.recordFailure('Owner lease expired before renewal completed.', 'lease_expired');
1096
1168
  for (const handler of this.ownerLeaseRenewalFailedHandlers) handler();
1097
1169
  }
1098
- const renewal = this.renewOwnerLeaseOnce().then(
1099
- () => undefined,
1100
- () => undefined
1101
- ).finally(() => {
1102
- if (this.heartbeatRenewal === renewal) {
1103
- this.heartbeatRenewal = undefined;
1104
- }
1105
- this.scheduleHeartbeat();
1106
- });
1170
+ const renewal = this.renewOwnerLeaseOnce()
1171
+ .then(
1172
+ () => undefined,
1173
+ () => undefined
1174
+ )
1175
+ .finally(() => {
1176
+ if (this.heartbeatRenewal === renewal) {
1177
+ this.heartbeatRenewal = undefined;
1178
+ }
1179
+ this.scheduleHeartbeat();
1180
+ });
1107
1181
  this.heartbeatRenewal = renewal;
1108
1182
  void renewal;
1109
1183
  }, delayMs);
1110
1184
  }
1111
1185
 
1112
- private async guardWrite(write: () => Promise<ZLinkLocationWriteResult>): Promise<ZLinkLocationWriteResult> {
1186
+ private async guardWrite(
1187
+ write: () => Promise<ZLinkLocationWriteResult>
1188
+ ): Promise<ZLinkLocationWriteResult> {
1113
1189
  try {
1114
1190
  return await write();
1115
1191
  } catch (error) {
@@ -1129,8 +1205,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1129
1205
  }
1130
1206
  }
1131
1207
 
1132
- private notifyIfStale(result: ZLinkLocationWriteResult, kind: ZLinkLocationKind, key: string): void {
1133
- if (result.status === ZLinkLocationWriteStatus.IgnoredStale || result.status === ZLinkLocationWriteStatus.RejectedConflict) {
1208
+ private notifyIfStale(
1209
+ result: ZLinkLocationWriteResult,
1210
+ kind: ZLinkLocationKind,
1211
+ key: string
1212
+ ): void {
1213
+ if (
1214
+ result.status === ZLinkLocationWriteStatus.IgnoredStale ||
1215
+ result.status === ZLinkLocationWriteStatus.RejectedConflict
1216
+ ) {
1134
1217
  this.metrics?.recordLocationStoreError('compare_exchange');
1135
1218
  }
1136
1219
  if (result.status !== ZLinkLocationWriteStatus.IgnoredStale) {
@@ -1141,8 +1224,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1141
1224
  }
1142
1225
  }
1143
1226
 
1144
- private notifyIfStaleStatus(status: ZLinkLocationWriteStatus, kind: ZLinkLocationKind, key: string): void {
1145
- if (status === ZLinkLocationWriteStatus.IgnoredStale || status === ZLinkLocationWriteStatus.RejectedConflict) {
1227
+ private notifyIfStaleStatus(
1228
+ status: ZLinkLocationWriteStatus,
1229
+ kind: ZLinkLocationKind,
1230
+ key: string
1231
+ ): void {
1232
+ if (
1233
+ status === ZLinkLocationWriteStatus.IgnoredStale ||
1234
+ status === ZLinkLocationWriteStatus.RejectedConflict
1235
+ ) {
1146
1236
  this.metrics?.recordLocationStoreError('compare_exchange');
1147
1237
  }
1148
1238
  if (status !== ZLinkLocationWriteStatus.IgnoredStale) {
@@ -1172,9 +1262,10 @@ async function withTimeout<T>(
1172
1262
  signal?: AbortSignal
1173
1263
  ): Promise<T> {
1174
1264
  const timeoutController = new AbortController();
1175
- const operationSignal = signal === undefined
1176
- ? timeoutController.signal
1177
- : AbortSignal.any([signal, timeoutController.signal]);
1265
+ const operationSignal =
1266
+ signal === undefined
1267
+ ? timeoutController.signal
1268
+ : AbortSignal.any([signal, timeoutController.signal]);
1178
1269
  let timeout: ReturnType<typeof setTimeout> | undefined;
1179
1270
  let abort: (() => void) | undefined;
1180
1271
  const deadline = new Promise<never>((_resolve, reject) => {
@@ -1185,12 +1276,13 @@ async function withTimeout<T>(
1185
1276
  }, timeoutMs);
1186
1277
  timeout.unref();
1187
1278
  });
1188
- const cancellation = signal === undefined
1189
- ? undefined
1190
- : new Promise<never>((_resolve, reject) => {
1191
- abort = () => reject(signal.reason);
1192
- signal.addEventListener('abort', abort, { once: true });
1193
- });
1279
+ const cancellation =
1280
+ signal === undefined
1281
+ ? undefined
1282
+ : new Promise<never>((_resolve, reject) => {
1283
+ abort = () => reject(signal.reason);
1284
+ signal.addEventListener('abort', abort, { once: true });
1285
+ });
1194
1286
  try {
1195
1287
  signal?.throwIfAborted();
1196
1288
  return await Promise.race(