@zlink-systems/framework 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,3 +1,6 @@
1
+ import { listAllMeshNodeDescriptors } from './location-store-pages';
2
+ import { MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
3
+ import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
1
4
  import {
2
5
  zlinkRuntimeDefaultLocationOptions,
3
6
  type ZLinkLocationOptionOverrides
@@ -63,6 +66,7 @@ import type { ZLinkDomainLocationStore } from './domain-store-contract';
63
66
  import { zlinkLocationAutoConnectTypeName, zlinkLocationRoleName } from './canonical-codec';
64
67
  import { ZLinkLocationKeyCodec } from './key-codec';
65
68
  import { ZLinkLiveRowFilter, ZLinkOwnerLeaseTracker } from './lease-tracker';
69
+ import { isAbortError } from '../abort';
66
70
  import type { ZLinkOwnershipLostEvent } from './lifecycle-runtime';
67
71
 
68
72
  export interface ZLinkLocationRuntimeStores {
@@ -142,11 +146,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
142
146
  private readonly clearTimer: (handle: unknown) => void;
143
147
  private readonly monotonicNowMs: () => number;
144
148
  private readonly liveRows: ZLinkLiveRowFilter;
149
+ private readonly leaseTracker: ZLinkOwnerLeaseTracker;
145
150
  private readonly ownershipLostHandlers = new Set<(event: ZLinkOwnershipLostEvent) => void>();
146
151
  private readonly ownerLeaseRenewedHandlers = new Set<(renewal: ZLinkOwnerLeaseRenewed) => void>();
147
152
  private readonly ownerLeaseRenewalFailedHandlers = new Set<() => void>();
148
153
  private heartbeatTimer: unknown;
149
- private heartbeatRenewal?: Promise<void>;
154
+ private heartbeatRenewal?: Promise<unknown>;
150
155
  private nodeRidValue?: RoutingId;
151
156
  private started = false;
152
157
  private ownerCleanupComplete = true;
@@ -189,14 +194,14 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
189
194
  runtimeOptions.setTimer ?? ((callback, delayMs) => setTimeout(callback, delayMs));
190
195
  this.clearTimer =
191
196
  runtimeOptions.clearTimer ?? ((handle) => clearTimeout(handle as NodeJS.Timeout));
192
- const leaseTracker =
197
+ this.leaseTracker =
193
198
  runtimeOptions.leaseTracker ??
194
199
  new ZLinkOwnerLeaseTracker({
195
200
  store: this.stores.ownerLeaseStore,
196
201
  options: this.options,
197
202
  monotonicNowMs: this.monotonicNowMs
198
203
  });
199
- this.liveRows = new ZLinkLiveRowFilter(leaseTracker);
204
+ this.liveRows = new ZLinkLiveRowFilter();
200
205
  }
201
206
 
202
207
  get isStarted(): boolean {
@@ -278,7 +283,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
278
283
  let cursor: ZLinkAuthorityScanCursor | undefined;
279
284
  let expired = false;
280
285
  do {
281
- const page = await this.stores.authorityStore.listAuthorities('', cursor, 1000, signal);
286
+ const page = await this.stores.authorityStore.listAuthorities(
287
+ '',
288
+ cursor,
289
+ ZLINK_PROVIDER_MAX_PAGE_SIZE,
290
+ signal
291
+ );
282
292
  if (page.kind === 'scanExpired') {
283
293
  expired = true;
284
294
  break;
@@ -314,7 +324,14 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
314
324
  this.ownerLeaseRenewalFailedHandlers.delete(handler);
315
325
  }
316
326
 
317
- async start(nodeRid: RoutingId, signal?: AbortSignal): Promise<void> {
327
+ start(nodeRid: RoutingId): Promise<void>;
328
+ start(nodeRid: RoutingId, signal: AbortSignal): Promise<void>;
329
+ start(nodeRid: RoutingId, signal: AbortSignal, shutdownSignal: () => AbortSignal): Promise<void>;
330
+ async start(
331
+ nodeRid: RoutingId,
332
+ signal?: AbortSignal,
333
+ shutdownSignal?: () => AbortSignal
334
+ ): Promise<void> {
318
335
  if (this.started) {
319
336
  return;
320
337
  }
@@ -322,8 +339,10 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
322
339
  this.started = true;
323
340
  this.ownerCleanupComplete = false;
324
341
  this.nodeRidValue = nodeRid;
342
+ const claim = this.renewOwnerLeaseOnce(signal, shutdownSignal);
343
+ this.heartbeatRenewal = claim;
325
344
  try {
326
- const claimed = await this.renewOwnerLeaseOnce(signal);
345
+ const claimed = await claim;
327
346
  if (claimed) {
328
347
  this.scheduleHeartbeat();
329
348
  return;
@@ -333,15 +352,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
333
352
  } catch (error) {
334
353
  this.started = false;
335
354
  this.ownerCleanupComplete = true;
336
- throw error;
355
+ throw signal?.aborted === true ? signal.reason : error;
337
356
  }
338
357
  }
339
358
 
340
359
  async stop(signal?: AbortSignal): Promise<void> {
341
- if (!this.started && this.ownerCleanupComplete) {
342
- return;
343
- }
344
-
345
360
  this.started = false;
346
361
  if (this.heartbeatTimer !== undefined) {
347
362
  this.clearTimer(this.heartbeatTimer);
@@ -349,12 +364,18 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
349
364
  }
350
365
  this.nextLeaseRenewAtMs = undefined;
351
366
  this.ownerLeaseDeadlineMs = undefined;
352
- await this.heartbeatRenewal;
353
-
354
367
  await this.cleanupOwner(signal);
355
368
  }
356
369
 
357
370
  async cleanupOwner(signal?: AbortSignal): Promise<void> {
371
+ const pending = this.heartbeatRenewal;
372
+ try {
373
+ await withTimeout(() => pending ?? Promise.resolve(), undefined, signal);
374
+ } catch (error) {
375
+ if (!isAbortError(error)) throw error;
376
+ } finally {
377
+ if (this.heartbeatRenewal === pending) this.heartbeatRenewal = undefined;
378
+ }
358
379
  if (this.ownerCleanupComplete) {
359
380
  return;
360
381
  }
@@ -364,11 +385,20 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
364
385
  ownerId: this.ownerId,
365
386
  leaseGeneration: 0n
366
387
  };
367
- await this.stores.locationStore.removeAllByOwner(owner, signal);
368
- const currentLease = await this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, signal);
369
- if (currentLease.kind === 'found') {
370
- await this.stores.ownerLeaseStore.releaseOwnerLease(currentLease.token, signal);
371
- }
388
+ await withTimeout(
389
+ async (cleanupSignal) => {
390
+ await this.stores.locationStore.removeAllByOwner(owner, cleanupSignal);
391
+ const currentLease = await this.stores.ownerLeaseStore.readOwnerLease(
392
+ this.ownerId,
393
+ cleanupSignal
394
+ );
395
+ if (currentLease.kind === 'found') {
396
+ await this.stores.ownerLeaseStore.releaseOwnerLease(currentLease.token, cleanupSignal);
397
+ }
398
+ },
399
+ undefined,
400
+ signal
401
+ );
372
402
  this.ownerToken = undefined;
373
403
  this.lastOwnerToken = undefined;
374
404
  this.ownerCleanupComplete = true;
@@ -378,12 +408,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
378
408
  }
379
409
  }
380
410
 
381
- async renewOwnerLeaseOnce(signal?: AbortSignal): Promise<boolean> {
411
+ async renewOwnerLeaseOnce(
412
+ signal?: AbortSignal,
413
+ shutdownSignal?: () => AbortSignal
414
+ ): Promise<boolean> {
382
415
  if (!this.started) {
383
416
  return false;
384
417
  }
385
418
  if (this.ownerToken === undefined) {
386
- return await this.claimFreshOwnerLease(signal);
419
+ return await this.claimFreshOwnerLease(signal, shutdownSignal);
387
420
  }
388
421
 
389
422
  const wasOwnerLeaseUsable = this.ownerLeaseUsable;
@@ -413,7 +446,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
413
446
  // The store has already told us that this owner token cannot be
414
447
  // renewed. Claim immediately so descriptor recovery does not wait for
415
448
  // another heartbeat interval.
416
- return await this.claimFreshOwnerLease(signal);
449
+ return await this.claimFreshOwnerLease(signal, shutdownSignal);
417
450
  }
418
451
  this.ownerLeaseHealthy = true;
419
452
  this.ownerLeaseRenewedAt = result.storeNow;
@@ -437,12 +470,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
437
470
  }
438
471
  }
439
472
 
440
- private async claimFreshOwnerLease(signal?: AbortSignal): Promise<boolean> {
473
+ private async claimFreshOwnerLease(
474
+ signal?: AbortSignal,
475
+ shutdownSignal?: () => AbortSignal
476
+ ): Promise<boolean> {
441
477
  const claimStartedAtMs = this.monotonicNowMs();
442
478
  const timeoutDeadline = performance.now() + this.options.ownerLeaseRenewTimeoutMs;
443
479
  let claim: Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>;
444
480
  try {
445
- claim = await this.claimOwnerLeaseWithConfirmation(timeoutDeadline, signal);
481
+ claim = await this.claimOwnerLeaseWithConfirmation(timeoutDeadline, signal, shutdownSignal);
446
482
  } catch (error) {
447
483
  if (signal?.aborted === true) throw error;
448
484
  if (error instanceof ZLinkOwnerLeaseClaimError) throw error;
@@ -458,17 +494,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
458
494
  }
459
495
  try {
460
496
  if (!this.started) {
461
- // stop() may have completed while the Store claim was in flight. Do
462
- // not install a token into a stopped runtime or leave an orphan lease.
463
- try {
464
- await withTimeout(
465
- (releaseSignal) =>
466
- this.stores.ownerLeaseStore.releaseOwnerLease(claim.token, releaseSignal),
467
- remainingTimeoutMs(timeoutDeadline)
468
- );
469
- } catch (error) {
470
- this.recordFailure(errorMessage(error), 'owner_lease_release');
471
- }
497
+ // stop owns confirmation and release under the host shutdown signal.
472
498
  return false;
473
499
  }
474
500
  this.lastOwnerToken = this.ownerToken;
@@ -500,51 +526,86 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
500
526
 
501
527
  private async claimOwnerLeaseWithConfirmation(
502
528
  timeoutDeadline: number,
503
- signal?: AbortSignal
529
+ signal?: AbortSignal,
530
+ shutdownSignal?: () => AbortSignal
504
531
  ): Promise<Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>> {
505
532
  signal?.throwIfAborted();
506
533
  let claim: Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>;
534
+ let request: ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']> | undefined;
507
535
  try {
508
536
  claim = await withTimeout(
509
537
  (claimSignal) =>
510
- this.stores.ownerLeaseStore.claimOwnerLease(
538
+ (request = this.stores.ownerLeaseStore.claimOwnerLease(
511
539
  this.ownerId,
512
540
  this.options.ownerLeaseTtlMs,
513
541
  claimSignal
514
- ),
542
+ )),
515
543
  remainingTimeoutMs(timeoutDeadline),
516
544
  signal
517
545
  );
518
546
  } catch (error) {
519
547
  if (error instanceof OwnerLeaseRenewTimeoutError) throw error;
520
- const confirmed = await this.confirmOwnerLease(error, timeoutDeadline, signal);
548
+ if (signal?.aborted === true && request !== undefined) {
549
+ const cleanupSignal = shutdownSignal?.();
550
+ try {
551
+ await withTimeout(
552
+ () => request!,
553
+ cleanupSignal === undefined ? remainingTimeoutMs(timeoutDeadline) : undefined,
554
+ cleanupSignal
555
+ );
556
+ } catch (completionError) {
557
+ if (
558
+ cleanupSignal?.aborted === true ||
559
+ completionError instanceof OwnerLeaseRenewTimeoutError
560
+ ) {
561
+ throw new ZLinkOwnerCleanupError(completionError);
562
+ }
563
+ if (!isAbortError(completionError)) {
564
+ this.recordFailure(errorMessage(completionError), 'owner_lease_claim');
565
+ }
566
+ }
567
+ }
568
+ const confirmed = await this.confirmOwnerLease(
569
+ error,
570
+ timeoutDeadline,
571
+ signal,
572
+ shutdownSignal
573
+ );
521
574
  if (confirmed !== undefined) return confirmed;
522
575
  throw error;
523
576
  }
524
577
  if (claim.kind !== 'conflict') return claim;
525
578
  const conflict = new ZLinkOwnerLeaseClaimError(claim.kind);
526
- return (await this.confirmOwnerLease(conflict, timeoutDeadline, signal)) ?? claim;
579
+ return (
580
+ (await this.confirmOwnerLease(conflict, timeoutDeadline, signal, shutdownSignal)) ?? claim
581
+ );
527
582
  }
528
583
 
529
584
  private async confirmOwnerLease(
530
585
  originalError: unknown,
531
586
  timeoutDeadline: number,
532
- signal?: AbortSignal
587
+ signal?: AbortSignal,
588
+ shutdownSignal?: () => AbortSignal
533
589
  ): Promise<
534
590
  | Extract<Awaited<ReturnType<ZLinkOwnerLeaseStore['claimOwnerLease']>>, { kind: 'claimed' }>
535
591
  | undefined
536
592
  > {
537
- const confirmationTimeoutMs = remainingTimeoutMs(timeoutDeadline);
538
- if (confirmationTimeoutMs <= 0) throw originalError;
593
+ const cancelled = signal?.aborted === true;
594
+ const cleanupSignal = cancelled ? shutdownSignal?.() : undefined;
595
+ const confirmationTimeoutMs =
596
+ cleanupSignal === undefined ? remainingTimeoutMs(timeoutDeadline) : undefined;
597
+ if (confirmationTimeoutMs !== undefined && confirmationTimeoutMs <= 0) throw originalError;
539
598
  let confirmed: Awaited<ReturnType<ZLinkOwnerLeaseStore['readOwnerLease']>>;
540
599
  try {
541
600
  confirmed = await withTimeout(
542
601
  (readSignal) => this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, readSignal),
543
- confirmationTimeoutMs
602
+ confirmationTimeoutMs,
603
+ cleanupSignal
544
604
  );
545
605
  } catch (confirmationError) {
546
606
  this.recordFailure(errorMessage(confirmationError), 'owner_lease_claim_confirmation');
547
- throw originalError;
607
+ if (cancelled) throw new ZLinkOwnerCleanupError(confirmationError);
608
+ throw confirmationError;
548
609
  }
549
610
  if (confirmed.kind !== 'found' || confirmed.token.ownerId !== this.ownerId) {
550
611
  throw originalError;
@@ -554,10 +615,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
554
615
  await withTimeout(
555
616
  (releaseSignal) =>
556
617
  this.stores.ownerLeaseStore.releaseOwnerLease(confirmed.token, releaseSignal),
557
- remainingTimeoutMs(timeoutDeadline)
618
+ cleanupSignal === undefined ? remainingTimeoutMs(timeoutDeadline) : undefined,
619
+ cleanupSignal
558
620
  );
559
621
  } catch (releaseError) {
560
622
  this.recordFailure(errorMessage(releaseError), 'owner_lease_release');
623
+ throw new ZLinkOwnerCleanupError(releaseError);
561
624
  }
562
625
  throw originalError;
563
626
  }
@@ -851,7 +914,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
851
914
  signal?: AbortSignal
852
915
  ): Promise<readonly ZLinkPeerLocation[]> {
853
916
  const rows = await this.stores.peerStore.listPeers(filter, signal);
854
- const live = await this.filterLive(rows, (row) => row.ownerId, signal);
917
+ const live = await this.liveRows.filter(
918
+ rows,
919
+ (row, signal) => this.leaseTracker.isOwnerLive(row.ownerId, signal),
920
+ signal
921
+ );
855
922
  // Location Store rows may have been written before this process adopted
856
923
  // the endpoint-notation policy, or by another language/version's writer.
857
924
  // Normalize on read so every comparison downstream sees the canonical
@@ -863,8 +930,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
863
930
  meshName: string,
864
931
  signal?: AbortSignal
865
932
  ): Promise<readonly ZLinkMeshNodeDescriptor[]> {
866
- const rows = (await this.stores.locationStore.listMeshNodes(meshName, undefined, signal)).items;
867
- const live = await this.filterLive(rows, (row) => row.ownerId, signal);
933
+ const rows = await listAllMeshNodeDescriptors(this.stores.locationStore, meshName, signal);
934
+ const live = await this.liveRows.filter(
935
+ rows,
936
+ (row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
937
+ signal
938
+ );
868
939
  return live.map((row) => ({ ...row, endpoint: normalizeEndpoint(row.endpoint) }));
869
940
  }
870
941
 
@@ -878,7 +949,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
878
949
  this.pageRequest(page),
879
950
  signal
880
951
  );
881
- const live = await this.filterLive(rows.items, (row) => row.ownerId, signal);
952
+ const live = await this.liveRows.filter(
953
+ rows.items,
954
+ (row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
955
+ signal
956
+ );
882
957
  return {
883
958
  items: live.map((row) => ({ ...row, endpoint: normalizeEndpoint(row.endpoint) })),
884
959
  continuationToken: rows.continuationToken
@@ -899,7 +974,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
899
974
  }
900
975
  const rows = await queryStore.listSpots(filter, this.pageRequest(page), signal);
901
976
  return {
902
- items: await this.filterLive(rows.items, (row) => row.ownerId, signal),
977
+ items: await this.liveRows.filter(
978
+ rows.items,
979
+ (row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
980
+ signal
981
+ ),
903
982
  continuationToken: rows.continuationToken
904
983
  };
905
984
  }
@@ -918,7 +997,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
918
997
  }
919
998
  const rows = await queryStore.listActors(filter, this.pageRequest(page), signal);
920
999
  return {
921
- items: await this.filterLive(rows.items, (row) => row.ownerId, signal),
1000
+ items: await this.liveRows.filter(
1001
+ rows.items,
1002
+ (row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
1003
+ signal
1004
+ ),
922
1005
  continuationToken: rows.continuationToken
923
1006
  };
924
1007
  }
@@ -929,7 +1012,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
929
1012
  signal?: AbortSignal
930
1013
  ): Promise<ZLinkLocationPage<ZLinkLocationObjectEntry>> {
931
1014
  const normalizedPage = this.pageRequest(page);
932
- const pageSize = normalizedPage.pageSize ?? this.options.listPageSize;
1015
+ const pageSize = normalizedPage.pageSize;
933
1016
  const requestedCursor = normalizedPage.continuationToken;
934
1017
  let cursor =
935
1018
  requestedCursor === undefined ? undefined : PublicAuthorityScanCursor.from(requestedCursor);
@@ -953,7 +1036,14 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
953
1036
  const live =
954
1037
  (await this.liveRows.resolve(
955
1038
  entry,
956
- (candidate) => candidate.snapshot.ownerId,
1039
+ (candidate, signal) =>
1040
+ this.leaseTracker.isOwnerTokenLive(
1041
+ {
1042
+ ownerId: candidate.snapshot.ownerId,
1043
+ leaseGeneration: candidate.snapshot.ownerLeaseGeneration
1044
+ },
1045
+ signal
1046
+ ),
957
1047
  signal
958
1048
  )) !== undefined;
959
1049
  items.push(this.objectLocationEntry(identity.globalId, entry.snapshot, live));
@@ -987,7 +1077,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
987
1077
  );
988
1078
  if (found.kind === 'missing' || found.allocation.objectKind === 'actor') return undefined;
989
1079
  const live =
990
- (await this.liveRows.resolve(found, (snapshot) => snapshot.ownerId, signal)) !== undefined;
1080
+ (await this.liveRows.resolve(
1081
+ found,
1082
+ (snapshot, signal) =>
1083
+ this.leaseTracker.isOwnerTokenLive(
1084
+ { ownerId: snapshot.ownerId, leaseGeneration: snapshot.ownerLeaseGeneration },
1085
+ signal
1086
+ ),
1087
+ signal
1088
+ )) !== undefined;
991
1089
  return this.objectLocationEntry(String(spotId), found, live);
992
1090
  }
993
1091
 
@@ -1002,7 +1100,15 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1002
1100
  );
