@zlink-systems/framework 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Handlers/JsonContract.js +23 -11
  13. package/dist/contracts/Spots/SpotKind.js +16 -8
  14. package/dist/location-store-integration.js +16 -16
  15. package/dist/nest-integration.js +17 -11
  16. package/dist/runtime/abort.js +9 -5
  17. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  18. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  19. package/dist/runtime/actors/actor-client.js +83 -63
  20. package/dist/runtime/actors/actor-context.js +24 -18
  21. package/dist/runtime/actors/actor-creation.js +4 -3
  22. package/dist/runtime/actors/actor-handoff.js +89 -92
  23. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  24. package/dist/runtime/actors/actor-mailbox.js +1 -1
  25. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  26. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  27. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  28. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  29. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  30. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  31. package/dist/runtime/actors/bound-session-wire.js +14 -9
  32. package/dist/runtime/actors/deferred-join-accepted-journal.js +158 -124
  33. package/dist/runtime/actors/index.js +2 -5
  34. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  35. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  36. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  37. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  38. package/dist/runtime/admission.js +2 -6
  39. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  40. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  41. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  42. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  43. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  44. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  45. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  46. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  47. package/dist/runtime/backend/node/node-raw-mesh-backend.js +116 -113
  48. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  49. package/dist/runtime/backend/runtime-message.js +3 -3
  50. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  51. package/dist/runtime/backend/runtime-values.js +4 -5
  52. package/dist/runtime/channels/channel-clients.js +27 -24
  53. package/dist/runtime/channels/channel-dispatch-pipeline.js +10 -18
  54. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  55. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  56. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  57. package/dist/runtime/channels/channel-envelope.js +83 -47
  58. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  59. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  60. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  62. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  63. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  64. package/dist/runtime/channels/channel-transports.js +43 -33
  65. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  66. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  67. package/dist/runtime/channels/dispatch-error-reporter.js +9 -7
  68. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  69. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  70. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  71. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  72. package/dist/runtime/channels/source-spot-router.js +6 -2
  73. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  74. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  75. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  76. package/dist/runtime/diagnostics/index.js +38 -10
  77. package/dist/runtime/diagnostics/message-flow.js +47 -39
  78. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  79. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  80. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  81. package/dist/runtime/execution/index.js +7 -6
  82. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  83. package/dist/runtime/execution/state-lane.js +2 -2
  84. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -23
  85. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  86. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  87. package/dist/runtime/foundation/raw-service-mesh-runtime.js +136 -136
  88. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  89. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  90. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  91. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  92. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  93. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  94. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  95. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  96. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  97. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  98. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  99. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  100. package/dist/runtime/foundation/service-stateful-runtime.js +416 -438
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  102. package/dist/runtime/foundation/service-topology-registry.js +96 -95
  103. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  104. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  105. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  106. package/dist/runtime/framework-errors-internal.js +7 -10
  107. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  108. package/dist/runtime/handlers/index.js +3 -1
  109. package/dist/runtime/host/actor-packet-relay.js +74 -70
  110. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  111. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  112. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  113. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  114. package/dist/runtime/host/application-job-queue.js +18 -22
  115. package/dist/runtime/host/bound-session-relay.js +3 -1
  116. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  117. package/dist/runtime/host/host-capacity-status.js +8 -4
  118. package/dist/runtime/host/index.js +244 -227
  119. package/dist/runtime/host/instance-activation-authority.js +93 -96
  120. package/dist/runtime/host/location-runtime-owner.js +16 -14
  121. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  122. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  123. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  124. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  125. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  126. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  127. package/dist/runtime/host/runtime-shutdown.js +1 -2
  128. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  129. package/dist/runtime/host/spot-address-transport.js +69 -71
  130. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  131. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  132. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  133. package/dist/runtime/locations/actor-location-claims.js +26 -20
  134. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  135. package/dist/runtime/locations/authority-key-codec.js +7 -7
  136. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  137. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  138. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  139. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  140. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  141. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  142. package/dist/runtime/locations/key-codec.js +1 -1
  143. package/dist/runtime/locations/lease-tracker.js +23 -21
  144. package/dist/runtime/locations/lifecycle.js +4 -5
  145. package/dist/runtime/locations/location-store-repository.js +368 -324
  146. package/dist/runtime/locations/opaque-record-key.js +2 -2
  147. package/dist/runtime/locations/resolvers.js +73 -82
  148. package/dist/runtime/locations/runtime.js +68 -63
  149. package/dist/runtime/locations/spot-location-claims.js +39 -35
  150. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  151. package/dist/runtime/messaging/packet-name.js +7 -6
  152. package/dist/runtime/messaging/payload-codec.js +21 -18
  153. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  154. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  155. package/dist/runtime/routing-id.js +3 -5
  156. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  157. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  158. package/dist/runtime/spots/index.js +208 -219
  159. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  160. package/dist/runtime/spots/spot-activation-state.js +17 -15
  161. package/dist/runtime/spots/spot-activation.js +33 -16
  162. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  163. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  164. package/dist/runtime/spots/spot-actor-packet-dispatch.js +23 -20
  165. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -10
  166. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  167. package/dist/runtime/spots/spot-closing.js +3 -7
  168. package/dist/runtime/spots/spot-context.js +2 -2
  169. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  170. package/dist/runtime/spots/spot-handle.js +6 -3
  171. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  172. package/dist/runtime/spots/spot-manager-public.js +5 -6
  173. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  174. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  175. package/dist/runtime/spots/spot-node-runtime-manager.js +74 -85
  176. package/dist/runtime/spots/spot-outbound.js +10 -14
  177. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  178. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  179. package/dist/runtime/spots/spot-route-packet-dispatch.js +16 -14
  180. package/dist/runtime/spots/spot-route-replies.js +4 -6
  181. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  182. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +1 -2
  183. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  184. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  185. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  186. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  187. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -5
  188. package/dist/runtime/spots/spot-timer.js +25 -29
  189. package/dist/runtime/streams/actor-session-binding-registry.js +98 -107
  190. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  191. package/dist/runtime/streams/bound-actor-relay-sender.js +18 -16
  192. package/dist/runtime/streams/bound-session-service.js +8 -9
  193. package/dist/runtime/streams/index.js +20 -19
  194. package/dist/runtime/streams/managed-stream.js +32 -30
  195. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  196. package/dist/runtime/streams/protocol.js +29 -18
  197. package/dist/runtime/streams/session-actor-coordinator.js +34 -37
  198. package/dist/runtime/streams/session-context.js +30 -28
  199. package/dist/runtime/streams/session-provider.js +2 -2
  200. package/dist/runtime/streams/session-serial-executor.js +1 -2
  201. package/dist/runtime/streams/stream-frame-factory.js +11 -5
  202. package/dist/runtime/streams/stream-session-runtime.js +70 -66
  203. package/dist/runtime/workers/index.js +15 -4
  204. package/package.json +2 -2
  205. package/src/contracts/Channels/RouteCalls.ts +6 -1
  206. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  207. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  208. package/src/contracts/Configuration/Builders.ts +14 -14
  209. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  210. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  211. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  212. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  213. package/src/contracts/Configuration/Registration.ts +46 -17
  214. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  215. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  216. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  217. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  218. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  219. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  220. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  221. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  222. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  223. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  224. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -6
  225. package/src/contracts/Errors/index.ts +1 -4
  226. package/src/contracts/Handlers/Attributes.ts +15 -9
  227. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  228. package/src/contracts/Handlers/JsonContract.ts +53 -19
  229. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  230. package/src/contracts/Locations/Authority.ts +4 -11
  231. package/src/contracts/Locations/Keys.ts +6 -1
  232. package/src/contracts/Locations/Options.ts +3 -2
  233. package/src/contracts/Locations/RelocationStore.ts +1 -4
  234. package/src/contracts/Locations/Resolvers.ts +5 -5
  235. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  236. package/src/contracts/Locations/Stores.ts +1 -2
  237. package/src/contracts/Locations/index.ts +2 -8
  238. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  239. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  240. package/src/contracts/Spots/Contracts.ts +2 -8
  241. package/src/contracts/Spots/SpotKind.ts +16 -8
  242. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  243. package/src/contracts/Streams/IZLinkSession.ts +0 -1
  244. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  245. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  246. package/src/internal.ts +5 -4
  247. package/src/location-store-integration.ts +24 -16
  248. package/src/nest-integration.ts +40 -25
  249. package/src/runtime/abort.ts +10 -4
  250. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  251. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  252. package/src/runtime/actors/actor-client.ts +162 -133
  253. package/src/runtime/actors/actor-context.ts +138 -130
  254. package/src/runtime/actors/actor-creation.ts +47 -44
  255. package/src/runtime/actors/actor-execution-context.ts +6 -4
  256. package/src/runtime/actors/actor-handoff.ts +269 -293
  257. package/src/runtime/actors/actor-join-deferred-scope.ts +5 -4
  258. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  259. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  260. package/src/runtime/actors/actor-mailbox.ts +16 -19
  261. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  262. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  263. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  264. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  265. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  266. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  267. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  268. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  269. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  270. package/src/runtime/actors/bound-session-wire.ts +37 -17
  271. package/src/runtime/actors/deferred-join-accepted-journal.ts +351 -320
  272. package/src/runtime/actors/index.ts +43 -86
  273. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  274. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  275. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  276. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  277. package/src/runtime/admission.ts +9 -9
  278. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  279. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  280. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  281. package/src/runtime/backend/contracts/index.ts +73 -52
  282. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  283. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  285. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  286. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  287. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  288. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  289. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  290. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  291. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  292. package/src/runtime/backend/node/node-raw-mesh-backend.ts +335 -383
  293. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  294. package/src/runtime/backend/runtime-message.ts +5 -3
  295. package/src/runtime/backend/runtime-values.ts +10 -7
  296. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  297. package/src/runtime/channels/channel-clients.ts +93 -73
  298. package/src/runtime/channels/channel-dispatch-pipeline.ts +40 -42
  299. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  300. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  301. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  302. package/src/runtime/channels/channel-envelope.ts +256 -150
  303. package/src/runtime/channels/channel-multipart.ts +13 -5
  304. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  305. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  306. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  307. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  308. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  309. package/src/runtime/channels/channel-socket-options.ts +3 -10
  310. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  311. package/src/runtime/channels/channel-transports.ts +215 -197
  312. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  313. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  314. package/src/runtime/channels/dispatch-error-reporter.ts +11 -8
  315. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  316. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  317. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  318. package/src/runtime/channels/index.ts +1 -4
  319. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  320. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  321. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  322. package/src/runtime/channels/source-spot-router.ts +26 -22
  323. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  324. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  325. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  326. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  327. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  328. package/src/runtime/codecs/index.ts +3 -2
  329. package/src/runtime/diagnostics/flow-context.ts +12 -3
  330. package/src/runtime/diagnostics/index.ts +96 -61
  331. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  332. package/src/runtime/diagnostics/message-flow.ts +95 -76
  333. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  334. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  335. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  336. package/src/runtime/execution/index.ts +18 -26
  337. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  338. package/src/runtime/execution/state-lane.ts +2 -2
  339. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -51
  340. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  341. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  342. package/src/runtime/foundation/operation-identity.ts +1 -2
  343. package/src/runtime/foundation/operation-registry.ts +8 -2
  344. package/src/runtime/foundation/raw-service-mesh-runtime.ts +312 -385
  345. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  346. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  347. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  348. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  349. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  350. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  351. package/src/runtime/foundation/service-mailbox.ts +14 -14
  352. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  353. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  354. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  355. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  356. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  357. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  358. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  359. package/src/runtime/foundation/service-session-binding-ingress-port.ts +1 -4
  360. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  361. package/src/runtime/foundation/service-stateful-runtime.ts +1174 -1112
  362. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  363. package/src/runtime/foundation/service-topology-registry.ts +157 -159
  364. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  365. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  366. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  367. package/src/runtime/framework-errors-internal.ts +31 -30
  368. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  369. package/src/runtime/handlers/index.ts +18 -8
  370. package/src/runtime/host/actor-packet-relay.ts +290 -261
  371. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  372. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  373. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  374. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  375. package/src/runtime/host/application-job-queue.ts +32 -48
  376. package/src/runtime/host/bound-session-relay.ts +7 -9
  377. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  378. package/src/runtime/host/host-capacity-status.ts +10 -9
  379. package/src/runtime/host/index.ts +861 -789
  380. package/src/runtime/host/instance-activation-authority.ts +125 -143
  381. package/src/runtime/host/location-runtime-owner.ts +38 -26
  382. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  383. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  384. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  385. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  386. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  387. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  388. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  389. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  390. package/src/runtime/host/runtime-shutdown.ts +4 -3
  391. package/src/runtime/host/service-relocation-control.ts +14 -5
  392. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  393. package/src/runtime/host/spot-address-transport.ts +284 -237
  394. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  395. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  396. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  397. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  398. package/src/runtime/locations/actor-location-claims.ts +61 -49
  399. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  400. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  401. package/src/runtime/locations/authority-key-codec.ts +13 -10
  402. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  403. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  404. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  405. package/src/runtime/locations/canonical-codec.ts +3 -1
  406. package/src/runtime/locations/creation-operation-id.ts +4 -3
  407. package/src/runtime/locations/domain-store-contract.ts +13 -7
  408. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  409. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  410. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  411. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  412. package/src/runtime/locations/key-codec.ts +3 -4
  413. package/src/runtime/locations/lease-tracker.ts +36 -27
  414. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  415. package/src/runtime/locations/lifecycle.ts +33 -28
  416. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  417. package/src/runtime/locations/opaque-record-key.ts +4 -9
  418. package/src/runtime/locations/resolvers.ts +201 -178
  419. package/src/runtime/locations/runtime.ts +251 -159
  420. package/src/runtime/locations/spot-location-claims.ts +110 -112
  421. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  422. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  423. package/src/runtime/messaging/packet-name.ts +8 -6
  424. package/src/runtime/messaging/payload-codec.ts +70 -50
  425. package/src/runtime/messaging/submission-result.ts +6 -9
  426. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  427. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  428. package/src/runtime/routing-id.ts +10 -7
  429. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  430. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  431. package/src/runtime/spots/index.ts +593 -563
  432. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  433. package/src/runtime/spots/spot-activation-state.ts +43 -51
  434. package/src/runtime/spots/spot-activation.ts +179 -116
  435. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  436. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  437. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  438. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  439. package/src/runtime/spots/spot-actor-packet-dispatch.ts +184 -153
  440. package/src/runtime/spots/spot-actor-packet-drain.ts +54 -42
  441. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  442. package/src/runtime/spots/spot-closing.ts +11 -12
  443. package/src/runtime/spots/spot-context.ts +46 -26
  444. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  445. package/src/runtime/spots/spot-handle.ts +17 -15
  446. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  447. package/src/runtime/spots/spot-location-claim.ts +5 -4
  448. package/src/runtime/spots/spot-manager-public.ts +62 -82
  449. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  450. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  451. package/src/runtime/spots/spot-node-runtime-manager.ts +230 -221
  452. package/src/runtime/spots/spot-outbound.ts +47 -59
  453. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  454. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  455. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  456. package/src/runtime/spots/spot-route-packet-dispatch.ts +128 -95
  457. package/src/runtime/spots/spot-route-replies.ts +23 -24
  458. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  459. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  460. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +11 -17
  461. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  462. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  463. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  464. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  465. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  466. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  467. package/src/runtime/spots/spot-subscription-dispatch.ts +56 -46
  468. package/src/runtime/spots/spot-timer.ts +98 -91
  469. package/src/runtime/streams/actor-session-binding-registry.ts +277 -235
  470. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +7 -4
  471. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  472. package/src/runtime/streams/bound-actor-relay-sender.ts +53 -51
  473. package/src/runtime/streams/bound-session-response-target.ts +29 -8
  474. package/src/runtime/streams/bound-session-service.ts +39 -39
  475. package/src/runtime/streams/index.ts +176 -100
  476. package/src/runtime/streams/managed-stream.ts +98 -87
  477. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  478. package/src/runtime/streams/protocol.ts +73 -43
  479. package/src/runtime/streams/session-actor-coordinator.ts +97 -89
  480. package/src/runtime/streams/session-calls.ts +2 -8
  481. package/src/runtime/streams/session-context.ts +66 -48
  482. package/src/runtime/streams/session-provider.ts +5 -7
  483. package/src/runtime/streams/session-serial-executor.ts +7 -6
  484. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  485. package/src/runtime/streams/stream-frame-factory.ts +55 -38
  486. package/src/runtime/streams/stream-session-runtime.ts +268 -210
  487. package/src/runtime/workers/index.ts +68 -29
