@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,6 +1,7 @@
1
1
  import { type ZLinkLocationOptionOverrides } from '../../contracts/Locations/Options';
2
2
  import type { RoutingId } from '../../contracts/Common';
3
3
  import { type ZLinkPeerLocationResolver, type ZLinkPeerLocation } from './internal-location-contracts';
4
+ import type { ZLinkDispatchErrorSink } from '../diagnostics/dispatch-error-port';
4
5
  import type { IZLinkAutoConnectExecutor, IZLinkAutoConnectPeerPublisher, ZLinkAutoConnectEventSink, ZLinkAutoConnectLocal, ZLinkAutoConnectTarget } from './auto-connect-types';
5
6
  export interface ZLinkAutoConnectReconcilerOptions {
6
7
  readonly local: ZLinkAutoConnectLocal;
@@ -12,6 +13,7 @@ export interface ZLinkAutoConnectReconcilerOptions {
12
13
  readonly events?: ZLinkAutoConnectEventSink;
13
14
  readonly options?: ZLinkLocationOptionOverrides;
14
15
  readonly monotonicNowMs?: () => number;
16
+ readonly errorSink: ZLinkDispatchErrorSink;
15
17
  }
16
18
  export declare class ZLinkAutoConnectReconciler {
17
19
  private readonly lane;
@@ -24,6 +26,7 @@ export declare class ZLinkAutoConnectReconciler {
24
26
  private readonly events?;
25
27
  private readonly options;
26
28
  private readonly monotonicNowMs;
29
+ private readonly errorSink;
27
30
  private readonly active;
28
31
  private readonly pendingDisconnects;
29
32
  private readonly failedEndpoints;
@@ -50,6 +53,7 @@ export declare class ZLinkAutoConnectReconciler {
50
53
  private completePublishClaimCore;
51
54
  private preparePublishRenewalCore;
52
55
  private recordStoreFailure;
56
+ private connectTarget;
53
57
  private beginStoreFailureCore;
54
58
  private completeStoreFailureConnectCore;
55
59
  private recordDisconnectedEndpoint;
@@ -7,6 +7,7 @@ const key_codec_1 = require("./key-codec");
7
7
  const EndpointNotation_1 = require("../../contracts/Configuration/EndpointNotation");
8
8
  const auto_connect_planner_1 = require("./auto-connect-planner");
9
9
  const state_lane_1 = require("../execution/state-lane");
10
+ const zlink_1 = require("@zlink-systems/zlink");
10
11
  const encodeRoutingIdHex = key_codec_1.ZLinkLocationKeyCodec.encodeRoutingIdHex;
11
12
  class ZLinkAutoConnectReconciler {
12
13
  lane = new state_lane_1.ZLinkStateLane();
@@ -19,6 +20,7 @@ class ZLinkAutoConnectReconciler {
19
20
  events;
20
21
  options;
21
22
  monotonicNowMs;
23
+ errorSink;
22
24
  active = new Map();
23
25
  pendingDisconnects = new Map();
24
26
  failedEndpoints = new Set();
@@ -45,6 +47,7 @@ class ZLinkAutoConnectReconciler {
45
47
  this.events = options.events;
46
48
  this.options = { ...Options_1.zlinkRuntimeDefaultLocationOptions, ...options.options };
47
49
  this.monotonicNowMs = options.monotonicNowMs ?? (() => performance.now());
50
+ this.errorSink = options.errorSink;
48
51
  this.executor.onDisconnected?.((endpoint) => this.recordDisconnectedEndpoint(endpoint));
49
52
  }
50
53
  get storeFailed() {
@@ -116,13 +119,6 @@ class ZLinkAutoConnectReconciler {
116
119
  await this.lane.run(() => {
117
120
  this.storeFailedValue = false;
118
121
  this.storeFailureStartedAtMs = undefined;
119
- // After a store restart, owners may need one full lease interval to
120
- // reclaim their token and republish a descriptor. Do not interpret the
121
- // incomplete post-restart scan as a definitive removal.
122
- // Keep the existing transport set through one lease interval while
123
- // owners reclaim their tokens and republish descriptors. This deferral
124
- // applies only after a Store operation failed; a successful empty scan
125
- // is authoritative and must remove stale peers promptly.
126
122
  this.recoveryDeferUntilMs = this.monotonicNowMs() + this.options.ownerLeaseTtlMs;
127
123
  });
128
124
  }
@@ -133,7 +129,6 @@ class ZLinkAutoConnectReconciler {
133
129
  .map((nodeRid) => encodeRoutingIdHex(nodeRid)));
134
130
  });
135
131
  const candidates = auto_connect_planner_1.ZLinkAutoConnectPlanner.computeCandidates(this.local, rows);
136
- const nowMs = this.monotonicNowMs();
137
132
  this.executor.expectPeers?.([...candidates.values()]);
138
133
  this.executor.replaceNotRequired?.(auto_connect_planner_1.ZLinkAutoConnectPlanner.computeNotRequired(this.local, rows));
139
134
  const desired = new Map(auto_connect_planner_1.ZLinkAutoConnectPlanner.computeDesired(this.local, rows));
@@ -152,6 +147,19 @@ class ZLinkAutoConnectReconciler {
152
147
  if (activeKeys.has(key))
153
148
  desired.set(key, target);
154
149
  }
150
+ const deferringMissingTargets = this.monotonicNowMs() < (await this.lane.run(() => this.recoveryDeferUntilMs));
151
+ let staleCandidates = candidates;
152
+ if (deferringMissingTargets) {
153
+ const retainedCandidates = new Map(candidates);
154
+ const lastDesired = await this.lane.run(() => [...this.lastDesired]);
155
+ for (const [key, target] of lastDesired) {
156
+ if (!desired.has(key))
157
+ desired.set(key, target);
158
+ if (!retainedCandidates.has(key))
159
+ retainedCandidates.set(key, target);
160
+ }
161
+ staleCandidates = retainedCandidates;
162
+ }
155
163
  await this.lane.run(() => {
156
164
  this.lastDesired = new Map(desired);
157
165
  });
@@ -178,14 +186,13 @@ class ZLinkAutoConnectReconciler {
178
186
  await this.lane.run(() => {
179
187
  this.pendingDisconnects.delete(key);
180
188
  });
181
- const connected = await this.executor.connect(target);
182
- if (connected) {
189
+ await this.connectTarget(target, async () => {
183
190
  connectedEndpoints.push(target.endpoint);
184
191
  await this.lane.run(() => {
185
192
  this.active.set(key, target);
186
193
  this.failedEndpoints.delete(target.endpoint);
187
194
  });
188
- }
195
+ });
189
196
  continue;
190
197
  }
191
198
  if (current.endpoint !== target.endpoint || current.ownerId !== target.ownerId) {
@@ -203,25 +210,16 @@ class ZLinkAutoConnectReconciler {
203
210
  await this.lane.run(() => {
204
211
  this.pendingDisconnects.delete(key);
205
212
  });
206
- const connected = await this.executor.connect(target);
207
- if (connected) {
213
+ await this.connectTarget(target, async () => {
208
214
  connectedEndpoints.push(target.endpoint);
209
215
  await this.lane.run(() => {
210
216
  this.active.set(key, target);
211
217
  this.failedEndpoints.delete(target.endpoint);
212
218
  });
213
- }
219
+ });
214
220
  }
215
221
  }
216
- if (nowMs < (await this.lane.run(() => this.recoveryDeferUntilMs))) {
217
- this.publishDesiredSetChange(connectedEndpoints, disconnectedEndpoints);
218
- return;
219
- }
220
- // A store restart can expose an incomplete descriptor set while peers are
221
- // reclaiming their owner leases. Preserve existing transport connections
222
- // during that recovery window; stale-peer cleanup is safe after the
223
- // deferred reconciliation has completed.
224
- this.executor.disconnectStalePeers?.([...candidates.values()]);
222
+ this.executor.disconnectStalePeers?.([...staleCandidates.values()]);
225
223
  const activeTargets = await this.lane.run(() => [...this.active]);
226
224
  for (const [key, target] of activeTargets) {
227
225
  if (!desired.has(key)) {
@@ -330,10 +328,24 @@ class ZLinkAutoConnectReconciler {
330
328
  if (retryTargets === undefined)
331
329
  return;
332
330
  for (const [key, target] of retryTargets) {
333
- if (await this.executor.connect(target)) {
331
+ await this.connectTarget(target, async () => {
334
332
  await this.lane.run(() => this.completeStoreFailureConnectCore(key, target));
335
- }
333
+ });
334
+ }
335
+ }
336
+ async connectTarget(target, accept) {
337
+ let accepted;
338
+ try {
339
+ accepted = await this.executor.connect(target);
340
+ }
341
+ catch (error) {
342
+ if (!(error instanceof zlink_1.ConnectError))
343
+ throw error;
344
+ this.errorSink.reportRuntimeTaskException('auto-connect', error);
345
+ return;
336
346
  }
347
+ if (accepted)
348
+ await accept();
337
349
  }
338
350
  beginStoreFailureCore() {
339
351
  const nowMs = this.monotonicNowMs();
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.randomOperationId = randomOperationId;
4
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
5
+ const operation_identity_1 = require("../foundation/operation-identity");
4
6
  const node_crypto_1 = require("node:crypto");
5
- function randomOperationId(entropy = (0, node_crypto_1.randomBytes)(16)) {
6
- if (entropy.byteLength !== 16)
7
- throw new RangeError('Operation ID entropy must be 16 bytes.');
7
+ function randomOperationId(entropy = (0, node_crypto_1.randomBytes)(operation_identity_1.OPERATION_IDENTITY_BYTES)) {
8
+ if (entropy.byteLength !== operation_identity_1.OPERATION_IDENTITY_BYTES)
9
+ throw new RangeError(`Operation ID entropy must be ${operation_identity_1.OPERATION_IDENTITY_BYTES} bytes.`);
8
10
  const bytes = Buffer.from(entropy);
9
11
  const high = bytes.readBigUInt64BE(0);
10
- const low = bytes.readBigUInt64BE(8);
12
+ const low = bytes.readBigUInt64BE(stream_wire_1.UINT64_BYTES);
11
13
  return high === 0n && low === 0n ? { high, low: 1n } : { high, low };
12
14
  }
@@ -22,10 +22,10 @@ export interface ZLinkDomainLocationStore {
22
22
  compareExchangeAuthority(key: ZLinkAuthorityKey, expectedStoreVersion: ZLinkAuthorityStoreVersion, mutation: ZLinkAuthorityMutation, signal?: AbortSignal): Promise<ZLinkAuthorityCompareExchangeResult>;
23
23
  listAuthorities(prefix: string, cursor: ZLinkAuthorityScanCursor | undefined, limit: number, signal?: AbortSignal): Promise<ZLinkAuthorityScanResult>;
24
24
  readCreationTerminal(operation: ZLinkCreationOperationIdentity, signal?: AbortSignal): Promise<ZLinkCreationTerminalReadResult>;
25
- reserve(request: ZLinkObjectReserveRequest, signal?: AbortSignal): Promise<ZLinkObjectReserveResult>;
26
- commit(request: ZLinkObjectCommitRequest, signal?: AbortSignal): Promise<ZLinkObjectCommitResult>;
25
+ reserve(request: ZLinkObjectReserveRequest, signal?: AbortSignal, deadlineUnixMs?: bigint): Promise<ZLinkObjectReserveResult>;
26
+ commit(request: ZLinkObjectCommitRequest, signal?: AbortSignal, deadlineUnixMs?: bigint): Promise<ZLinkObjectCommitResult>;
27
27
  completeCreation(request: ZLinkObjectCreationCompleteRequest, signal?: AbortSignal): Promise<ZLinkObjectCreationCompleteResult>;
28
- abort(request: ZLinkObjectAbortRequest, signal?: AbortSignal): Promise<ZLinkObjectAbortResult>;
28
+ abort(request: ZLinkObjectAbortRequest, signal?: AbortSignal, deadlineUnixMs?: bigint): Promise<ZLinkObjectAbortResult>;
29
29
  prepareAggregate(request: ZLinkAggregatePrepareRequest, signal?: AbortSignal): Promise<ZLinkAggregatePrepareResult>;
30
30
  commitAggregate(fence: ZLinkAggregateFence, signal?: AbortSignal): Promise<ZLinkAggregateCommitResult>;
31
31
  abortAggregate(fence: ZLinkAggregateFence, signal?: AbortSignal): Promise<ZLinkAggregateAbortResult>;
@@ -1,13 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkInMemoryAuthorityStore = void 0;
4
+ const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
5
+ const stream_wire_1 = require("@zlink-systems/stream-wire");
6
+ const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
7
+ const Stores_1 = require("../../contracts/Locations/Stores");
4
8
  const node_crypto_1 = require("node:crypto");
9
+ const actor_join_recovery_codec_1 = require("../foundation/actor-join-recovery-codec");
5
10
  const authority_key_codec_1 = require("./authority-key-codec");
6
11
  const opaque_record_key_1 = require("./opaque-record-key");
7
12
  const MAX_GENERATION = 0x7fffffffffffffffn;
8
- const MAX_PAYLOAD_BYTES = 1024 * 1024;
9
13
  const CREATION_TERMINAL_RETENTION_MS = 5 * 60 * 1000;
10
- const MAX_U64 = 0xffffffffffffffffn;
14
+ const MAX_U64 = stream_wire_1.UINT64_MAX;
11
15
  /**
12
16
  * In-memory reference provider for the provider-owned authority state machine.
13
17
  * Opaque payload bytes are copied but never parsed.
@@ -101,11 +105,21 @@ class ZLinkInMemoryAuthorityStore {
101
105
  if (!this.isOwnerLive(row.snapshot)) {
102
106
  return { kind: 'conflict', current: this.read(keyValue) };
103
107
  }
108
+ if (mutation.generationTransition === 'reincarnate' &&
109
+ (this.objectGeneration >= MAX_GENERATION || this.ownerGeneration >= MAX_GENERATION)) {
110
+ return { kind: 'generationExhausted' };
111
+ }
104
112
  const nextVersion = this.tryNextStoreVersion();
105
113
  if (nextVersion === undefined)
106
114
  return { kind: 'generationExhausted' };
107
115
  row.snapshot = {
108
116
  ...row.snapshot,
117
+ ...(mutation.generationTransition === 'reincarnate'
118
+ ? {
119
+ objectGeneration: ++this.objectGeneration,
120
+ authorityOwnerGeneration: ++this.ownerGeneration
121
+ }
122
+ : {}),
109
123
  storeVersion: version(nextVersion),
110
124
  payload: Buffer.from(mutation.payload)
111
125
  };
@@ -114,8 +128,8 @@ class ZLinkInMemoryAuthorityStore {
114
128
  }
115
129
  async listAuthorities(prefix, cursor, limit, signal) {
116
130
  signal?.throwIfAborted();
117
- if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
118
- throw new RangeError('Authority scan limit must be in 1..1000.');
131
+ if (!Number.isInteger(limit) || limit < 1 || limit > Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE) {
132
+ throw new RangeError(`Authority scan limit must be in 1..${Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE}.`);
119
133
  }
120
134
  const decoded = cursor === undefined
121
135
  ? { revision: this.scanRevision, offset: 0, prefix }
@@ -611,7 +625,7 @@ function validateAuthorityMutation(mutation) {
611
625
  }
612
626
  const generationTransition = mutation
613
627
  .generationTransition;
614
- if (generationTransition !== 'preserve') {
628
+ if (generationTransition !== 'preserve' && generationTransition !== 'reincarnate') {
615
629
  throw new TypeError('Authority owner transitions require an aggregate CAS.');
616
630
  }
617
631
  }
@@ -621,17 +635,19 @@ function validateReserve(request) {
621
635
  requireText(request.intent.requestContentReference, 'creation content reference');
622
636
  validatePayload(request.creatingPayload);
623
637
  validateCapacityVector(request.capacity);
624
- if (request.intent.requestSha256.byteLength !== 32 ||
638
+ if (request.intent.requestSha256.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES ||
625
639
  request.intent.requestEncodedSize < 0n ||
626
- request.intent.requestEncodedSize > BigInt(MAX_PAYLOAD_BYTES)) {
640
+ request.intent.requestEncodedSize > BigInt(InternalDefaults_1.CREATION_INTENT_MAX_BYTES)) {
627
641
  throw new TypeError('Object creation content receipt is invalid.');
628
642
  }
629
643
  }
630
644
  function validateCreationOperation(operation) {
631
645
  const sourceRid = String(operation.sourceNodeRid);
632
646
  const sourceRidBytes = Buffer.byteLength(sourceRid, 'utf8');
633
- if (sourceRidBytes < 1 || sourceRidBytes > 255 || sourceRid.includes('\0')) {
634
- throw new TypeError('Creation terminal source node RID must contain 1..255 UTF-8 bytes without NUL.');
647
+ if (sourceRidBytes < 1 ||
648
+ sourceRidBytes > CoreTypes_1.ZLINK_MAX_ROUTING_ID_BYTES ||
649
+ sourceRid.includes('\0')) {
650
+ throw new TypeError(`Creation terminal source node RID must contain 1..${CoreTypes_1.ZLINK_MAX_ROUTING_ID_BYTES} UTF-8 bytes without NUL.`);
635
651
  }
636
652
  if (operation.sourceNodeGeneration < 1n ||
637
653
  operation.sourceNodeGeneration > MAX_U64 ||
@@ -647,8 +663,8 @@ function validateTerminalForMutation(publication, storeNow) {
647
663
  if (publication === undefined)
648
664
  return undefined;
649
665
  validateCreationOperation(publication.operation);
650
- if (publication.terminalEnvelope.byteLength > MAX_PAYLOAD_BYTES) {
651
- throw new RangeError('Creation terminal envelope must not exceed 1 MiB.');
666
+ if (publication.terminalEnvelope.byteLength > InternalDefaults_1.CREATION_TERMINAL_ENVELOPE_MAX_BYTES) {
667
+ throw new RangeError(`Creation terminal envelope must not exceed ${InternalDefaults_1.CREATION_TERMINAL_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
652
668
  }
653
669
  const deadlineMs = publication.operationDeadline.getTime();
654
670
  const expiresAtMs = deadlineMs + CREATION_TERMINAL_RETENTION_MS;
@@ -691,8 +707,8 @@ function validateAggregateRequest(request) {
691
707
  if (request.aggregateGeneration < 1n || request.participants.length < 1) {
692
708
  throw new RangeError('Aggregate generation and participant count are invalid.');
693
709
  }
694
- if (request.inventoryDigest.byteLength !== 32) {
695
- throw new TypeError('Aggregate inventory digest must contain 32 bytes.');
710
+ if (request.inventoryDigest.byteLength !== actor_join_recovery_codec_1.SHA256_DIGEST_BYTES) {
711
+ throw new TypeError(`Aggregate inventory digest must contain ${actor_join_recovery_codec_1.SHA256_DIGEST_BYTES} bytes.`);
696
712
  }
697
713
  validateCapacityVector(request.capacity);
698
714
  const keys = request.participants.map((participant) => participant.authorityKey.value);
@@ -702,8 +718,8 @@ function validateAggregateRequest(request) {
702
718
  }
703
719
  }
704
720
  function validatePayload(payload) {
705
- if (payload.byteLength > MAX_PAYLOAD_BYTES) {
706
- throw new RangeError('Authority payload exceeds 1 MiB.');
721
+ if (payload.byteLength > InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES) {
722
+ throw new RangeError(`Authority payload exceeds ${InternalDefaults_1.AUTHORITY_ENVELOPE_MAX_BYTES / (1024 * 1024)} MiB.`);
707
723
  }
708
724
  }
709
725
  function validateCapacityVector(value) {
@@ -1,7 +1,7 @@
1
- import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus, type ZLinkActorLocation, type ZLinkAggregateAbortResult, type ZLinkAggregateCommitResult, type ZLinkAggregateFence, type ZLinkAggregatePrepareRequest, type ZLinkAggregatePrepareResult, type ZLinkAuthorityCompareExchangeResult, type ZLinkAuthorityKey, type ZLinkAuthorityMutation, type ZLinkAuthorityReadResult, type ZLinkAuthorityScanCursor, type ZLinkAuthorityScanResult, type ZLinkAuthorityStoreVersion, type ZLinkActorLocationFilter, type ZLinkActorLocationKey, type ZLinkLocationChangeStampScope, type ZLinkLocationOwnerToken, type ZLinkLocationPage, type ZLinkLocationWriteResult, type ZLinkMeshNodeDescriptor, type ZLinkMeshNodeDescriptorKey, type ZLinkClientServerServerDescriptor, type ZLinkClientServerServerDescriptorKey, type ZLinkFanoutPublisherDescriptor, type ZLinkFanoutPublisherDescriptorKey, type ZLinkOwnerLeaseClaimResult, type ZLinkOwnerLeaseReadResult, type ZLinkOwnerLeaseReleaseResult, type ZLinkOwnerLeaseRenewResult, type ZLinkObjectAbortRequest, type ZLinkObjectAbortResult, type ZLinkObjectCommitRequest, type ZLinkObjectCommitResult, type ZLinkObjectCreationCompleteRequest, type ZLinkObjectCreationCompleteResult, type ZLinkObjectReserveRequest, type ZLinkObjectReserveResult, type ZLinkCreationOperationIdentity, type ZLinkCreationTerminalReadResult, type ZLinkPageRequest, type ZLinkPeerLocation, type ZLinkPeerLocationFilter, type ZLinkPeerLocationKey, type ZLinkRouteLocation, type ZLinkRouteLocationFilter, type ZLinkRouteLocationKey, type ZLinkSpotLocation, type ZLinkSpotLocationFilter, type ZLinkSpotLocationKey } from './internal-location-contracts';
2
1
  import type { ZLinkActorTransferPrepareRequest, ZLinkActorTransferRecord, ZLinkActorTransferWriteResult } from '../../contracts/Locations/ActorTransfer';
3
- import type { ZLinkFanoutLocationStore } from './internal-store-contracts';
4
2
  import type { ZLinkDomainLocationStore } from './domain-store-contract';
3
+ import { ZLinkLocationWriteIntent, ZLinkLocationWriteStatus, type ZLinkActorLocation, type ZLinkActorLocationFilter, type ZLinkActorLocationKey, type ZLinkAggregateAbortResult, type ZLinkAggregateCommitResult, type ZLinkAggregateFence, type ZLinkAggregatePrepareRequest, type ZLinkAggregatePrepareResult, type ZLinkAuthorityCompareExchangeResult, type ZLinkAuthorityKey, type ZLinkAuthorityMutation, type ZLinkAuthorityReadResult, type ZLinkAuthorityScanCursor, type ZLinkAuthorityScanResult, type ZLinkAuthorityStoreVersion, type ZLinkClientServerServerDescriptor, type ZLinkClientServerServerDescriptorKey, type ZLinkCreationOperationIdentity, type ZLinkCreationTerminalReadResult, type ZLinkFanoutPublisherDescriptor, type ZLinkFanoutPublisherDescriptorKey, type ZLinkLocationChangeStampScope, type ZLinkLocationOwnerToken, type ZLinkLocationPage, type ZLinkLocationWriteResult, type ZLinkMeshNodeDescriptor, type ZLinkMeshNodeDescriptorKey, type ZLinkObjectAbortRequest, type ZLinkObjectAbortResult, type ZLinkObjectCommitRequest, type ZLinkObjectCommitResult, type ZLinkObjectCreationCompleteRequest, type ZLinkObjectCreationCompleteResult, type ZLinkObjectReserveRequest, type ZLinkObjectReserveResult, type ZLinkOwnerLeaseClaimResult, type ZLinkOwnerLeaseReadResult, type ZLinkOwnerLeaseReleaseResult, type ZLinkOwnerLeaseRenewResult, type ZLinkPageRequest, type ZLinkPeerLocation, type ZLinkPeerLocationFilter, type ZLinkPeerLocationKey, type ZLinkRouteLocation, type ZLinkRouteLocationFilter, type ZLinkRouteLocationKey, type ZLinkSpotLocation, type ZLinkSpotLocationFilter, type ZLinkSpotLocationKey } from './internal-location-contracts';
4
+ import type { ZLinkFanoutLocationStore } from './internal-store-contracts';
5
5
  export declare class ZLinkInMemoryLocationStore implements ZLinkDomainLocationStore, ZLinkFanoutLocationStore {
6
6
  private readonly now;
7
7
  private readonly leases;
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkInMemoryLocationStore = void 0;
4
- const internal_location_contracts_1 = require("./internal-location-contracts");
5
- const in_memory_authority_store_1 = require("./in-memory-authority-store");
4
+ const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
5
+ const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
6
+ const location_store_integration_1 = require("../../location-store-integration");
6
7
  const authority_key_codec_1 = require("./authority-key-codec");
8
+ const in_memory_authority_store_1 = require("./in-memory-authority-store");
9
+ const internal_location_contracts_1 = require("./internal-location-contracts");
7
10
  const key_codec_1 = require("./key-codec");
8
- const location_store_integration_1 = require("../../location-store-integration");
11
+ const MAX_LOCATION_GENERATION = 0x7fffffffffffffffn;
12
+ const MAX_DESCRIPTOR_OBJECT_CAPABILITIES = 1024;
9
13
  class ZLinkInMemoryLocationStore {
10
14
  now;
11
15
  leases = new Map();
@@ -526,7 +530,7 @@ class ZLinkInMemoryLocationStore {
526
530
  if (current !== undefined && current.leaseExpiresAt.getTime() > storeNow.getTime()) {
527
531
  return { kind: 'conflict' };
528
532
  }
529
- if (this.ownerLeaseGeneration >= 0x7fffffffffffffffn) {
533
+ if (this.ownerLeaseGeneration >= MAX_LOCATION_GENERATION) {
530
534
  return { kind: 'generationExhausted' };
531
535
  }
532
536
  const token = { ownerId, leaseGeneration: ++this.ownerLeaseGeneration };
@@ -743,13 +747,13 @@ function validateMeshNodeDescriptor(descriptor) {
743
747
  }
744
748
  if (descriptor.objectRole === internal_location_contracts_1.ZLinkObjectRole.Server) {
745
749
  if (descriptor.entrySpotId !== undefined && !validDescriptorText(descriptor.entrySpotId)) {
746
- throw new TypeError('MeshNode Entry Spot ID must contain 1..255 UTF-8 bytes.');
750
+ throw new TypeError(`MeshNode Entry Spot ID must contain 1..${CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES} UTF-8 bytes.`);
747
751
  }
748
752
  }
749
753
  else if (descriptor.entrySpotId !== undefined) {
750
754
  throw new TypeError('Only Object Server descriptors may publish an Entry Spot ID.');
751
755
  }
752
- const maxGeneration = 0x7fffffffffffffffn;
756
+ const maxGeneration = MAX_LOCATION_GENERATION;
753
757
  if (descriptor.lifecycleGeneration < 1n ||
754
758
  descriptor.lifecycleGeneration > maxGeneration ||
755
759
  descriptor.descriptorRevision < 1n ||
@@ -777,9 +781,8 @@ function validateMeshNodeDescriptor(descriptor) {
777
781
  !Number.isSafeInteger(descriptor.activationConcurrency.limit) ||
778
782
  descriptor.activationConcurrency.limit < 1 ||
779
783
  descriptor.activationConcurrency.active > descriptor.activationConcurrency.limit ||
780
- descriptor.placementWeight < 0 ||
781
- descriptor.placementWeight > 10_000 ||
782
- descriptor.objectCapabilities.length > 1024 ||
784
+ !(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(descriptor.placementWeight) ||
785
+ descriptor.objectCapabilities.length > MAX_DESCRIPTOR_OBJECT_CAPABILITIES ||
783
786
  (descriptor.objectRole !== internal_location_contracts_1.ZLinkObjectRole.Server && descriptor.objectCapabilities.length !== 0)) {
784
787
  throw new RangeError('MeshNode object capacity is invalid.');
785
788
  }
@@ -804,7 +807,7 @@ function validateMeshNodeDescriptor(descriptor) {
804
807
  }
805
808
  function validDescriptorText(value) {
806
809
  const size = Buffer.byteLength(value, 'utf8');
807
- return size >= 1 && size <= 255 && !value.includes('\0');
810
+ return size >= 1 && size <= CoreTypes_1.ZLINK_MAX_IDENTITY_TEXT_BYTES && !value.includes('\0');
808
811
  }
809
812
  function meshNodeImmutableFingerprint(descriptor) {
810
813
  const capabilities = [...descriptor.objectCapabilities].sort((left, right) => {
@@ -867,7 +870,7 @@ function validateClientServerDescriptor(descriptor) {
867
870
  !validDescriptorText(descriptor.ownerId)) {
868
871
  throw new TypeError('ClientServer descriptor identity and endpoint are required.');
869
872
  }
870
- const maxGeneration = 0x7fffffffffffffffn;
873
+ const maxGeneration = MAX_LOCATION_GENERATION;
871
874
  if (descriptor.lifecycleGeneration < 1n ||
872
875
  descriptor.lifecycleGeneration > maxGeneration ||
873
876
  descriptor.descriptorRevision < 1n ||
@@ -876,8 +879,8 @@ function validateClientServerDescriptor(descriptor) {
876
879
  descriptor.leaseGeneration > maxGeneration) {
877
880
  throw new RangeError('ClientServer descriptor generations are invalid.');
878
881
  }
879
- if (!Number.isInteger(descriptor.weight) || descriptor.weight < 0 || descriptor.weight > 10_000) {
880
- throw new RangeError('ClientServer descriptor weight must be an integer in 0..10000.');
882
+ if (!(0, RegistrationBuilderPolicy_1.isValidPublicWeight)(descriptor.weight)) {
883
+ throw new RangeError(`ClientServer descriptor weight must be an integer in 0..${RegistrationBuilderPolicy_1.ZLINK_MAX_PUBLIC_WEIGHT}.`);
881
884
  }
882
885
  }
883
886
  function clientServerImmutableFingerprint(descriptor) {
@@ -907,7 +910,7 @@ function validateFanoutPublisherDescriptor(descriptor) {
907
910
  !validDescriptorText(descriptor.ownerId)) {
908
911
  throw new TypeError('Fanout publisher descriptor identity and endpoint are required.');
909
912
  }
910
- const maxGeneration = 0x7fffffffffffffffn;
913
+ const maxGeneration = MAX_LOCATION_GENERATION;
911
914
  if (descriptor.lifecycleGeneration < 1n ||
912
915
  descriptor.lifecycleGeneration > maxGeneration ||
913
916
  descriptor.descriptorRevision < 1n ||
@@ -1,4 +1,5 @@
1
1
  import type { ZLinkLocationStore, ZLinkStoreKey, ZLinkStoreReadResult, ZLinkStoreScanRequest, ZLinkStoreScanResult, ZLinkStoreVersion, ZLinkStoreWriteRequest, ZLinkStoreWriteResult } from '../../contracts';
2
+ export declare const PROVIDER_STORAGE_NAMESPACE_PREFIX = "zlink:v11:";
2
3
  /**
3
4
  * Framework-owned primitive Store used by the explicit in-memory option.
4
5
  * Domain records are encoded by ZLinkLocationStoreRepository.
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ZLinkInMemoryProviderLocationStore = void 0;
3
+ exports.ZLinkInMemoryProviderLocationStore = exports.PROVIDER_STORAGE_NAMESPACE_PREFIX = void 0;
4
4
  exports.storeKey = storeKey;
5
5
  exports.storeVersion = storeVersion;
6
+ const Stores_1 = require("../../contracts/Locations/Stores");
7
+ exports.PROVIDER_STORAGE_NAMESPACE_PREFIX = 'zlink:v11:';
6
8
  /**
7
9
  * Framework-owned primitive Store used by the explicit in-memory option.
8
10
  * Domain records are encoded by ZLinkLocationStoreRepository.
@@ -42,6 +44,12 @@ class ZLinkInMemoryProviderLocationStore {
42
44
  if (current !== undefined)
43
45
  return { kind: 'conflict', storeNow };
44
46
  }
47
+ else if (condition.kind === 'value') {
48
+ if (current === undefined ||
49
+ !Buffer.from(current.bytes).equals(Buffer.from(condition.expected))) {
50
+ return { kind: 'conflict', storeNow };
51
+ }
52
+ }
45
53
  else if (current?.version.value !== condition.expected.value) {
46
54
  return { kind: 'conflict', storeNow };
47
55
  }
@@ -52,7 +60,7 @@ class ZLinkInMemoryProviderLocationStore {
52
60
  this.values.delete(mutation.key.value);
53
61
  continue;
54
62
  }
55
- const retentionMs = requireValue(mutation.bytes, mutation.retentionMs);
63
+ const retentionMs = mutation.retentionMs === undefined ? undefined : Math.ceil(mutation.retentionMs);
56
64
  const version = storeVersion((++this.nextVersion).toString());
57
65
  const expiresAt = retentionMs === undefined ? undefined : new Date(storeNow.getTime() + retentionMs);
58
66
  this.values.set(mutation.key.value, {
@@ -84,13 +92,26 @@ class ZLinkInMemoryProviderLocationStore {
84
92
  this.scans.set(snapshotId, snapshot);
85
93
  }
86
94
  else {
87
- [snapshotId, offset] = parseCursor(request.cursor);
95
+ const cursor = parseCursor(request.cursor);
96
+ snapshotId = cursor?.[0] ?? '';
97
+ offset = cursor?.[1] ?? 0;
88
98
  snapshot = this.scans.get(snapshotId);
89
- if (snapshot === undefined)
99
+ if (snapshot === undefined || offset > snapshot.items.length)
90
100
  return { kind: 'expired' };
91
101
  }
92
- const selected = snapshot.items.slice(offset, offset + request.limit);
93
- const nextOffset = offset + selected.length;
102
+ let nextOffset = offset;
103
+ let encodedBytes = 0;
104
+ while (nextOffset < snapshot.items.length && nextOffset - offset < request.limit) {
105
+ const item = snapshot.items[nextOffset];
106
+ const itemBytes = Buffer.byteLength(item.key.value, 'utf8') +
107
+ Buffer.byteLength(item.value.version.value, 'utf8') +
108
+ item.value.bytes.byteLength;
109
+ if (encodedBytes + itemBytes > Stores_1.ZLINK_PROVIDER_MAX_ENCODED_PAGE_BYTES)
110
+ break;
111
+ encodedBytes += itemBytes;
112
+ nextOffset += 1;
113
+ }
114
+ const selected = snapshot.items.slice(offset, nextOffset);
94
115
  const nextCursor = nextOffset < snapshot.items.length ? scanCursor(`${snapshotId}:${nextOffset}`) : undefined;
95
116
  if (nextCursor === undefined)
96
117
  this.scans.delete(snapshotId);
@@ -133,9 +154,10 @@ function scanCursor(value) {
133
154
  function parseCursor(cursor) {
134
155
  const separator = cursor.value.indexOf(':');
135
156
  const snapshotId = cursor.value.slice(0, separator);
136
- const offset = Number(cursor.value.slice(separator + 1));
137
- if (separator < 1 || !Number.isSafeInteger(offset) || offset < 0) {
138
- throw new RangeError('Location Store scan cursor is invalid.');
157
+ const encodedOffset = cursor.value.slice(separator + 1);
158
+ const offset = Number(encodedOffset);
159
+ if (separator < 1 || !/^(0|[1-9][0-9]*)$/.test(encodedOffset) || !Number.isSafeInteger(offset)) {
160
+ return undefined;
139
161
  }
140
162
  return [snapshotId, offset];
141
163
  }
@@ -145,27 +167,55 @@ function requireWriteRequest(request) {
145
167
  const keys = [...new Set([...conditionKeys, ...mutationKeys])];
146
168
  if (new Set(conditionKeys).size !== conditionKeys.length ||
147
169
  new Set(mutationKeys).size !== mutationKeys.length ||
148
- keys.length > 2_048) {
149
- throw new RangeError('Location Store write keys must be unique and bounded to 2,048.');
170
+ keys.length > Stores_1.ZLINK_PROVIDER_MAX_WRITE_KEYS) {
171
+ throw new RangeError(`Location Store write keys must be unique and bounded to ${Stores_1.ZLINK_PROVIDER_MAX_WRITE_KEYS.toLocaleString('en-US')}.`);
150
172
  }
151
173
  for (const key of keys)
152
174
  requireKey(key);
153
- const encodedSize = request.mutations.reduce((sum, mutation) => sum + (mutation.kind === 'put' ? mutation.bytes.byteLength : 0), 0);
154
- if (encodedSize > 4 * 1024 * 1024) {
155
- throw new RangeError('Location Store write exceeds 4 MiB.');
175
+ const encodedSize = request.conditions.reduce((sum, condition) => {
176
+ const keyBytes = Buffer.byteLength(condition.key.value, 'utf8');
177
+ if (condition.kind === 'missing')
178
+ return sum + keyBytes;
179
+ if (condition.kind === 'value') {
180
+ requireValue(condition.expected, undefined);
181
+ return sum + keyBytes + condition.expected.byteLength;
182
+ }
183
+ const versionBytes = Buffer.byteLength(condition.expected.value, 'utf8');
184
+ if (versionBytes < 1 || versionBytes > Stores_1.ZLINK_PROVIDER_MAX_VERSION_BYTES) {
185
+ throw new RangeError(`Location Store version must contain 1..${Stores_1.ZLINK_PROVIDER_MAX_VERSION_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
186
+ }
187
+ return sum + keyBytes + versionBytes;
188
+ }, 0) +
189
+ request.mutations.reduce((sum, mutation) => {
190
+ const keyBytes = Buffer.byteLength(mutation.key.value, 'utf8');
191
+ if (mutation.kind !== 'put')
192
+ return sum + keyBytes;
193
+ requireValue(mutation.bytes, mutation.retentionMs);
194
+ return sum + keyBytes + mutation.bytes.byteLength;
195
+ }, 0);
196
+ if (encodedSize > Stores_1.ZLINK_PROVIDER_MAX_WRITE_BYTES) {
197
+ throw new RangeError(`Location Store write exceeds ${Stores_1.ZLINK_PROVIDER_MAX_WRITE_BYTES / (1024 * 1024)} MiB.`);
156
198
  }
157
199
  }
158
200
  function requireScanRequest(request) {
159
- if (Buffer.byteLength(request.prefix, 'utf8') > 1_024) {
160
- throw new RangeError('Location Store scan prefix exceeds 1,024 UTF-8 bytes.');
201
+ if (request.cursor !== undefined) {
202
+ const bytes = Buffer.byteLength(request.cursor.value, 'utf8');
203
+ if (bytes < 1 || bytes > Stores_1.ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES) {
204
+ throw new RangeError(`Location Store cursor must contain 1..${Stores_1.ZLINK_PROVIDER_MAX_SCAN_CURSOR_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
205
+ }
206
+ }
207
+ if (Buffer.byteLength(request.prefix, 'utf8') > Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES) {
208
+ throw new RangeError(`Location Store scan prefix exceeds ${Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
161
209
  }
162
- if (!Number.isSafeInteger(request.limit) || request.limit < 1 || request.limit > 1_000) {
163
- throw new RangeError('Location Store scan limit must be in 1..1000.');
210
+ if (!Number.isSafeInteger(request.limit) ||
211
+ request.limit < 1 ||
212
+ request.limit > Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE) {
213
+ throw new RangeError(`Location Store scan limit must be in 1..${Stores_1.ZLINK_PROVIDER_MAX_PAGE_SIZE}.`);
164
214
  }
165
215
  }
166
216
  function requireValue(bytes, retentionMs) {
167
- if (bytes.byteLength > 1024 * 1024) {
168
- throw new RangeError('Location Store value exceeds 1 MiB.');
217
+ if (bytes.byteLength > Stores_1.ZLINK_PROVIDER_MAX_VALUE_BYTES) {
218
+ throw new RangeError(`Location Store value exceeds ${Stores_1.ZLINK_PROVIDER_MAX_VALUE_BYTES / (1024 * 1024)} MiB.`);
169
219
  }
170
220
  if (retentionMs !== undefined &&
171
221
  (!Number.isFinite(retentionMs) ||
@@ -177,7 +227,7 @@ function requireValue(bytes, retentionMs) {
177
227
  }
178
228
  function requireKey(value) {
179
229
  const bytes = Buffer.byteLength(value, 'utf8');
180
- if (bytes < 1 || bytes > 1_024) {
181
- throw new RangeError('Location Store key must contain 1..1,024 UTF-8 bytes.');
230
+ if (bytes < 1 || bytes > Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES) {
231
+ throw new RangeError(`Location Store key must contain 1..${Stores_1.ZLINK_PROVIDER_MAX_KEY_BYTES.toLocaleString('en-US')} UTF-8 bytes.`);
182
232
  }
183
233
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkLocationKeyCodec = void 0;
4
+ const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
4
5
  const canonical_codec_1 = require("./canonical-codec");
5
6
  const routing_id_1 = require("../routing-id");
6
7
  // Framework bookkeeping codec for in-memory row maps and generation guards.
@@ -31,8 +32,8 @@ function encodeSegments(...segments) {
31
32
  }
32
33
  function requireSpotId(value) {
33
34
  const bytes = Buffer.byteLength(value, 'utf8');
34
- if (bytes < 1 || bytes > 255) {
35
- throw new TypeError('SpotId must contain 1..255 UTF-8 bytes.');
35
+ if (bytes < 1 || bytes > CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES) {
36
+ throw new TypeError(`SpotId must contain 1..${CoreTypes_1.ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
36
37
  }
37
38
  return value;
38
39
  }
@@ -19,6 +19,7 @@ export declare class ZLinkOwnerLeaseTracker {
19
19
  isOwnerLive(ownerId: string, signal?: AbortSignal): Promise<boolean>;
20
20
  remainingLeaseMs(ownerId: string, signal?: AbortSignal): Promise<number>;
21
21
  remainingOwnerTokenLeaseMs(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<number>;
22
+ isOwnerTokenLive(owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<boolean>;
22
23
  getLiveOwnerSetVersion(signal?: AbortSignal): Promise<number>;
23
24
  private getSnapshot;
24
25
  private prepareSnapshotRefresh;
@@ -28,9 +29,6 @@ export declare class ZLinkOwnerLeaseTracker {
28
29
  private isLive;
29
30
  }
30
31
  export declare class ZLinkLiveRowFilter {
31
- private readonly leaseTracker;
32
- constructor(leaseTracker: ZLinkOwnerLeaseTracker);
33
- filter<TRow>(rows: readonly TRow[], ownerIdOf: (row: TRow) => string, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow[]>;
34
- resolve<TRow>(row: TRow | undefined, ownerIdOf: (row: TRow) => string, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow | undefined>;
35
- private isLive;
32
+ filter<TRow>(rows: readonly TRow[], isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow[]>;
33
+ resolve<TRow>(row: TRow | undefined, isLive: (row: TRow, signal?: AbortSignal) => Promise<boolean>, signal?: AbortSignal, include?: (row: TRow) => boolean): Promise<TRow | undefined>;
36
34
  }