1003
1101
  if (found.kind === 'missing' || found.allocation.objectKind !== kind) return undefined;
1004
1102
  const live =
1005
- (await this.liveRows.resolve(found, (snapshot) => snapshot.ownerId, signal)) !== undefined;
1103
+ (await this.liveRows.resolve(
1104
+ found,
1105
+ (snapshot, signal) =>
1106
+ this.leaseTracker.isOwnerTokenLive(
1107
+ { ownerId: snapshot.ownerId, leaseGeneration: snapshot.ownerLeaseGeneration },
1108
+ signal
1109
+ ),
1110
+ signal
1111
+ )) !== undefined;
1006
1112
  return this.objectLocationEntry(globalId, found, live);
1007
1113
  }
1008
1114
 
@@ -1029,7 +1135,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1029
1135
  ): Promise<ZLinkLocationPage<ZLinkRouteLocation>> {
1030
1136
  const rows = await this.stores.routeStore.listRoutes(filter, this.pageRequest(page), signal);
1031
1137
  return {
1032
- items: await this.filterLive(rows.items, (row) => row.ownerId, signal),
1138
+ items: await this.liveRows.filter(
1139
+ rows.items,
1140
+ (row, signal) => this.leaseTracker.isOwnerLive(row.ownerId, signal),
1141
+ signal
1142
+ ),
1033
1143
  continuationToken: rows.continuationToken
1034
1144
  };
1035
1145
  }