@@ -1,5 +1,8 @@
1
1
  import { createHash } from 'node:crypto';
2
- import type { ZLinkPlacementObjectKind, ZLinkAuthorityKey } from '../locations/internal-location-contracts';
2
+ import type {
3
+ ZLinkPlacementObjectKind,
4
+ ZLinkAuthorityKey
5
+ } from '../locations/internal-location-contracts';
3
6
  import { decodeAuthorityKey } from '../locations/authority-key-codec';
4
7
  import {
5
8
  decodeRelocationEnvelopeV1 as decodeGeneratedRelocationEnvelopeV1,
@@ -103,10 +106,7 @@ export interface ServiceRelocationPublication {
103
106
  }
104
107
 
105
108
  export interface ServiceRelocationAuthorityCodec {
106
- publish(
107
- currentPayload: Uint8Array,
108
- publication: ServiceRelocationPublication
109
- ): Uint8Array;
109
+ publish(currentPayload: Uint8Array, publication: ServiceRelocationPublication): Uint8Array;
110
110
  read(payload: Uint8Array): ServiceRelocationPublication | undefined;
111
111
  clear(currentPayload: Uint8Array, expectedReference: string): Uint8Array;
112
112
  }
@@ -153,12 +153,8 @@ export interface CanonicalRelocationSlot {
153
153
  }
154
154
 
155
155
  /** Deterministic Location authority wrapper for one immutable relocation root. */
156
- export class ServiceRelocationAuthorityPayloadCodec
157
- implements ServiceRelocationAuthorityCodec {
158
- publish(
159
- currentPayload: Uint8Array,
160
- publication: ServiceRelocationPublication
161
- ): Uint8Array {
156
+ export class ServiceRelocationAuthorityPayloadCodec implements ServiceRelocationAuthorityCodec {
157
+ publish(currentPayload: Uint8Array, publication: ServiceRelocationPublication): Uint8Array {
162
158
  if (this.read(currentPayload) !== undefined) {
163
159
  throw new TypeError('Location authority already contains a relocation publication.');
164
160
  }
@@ -173,31 +169,27 @@ implements ServiceRelocationAuthorityCodec {
173
169
  }
174
170
 
175
171
  read(payload: Uint8Array): ServiceRelocationPublication | undefined {
176
- return decodeCanonicalAuthorityPublication(payload)
177
- ?? decodeAuthorityEnvelope(payload)?.publication;
172
+ return (
173
+ decodeCanonicalAuthorityPublication(payload) ?? decodeAuthorityEnvelope(payload)?.publication
174
+ );
178
175
  }
179
176
 
180
177
  clear(currentPayload: Uint8Array, expectedReference: string): Uint8Array {
181
178
  const canonical = decodeCanonicalAuthorityLayout(currentPayload);
182
- const canonicalPublication = canonical === undefined
183
- ? undefined
184
- : decodeCanonicalRelocationSlot(canonical.slot);
179
+ const canonicalPublication =
180
+ canonical === undefined ? undefined : decodeCanonicalRelocationSlot(canonical.slot);
185
181
  if (canonical !== undefined && canonicalPublication?.reference !== undefined) {
186
- if (canonicalPublication.reference !== requireText(
187
- expectedReference,
188
- 'relocation reference'
189
- )) {
182
+ if (
183
+ canonicalPublication.reference !== requireText(expectedReference, 'relocation reference')
184
+ ) {
190
185
  throw new TypeError('Location authority relocation reference changed.');
191
186
  }
192
187
  return replaceCanonicalRelocationSlot(canonical, Buffer.alloc(0));
193
188
  }
194
189
  const current = decodeAuthorityEnvelope(currentPayload);
195
190
  if (
196
- current === undefined
197
- || current.publication.reference !== requireText(
198
- expectedReference,
199
- 'relocation reference'
200
- )
191
+ current === undefined ||
192
+ current.publication.reference !== requireText(expectedReference, 'relocation reference')
201
193
  ) {
202
194
  throw new TypeError('Location authority relocation reference changed.');
203
195
  }
@@ -206,9 +198,7 @@ implements ServiceRelocationAuthorityCodec {
206
198
  }
207
199
 
208
200
  /** Returns the application authority payload hidden by relocation metadata. */
209
- export function serviceRelocationAuthorityApplicationPayload(
210
- payload: Uint8Array
211
- ): Buffer {
201
+ export function serviceRelocationAuthorityApplicationPayload(payload: Uint8Array): Buffer {
212
202
  const canonical = decodeCanonicalAuthorityLayout(payload);
213
203
  if (canonical !== undefined && canonical.slot.byteLength !== 0) {
214
204
  if (decodeCanonicalRelocationSlot(canonical.slot) === undefined) {
@@ -222,14 +212,14 @@ export function serviceRelocationAuthorityApplicationPayload(
222
212
  /** Reads the canonical relocation identity even before its root pointer exists. */
223
213
  export function serviceRelocationAuthoritySlotIdentity(
224
214
  payload: Uint8Array
225
- ): Pick<
226
- ServiceRelocationPublication,
227
- 'aggregateId' | 'aggregateGeneration' | 'applicationVersion'
228
- > | undefined {
215
+ ):
216
+ | Pick<ServiceRelocationPublication, 'aggregateId' | 'aggregateGeneration' | 'applicationVersion'>
217
+ | undefined {
229
218
  const layout = decodeCanonicalAuthorityLayout(payload);
230
- const slot = layout === undefined || layout.slot.byteLength === 0
231
- ? undefined
232
- : decodeCanonicalRelocationSlot(layout.slot);
219
+ const slot =
220
+ layout === undefined || layout.slot.byteLength === 0
221
+ ? undefined
222
+ : decodeCanonicalRelocationSlot(layout.slot);
233
223
  return slot === undefined
234
224
  ? undefined
235
225
  : {
@@ -330,9 +320,7 @@ function decodeCanonicalAuthorityPublication(
330
320
  };
331
321
  }
332
322
 
333
- function decodeCanonicalAuthorityLayout(
334
- payload: Uint8Array
335
- ): CanonicalAuthorityLayout | undefined {
323
+ function decodeCanonicalAuthorityLayout(payload: Uint8Array): CanonicalAuthorityLayout | undefined {
336
324
  try {
337
325
  const bytes = Buffer.from(payload);
338
326
  if (bytes.byteLength < 20 || bytes.byteLength > 1024 * 1024) return undefined;
@@ -404,25 +392,28 @@ export function decodeCanonicalRelocationSlot(
404
392
  const phase = reader.u8();
405
393
  const applicationVersion = reader.i64();
406
394
  const sourceCleanupState = reader.u8();
407
- if (!reader.done
408
- || aggregateGeneration > 0x7fff_ffff_ffff_fffen
409
- || (aggregateGeneration === 0n && phase !== 1)
410
- || (rootAggregateGeneration !== undefined
411
- && aggregateGeneration !== rootAggregateGeneration)
412
- || targetAttemptGeneration > 0x7fff_ffff_ffff_ffffn
413
- || sourceNodeGeneration === 0n
414
- || sourceNodeGeneration > 0x7fff_ffff_ffff_ffffn
415
- || sourceOwnerLeaseGeneration === 0n
416
- || sourceOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
417
- || targetNodeGeneration > 0x7fff_ffff_ffff_ffffn
418
- || targetOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
419
- || coordinatorLeaseGeneration === 0n
420
- || coordinatorLeaseGeneration > 0x7fff_ffff_ffff_ffffn
421
- || coordinatorNodeGeneration === 0n
422
- || coordinatorNodeGeneration > 0x7fff_ffff_ffff_ffffn
423
- || phase < 1 || phase > 9
424
- || applicationVersion < 0n
425
- || sourceCleanupState > 2) return undefined;
395
+ if (
396
+ !reader.done ||
397
+ aggregateGeneration > 0x7fff_ffff_ffff_fffen ||
398
+ (aggregateGeneration === 0n && phase !== 1) ||
399
+ (rootAggregateGeneration !== undefined && aggregateGeneration !== rootAggregateGeneration) ||
400
+ targetAttemptGeneration > 0x7fff_ffff_ffff_ffffn ||
401
+ sourceNodeGeneration === 0n ||
402
+ sourceNodeGeneration > 0x7fff_ffff_ffff_ffffn ||
403
+ sourceOwnerLeaseGeneration === 0n ||
404
+ sourceOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn ||
405
+ targetNodeGeneration > 0x7fff_ffff_ffff_ffffn ||
406
+ targetOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn ||
407
+ coordinatorLeaseGeneration === 0n ||
408
+ coordinatorLeaseGeneration > 0x7fff_ffff_ffff_ffffn ||
409
+ coordinatorNodeGeneration === 0n ||
410
+ coordinatorNodeGeneration > 0x7fff_ffff_ffff_ffffn ||
411
+ phase < 1 ||
412
+ phase > 9 ||
413
+ applicationVersion < 0n ||
414
+ sourceCleanupState > 2
415
+ )
416
+ return undefined;
426
417
  return {
427
418
  aggregateId,
428
419
  aggregateGeneration,
@@ -453,10 +444,7 @@ export function decodeCanonicalRelocationSlot(
453
444
 
454
445
  export function encodeCanonicalRelocationSlot(value: CanonicalRelocationSlot): Buffer {
455
446
  const id = relocationId(canonicalUuid(value.aggregateId, 'aggregate id'));
456
- const aggregateGeneration = nonNegativeBigInt(
457
- value.aggregateGeneration,
458
- 'aggregate generation'
459
- );
447
+ const aggregateGeneration = nonNegativeBigInt(value.aggregateGeneration, 'aggregate generation');
460
448
  const targetAttemptGeneration = nonNegativeBigInt(
461
449
  value.targetAttemptGeneration,
462
450
  'target attempt generation'
@@ -497,23 +485,35 @@ export function encodeCanonicalRelocationSlot(value: CanonicalRelocationSlot): B
497
485
  if (!Number.isInteger(value.phase) || value.phase < 1 || value.phase > 9) {
498
486
  throw new TypeError('Canonical relocation phase is invalid.');
499
487
  }
500
- if (!Number.isInteger(value.sourceCleanupState)
501
- || value.sourceCleanupState < 0
502
- || value.sourceCleanupState > 2) {
488
+ if (
489
+ !Number.isInteger(value.sourceCleanupState) ||
490
+ value.sourceCleanupState < 0 ||
491
+ value.sourceCleanupState > 2
492
+ ) {
503
493
  throw new TypeError('Canonical source cleanup state is invalid.');
504
494
  }
505
495
  return Buffer.concat([
506
- canonicalU64(id.high), canonicalU64(id.low),
507
- canonicalU64(aggregateGeneration), canonicalU64(targetAttemptGeneration),
508
- canonicalText16(value.reference), canonicalU32(value.checksumCrc32c),
509
- canonicalText8(value.sourceNodeRid), canonicalU64(sourceNodeGeneration),
510
- canonicalText8(value.sourceOwnerId), canonicalU64(sourceOwnerLeaseGeneration),
511
- canonicalOptionalText8(value.targetNodeRid), canonicalU64(targetNodeGeneration),
512
- canonicalOptionalText8(value.targetOwnerId), canonicalU64(targetOwnerLeaseGeneration),
513
- canonicalText8(value.coordinatorOwnerId), canonicalU64(coordinatorLeaseGeneration),
514
- canonicalText8(value.coordinatorNodeRid), canonicalU64(coordinatorNodeGeneration),
496
+ canonicalU64(id.high),
497
+ canonicalU64(id.low),
498
+ canonicalU64(aggregateGeneration),
499
+ canonicalU64(targetAttemptGeneration),
500
+ canonicalText16(value.reference),
501
+ canonicalU32(value.checksumCrc32c),
502
+ canonicalText8(value.sourceNodeRid),
503
+ canonicalU64(sourceNodeGeneration),
504
+ canonicalText8(value.sourceOwnerId),
505
+ canonicalU64(sourceOwnerLeaseGeneration),
506
+ canonicalOptionalText8(value.targetNodeRid),
507
+ canonicalU64(targetNodeGeneration),
508
+ canonicalOptionalText8(value.targetOwnerId),
509
+ canonicalU64(targetOwnerLeaseGeneration),
510
+ canonicalText8(value.coordinatorOwnerId),
511
+ canonicalU64(coordinatorLeaseGeneration),
512
+ canonicalText8(value.coordinatorNodeRid),
513
+ canonicalU64(coordinatorNodeGeneration),
515
514
  canonicalOptionalText8(value.coordinatorExpectedStoreVersion),
516
- Buffer.of(value.phase), canonicalI64(value.applicationVersion),
515
+ Buffer.of(value.phase),
516
+ canonicalI64(value.applicationVersion),
517
517
  Buffer.of(value.sourceCleanupState)
518
518
  ]);
519
519
  }
@@ -551,10 +551,8 @@ function encodeCanonicalRelocationPublicationSlot(
551
551
  coordinatorLeaseGeneration:
552
552
  publication.coordinatorLeaseGeneration ?? layout.ownerLeaseGeneration,
553
553
  coordinatorNodeRid: publication.coordinatorNodeRid ?? nodeRid,
554
- coordinatorNodeGeneration:
555
- publication.coordinatorNodeGeneration ?? layout.nodeGeneration,
556
- coordinatorExpectedStoreVersion:
557
- publication.coordinatorExpectedStoreVersion ?? '',
554
+ coordinatorNodeGeneration: publication.coordinatorNodeGeneration ?? layout.nodeGeneration,
555
+ coordinatorExpectedStoreVersion: publication.coordinatorExpectedStoreVersion ?? '',
558
556
  phase: publication.canonicalPhase ?? 8,
559
557
  applicationVersion,
560
558
  sourceCleanupState: publication.canonicalSourceCleanupState ?? 0
@@ -574,8 +572,11 @@ function replaceCanonicalRelocationSlot(
574
572
  layout.body.subarray(layout.slotEnd)
575
573
  ]);
576
574
  const envelope = Buffer.concat([
577
- Buffer.from('ZLAU'), Buffer.of(1), canonicalU16(layout.flags),
578
- canonicalU32(body.byteLength), body
575
+ Buffer.from('ZLAU'),
576
+ Buffer.of(1),
577
+ canonicalU16(layout.flags),
578
+ canonicalU32(body.byteLength),
579
+ body
579
580
  ]);
580
581
  const result = Buffer.concat([envelope, canonicalU32(crc32c(envelope))]);
581
582
  if (result.byteLength > 1024 * 1024) {
@@ -601,14 +602,12 @@ export function encodeServiceRelocationEnvelope(
601
602
  applicationVersion: bigint
602
603
  ): Buffer {
603
604
  const aggregate = relocationId(canonicalUuid(envelope.aggregateId, 'aggregate id'));
604
- const encodedApplicationVersion = nonNegativeBigInt(
605
- applicationVersion,
606
- 'application version'
607
- );
605
+ const encodedApplicationVersion = nonNegativeBigInt(applicationVersion, 'application version');
608
606
  const participants = canonicalParticipants(envelope.participants);
609
- const root = participants.find(value => value.rootSpotId !== undefined)
610
- ?? participants.find(value => value.objectKind !== 'actor')
611
- ?? participants[0]!;
607
+ const root =
608
+ participants.find((value) => value.rootSpotId !== undefined) ??
609
+ participants.find((value) => value.objectKind !== 'actor') ??
610
+ participants[0]!;
612
611
  const rootObjectKind = root.rootObjectKind ?? root.objectKind;
613
612
  if (rootObjectKind === 'actor' && participants.length !== 1) {
614
613
  throw new TypeError('Standalone Actor relocation requires one participant.');
@@ -624,23 +623,44 @@ export function encodeServiceRelocationEnvelope(
624
623
  payload: Buffer.from(participant.applicationState)
625
624
  };
626
625
  });
627
- const saved = participants.flatMap((participant, index) => participant.queuedMessages.map(message => ({
628
- participantId: BigInt(index + 1),
629
- order: positiveBigInt(message.sequence, 'queue sequence'),
630
- frozenRecord: Buffer.from(message.payload)
631
- }))).sort(compareParticipantOrder);
632
- if (saved.some((value, index) => index > 0
633
- && compareParticipantOrder(saved[index - 1]!, value) === 0)) {
626
+ const saved = participants
627
+ .flatMap((participant, index) =>
628
+ participant.queuedMessages.map((message) => ({
629
+ participantId: BigInt(index + 1),
630
+ order: positiveBigInt(message.sequence, 'queue sequence'),
631
+ frozenRecord: Buffer.from(message.payload)
632
+ }))
633
+ )
634
+ .sort(compareParticipantOrder);
635
+ if (
636
+ saved.some(
637
+ (value, index) => index > 0 && compareParticipantOrder(saved[index - 1]!, value) === 0
638
+ )
639
+ ) {
634
640
  throw new TypeError('Relocation queue sequences must be unique per participant.');
635
641
  }
636
- const timers = participants.flatMap((participant, index) => participant.timers.map(timer => ({
637
- participantId: BigInt(index + 1), timer
638
- }))).sort((a, b) => a.participantId === b.participantId
639
- ? Buffer.compare(Buffer.from(a.timer.timerId), Buffer.from(b.timer.timerId))
640
- : a.participantId < b.participantId ? -1 : 1);
641
- if (timers.some((value, index) => index > 0
642
- && timers[index - 1]!.participantId === value.participantId
643
- && timers[index - 1]!.timer.timerId === value.timer.timerId)) {
642
+ const timers = participants
643
+ .flatMap((participant, index) =>
644
+ participant.timers.map((timer) => ({
645
+ participantId: BigInt(index + 1),
646
+ timer
647
+ }))
648
+ )
649
+ .sort((a, b) =>
650
+ a.participantId === b.participantId
651
+ ? Buffer.compare(Buffer.from(a.timer.timerId), Buffer.from(b.timer.timerId))
652
+ : a.participantId < b.participantId
653
+ ? -1
654
+ : 1
655
+ );
656
+ if (
657
+ timers.some(
658
+ (value, index) =>
659
+ index > 0 &&
660
+ timers[index - 1]!.participantId === value.participantId &&
661
+ timers[index - 1]!.timer.timerId === value.timer.timerId
662
+ )
663
+ ) {
644
664
  throw new TypeError('Relocation timer ids must be unique per participant.');
645
665
  }
646
666
  const nextOrder = new Map<bigint, bigint>();
@@ -648,43 +668,65 @@ export function encodeServiceRelocationEnvelope(
648
668
  const current = nextOrder.get(value.participantId) ?? 0n;
649
669
  if (value.order > current) nextOrder.set(value.participantId, value.order);
650
670
  }
651
- const pending = timers.flatMap(({ participantId, timer }) => timer.pendingTicks.map(tick => {
652
- const current = nextOrder.get(participantId) ?? 0n;
653
- const order = tick.order === undefined
654
- ? current + 1n
655
- : positiveBigInt(tick.order, 'pending timer order');
656
- if (order > current) nextOrder.set(participantId, order);
657
- return { participantId, order, timerName: timer.timerId, tick };
658
- })).sort(compareParticipantOrder);
659
- return Buffer.from(encodeGeneratedRelocationEnvelopeV1({
660
- relocationHigh: aggregate.high,
661
- relocationLow: aggregate.low,
662
- object: toGeneratedRelocationObject(root, rootObjectKind),
663
- applicationVersion: encodedApplicationVersion,
664
- applicationStates,
665
- savedWork: saved,
666
- timerRegistrations: timers.map(({ participantId, timer }) => ({
667
- participantId,
668
- name: timer.timerId,
669
- handlerType: timer.handlerType,
670
- periodMilliseconds: BigInt(positiveInteger(timer.intervalMs, 'timer interval')),
671
- overrunPolicy: timerPolicy(timer.overrunPolicy),
672
- maxCatchUpTicks: BigInt(positiveInteger(timer.maxCatchUpTicks, 'timer catch-up limit')),
673
- stopOnUnhandledException: requireBoolean(timer.stopOnUnhandledException, 'timer stop-on-error flag'),
674
- lastCompletedDeliveryIndex: nonNegativeBigInt(timer.deliveryIndex, 'timer delivery index'),
675
- lastCompletedScheduledIndex: nonNegativeBigInt(timer.lastScheduledIndex, 'timer scheduled index'),
676
- nextScheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(timer.dueAtUnixMs, 'timer due time')
677
- })),
678
- pendingTimerTicks: pending.map(value => ({
679
- participantId: value.participantId,
680
- order: value.order,
681
- timerName: value.timerName,
682
- deliveryIndex: nonNegativeBigInt(value.tick.deliveryIndex, 'pending timer delivery index'),
683
- scheduledIndex: nonNegativeBigInt(value.tick.scheduledIndex, 'pending timer scheduled index'),
684
- scheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(value.tick.scheduledAtUnixMs, 'pending timer scheduled time'),
685
- skippedTicks: nonNegativeBigInt(value.tick.skippedTicks, 'pending timer skipped ticks')
686
- }))
687
- }));
671
+ const pending = timers
672
+ .flatMap(({ participantId, timer }) =>
673
+ timer.pendingTicks.map((tick) => {
674
+ const current = nextOrder.get(participantId) ?? 0n;
675
+ const order =
676
+ tick.order === undefined
677
+ ? current + 1n
678
+ : positiveBigInt(tick.order, 'pending timer order');
679
+ if (order > current) nextOrder.set(participantId, order);
680
+ return { participantId, order, timerName: timer.timerId, tick };
681
+ })
682
+ )
683
+ .sort(compareParticipantOrder);
684
+ return Buffer.from(
685
+ encodeGeneratedRelocationEnvelopeV1({
686
+ relocationHigh: aggregate.high,
687
+ relocationLow: aggregate.low,
688
+ object: toGeneratedRelocationObject(root, rootObjectKind),
689
+ applicationVersion: encodedApplicationVersion,
690
+ applicationStates,
691
+ savedWork: saved,
692
+ timerRegistrations: timers.map(({ participantId, timer }) => ({
693
+ participantId,
694
+ name: timer.timerId,
695
+ handlerType: timer.handlerType,
696
+ periodMilliseconds: BigInt(positiveInteger(timer.intervalMs, 'timer interval')),
697
+ overrunPolicy: timerPolicy(timer.overrunPolicy),
698
+ maxCatchUpTicks: BigInt(positiveInteger(timer.maxCatchUpTicks, 'timer catch-up limit')),
699
+ stopOnUnhandledException: requireBoolean(
700
+ timer.stopOnUnhandledException,
701
+ 'timer stop-on-error flag'
702
+ ),
703
+ lastCompletedDeliveryIndex: nonNegativeBigInt(timer.deliveryIndex, 'timer delivery index'),
704
+ lastCompletedScheduledIndex: nonNegativeBigInt(
705
+ timer.lastScheduledIndex,
706
+ 'timer scheduled index'
707
+ ),
708
+ nextScheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(
709
+ timer.dueAtUnixMs,
710
+ 'timer due time'
711
+ )
712
+ })),
713
+ pendingTimerTicks: pending.map((value) => ({
714
+ participantId: value.participantId,
715
+ order: value.order,
716
+ timerName: value.timerName,
717
+ deliveryIndex: nonNegativeBigInt(value.tick.deliveryIndex, 'pending timer delivery index'),
718
+ scheduledIndex: nonNegativeBigInt(
719
+ value.tick.scheduledIndex,
720
+ 'pending timer scheduled index'
721
+ ),
722
+ scheduledAtUnixMilliseconds: nonNegativeUnixMilliseconds(
723
+ value.tick.scheduledAtUnixMs,
724
+ 'pending timer scheduled time'
725
+ ),
726
+ skippedTicks: nonNegativeBigInt(value.tick.skippedTicks, 'pending timer skipped ticks')
727
+ }))
728
+ })
729
+ );
688
730
  }
689
731
 
690
732
  export function decodeServiceRelocationEnvelope(
@@ -713,7 +755,7 @@ export function decodeServiceRelocationEnvelope(
713
755
  }
714
756
  return wireParticipant(state.participantId, state.hasState, Buffer.from(state.payload));
715
757
  });
716
- const byId = new Map(participants.map(value => [value.participantId!, value]));
758
+ const byId = new Map(participants.map((value) => [value.participantId!, value]));
717
759
  for (const work of generated.savedWork) {
718
760
  byId.get(work.participantId)!.queuedMessages.push({
719
761
  sequence: work.order,
@@ -736,7 +778,9 @@ export function decodeServiceRelocationEnvelope(
736
778
  });
737
779
  }
738
780
  for (const tick of generated.pendingTimerTicks) {
739
- const timer = byId.get(tick.participantId)!.timers.find(value => value.timerId === tick.timerName)!;
781
+ const timer = byId
782
+ .get(tick.participantId)!
783
+ .timers.find((value) => value.timerId === tick.timerName)!;
740
784
  (timer.pendingTicks as ServiceRelocationPendingTimerTick[]).push({
741
785
  order: tick.order,
742
786
  deliveryIndex: tick.deliveryIndex,
@@ -751,9 +795,9 @@ export function decodeServiceRelocationEnvelope(
751
795
  aggregateId,
752
796
  aggregateGeneration,
753
797
  applicationVersion: generated.applicationVersion,
754
- participants: participants.map(value => value === rootParticipant
755
- ? { ...value, ...rootProjection }
756
- : value),
798
+ participants: participants.map((value) =>
799
+ value === rootParticipant ? { ...value, ...rootProjection } : value
800
+ ),
757
801
  memberships: []
758
802
  };
759
803
  }
@@ -769,8 +813,7 @@ function toGeneratedRelocationObject(
769
813
  objectKind: 'actor',
770
814
  actorId: objectId,
771
815
  objectGeneration,
772
- expectedAuthorityOwnerGeneration:
773
- root.rootOwnerGeneration ?? root.authorityOwnerGeneration
816
+ expectedAuthorityOwnerGeneration: root.rootOwnerGeneration ?? root.authorityOwnerGeneration
774
817
  };
775
818
  }
776
819
  if (objectKind === 'user_spot') {
@@ -778,8 +821,7 @@ function toGeneratedRelocationObject(
778
821
  objectKind: 'userSpot',
779
822
  spotId: objectId,
780
823
  objectGeneration,
781
- expectedAuthorityOwnerGeneration:
782
- root.rootOwnerGeneration ?? root.authorityOwnerGeneration
824
+ expectedAuthorityOwnerGeneration: root.rootOwnerGeneration ?? root.authorityOwnerGeneration
783
825
  };
784
826
  }
785
827
  return {
@@ -794,8 +836,7 @@ function fromGeneratedRelocationObject(
794
836
  object: GeneratedRelocationObjectIdentity
795
837
  ): Pick<
796
838
  ServiceRelocationParticipant,
797
- 'rootSpotId' | 'rootSpotGeneration' | 'rootOwnerGeneration'
798
- | 'rootObjectKind' | 'rootStableType'
839
+ 'rootSpotId' | 'rootSpotGeneration' | 'rootOwnerGeneration' | 'rootObjectKind' | 'rootStableType'
799
840
  > {
800
841
  if (object.objectKind === 'actor') {
801
842
  return {
@@ -821,10 +862,15 @@ function fromGeneratedRelocationObject(
821
862
  };
822
863
  }
823
864
 
824
- function canonicalParticipants(values: readonly ServiceRelocationParticipant[]): readonly ServiceRelocationParticipant[] {
825
- if (values.length === 0) throw new TypeError('Relocation participant count is outside its bound.');
826
- const participants = [...values].sort((a, b) => Buffer.compare(Buffer.from(a.key), Buffer.from(b.key)));
827
- if (new Set(participants.map(value => value.key)).size !== participants.length) {
865
+ function canonicalParticipants(
866
+ values: readonly ServiceRelocationParticipant[]
867
+ ): readonly ServiceRelocationParticipant[] {
868
+ if (values.length === 0)
869
+ throw new TypeError('Relocation participant count is outside its bound.');
870
+ const participants = [...values].sort((a, b) =>
871
+ Buffer.compare(Buffer.from(a.key), Buffer.from(b.key))
872
+ );
873
+ if (new Set(participants.map((value) => value.key)).size !== participants.length) {
828
874
  throw new TypeError('Relocation participants must have unique keys.');
829
875
  }
830
876
  return participants;
@@ -835,7 +881,9 @@ function authorityGlobalId(key: string): string {
835
881
  return decodeAuthorityKey({ value: key } as ZLinkAuthorityKey).globalId;
836
882
  } catch {
837
883
  const marker = key.indexOf(':');
838
- return marker < 0 ? requireText(key, 'participant key') : requireText(key.slice(marker + 1), 'participant key');
884
+ return marker < 0
885
+ ? requireText(key, 'participant key')
886
+ : requireText(key.slice(marker + 1), 'participant key');
839
887
  }
840
888
  }
841
889
 
@@ -850,10 +898,18 @@ function uuid(high: bigint, low: bigint): string | undefined {
850
898
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
851
899
  }
852
900
 
853
- function compareParticipantOrder<T extends { readonly participantId: bigint; readonly order: bigint }>(a: T, b: T): number {
901
+ function compareParticipantOrder<
902
+ T extends { readonly participantId: bigint; readonly order: bigint }
903
+ >(a: T, b: T): number {
854
904
  return a.participantId === b.participantId
855
- ? a.order < b.order ? -1 : a.order > b.order ? 1 : 0
856
- : a.participantId < b.participantId ? -1 : 1;
905
+ ? a.order < b.order
906
+ ? -1
907
+ : a.order > b.order
908
+ ? 1
909
+ : 0
910
+ : a.participantId < b.participantId
911
+ ? -1
912
+ : 1;
857
913
  }
858
914
 
859
915
  function timerPolicy(value: string): 1 | 2 | 3 {
@@ -877,11 +933,16 @@ function nonNegativeUnixMilliseconds(value: number, label: string): bigint {
877
933
  }
878
934
 
879
935
  function unixMilliseconds(value: bigint): number {
880
- if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new TypeError('Unix milliseconds exceed Node safe integer range.');
936
+ if (value > BigInt(Number.MAX_SAFE_INTEGER))
937
+ throw new TypeError('Unix milliseconds exceed Node safe integer range.');
881
938
  return Number(value);
882
939
  }
883
940
 
884
- function wireParticipant(participantId: bigint, applicationStatePresent: boolean, applicationState: Buffer): ServiceRelocationParticipant & {
941
+ function wireParticipant(
942
+ participantId: bigint,
943
+ applicationStatePresent: boolean,
944
+ applicationState: Buffer
945
+ ): ServiceRelocationParticipant & {
885
946
  queuedMessages: ServiceRelocationQueuedMessage[];
886
947
  timers: ServiceRelocationTimer[];
887
948
  } {
@@ -911,27 +972,34 @@ export function inventoryDigest(
911
972
  participants: readonly ServiceRelocationParticipant[],
912
973
  memberships: readonly ServiceRelocationMembership[] = []
913
974
  ): string {
914
- const identities = participants.map(participant => ({
915
- key: requireText(participant.key, 'participant key'),
916
- objectKind: objectKind(participant.objectKind),
917
- stableType: requireText(participant.stableType, 'participant stable type'),
918
- objectGeneration: positiveBigInt(
919
- participant.objectGeneration,
920
- 'object generation'
921
- ).toString(),
922
- authorityOwnerGeneration: positiveBigInt(
923
- participant.authorityOwnerGeneration,
924
- 'authority owner generation'
925
- ).toString()
926
- })).sort((left, right) => left.key.localeCompare(right.key));
975
+ const identities = participants
976
+ .map((participant) => ({
977
+ key: requireText(participant.key, 'participant key'),
978
+ objectKind: objectKind(participant.objectKind),
979
+ stableType: requireText(participant.stableType, 'participant stable type'),
980
+ objectGeneration: positiveBigInt(
981
+ participant.objectGeneration,
982
+ 'object generation'
983
+ ).toString(),
984
+ authorityOwnerGeneration: positiveBigInt(
985
+ participant.authorityOwnerGeneration,
986
+ 'authority owner generation'
987
+ ).toString()
988
+ }))
989
+ .sort((left, right) => left.key.localeCompare(right.key));
927
990
  if (new Set(identities.map(({ key }) => key)).size !== identities.length) {
928
991
  throw new TypeError('Relocation participants must have unique keys.');
929
992
  }
930
993
  const canonicalMemberships = encodeMemberships(memberships, participants);
931
- return createHash('sha256').update(JSON.stringify({
932
- participants: identities,
933
- memberships: canonicalMemberships
934
- }), 'utf8').digest('hex');
994
+ return createHash('sha256')
995
+ .update(
996
+ JSON.stringify({
997
+ participants: identities,
998
+ memberships: canonicalMemberships
999
+ }),
1000
+ 'utf8'
1001
+ )
1002
+ .digest('hex');
935
1003
  }
936
1004
 
937
1005
  function encodeAuthorityEnvelope(
@@ -954,8 +1022,8 @@ function encodeAuthorityEnvelope(
954
1022
  'target owner lease generation'
955
1023
  );
956
1024
  if (
957
- aggregateGeneration > 0x7fff_ffff_ffff_ffffn
958
- || targetOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
1025
+ aggregateGeneration > 0x7fff_ffff_ffff_ffffn ||
1026
+ targetOwnerLeaseGeneration > 0x7fff_ffff_ffff_ffffn
959
1027
  ) {
960
1028
  throw new TypeError('Relocation publication generations must fit signed 64-bit storage.');
961
1029
  }
@@ -997,11 +1065,11 @@ function decodeAuthorityEnvelope(
997
1065
  const targetOwnerLeaseGeneration = reader.i64();
998
1066
  const base = reader.bytes32();
999
1067
  if (
1000
- !reader.done
1001
- || aggregateGeneration === 0n
1002
- || aggregateGeneration > 0x7fff_ffff_ffff_ffffn
1003
- || inventoryDigestBytes.byteLength !== 32
1004
- || targetOwnerLeaseGeneration <= 0n
1068
+ !reader.done ||
1069
+ aggregateGeneration === 0n ||
1070
+ aggregateGeneration > 0x7fff_ffff_ffff_ffffn ||
1071
+ inventoryDigestBytes.byteLength !== 32 ||
1072
+ targetOwnerLeaseGeneration <= 0n
1005
1073
  ) {
1006
1074
  return undefined;
1007
1075
  }
@@ -1027,25 +1095,24 @@ function encodeMemberships(
1027
1095
  participants: readonly ServiceRelocationParticipant[]
1028
1096
  ) {
1029
1097
  validateMemberships(memberships, participants);
1030
- return memberships.map(membership => ({
1031
- actorKey: requireText(membership.actorKey, 'membership actor key'),
1032
- spotKey: requireText(membership.spotKey, 'membership spot key'),
1033
- spotObjectGeneration: positiveBigInt(
1034
- membership.spotObjectGeneration,
1035
- 'membership Spot generation'
1036
- ).toString(),
1037
- membershipEpoch: positiveBigInt(
1038
- membership.membershipEpoch,
1039
- 'membership epoch'
1040
- ).toString()
1041
- })).sort((left, right) => left.actorKey.localeCompare(right.actorKey));
1098
+ return memberships
1099
+ .map((membership) => ({
1100
+ actorKey: requireText(membership.actorKey, 'membership actor key'),
1101
+ spotKey: requireText(membership.spotKey, 'membership spot key'),
1102
+ spotObjectGeneration: positiveBigInt(
1103
+ membership.spotObjectGeneration,
1104
+ 'membership Spot generation'
1105
+ ).toString(),
1106
+ membershipEpoch: positiveBigInt(membership.membershipEpoch, 'membership epoch').toString()
1107
+ }))
1108
+ .sort((left, right) => left.actorKey.localeCompare(right.actorKey));
1042
1109
  }
1043
1110
 
1044
1111
  function validateMemberships(
1045
1112
  memberships: readonly ServiceRelocationMembership[],
1046
1113
  participants: readonly ServiceRelocationParticipant[]
1047
1114
  ): void {
1048
- const byKey = new Map(participants.map(participant => [participant.key, participant]));
1115
+ const byKey = new Map(participants.map((participant) => [participant.key, participant]));
1049
1116
  const actorKeys = new Set<string>();
1050
1117
  for (const membership of memberships) {
1051
1118
  const actorKey = requireText(membership.actorKey, 'membership actor key');
@@ -1059,14 +1126,10 @@ function validateMemberships(
1059
1126
  }
1060
1127
  const spot = byKey.get(requireText(membership.spotKey, 'membership spot key'));
1061
1128
  if (
1062
- spot !== undefined
1063
- && (
1064
- spot.objectKind !== 'user_spot'
1065
- || spot.objectGeneration !== positiveBigInt(
1066
- membership.spotObjectGeneration,
1067
- 'membership Spot generation'
1068
- )
1069
- )
1129
+ spot !== undefined &&
1130
+ (spot.objectKind !== 'user_spot' ||
1131
+ spot.objectGeneration !==
1132
+ positiveBigInt(membership.spotObjectGeneration, 'membership Spot generation'))
1070
1133
  ) {
1071
1134
  throw new TypeError('Relocation membership Spot fence does not match its participant.');
1072
1135
  }
@@ -1074,7 +1137,6 @@ function validateMemberships(
1074
1137
  }
1075
1138
  }
1076
1139
 
1077
-
1078
1140
  const CRC32C_TABLE = Uint32Array.from({ length: 256 }, (_, value) => {
1079
1141
  let crc = value;
1080
1142
  for (let bit = 0; bit < 8; bit++) {
@@ -1100,8 +1162,10 @@ function requireText(value: unknown, label: string): string {
1100
1162
 
1101
1163
  function canonicalUuid(value: unknown, label: string): string {
1102
1164
  const text = requireText(value, label);
1103
- if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(text)
1104
- || /^0{8}-0{4}-0{4}-0{4}-0{12}$/u.test(text)) {
1165
+ if (
1166
+ !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(text) ||
1167
+ /^0{8}-0{4}-0{4}-0{4}-0{12}$/u.test(text)
1168
+ ) {
1105
1169
  throw new TypeError(`${label} must be a lowercase non-zero 128-bit identity.`);
1106
1170
  }
1107
1171
  return text;
@@ -1152,9 +1216,14 @@ function i64le(value: bigint): Buffer {
1152
1216
  function dotnetGuidBytes(value: string): Buffer {
1153
1217
  const canonical = Buffer.from(value.replaceAll('-', ''), 'hex');
1154
1218
  return Buffer.from([
1155
- canonical[3]!, canonical[2]!, canonical[1]!, canonical[0]!,
1156
- canonical[5]!, canonical[4]!,
1157
- canonical[7]!, canonical[6]!,
1219
+ canonical[3]!,
1220
+ canonical[2]!,
1221
+ canonical[1]!,
1222
+ canonical[0]!,
1223
+ canonical[5]!,
1224
+ canonical[4]!,
1225
+ canonical[7]!,
1226
+ canonical[6]!,
1158
1227
  ...canonical.subarray(8)
1159
1228
  ]);
1160
1229
  }
@@ -1163,13 +1232,20 @@ function canonicalUuidFromDotnetBytes(value: Uint8Array): string {
1163
1232
  const bytes = Buffer.from(value);
1164
1233
  if (bytes.byteLength !== 16) throw new TypeError('Relocation aggregate id is invalid.');
1165
1234
  const canonical = Buffer.from([
1166
- bytes[3]!, bytes[2]!, bytes[1]!, bytes[0]!,
1167
- bytes[5]!, bytes[4]!,
1168
- bytes[7]!, bytes[6]!,
1235
+ bytes[3]!,
1236
+ bytes[2]!,
1237
+ bytes[1]!,
1238
+ bytes[0]!,
1239
+ bytes[5]!,
1240
+ bytes[4]!,
1241
+ bytes[7]!,
1242
+ bytes[6]!,
1169
1243
  ...bytes.subarray(8)
1170
1244
  ]).toString('hex');
1171
- return `${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}`
1172
- + `-${canonical.slice(16, 20)}-${canonical.slice(20)}`;
1245
+ return (
1246
+ `${canonical.slice(0, 8)}-${canonical.slice(8, 12)}-${canonical.slice(12, 16)}` +
1247
+ `-${canonical.slice(16, 20)}-${canonical.slice(20)}`
1248
+ );
1173
1249
  }
1174
1250
 
1175
1251
  class CanonicalReader {