@zlink-systems/framework 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,4 +1,13 @@
1
+ import {
2
+ AUTHORITY_ENVELOPE_MAX_BYTES,
3
+ CREATION_INTENT_MAX_BYTES,
4
+ CREATION_TERMINAL_ENVELOPE_MAX_BYTES
5
+ } from '../../contracts/Configuration/InternalDefaults';
6
+ import { UINT64_MAX } from '@zlink-systems/stream-wire';
7
+ import { ZLINK_MAX_ROUTING_ID_BYTES } from '../../contracts/Common/CoreTypes';
8
+ import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
1
9
  import { randomUUID } from 'node:crypto';
10
+ import { SHA256_DIGEST_BYTES } from '../foundation/actor-join-recovery-codec';
2
11
  import type {
3
12
  ZLinkAggregateAbortResult,
4
13
  ZLinkAggregateCommitResult,
@@ -34,9 +43,9 @@ import { encodeAuthorityKey } from './authority-key-codec';
34
43
  import { creationTerminalPreimage } from './opaque-record-key';
35
44
 
36
45
  const MAX_GENERATION = 0x7fff_ffff_ffff_ffffn;
37
- const MAX_PAYLOAD_BYTES = 1024 * 1024;
46
+
38
47
  const CREATION_TERMINAL_RETENTION_MS = 5 * 60 * 1000;
39
- const MAX_U64 = 0xffff_ffff_ffff_ffffn;
48
+ const MAX_U64 = UINT64_MAX;
40
49
 
41
50
  export interface ZLinkInMemoryAuthorityValidation {
42
51
  isTargetLive(
@@ -190,10 +199,22 @@ export class ZLinkInMemoryAuthorityStore {
190
199
  if (!this.isOwnerLive(row.snapshot)) {
191
200
  return { kind: 'conflict', current: this.read(keyValue) };
192
201
  }
202
+ if (
203
+ mutation.generationTransition === 'reincarnate' &&
204
+ (this.objectGeneration >= MAX_GENERATION || this.ownerGeneration >= MAX_GENERATION)
205
+ ) {
206
+ return { kind: 'generationExhausted' };
207
+ }
193
208
  const nextVersion = this.tryNextStoreVersion();
194
209
  if (nextVersion === undefined) return { kind: 'generationExhausted' };
195
210
  row.snapshot = {
196
211
  ...row.snapshot,
212
+ ...(mutation.generationTransition === 'reincarnate'
213
+ ? {
214
+ objectGeneration: ++this.objectGeneration,
215
+ authorityOwnerGeneration: ++this.ownerGeneration
216
+ }
217
+ : {}),
197
218
  storeVersion: version(nextVersion),
198
219
  payload: Buffer.from(mutation.payload)
199
220
  };
@@ -208,8 +229,8 @@ export class ZLinkInMemoryAuthorityStore {
208
229
  signal?: AbortSignal
209
230
  ): Promise<ZLinkAuthorityScanResult> {
210
231
  signal?.throwIfAborted();
211
- if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
212
- throw new RangeError('Authority scan limit must be in 1..1000.');
232
+ if (!Number.isInteger(limit) || limit < 1 || limit > ZLINK_PROVIDER_MAX_PAGE_SIZE) {
233
+ throw new RangeError(`Authority scan limit must be in 1..${ZLINK_PROVIDER_MAX_PAGE_SIZE}.`);
213
234
  }
214
235
  const decoded =
215
236
  cursor === undefined
@@ -814,7 +835,7 @@ function validateAuthorityMutation(mutation: ZLinkAuthorityMutation): void {
814
835
  }
815
836
  const generationTransition = (mutation as { readonly generationTransition?: unknown })
816
837
  .generationTransition;
817
- if (generationTransition !== 'preserve') {
838
+ if (generationTransition !== 'preserve' && generationTransition !== 'reincarnate') {
818
839
  throw new TypeError('Authority owner transitions require an aggregate CAS.');
819
840
  }
820
841
  }
@@ -826,9 +847,9 @@ function validateReserve(request: ZLinkObjectReserveRequest): void {
826
847
  validatePayload(request.creatingPayload);
827
848
  validateCapacityVector(request.capacity);
828
849
  if (
829
- request.intent.requestSha256.byteLength !== 32 ||
850
+ request.intent.requestSha256.byteLength !== SHA256_DIGEST_BYTES ||
830
851
  request.intent.requestEncodedSize < 0n ||
831
- request.intent.requestEncodedSize > BigInt(MAX_PAYLOAD_BYTES)
852
+ request.intent.requestEncodedSize > BigInt(CREATION_INTENT_MAX_BYTES)
832
853
  ) {
833
854
  throw new TypeError('Object creation content receipt is invalid.');
834
855
  }
@@ -837,9 +858,13 @@ function validateReserve(request: ZLinkObjectReserveRequest): void {
837
858
  function validateCreationOperation(operation: ZLinkCreationOperationIdentity): void {
838
859
  const sourceRid = String(operation.sourceNodeRid);
839
860
  const sourceRidBytes = Buffer.byteLength(sourceRid, 'utf8');
840
- if (sourceRidBytes < 1 || sourceRidBytes > 255 || sourceRid.includes('\0')) {
861
+ if (
862
+ sourceRidBytes < 1 ||
863
+ sourceRidBytes > ZLINK_MAX_ROUTING_ID_BYTES ||
864
+ sourceRid.includes('\0')
865
+ ) {
841
866
  throw new TypeError(
842
- 'Creation terminal source node RID must contain 1..255 UTF-8 bytes without NUL.'
867
+ `Creation terminal source node RID must contain 1..${ZLINK_MAX_ROUTING_ID_BYTES} UTF-8 bytes without NUL.`
843
868
  );
844
869
  }
845
870
  if (
@@ -861,8 +886,10 @@ function validateTerminalForMutation(
861
886
  ): ZLinkCreationTerminalRecord | undefined {
862
887
  if (publication === undefined) return undefined;
863
888
  validateCreationOperation(publication.operation);
864
- if (publication.terminalEnvelope.byteLength > MAX_PAYLOAD_BYTES) {
865
- throw new RangeError('Creation terminal envelope must not exceed 1 MiB.');
889
+ if (publication.terminalEnvelope.byteLength > CREATION_TERMINAL_ENVELOPE_MAX_BYTES) {
890
+ throw new RangeError(
891
+ `Creation terminal envelope must not exceed ${CREATION_TERMINAL_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`
892
+ );
866
893
  }
867
894
  const deadlineMs = publication.operationDeadline.getTime();
868
895
  const expiresAtMs = deadlineMs + CREATION_TERMINAL_RETENTION_MS;
@@ -915,8 +942,8 @@ function validateAggregateRequest(request: ZLinkAggregatePrepareRequest): void {
915
942
  if (request.aggregateGeneration < 1n || request.participants.length < 1) {
916
943
  throw new RangeError('Aggregate generation and participant count are invalid.');
917
944
  }
918
- if (request.inventoryDigest.byteLength !== 32) {
919
- throw new TypeError('Aggregate inventory digest must contain 32 bytes.');
945
+ if (request.inventoryDigest.byteLength !== SHA256_DIGEST_BYTES) {
946
+ throw new TypeError(`Aggregate inventory digest must contain ${SHA256_DIGEST_BYTES} bytes.`);
920
947
  }
921
948
  validateCapacityVector(request.capacity);
922
949
  const keys = request.participants.map((participant) => participant.authorityKey.value);
@@ -927,8 +954,10 @@ function validateAggregateRequest(request: ZLinkAggregatePrepareRequest): void {
927
954
  }
928
955
 
929
956
  function validatePayload(payload: Uint8Array): void {
930
- if (payload.byteLength > MAX_PAYLOAD_BYTES) {
931
- throw new RangeError('Authority payload exceeds 1 MiB.');
957
+ if (payload.byteLength > AUTHORITY_ENVELOPE_MAX_BYTES) {
958
+ throw new RangeError(
959
+ `Authority payload exceeds ${AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`
960
+ );
932
961
  }
933
962
  }
934
963
 
@@ -1,11 +1,33 @@
1
1
  import type { RoutingId } from '../../contracts/Common';
2
+ import { ZLINK_MAX_IDENTITY_TEXT_BYTES } from '../../contracts/Common/CoreTypes';
3
+ import {
4
+ isValidPublicWeight,
5
+ ZLINK_MAX_PUBLIC_WEIGHT
6
+ } from '../../contracts/Configuration/RegistrationBuilderPolicy';
7
+ import type {
8
+ ZLinkActorTransferPrepareRequest,
9
+ ZLinkActorTransferRecord,
10
+ ZLinkActorTransferState,
11
+ ZLinkActorTransferWriteResult
12
+ } from '../../contracts/Locations/ActorTransfer';
13
+ import {
14
+ matchesActorLocation,
15
+ matchesPeerLocation,
16
+ matchesRouteLocation,
17
+ matchesSpotLocation
18
+ } from '../../location-store-integration';
19
+ import { encodeAuthorityKey } from './authority-key-codec';
20
+ import type { ZLinkDomainLocationStore } from './domain-store-contract';
21
+ import { ZLinkInMemoryAuthorityStore } from './in-memory-authority-store';
2
22
  import {
3
- ZLinkLocationKind,
4
23
  ZLinkFrameworkRuntimeState,
24
+ ZLinkLocationKind,
5
25
  ZLinkLocationWriteIntent,
6
26
  ZLinkLocationWriteStatus,
7
27
  ZLinkObjectRole,
8
28
  type ZLinkActorLocation,
29
+ type ZLinkActorLocationFilter,
30
+ type ZLinkActorLocationKey,
9
31
  type ZLinkAggregateAbortResult,
10
32
  type ZLinkAggregateCommitResult,
11
33
  type ZLinkAggregateFence,
@@ -18,22 +40,18 @@ import {
18
40
  type ZLinkAuthorityScanCursor,
19
41
  type ZLinkAuthorityScanResult,
20
42
  type ZLinkAuthorityStoreVersion,
21
- type ZLinkActorLocationFilter,
22
- type ZLinkActorLocationKey,
43
+ type ZLinkClientServerServerDescriptor,
44
+ type ZLinkClientServerServerDescriptorKey,
45
+ type ZLinkCreationOperationIdentity,
46
+ type ZLinkCreationTerminalReadResult,
47
+ type ZLinkFanoutPublisherDescriptor,
48
+ type ZLinkFanoutPublisherDescriptorKey,
23
49
  type ZLinkLocationChangeStampScope,
24
50
  type ZLinkLocationOwnerToken,
25
51
  type ZLinkLocationPage,
26
52
  type ZLinkLocationWriteResult,
27
53
  type ZLinkMeshNodeDescriptor,
28
54
  type ZLinkMeshNodeDescriptorKey,
29
- type ZLinkClientServerServerDescriptor,
30
- type ZLinkClientServerServerDescriptorKey,
31
- type ZLinkFanoutPublisherDescriptor,
32
- type ZLinkFanoutPublisherDescriptorKey,
33
- type ZLinkOwnerLeaseClaimResult,
34
- type ZLinkOwnerLeaseReadResult,
35
- type ZLinkOwnerLeaseReleaseResult,
36
- type ZLinkOwnerLeaseRenewResult,
37
55
  type ZLinkObjectAbortRequest,
38
56
  type ZLinkObjectAbortResult,
39
57
  type ZLinkObjectCommitRequest,
@@ -42,8 +60,10 @@ import {
42
60
  type ZLinkObjectCreationCompleteResult,
43
61
  type ZLinkObjectReserveRequest,
44
62
  type ZLinkObjectReserveResult,
45
- type ZLinkCreationOperationIdentity,
46
- type ZLinkCreationTerminalReadResult,
63
+ type ZLinkOwnerLeaseClaimResult,
64
+ type ZLinkOwnerLeaseReadResult,
65
+ type ZLinkOwnerLeaseReleaseResult,
66
+ type ZLinkOwnerLeaseRenewResult,
47
67
  type ZLinkPageRequest,
48
68
  type ZLinkPeerLocation,
49
69
  type ZLinkPeerLocationFilter,
@@ -55,23 +75,11 @@ import {
55
75
  type ZLinkSpotLocationFilter,
56
76
  type ZLinkSpotLocationKey
57
77
  } from './internal-location-contracts';
58
- import type {
59
- ZLinkActorTransferPrepareRequest,
60
- ZLinkActorTransferRecord,
61
- ZLinkActorTransferState,
62
- ZLinkActorTransferWriteResult
63
- } from '../../contracts/Locations/ActorTransfer';
64
78
  import type { ZLinkFanoutLocationStore } from './internal-store-contracts';
65
- import type { ZLinkDomainLocationStore } from './domain-store-contract';
66
- import { ZLinkInMemoryAuthorityStore } from './in-memory-authority-store';
67
- import { encodeAuthorityKey } from './authority-key-codec';
68
79
  import { ZLinkLocationKeyCodec } from './key-codec';
69
- import {
70
- matchesActorLocation,
71
- matchesPeerLocation,
72
- matchesRouteLocation,
73
- matchesSpotLocation
74
- } from '../../location-store-integration';
80
+ const MAX_LOCATION_GENERATION = 0x7fff_ffff_ffff_ffffn;
81
+
82
+ const MAX_DESCRIPTOR_OBJECT_CAPABILITIES = 1024;
75
83
 
76
84
  export class ZLinkInMemoryLocationStore
77
85
  implements ZLinkDomainLocationStore, ZLinkFanoutLocationStore
@@ -955,7 +963,7 @@ export class ZLinkInMemoryLocationStore
955
963
  if (current !== undefined && current.leaseExpiresAt.getTime() > storeNow.getTime()) {
956
964
  return { kind: 'conflict' };
957
965
  }
958
- if (this.ownerLeaseGeneration >= 0x7fff_ffff_ffff_ffffn) {
966
+ if (this.ownerLeaseGeneration >= MAX_LOCATION_GENERATION) {
959
967
  return { kind: 'generationExhausted' };
960
968
  }
961
969
  const token = { ownerId, leaseGeneration: ++this.ownerLeaseGeneration };
@@ -1282,12 +1290,14 @@ function validateMeshNodeDescriptor(descriptor: ZLinkMeshNodeDescriptor): void {
1282
1290
  }
1283
1291
  if (descriptor.objectRole === ZLinkObjectRole.Server) {
1284
1292
  if (descriptor.entrySpotId !== undefined && !validDescriptorText(descriptor.entrySpotId)) {
1285
- throw new TypeError('MeshNode Entry Spot ID must contain 1..255 UTF-8 bytes.');
1293
+ throw new TypeError(
1294
+ `MeshNode Entry Spot ID must contain 1..${ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`
1295
+ );
1286
1296
  }
1287
1297
  } else if (descriptor.entrySpotId !== undefined) {
1288
1298
  throw new TypeError('Only Object Server descriptors may publish an Entry Spot ID.');
1289
1299
  }
1290
- const maxGeneration = 0x7fff_ffff_ffff_ffffn;
1300
+ const maxGeneration = MAX_LOCATION_GENERATION;
1291
1301
  if (
1292
1302
  descriptor.lifecycleGeneration < 1n ||
1293
1303
  descriptor.lifecycleGeneration > maxGeneration ||
@@ -1320,9 +1330,8 @@ function validateMeshNodeDescriptor(descriptor: ZLinkMeshNodeDescriptor): void {
1320
1330
  !Number.isSafeInteger(descriptor.activationConcurrency.limit) ||
1321
1331
  descriptor.activationConcurrency.limit < 1 ||
1322
1332
  descriptor.activationConcurrency.active > descriptor.activationConcurrency.limit ||
1323
- descriptor.placementWeight < 0 ||
1324
- descriptor.placementWeight > 10_000 ||
1325
- descriptor.objectCapabilities.length > 1024 ||
1333
+ !isValidPublicWeight(descriptor.placementWeight) ||
1334
+ descriptor.objectCapabilities.length > MAX_DESCRIPTOR_OBJECT_CAPABILITIES ||
1326
1335
  (descriptor.objectRole !== ZLinkObjectRole.Server && descriptor.objectCapabilities.length !== 0)
1327
1336
  ) {
1328
1337
  throw new RangeError('MeshNode object capacity is invalid.');
@@ -1350,7 +1359,7 @@ function validateMeshNodeDescriptor(descriptor: ZLinkMeshNodeDescriptor): void {
1350
1359
 
1351
1360
  function validDescriptorText(value: string): boolean {
1352
1361
  const size = Buffer.byteLength(value, 'utf8');
1353
- return size >= 1 && size <= 255 && !value.includes('\0');
1362
+ return size >= 1 && size <= ZLINK_MAX_IDENTITY_TEXT_BYTES && !value.includes('\0');
1354
1363
  }
1355
1364
 
1356
1365
  function meshNodeImmutableFingerprint(descriptor: ZLinkMeshNodeDescriptor): string {
@@ -1436,7 +1445,7 @@ function validateClientServerDescriptor(descriptor: ZLinkClientServerServerDescr
1436
1445
  ) {
1437
1446
  throw new TypeError('ClientServer descriptor identity and endpoint are required.');
1438
1447
  }
1439
- const maxGeneration = 0x7fff_ffff_ffff_ffffn;
1448
+ const maxGeneration = MAX_LOCATION_GENERATION;
1440
1449
  if (
1441
1450
  descriptor.lifecycleGeneration < 1n ||
1442
1451
  descriptor.lifecycleGeneration > maxGeneration ||
@@ -1447,8 +1456,10 @@ function validateClientServerDescriptor(descriptor: ZLinkClientServerServerDescr
1447
1456
  ) {
1448
1457
  throw new RangeError('ClientServer descriptor generations are invalid.');
1449
1458
  }
1450
- if (!Number.isInteger(descriptor.weight) || descriptor.weight < 0 || descriptor.weight > 10_000) {
1451
- throw new RangeError('ClientServer descriptor weight must be an integer in 0..10000.');
1459
+ if (!isValidPublicWeight(descriptor.weight)) {
1460
+ throw new RangeError(
1461
+ `ClientServer descriptor weight must be an integer in 0..${ZLINK_MAX_PUBLIC_WEIGHT}.`
1462
+ );
1452
1463
  }
1453
1464
  }
1454
1465
 
@@ -1483,7 +1494,7 @@ function validateFanoutPublisherDescriptor(descriptor: ZLinkFanoutPublisherDescr
1483
1494
  ) {
1484
1495
  throw new TypeError('Fanout publisher descriptor identity and endpoint are required.');
1485
1496
  }
1486
- const maxGeneration = 0x7fff_ffff_ffff_ffffn;
1497
+ const maxGeneration = MAX_LOCATION_GENERATION;
1487
1498
  if (
1488
1499
  descriptor.lifecycleGeneration < 1n ||
1489
1500
  descriptor.lifecycleGeneration > maxGeneration ||
@@ -9,6 +9,17 @@ import type {
9
9
  ZLinkStoreWriteRequest,
10
10
  ZLinkStoreWriteResult
11
11
  } from '../../contracts';
12
+ import {
13
+ ZLINK_PROVIDER_MAX_KEY_BYTES,
14
+ ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES,
15
+ ZLINK_PROVIDER_MAX_PAGE_SIZE,
16
+ ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES,
17
+ ZLINK_PROVIDER_MAX_VALUE_BYTES,
18
+ ZLINK_PROVIDER_MAX_VERSION_BYTES,
19
+ ZLINK_PROVIDER_MAX_WRITE_BYTES,
20
+ ZLINK_PROVIDER_MAX_WRITE_KEYS
21
+ } from '../../contracts/Locations/Stores';
22
+ export const PROVIDER_STORAGE_NAMESPACE_PREFIX = 'zlink:v11:';
12
23
 
13
24
  interface StoredValue {
14
25
  readonly bytes: Uint8Array;
@@ -59,6 +70,13 @@ export class ZLinkInMemoryProviderLocationStore implements ZLinkLocationStore {
59
70
  const current = this.liveValue(condition.key.value, storeNow);
60
71
  if (condition.kind === 'missing') {
61
72
  if (current !== undefined) return { kind: 'conflict', storeNow };
73
+ } else if (condition.kind === 'value') {
74
+ if (
75
+ current === undefined ||
76
+ !Buffer.from(current.bytes).equals(Buffer.from(condition.expected))
77
+ ) {
78
+ return { kind: 'conflict', storeNow };
79
+ }
62
80
  } else if (current?.version.value !== condition.expected.value) {
63
81
  return { kind: 'conflict', storeNow };
64
82
  }
@@ -70,7 +88,8 @@ export class ZLinkInMemoryProviderLocationStore implements ZLinkLocationStore {
70
88
  this.values.delete(mutation.key.value);
71
89
  continue;
72
90
  }
73
- const retentionMs = requireValue(mutation.bytes, mutation.retentionMs);
91
+ const retentionMs =
92
+ mutation.retentionMs === undefined ? undefined : Math.ceil(mutation.retentionMs);
74
93
  const version = storeVersion((++this.nextVersion).toString());
75
94
  const expiresAt =
76
95
  retentionMs === undefined ? undefined : new Date(storeNow.getTime() + retentionMs);
@@ -103,13 +122,26 @@ export class ZLinkInMemoryProviderLocationStore implements ZLinkLocationStore {
103
122
  };
104
123
  this.scans.set(snapshotId, snapshot);
105
124
  } else {
106
- [snapshotId, offset] = parseCursor(request.cursor);
125
+ const cursor = parseCursor(request.cursor);
126
+ snapshotId = cursor?.[0] ?? '';
127
+ offset = cursor?.[1] ?? 0;
107
128
  snapshot = this.scans.get(snapshotId);
108
- if (snapshot === undefined) return { kind: 'expired' };
129
+ if (snapshot === undefined || offset > snapshot.items.length) return { kind: 'expired' };
109
130
  }
110
131
 
111
- const selected = snapshot.items.slice(offset, offset + request.limit);
112
- const nextOffset = offset + selected.length;
132
+ let nextOffset = offset;
133
+ let encodedBytes = 0;
134
+ while (nextOffset < snapshot.items.length && nextOffset - offset < request.limit) {
135
+ const item = snapshot.items[nextOffset];
136
+ const itemBytes =
137
+ Buffer.byteLength(item.key.value, 'utf8') +
138
+ Buffer.byteLength(item.value.version.value, 'utf8') +
139
+ item.value.bytes.byteLength;
140
+ if (encodedBytes + itemBytes > ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES) break;
141
+ encodedBytes += itemBytes;
142
+ nextOffset += 1;
143
+ }
144
+ const selected = snapshot.items.slice(offset, nextOffset);
113
145
  const nextCursor =
114
146
  nextOffset < snapshot.items.length ? scanCursor(`${snapshotId}:${nextOffset}`) : undefined;
115
147
  if (nextCursor === undefined) this.scans.delete(snapshotId);
@@ -153,12 +185,13 @@ function scanCursor(value: string): ZLinkStoreScanCursor {
153
185
  return { value } as ZLinkStoreScanCursor;
154
186
  }
155
187
 
156
- function parseCursor(cursor: ZLinkStoreScanCursor): [string, number] {
188
+ function parseCursor(cursor: ZLinkStoreScanCursor): [string, number] | undefined {
157
189
  const separator = cursor.value.indexOf(':');
158
190
  const snapshotId = cursor.value.slice(0, separator);
159
- const offset = Number(cursor.value.slice(separator + 1));
160
- if (separator < 1 || !Number.isSafeInteger(offset) || offset < 0) {
161
- throw new RangeError('Location Store scan cursor is invalid.');
191
+ const encodedOffset = cursor.value.slice(separator + 1);
192
+ const offset = Number(encodedOffset);
193
+ if (separator < 1 || !/^(0|[1-9][0-9]*)$/.test(encodedOffset) || !Number.isSafeInteger(offset)) {
194
+ return undefined;
162
195
  }
163
196
  return [snapshotId, offset];
164
197
  }
@@ -170,32 +203,72 @@ function requireWriteRequest(request: ZLinkStoreWriteRequest): void {
170
203
  if (
171
204
  new Set(conditionKeys).size !== conditionKeys.length ||
172
205
  new Set(mutationKeys).size !== mutationKeys.length ||
173
- keys.length > 2_048
206
+ keys.length > ZLINK_PROVIDER_MAX_WRITE_KEYS
174
207
  ) {
175
- throw new RangeError('Location Store write keys must be unique and bounded to 2,048.');
208
+ throw new RangeError(
209
+ `Location Store write keys must be unique and bounded to ${ZLINK_PROVIDER_MAX_WRITE_KEYS.toLocaleString('en-US')}.`
210
+ );
176
211
  }
177
212
  for (const key of keys) requireKey(key);
178
- const encodedSize = request.mutations.reduce(
179
- (sum, mutation) => sum + (mutation.kind === 'put' ? mutation.bytes.byteLength : 0),
180
- 0
181
- );
182
- if (encodedSize > 4 * 1024 * 1024) {
183
- throw new RangeError('Location Store write exceeds 4 MiB.');
213
+ const encodedSize =
214
+ request.conditions.reduce((sum, condition) => {
215
+ const keyBytes = Buffer.byteLength(condition.key.value, 'utf8');
216
+ if (condition.kind === 'missing') return sum + keyBytes;
217
+ if (condition.kind === 'value') {
218
+ requireValue(condition.expected, undefined);
219
+ return sum + keyBytes + condition.expected.byteLength;
220
+ }
221
+ const versionBytes = Buffer.byteLength(condition.expected.value, 'utf8');
222
+ if (versionBytes < 1 || versionBytes > ZLINK_PROVIDER_MAX_VERSION_BYTES) {
223
+ throw new RangeError(
224
+ `Location Store version must contain 1..${ZLINK_PROVIDER_MAX_VERSION_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
225
+ );
226
+ }
227
+ return sum + keyBytes + versionBytes;
228
+ }, 0) +
229
+ request.mutations.reduce((sum, mutation) => {
230
+ const keyBytes = Buffer.byteLength(mutation.key.value, 'utf8');
231
+ if (mutation.kind !== 'put') return sum + keyBytes;
232
+ requireValue(mutation.bytes, mutation.retentionMs);
233
+ return sum + keyBytes + mutation.bytes.byteLength;
234
+ }, 0);
235
+ if (encodedSize > ZLINK_PROVIDER_MAX_WRITE_BYTES) {
236
+ throw new RangeError(
237
+ `Location Store write exceeds ${ZLINK_PROVIDER_MAX_WRITE_BYTES / (1024 * 1024)} MiB.`
238
+ );
184
239
  }
185
240
  }
186
241
 
187
242
  function requireScanRequest(request: ZLinkStoreScanRequest): void {
188
- if (Buffer.byteLength(request.prefix, 'utf8') > 1_024) {
189
- throw new RangeError('Location Store scan prefix exceeds 1,024 UTF-8 bytes.');
243
+ if (request.cursor !== undefined) {
244
+ const bytes = Buffer.byteLength(request.cursor.value, 'utf8');
245
+ if (bytes < 1 || bytes > ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES) {
246
+ throw new RangeError(
247
+ `Location Store cursor must contain 1..${ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
248
+ );
249
+ }
190
250
  }
191
- if (!Number.isSafeInteger(request.limit) || request.limit < 1 || request.limit > 1_000) {
192
- throw new RangeError('Location Store scan limit must be in 1..1000.');
251
+ if (Buffer.byteLength(request.prefix, 'utf8') > ZLINK_PROVIDER_MAX_KEY_BYTES) {
252
+ throw new RangeError(
253
+ `Location Store scan prefix exceeds ${ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
254
+ );
255
+ }
256
+ if (
257
+ !Number.isSafeInteger(request.limit) ||
258
+ request.limit < 1 ||
259
+ request.limit > ZLINK_PROVIDER_MAX_PAGE_SIZE
260
+ ) {
261
+ throw new RangeError(
262
+ `Location Store scan limit must be in 1..${ZLINK_PROVIDER_MAX_PAGE_SIZE}.`
263
+ );
193
264
  }
194
265
  }
195
266
 
196
267
  function requireValue(bytes: Uint8Array, retentionMs: number | undefined): number | undefined {
197
- if (bytes.byteLength > 1024 * 1024) {
198
- throw new RangeError('Location Store value exceeds 1 MiB.');
268
+ if (bytes.byteLength > ZLINK_PROVIDER_MAX_VALUE_BYTES) {
269
+ throw new RangeError(
270
+ `Location Store value exceeds ${ZLINK_PROVIDER_MAX_VALUE_BYTES / (1024 * 1024)} MiB.`
271
+ );
199
272
  }
200
273
  if (
201
274
  retentionMs !== undefined &&
@@ -210,7 +283,9 @@ function requireValue(bytes: Uint8Array, retentionMs: number | undefined): numbe
210
283
 
211
284
  function requireKey(value: string): void {
212
285
  const bytes = Buffer.byteLength(value, 'utf8');
213
- if (bytes < 1 || bytes > 1_024) {
214
- throw new RangeError('Location Store key must contain 1..1,024 UTF-8 bytes.');
286
+ if (bytes < 1 || bytes > ZLINK_PROVIDER_MAX_KEY_BYTES) {
287
+ throw new RangeError(
288
+ `Location Store key must contain 1..${ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`
289
+ );
215
290
  }
216
291
  }
@@ -1,3 +1,4 @@
1
+ import { ZLINK_MAX_SPOT_ID_BYTES } from '../../contracts/Common/CoreTypes';
1
2
  import type { RoutingId } from '../../contracts/Common';
2
3
  import {
3
4
  type ZLinkActorLocationKey,
@@ -49,8 +50,8 @@ function encodeSegments(...segments: readonly string[]): string {
49
50
 
50
51
  function requireSpotId(value: string): string {
51
52
  const bytes = Buffer.byteLength(value, 'utf8');
52
- if (bytes < 1 || bytes > 255) {
53
- throw new TypeError('SpotId must contain 1..255 UTF-8 bytes.');
53
+ if (bytes < 1 || bytes > ZLINK_MAX_SPOT_ID_BYTES) {
54
+ throw new TypeError(`SpotId must contain 1..${ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
54
55
  }
55
56
  return value;
56
57
  }
@@ -79,6 +79,10 @@ export class ZLinkOwnerLeaseTracker {
79
79
  );
80
80
  }
81
81
 
82
+ async isOwnerTokenLive(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<boolean> {
83
+ return (await this.remainingOwnerTokenLeaseMs(owner, signal)) > 0;
84
+ }
85
+
82
86
  async getLiveOwnerSetVersion(signal?: AbortSignal): Promise<number> {
83
87
  const owners = await this.lane.run(() => [...this.snapshots.keys()]);
84
88
  const refreshed = await Promise.all(owners.map((ownerId) => this.getSnapshot(ownerId, signal)));
@@ -187,17 +191,15 @@ export class ZLinkOwnerLeaseTracker {
187
191
  }
188
192
 
189
193
  export class ZLinkLiveRowFilter {
190
- constructor(private readonly leaseTracker: ZLinkOwnerLeaseTracker) {}
191
-
192
194
  async filter<TRow>(
193
195
  rows: readonly TRow[],
194
- ownerIdOf: (row: TRow) => string,
196
+ isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>,
195
197
  signal?: AbortSignal,
196
198
  include?: (row: TRow) => boolean
197
199
  ): Promise<TRow[]> {
198
200
  const live: TRow[] = [];
199
201
  for (const row of rows) {
200
- if ((include === undefined || include(row)) && (await this.isLive(row, ownerIdOf, signal))) {
202
+ if ((include === undefined || include(row)) && (await isLive(row, signal))) {
201
203
  live.push(row);
202
204
  }
203
205
  }
@@ -206,22 +208,14 @@ export class ZLinkLiveRowFilter {
206
208
 
207
209
  async resolve<TRow>(
208
210
  row: TRow | undefined,
209
- ownerIdOf: (row: TRow) => string,
211
+ isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>,
210
212
  signal?: AbortSignal,
211
213
  include?: (row: TRow) => boolean
212
214
  ): Promise<TRow | undefined> {
213
215
  if (row === undefined || (include !== undefined && !include(row))) {
214
216
  return undefined;
215
217
  }
216
- return (await this.isLive(row, ownerIdOf, signal)) ? row : undefined;
217
- }
218
-
219
- private async isLive<TRow>(
220
- row: TRow,
221
- ownerIdOf: (row: TRow) => string,
222
- signal?: AbortSignal
223
- ): Promise<boolean> {
224
- return await this.leaseTracker.isOwnerLive(ownerIdOf(row), signal);
218
+ return (await isLive(row, signal)) ? row : undefined;
225
219
  }
226
220
  }
227
221
 
@@ -1,33 +1,34 @@
1
1
  import type { ActorRef, RoutingId } from '../../contracts/Common';
2
- import type { ZLinkActorLocation, ZLinkLocationWriteStatus } from './internal-location-contracts';
3
- import type { ZLinkActorLocationStore, ZLinkSpotLocationStore } from './internal-store-contracts';
4
2
  import { ZLinkSpotKind } from '../../contracts/Spots';
5
3
  import {
6
4
  ZLinkActorLocationClaims,
7
5
  type ZLinkActorClaimActivation,
8
6
  type ZLinkActorClaimResult
9
7
  } from './actor-location-claims';
8
+ import { ZLinkActorSessionRouteClaims } from './actor-session-route-claims';
9
+ import type { ZLinkActorLocation, ZLinkLocationWriteStatus } from './internal-location-contracts';
10
+ import type {
11
+ ZLinkActorLocationStore,
12
+ ZLinkAuthorityStore,
13
+ ZLinkSpotLocationStore
14
+ } from './internal-store-contracts';
15
+ import type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
16
+ import {
17
+ type ZLinkInstanceClosingAuthority,
18
+ type ZLinkTrackedInstanceAuthority,
19
+ ZLinkSpotLocationClaims
20
+ } from './spot-location-claims';
10
21
  export {
11
22
  ZLinkActorClaimStatus,
12
23
  type ZLinkActorClaimActivation,
13
24
  type ZLinkActorClaimResult
14
25
  } from './actor-location-claims';
15
- import { ZLinkActorSessionRouteClaims } from './actor-session-route-claims';
16
- import { ZLinkSpotLocationClaims } from './spot-location-claims';
17
- import type {
18
- ZLinkInstanceClosingAuthority,
19
- ZLinkTrackedInstanceAuthority
20
- } from './spot-location-claims';
21
- import type { ZLinkAuthorityStore } from './internal-store-contracts';
22
- import type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
23
26
  export type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
24
27
 
25
28
  export class ZLinkLocationLifecycle {
26
29
  private readonly actorClaims: ZLinkActorLocationClaims;
27
- private readonly actorCleanupTasks = new Map<string, Promise<void>>();
28
30
  private readonly spotClaims: ZLinkSpotLocationClaims;
29
31
  private readonly actorSessionRoutes: ZLinkActorSessionRouteClaims;
30
- private disposed = false;
31
32
  private readonly ownershipLostHandler = (event: ZLinkOwnershipLostEvent) =>
32
33
  this.onOwnershipLost(event);
33
34
 
@@ -56,7 +57,6 @@ export class ZLinkLocationLifecycle {
56
57
  }
57
58
 
58
59
  dispose(): void {
59
- this.disposed = true;
60
60
  this.runtime.removeOwnershipLostHandler(this.ownershipLostHandler);
61
61
  }
62
62
 
@@ -160,18 +160,6 @@ export class ZLinkLocationLifecycle {
160
160
  await this.actorClaims.release(actorType, actorId, actorRef);
161
161
  }
162
162
 
163
- releaseActorEventually(actorType: string, actorId: string): Promise<void> {
164
- const existing = this.actorCleanupTasks.get(actorId);
165
- if (existing !== undefined) {
166
- return existing;
167
- }
168
- const cleanup = this.retryActorRelease(actorType, actorId).finally(() =>
169
- this.actorCleanupTasks.delete(actorId)
170
- );
171
- this.actorCleanupTasks.set(actorId, cleanup);
172
- return cleanup;
173
- }
174
-
175
163
  ownsActor(actorType: string, actorId: string): boolean {
176
164
  return this.actorClaims.owns(actorType, actorId);
177
165
  }
@@ -180,20 +168,6 @@ export class ZLinkLocationLifecycle {
180
168
  return this.actorClaims.snapshot(actorId);
181
169
  }
182
170
 
183
- private async retryActorRelease(actorType: string, actorId: string): Promise<void> {
184
- let retryDelayMs = 50;
185
- while (!this.disposed) {
186
- try {
187
- await this.actorClaims.release(actorType, actorId);
188
- return;
189
- } catch {
190
- await waitForRetry(retryDelayMs);
191
- retryDelayMs = Math.min(retryDelayMs * 2, 1_000);
192
- }
193
- }
194
- return;
195
- }
196
-
197
171
  async claimSpot(
198
172
  meshName: string,
199
173
  spotId: RoutingId,
@@ -272,7 +246,3 @@ function inferSpotStore(actorStore: ZLinkActorLocationStore): ZLinkSpotLocationS
272
246
  }
273
247
  return undefined;
274
248
  }
275
-
276
- function waitForRetry(delayMs: number): Promise<void> {
277
- return new Promise((resolve) => setTimeout(resolve, delayMs));
278
- }