@@ -1041,8 +1151,13 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1041
1151
  ): Promise<ZLinkLocationPage<ZLinkLocationTopologyEntry>> {
1042
1152
  const entries: ZLinkLocationTopologyEntry[] = [];
1043
1153
  for (const meshName of this.meshNamesOf(filter.meshName)) {
1044
- for (const descriptor of await this.listAllMeshNodeDescriptors(meshName, signal)) {
1045
- const live = (await this.filterLive([descriptor], (row) => row.ownerId, signal)).length > 0;
1154
+ for (const descriptor of await listAllMeshNodeDescriptors(
1155
+ this.stores.locationStore,
1156
+ meshName,
1157
+ signal,
1158
+ this.options.listPageSize
1159
+ )) {
1160
+ const live = await this.leaseTracker.isOwnerTokenLive(descriptor, signal);
1046
1161
  const entry: ZLinkLocationTopologyEntry = {
1047
1162
  meshName: descriptor.meshName,
1048
1163
  nodeRid: descriptor.rid,
@@ -1069,8 +1184,12 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1069
1184
  return this.pageInMemory(entries, page);
1070
1185
  }
1071
1186
 
1072
- private pageRequest(page: ZLinkPageRequest | undefined): ZLinkPageRequest {
1073
- return page?.pageSize === undefined ? { ...page, pageSize: this.options.listPageSize } : page;
1187
+ private pageRequest(
1188
+ page: ZLinkPageRequest | undefined
1189
+ ): ZLinkPageRequest & { readonly pageSize: number } {
1190
+ return page?.pageSize === undefined
1191
+ ? { ...page, pageSize: this.options.listPageSize }
1192
+ : (page as ZLinkPageRequest & { readonly pageSize: number });
1074
1193
  }
1075
1194
 
1076
1195
  async listServiceSummaries(
@@ -1080,16 +1199,24 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1080
1199
  ): Promise<ZLinkLocationPage<ZLinkLocationServiceSummary>> {
1081
1200
  const summaries: ZLinkLocationServiceSummary[] = [];
1082
1201
  for (const meshName of this.meshNamesOf(filter.meshName)) {
1083
- const descriptors = await this.listAllMeshNodeDescriptors(meshName, signal);
1202
+ const descriptors = await listAllMeshNodeDescriptors(
1203
+ this.stores.locationStore,
1204
+ meshName,
1205
+ signal,
1206
+ this.options.listPageSize
1207
+ );
1084
1208
  if (descriptors.length === 0) continue;
1085
- const live = await this.filterLive(descriptors, (row) => row.ownerId, signal);
1086
- const liveOwners = new Set(live.map((row) => row.ownerId));
1209
+ const live = await this.liveRows.filter(
1210
+ descriptors,
1211
+ (row, signal) => this.leaseTracker.isOwnerTokenLive(row, signal),
1212
+ signal
1213
+ );
1087
1214
  summaries.push({
1088
1215
  meshName,
1089
1216
  totalCount: descriptors.length,
1090
- readyCount: descriptors.filter((row) => liveOwners.has(row.ownerId)).length,
1217
+ readyCount: live.length,
1091
1218
  errorCount: 0,
1092
- stoppedCount: descriptors.filter((row) => !liveOwners.has(row.ownerId)).length,
1219
+ stoppedCount: descriptors.length - live.length,
1093
1220
  lastUpdatedAt: descriptors.reduce(
1094
1221
  (latest, row) => (row.updatedAt > latest ? row.updatedAt : latest),
1095
1222
  descriptors[0].updatedAt
@@ -1103,24 +1230,6 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1103
1230
  return meshName === undefined ? this.meshNames : [meshName];
1104
1231
  }
1105
1232
 
1106
- private async listAllMeshNodeDescriptors(
1107
- meshName: string,
1108
- signal?: AbortSignal
1109
- ): Promise<readonly ZLinkMeshNodeDescriptor[]> {
1110
- const rows: ZLinkMeshNodeDescriptor[] = [];
1111
- let continuationToken: string | undefined;
1112
- do {
1113
- const result = await this.stores.locationStore.listMeshNodes(
1114
- meshName,
1115
- { pageSize: this.options.listPageSize, continuationToken },
1116
- signal
1117
- );
1118
- rows.push(...result.items);
1119
- continuationToken = result.continuationToken;
1120
- } while (continuationToken !== undefined);
1121
- return rows;
1122
- }
1123
-
1124
1233
  private pageInMemory<T>(
1125
1234
  entries: readonly T[],
1126
1235
  page: ZLinkPageRequest | undefined
@@ -1128,7 +1237,7 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1128
1237
  const normalized = this.pageRequest(page);
1129
1238
  const parsedOffset = Number.parseInt(normalized.continuationToken ?? '0', 10);
1130
1239
  const offset = Number.isFinite(parsedOffset) && parsedOffset >= 0 ? parsedOffset : 0;
1131
- const pageSize = normalized.pageSize ?? this.options.listPageSize;
1240
+ const pageSize = normalized.pageSize;
1132
1241
  const items = entries.slice(offset, offset + pageSize);
1133
1242
  const nextOffset = offset + items.length;
1134
1243
  return {
@@ -1137,14 +1246,6 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1137
1246
  };
1138
1247
  }
1139
1248
 
1140
- private async filterLive<TRow>(
1141
- rows: readonly TRow[],
1142
- ownerIdOf: (row: TRow) => string,
1143
- signal?: AbortSignal
1144
- ): Promise<TRow[]> {
1145
- return await this.liveRows.filter(rows, ownerIdOf, signal);
1146
- }
1147
-
1148
1249
  private scheduleHeartbeat(): void {
1149
1250
  if (!this.started) {
1150
1251
  return;
@@ -1154,11 +1255,11 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1154
1255
  const delayMs = Math.max(0, scheduledAt - this.monotonicNowMs());
1155
1256
  this.heartbeatTimer = this.setTimer(() => {
1156
1257
  this.heartbeatTimer = undefined;
1157
- const lateness = Math.max(0, this.monotonicNowMs() - scheduledAt) / 1000;
1258
+ const lateness = Math.max(0, this.monotonicNowMs() - scheduledAt) / MILLISECONDS_PER_SECOND;
1158
1259
  for (const scope of this.leaseScopes) {
1159
1260
  this.metrics?.recordOwnerLeaseRenewLateness(lateness, scope.kind, scope.name);
1160
1261
  }
1161
- this.nextLeaseRenewAtMs = scheduledAt + this.options.ownerLeaseRenewIntervalMs;
1262
+ this.nextLeaseRenewAtMs = this.monotonicNowMs() + this.options.ownerLeaseRenewIntervalMs;
1162
1263
  if (
1163
1264
  this.ownerLeaseDeadlineMs !== undefined &&
1164
1265
  this.monotonicNowMs() >= this.ownerLeaseDeadlineMs
@@ -1257,25 +1358,30 @@ export class ZLinkLocationRuntime implements ZLinkLocationRuntimeQuery {
1257
1358
  }
1258
1359
 
1259
1360
  async function withTimeout<T>(
1260
- action: (signal: AbortSignal) => Promise<T>,
1261
- timeoutMs: number,
1361
+ action: (signal?: AbortSignal) => Promise<T>,
1362
+ timeoutMs: number | undefined,
1262
1363
  signal?: AbortSignal
1263
1364
  ): Promise<T> {
1264
- const timeoutController = new AbortController();
1365
+ const timeoutController = timeoutMs === undefined ? undefined : new AbortController();
1265
1366
  const operationSignal =
1266
1367
  signal === undefined
1267
- ? timeoutController.signal
1268
- : AbortSignal.any([signal, timeoutController.signal]);
1368
+ ? timeoutController?.signal
1369
+ : timeoutController === undefined
1370
+ ? signal
1371
+ : AbortSignal.any([signal, timeoutController.signal]);
1269
1372
  let timeout: ReturnType<typeof setTimeout> | undefined;
1270
1373
  let abort: (() => void) | undefined;
1271
- const deadline = new Promise<never>((_resolve, reject) => {
1272
- timeout = setTimeout(() => {
1273
- const error = new OwnerLeaseRenewTimeoutError(timeoutMs);
1274
- timeoutController.abort(error);
1275
- reject(error);
1276
- }, timeoutMs);
1277
- timeout.unref();
1278
- });
1374
+ const deadline =
1375
+ timeoutMs === undefined
1376
+ ? undefined
1377
+ : new Promise<never>((_resolve, reject) => {
1378
+ timeout = setTimeout(() => {
1379
+ const error = new OwnerLeaseRenewTimeoutError(timeoutMs);
1380
+ timeoutController!.abort(error);
1381
+ reject(error);
1382
+ }, timeoutMs);
1383
+ timeout.unref();
1384
+ });
1279
1385
  const cancellation =
1280
1386
  signal === undefined
1281
1387
  ? undefined
@@ -1285,10 +1391,14 @@ async function withTimeout<T>(
1285
1391
  });
1286
1392
  try {
1287
1393
  signal?.throwIfAborted();
1394
+ const operation = action(operationSignal);
1395
+ if (deadline === undefined) {
1396
+ return cancellation === undefined
1397
+ ? await operation
1398
+ : await Promise.race([operation, cancellation]);
1399
+ }
1288
1400
  return await Promise.race(
1289
- cancellation === undefined
1290
- ? [action(operationSignal), deadline]
1291
- : [action(operationSignal), deadline, cancellation]
1401
+ cancellation === undefined ? [operation, deadline] : [operation, deadline, cancellation]
1292
1402
  );
1293
1403
  } finally {
1294
1404
  if (timeout !== undefined) clearTimeout(timeout);