@zlink-systems/framework 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkMessage.js +5 -5
  3. package/dist/contracts/Configuration/CodecContentType.js +5 -7
  4. package/dist/contracts/Configuration/DiagnosticsValidation.js +1 -6
  5. package/dist/contracts/Configuration/EndpointNotation.js +4 -8
  6. package/dist/contracts/Configuration/Registration.js +14 -11
  7. package/dist/contracts/Configuration/RegistrationBuilders.js +32 -25
  8. package/dist/contracts/Configuration/RegistrationNormalizers.js +25 -26
  9. package/dist/contracts/Configuration/RegistrationValidators.js +36 -38
  10. package/dist/contracts/Configuration/SendTimeoutValidation.js +4 -4
  11. package/dist/contracts/Configuration/TimerRegistrationValidator.js +7 -7
  12. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -0
  13. package/dist/contracts/Handlers/JsonContract.js +23 -11
  14. package/dist/contracts/Spots/SpotKind.js +16 -8
  15. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -1
  16. package/dist/location-store-integration.js +16 -16
  17. package/dist/nest-integration.js +17 -11
  18. package/dist/runtime/abort.js +9 -5
  19. package/dist/runtime/actors/actor-authority-payload-codec.js +12 -16
  20. package/dist/runtime/actors/actor-authority-publication.js +18 -17
  21. package/dist/runtime/actors/actor-client.js +83 -63
  22. package/dist/runtime/actors/actor-context.js +28 -22
  23. package/dist/runtime/actors/actor-creation.js +4 -3
  24. package/dist/runtime/actors/actor-handoff.js +89 -92
  25. package/dist/runtime/actors/actor-join-deferred-scope.d.ts +0 -1
  26. package/dist/runtime/actors/actor-join-deferred-scope.js +0 -18
  27. package/dist/runtime/actors/actor-local-native-join.js +18 -19
  28. package/dist/runtime/actors/actor-mailbox.js +1 -1
  29. package/dist/runtime/actors/actor-message-follow-context.js +24 -21
  30. package/dist/runtime/actors/actor-packet-relay-wire.js +1 -3
  31. package/dist/runtime/actors/actor-remote-joiner.js +20 -17
  32. package/dist/runtime/actors/actor-remote-wire.js +6 -7
  33. package/dist/runtime/actors/actor-runtime-state.js +87 -81
  34. package/dist/runtime/actors/actor-transfer-registry.js +3 -5
  35. package/dist/runtime/actors/bound-session-wire.js +14 -9
  36. package/dist/runtime/actors/deferred-join-accepted-journal.js +160 -130
  37. package/dist/runtime/actors/index.js +2 -5
  38. package/dist/runtime/actors/post-commit-actor-binder.js +3 -6
  39. package/dist/runtime/actors/post-commit-actor-location.js +1 -1
  40. package/dist/runtime/actors/spot-actor-dispatch.js +5 -5
  41. package/dist/runtime/actors/transferred-actor-rollback.js +4 -4
  42. package/dist/runtime/admission.js +2 -6
  43. package/dist/runtime/application-jobs/application-ingress-record-owner.js +2 -6
  44. package/dist/runtime/application-jobs/receive-flow-controller.js +11 -12
  45. package/dist/runtime/backend/contracts/index.d.ts +1 -0
  46. package/dist/runtime/backend/mesh-completion-table.js +1 -3
  47. package/dist/runtime/backend/mesh-dispatch-pump.js +12 -16
  48. package/dist/runtime/backend/node/node-backend-adapter-factory.js +1 -3
  49. package/dist/runtime/backend/node/node-backend-adapter-support.js +26 -17
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +4 -3
  51. package/dist/runtime/backend/node/node-raw-binding-port.js +7 -6
  52. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +3 -0
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.js +134 -118
  54. package/dist/runtime/backend/node/node-socket-backend-adapter.js +12 -13
  55. package/dist/runtime/backend/runtime-message.js +3 -3
  56. package/dist/runtime/backend/runtime-values.d.ts +2 -2
  57. package/dist/runtime/backend/runtime-values.js +4 -5
  58. package/dist/runtime/channels/channel-clients.js +27 -24
  59. package/dist/runtime/channels/channel-dispatch-pipeline.js +12 -20
  60. package/dist/runtime/channels/channel-dispatch-services.js +7 -4
  61. package/dist/runtime/channels/channel-dispatchers.js +9 -9
  62. package/dist/runtime/channels/channel-envelope-inspection.js +16 -13
  63. package/dist/runtime/channels/channel-envelope.js +83 -47
  64. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  65. package/dist/runtime/channels/channel-receive-loops.js +20 -22
  66. package/dist/runtime/channels/channel-receive-task-tracker.js +1 -1
  67. package/dist/runtime/channels/channel-runtime-lifecycle.js +61 -56
  68. package/dist/runtime/channels/channel-runtime-manager.js +18 -9
  69. package/dist/runtime/channels/channel-socket-registry.js +126 -123
  70. package/dist/runtime/channels/channel-transports.js +46 -42
  71. package/dist/runtime/channels/client-server-location-runtime.js +32 -40
  72. package/dist/runtime/channels/client-server-service-wire.js +29 -22
  73. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -0
  74. package/dist/runtime/channels/dispatch-error-reporter.js +9 -39
  75. package/dist/runtime/channels/fanout-location-runtime.js +34 -47
  76. package/dist/runtime/channels/fanout-service-wire.js +3 -5
  77. package/dist/runtime/channels/local-spot-route-transport.js +7 -1
  78. package/dist/runtime/channels/route-member-snapshot.js +3 -3
  79. package/dist/runtime/channels/source-spot-router.js +6 -2
  80. package/dist/runtime/channels/spot-route-bridge-transport.js +5 -2
  81. package/dist/runtime/channels/spot-route-dispatch-strategy.js +2 -2
  82. package/dist/runtime/channels/spot-route-target-resolver.js +6 -6
  83. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +6 -0
  84. package/dist/runtime/diagnostics/dispatch-error-details.js +55 -0
  85. package/dist/runtime/diagnostics/flow-context.d.ts +2 -1
  86. package/dist/runtime/diagnostics/flow-context.js +2 -2
  87. package/dist/runtime/diagnostics/index.js +38 -10
  88. package/dist/runtime/diagnostics/message-flow.js +58 -42
  89. package/dist/runtime/diagnostics/runtime-metrics.js +18 -9
  90. package/dist/runtime/diagnostics/runtime-observation-queue.js +8 -10
  91. package/dist/runtime/diagnostics/topology-runtime-projections.js +17 -10
  92. package/dist/runtime/execution/index.js +7 -6
  93. package/dist/runtime/execution/serial-execution-queue.js +12 -18
  94. package/dist/runtime/execution/state-lane.js +2 -2
  95. package/dist/runtime/foundation/actor-join-recovery-codec.js +31 -27
  96. package/dist/runtime/foundation/event-loop-resources.js +4 -4
  97. package/dist/runtime/foundation/message-follow-suppression-registry.js +4 -4
  98. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +4 -2
  99. package/dist/runtime/foundation/raw-service-mesh-runtime.js +169 -144
  100. package/dist/runtime/foundation/route-mesh-connection-policy.js +4 -4
  101. package/dist/runtime/foundation/runtime-state-projections.js +22 -11
  102. package/dist/runtime/foundation/service-authority-payload-codec.js +13 -15
  103. package/dist/runtime/foundation/service-discovery-registry.js +35 -33
  104. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +20 -22
  105. package/dist/runtime/foundation/service-liveness-registry.js +16 -12
  106. package/dist/runtime/foundation/service-maintenance-runtime.js +2 -4
  107. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +24 -24
  108. package/dist/runtime/foundation/service-relocation-object-owner.js +6 -6
  109. package/dist/runtime/foundation/service-relocation-runtime.js +137 -94
  110. package/dist/runtime/foundation/service-runtime-contracts.js +5 -5
  111. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +1 -0
  112. package/dist/runtime/foundation/service-stateful-registry.js +24 -23
  113. package/dist/runtime/foundation/service-stateful-runtime.d.ts +4 -0
  114. package/dist/runtime/foundation/service-stateful-runtime.js +461 -439
  115. package/dist/runtime/foundation/service-stateful-wire-codec.js +95 -98
  116. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -0
  117. package/dist/runtime/foundation/service-topology-registry.js +105 -96
  118. package/dist/runtime/foundation/service-weighted-selection.js +6 -11
  119. package/dist/runtime/foundation/service-wire-binary-primitives.js +5 -6
  120. package/dist/runtime/foundation/service-wire-m6a-codec.js +46 -35
  121. package/dist/runtime/framework-errors-internal.js +7 -10
  122. package/dist/runtime/handlers/handler-instance-scope.js +4 -5
  123. package/dist/runtime/handlers/index.js +3 -1
  124. package/dist/runtime/host/actor-packet-relay.js +74 -70
  125. package/dist/runtime/host/actor-placement-coordinator.js +29 -31
  126. package/dist/runtime/host/actor-runtime-options-factory.js +12 -14
  127. package/dist/runtime/host/actor-transfer-authority-runtime.js +7 -9
  128. package/dist/runtime/host/actor-transfer-runtime.js +176 -153
  129. package/dist/runtime/host/application-job-queue.js +18 -22
  130. package/dist/runtime/host/bound-session-relay.js +3 -1
  131. package/dist/runtime/host/channel-runtime-options-factory.js +31 -14
  132. package/dist/runtime/host/host-capacity-status.js +8 -4
  133. package/dist/runtime/host/index.js +245 -228
  134. package/dist/runtime/host/instance-activation-authority.js +93 -96
  135. package/dist/runtime/host/location-runtime-owner.js +16 -14
  136. package/dist/runtime/host/mesh-router-resolver.js +11 -13
  137. package/dist/runtime/host/relocation-direct-transfer.js +10 -9
  138. package/dist/runtime/host/remote-actor-join-receiver.js +20 -15
  139. package/dist/runtime/host/remote-actor-packet-target-store.js +18 -22
  140. package/dist/runtime/host/remote-bound-session-relay.js +97 -73
  141. package/dist/runtime/host/route-mesh-runtime.js +64 -69
  142. package/dist/runtime/host/runtime-shutdown.js +1 -2
  143. package/dist/runtime/host/service-relocation-host-runtime.js +586 -511
  144. package/dist/runtime/host/spot-address-transport.js +69 -71
  145. package/dist/runtime/host/spot-runtime-options-factory.js +30 -29
  146. package/dist/runtime/host/stateful-authority-route-runtime.js +65 -68
  147. package/dist/runtime/host/user-spot-creation-coordinator.js +61 -67
  148. package/dist/runtime/locations/actor-location-claims.js +26 -20
  149. package/dist/runtime/locations/aggregate-inventory-store.js +72 -75
  150. package/dist/runtime/locations/authority-key-codec.js +7 -7
  151. package/dist/runtime/locations/auto-connect-loop.js +3 -3
  152. package/dist/runtime/locations/auto-connect-planner.js +25 -19
  153. package/dist/runtime/locations/auto-connect-reconciler.js +51 -31
  154. package/dist/runtime/locations/in-memory-authority-store.js +128 -118
  155. package/dist/runtime/locations/in-memory-location-store.js +195 -168
  156. package/dist/runtime/locations/in-memory-provider-location-store.js +8 -10
  157. package/dist/runtime/locations/key-codec.js +1 -1
  158. package/dist/runtime/locations/lease-tracker.js +23 -21
  159. package/dist/runtime/locations/lifecycle.js +4 -5
  160. package/dist/runtime/locations/location-store-repository.js +368 -324
  161. package/dist/runtime/locations/opaque-record-key.js +2 -2
  162. package/dist/runtime/locations/resolvers.js +73 -82
  163. package/dist/runtime/locations/runtime.js +68 -63
  164. package/dist/runtime/locations/spot-location-claims.js +39 -35
  165. package/dist/runtime/messaging/framework-json-v1.js +7 -7
  166. package/dist/runtime/messaging/packet-name.js +7 -6
  167. package/dist/runtime/messaging/payload-codec.js +21 -18
  168. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +30 -2
  169. package/dist/runtime/protocol/service_wire_codec.generated.js +1671 -234
  170. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +20 -18
  171. package/dist/runtime/routing-id.js +3 -5
  172. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +35 -31
  173. package/dist/runtime/spots/formal-remote-actor-transfer-registry.js +1 -2
  174. package/dist/runtime/spots/index.js +209 -220
  175. package/dist/runtime/spots/spot-activation-registry.js +15 -14
  176. package/dist/runtime/spots/spot-activation-state.js +17 -15
  177. package/dist/runtime/spots/spot-activation.js +33 -16
  178. package/dist/runtime/spots/spot-actor-admission-coordinator.js +18 -15
  179. package/dist/runtime/spots/spot-actor-membership.js +1 -3
  180. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-packet-dispatch.js +29 -21
  182. package/dist/runtime/spots/spot-actor-packet-drain.js +14 -10
  183. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +10 -6
  184. package/dist/runtime/spots/spot-closing.js +3 -7
  185. package/dist/runtime/spots/spot-context.js +2 -2
  186. package/dist/runtime/spots/spot-entry-activation.js +13 -14
  187. package/dist/runtime/spots/spot-handle.js +6 -3
  188. package/dist/runtime/spots/spot-handler-registry.js +12 -12
  189. package/dist/runtime/spots/spot-manager-public.js +5 -6
  190. package/dist/runtime/spots/spot-native-actor-join-admission.js +4 -3
  191. package/dist/runtime/spots/spot-node-autoconnect.js +15 -18
  192. package/dist/runtime/spots/spot-node-runtime-manager.js +79 -86
  193. package/dist/runtime/spots/spot-outbound.js +10 -14
  194. package/dist/runtime/spots/spot-remote-codec.js +22 -26
  195. package/dist/runtime/spots/spot-remote-route-codec.js +5 -7
  196. package/dist/runtime/spots/spot-route-packet-dispatch.js +17 -15
  197. package/dist/runtime/spots/spot-route-replies.js +4 -6
  198. package/dist/runtime/spots/spot-routed-actor-admission.js +9 -7
  199. package/dist/runtime/spots/spot-routed-bound-session-dispatch.js +2 -3
  200. package/dist/runtime/spots/spot-routed-frame-dispatch.js +5 -5
  201. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +14 -10
  202. package/dist/runtime/spots/spot-serial-executor.js +5 -8
  203. package/dist/runtime/spots/spot-serial-turn-executor.js +4 -6
  204. package/dist/runtime/spots/spot-subscription-dispatch.js +6 -6
  205. package/dist/runtime/spots/spot-timer.js +26 -30
  206. package/dist/runtime/streams/actor-session-binding-registry.d.ts +21 -8
  207. package/dist/runtime/streams/actor-session-binding-registry.js +168 -148
  208. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -0
  209. package/dist/runtime/streams/actor-session-lifecycle-coordinator.js +3 -1
  210. package/dist/runtime/streams/bound-actor-relay-sender.js +20 -17
  211. package/dist/runtime/streams/bound-session-response-target.js +8 -1
  212. package/dist/runtime/streams/bound-session-service.d.ts +1 -0
  213. package/dist/runtime/streams/bound-session-service.js +14 -12
  214. package/dist/runtime/streams/index.js +28 -20
  215. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  216. package/dist/runtime/streams/managed-stream.js +52 -31
  217. package/dist/runtime/streams/native-fallback-bound-session.js +21 -17
  218. package/dist/runtime/streams/protocol.d.ts +5 -1
  219. package/dist/runtime/streams/protocol.js +68 -20
  220. package/dist/runtime/streams/session-actor-coordinator.js +37 -41
  221. package/dist/runtime/streams/session-context.d.ts +9 -2
  222. package/dist/runtime/streams/session-context.js +50 -32
  223. package/dist/runtime/streams/session-local-actors.d.ts +3 -1
  224. package/dist/runtime/streams/session-local-actors.js +17 -2
  225. package/dist/runtime/streams/session-provider.js +2 -2
  226. package/dist/runtime/streams/session-serial-executor.js +1 -2
  227. package/dist/runtime/streams/stream-frame-factory.d.ts +1 -1
  228. package/dist/runtime/streams/stream-frame-factory.js +14 -7
  229. package/dist/runtime/streams/stream-session-runtime.js +112 -78
  230. package/dist/runtime/workers/index.js +15 -4
  231. package/package.json +3 -3
  232. package/src/contracts/Channels/RouteCalls.ts +6 -1
  233. package/src/contracts/Common/ZLinkMessage.ts +5 -5
  234. package/src/contracts/Common/ZLinkMessageMetadata.ts +4 -3
  235. package/src/contracts/Configuration/Builders.ts +14 -14
  236. package/src/contracts/Configuration/CodecContentType.ts +8 -10
  237. package/src/contracts/Configuration/DiagnosticsValidation.ts +1 -6
  238. package/src/contracts/Configuration/EndpointNotation.ts +11 -11
  239. package/src/contracts/Configuration/ObjectRoles.ts +1 -3
  240. package/src/contracts/Configuration/Registration.ts +46 -17
  241. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +10 -8
  242. package/src/contracts/Configuration/RegistrationBuilders.ts +107 -96
  243. package/src/contracts/Configuration/RegistrationCodecRegistry.ts +9 -3
  244. package/src/contracts/Configuration/RegistrationNormalizers.ts +116 -84
  245. package/src/contracts/Configuration/RegistrationTypes.ts +21 -25
  246. package/src/contracts/Configuration/RegistrationValidators.ts +122 -73
  247. package/src/contracts/Configuration/RouteChannelInternalState.ts +1 -4
  248. package/src/contracts/Configuration/RuntimeEndpointConnections.ts +4 -1
  249. package/src/contracts/Configuration/SendTimeoutValidation.ts +6 -4
  250. package/src/contracts/Configuration/TimerRegistrationValidator.ts +8 -13
  251. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -6
  252. package/src/contracts/Errors/index.ts +1 -4
  253. package/src/contracts/Handlers/Attributes.ts +15 -9
  254. package/src/contracts/Handlers/IZLinkChannelHandlers.ts +24 -4
  255. package/src/contracts/Handlers/JsonContract.ts +53 -19
  256. package/src/contracts/Locations/ActorTransfer.ts +1 -5
  257. package/src/contracts/Locations/Authority.ts +4 -11
  258. package/src/contracts/Locations/Keys.ts +6 -1
  259. package/src/contracts/Locations/Options.ts +3 -2
  260. package/src/contracts/Locations/RelocationStore.ts +1 -4
  261. package/src/contracts/Locations/Resolvers.ts +5 -5
  262. package/src/contracts/Locations/RuntimeQuery.ts +6 -2
  263. package/src/contracts/Locations/Stores.ts +1 -2
  264. package/src/contracts/Locations/index.ts +2 -8
  265. package/src/contracts/RouteMesh/Contracts.ts +1 -7
  266. package/src/contracts/RouteMesh/RuntimeTopology.ts +1 -4
  267. package/src/contracts/Spots/Contracts.ts +2 -8
  268. package/src/contracts/Spots/SpotKind.ts +16 -8
  269. package/src/contracts/Spots/ZLinkSpot.ts +8 -11
  270. package/src/contracts/Streams/IZLinkSession.ts +2 -2
  271. package/src/contracts/Streams/IZLinkSessionActor.ts +5 -1
  272. package/src/contracts/Streams/IZLinkSessionPacketHandler.ts +5 -1
  273. package/src/internal.ts +5 -4
  274. package/src/location-store-integration.ts +24 -16
  275. package/src/nest-integration.ts +40 -25
  276. package/src/runtime/abort.ts +10 -4
  277. package/src/runtime/actors/actor-authority-payload-codec.ts +20 -29
  278. package/src/runtime/actors/actor-authority-publication.ts +92 -77
  279. package/src/runtime/actors/actor-client.ts +162 -133
  280. package/src/runtime/actors/actor-context.ts +142 -134
  281. package/src/runtime/actors/actor-creation.ts +47 -44
  282. package/src/runtime/actors/actor-execution-context.ts +6 -4
  283. package/src/runtime/actors/actor-handoff.ts +269 -293
  284. package/src/runtime/actors/actor-join-deferred-scope.ts +1 -32
  285. package/src/runtime/actors/actor-lifecycle-snapshot.ts +5 -8
  286. package/src/runtime/actors/actor-local-native-join.ts +131 -159
  287. package/src/runtime/actors/actor-mailbox.ts +16 -19
  288. package/src/runtime/actors/actor-message-follow-context.ts +46 -36
  289. package/src/runtime/actors/actor-packet-relay-wire.ts +32 -21
  290. package/src/runtime/actors/actor-remote-joiner.ts +50 -54
  291. package/src/runtime/actors/actor-remote-wire.ts +9 -13
  292. package/src/runtime/actors/actor-routed-join-transport.ts +10 -2
  293. package/src/runtime/actors/actor-runtime-contracts.ts +2 -5
  294. package/src/runtime/actors/actor-runtime-state.ts +127 -124
  295. package/src/runtime/actors/actor-transfer-registry.ts +9 -14
  296. package/src/runtime/actors/actor-transport-delivery-gate.ts +4 -6
  297. package/src/runtime/actors/bound-session-wire.ts +37 -17
  298. package/src/runtime/actors/deferred-join-accepted-journal.ts +353 -326
  299. package/src/runtime/actors/index.ts +43 -86
  300. package/src/runtime/actors/post-commit-actor-binder.ts +10 -10
  301. package/src/runtime/actors/post-commit-actor-location.ts +30 -23
  302. package/src/runtime/actors/spot-actor-dispatch.ts +78 -53
  303. package/src/runtime/actors/transferred-actor-rollback.ts +18 -13
  304. package/src/runtime/admission.ts +9 -9
  305. package/src/runtime/application-jobs/application-ingress-record-owner.ts +5 -15
  306. package/src/runtime/application-jobs/application-job-queue-handler-start-gate.ts +3 -2
  307. package/src/runtime/application-jobs/receive-flow-controller.ts +17 -14
  308. package/src/runtime/backend/contracts/index.ts +77 -52
  309. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -14
  310. package/src/runtime/backend/mesh-completion-table.ts +6 -9
  311. package/src/runtime/backend/mesh-dispatch-pump.ts +38 -30
  312. package/src/runtime/backend/node/node-backend-adapter-factory.ts +23 -21
  313. package/src/runtime/backend/node/node-backend-adapter-support.ts +36 -22
  314. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +59 -58
  315. package/src/runtime/backend/node/node-event-loop-poller.ts +2 -10
  316. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +12 -5
  317. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +4 -3
  318. package/src/runtime/backend/node/node-raw-binding-port.ts +29 -29
  319. package/src/runtime/backend/node/node-raw-mesh-backend.ts +370 -390
  320. package/src/runtime/backend/node/node-socket-backend-adapter.ts +101 -54
  321. package/src/runtime/backend/runtime-message.ts +5 -3
  322. package/src/runtime/backend/runtime-values.ts +10 -7
  323. package/src/runtime/channels/channel-autoconnect.ts +1 -4
  324. package/src/runtime/channels/channel-clients.ts +93 -73
  325. package/src/runtime/channels/channel-dispatch-pipeline.ts +44 -44
  326. package/src/runtime/channels/channel-dispatch-services.ts +51 -49
  327. package/src/runtime/channels/channel-dispatchers.ts +152 -96
  328. package/src/runtime/channels/channel-envelope-inspection.ts +20 -16
  329. package/src/runtime/channels/channel-envelope.ts +256 -150
  330. package/src/runtime/channels/channel-multipart.ts +13 -5
  331. package/src/runtime/channels/channel-outbound-operations.ts +37 -41
  332. package/src/runtime/channels/channel-receive-loops.ts +102 -98
  333. package/src/runtime/channels/channel-receive-task-tracker.ts +1 -1
  334. package/src/runtime/channels/channel-runtime-lifecycle.ts +248 -190
  335. package/src/runtime/channels/channel-runtime-manager.ts +63 -37
  336. package/src/runtime/channels/channel-socket-options.ts +3 -10
  337. package/src/runtime/channels/channel-socket-registry.ts +331 -273
  338. package/src/runtime/channels/channel-transports.ts +218 -206
  339. package/src/runtime/channels/client-server-location-runtime.ts +116 -100
  340. package/src/runtime/channels/client-server-service-wire.ts +37 -36
  341. package/src/runtime/channels/dispatch-error-reporter.ts +12 -47
  342. package/src/runtime/channels/fanout-location-runtime.ts +91 -94
  343. package/src/runtime/channels/fanout-service-wire.ts +5 -12
  344. package/src/runtime/channels/handler-filter-scope.ts +1 -4
  345. package/src/runtime/channels/index.ts +1 -4
  346. package/src/runtime/channels/local-spot-route-transport.ts +20 -5
  347. package/src/runtime/channels/route-member-snapshot.ts +11 -5
  348. package/src/runtime/channels/router-socket-spot-route-transport.ts +1 -7
  349. package/src/runtime/channels/source-spot-router.ts +26 -22
  350. package/src/runtime/channels/spot-direct-envelope.ts +10 -8
  351. package/src/runtime/channels/spot-node-route-transport.ts +13 -16
  352. package/src/runtime/channels/spot-route-bridge-transport.ts +26 -9
  353. package/src/runtime/channels/spot-route-dispatch-strategy.ts +40 -13
  354. package/src/runtime/channels/spot-route-target-resolver.ts +18 -9
  355. package/src/runtime/codecs/index.ts +3 -2
  356. package/src/runtime/diagnostics/dispatch-error-details.ts +62 -0
  357. package/src/runtime/diagnostics/flow-context.ts +18 -7
  358. package/src/runtime/diagnostics/index.ts +96 -61
  359. package/src/runtime/diagnostics/internal-event-contracts.ts +87 -33
  360. package/src/runtime/diagnostics/message-flow.ts +107 -79
  361. package/src/runtime/diagnostics/runtime-metrics.ts +46 -24
  362. package/src/runtime/diagnostics/runtime-observation-queue.ts +17 -28
  363. package/src/runtime/diagnostics/topology-runtime-projections.ts +62 -43
  364. package/src/runtime/execution/index.ts +18 -26
  365. package/src/runtime/execution/serial-execution-queue.ts +31 -40
  366. package/src/runtime/execution/state-lane.ts +2 -2
  367. package/src/runtime/foundation/actor-join-recovery-codec.ts +69 -55
  368. package/src/runtime/foundation/event-loop-resources.ts +8 -4
  369. package/src/runtime/foundation/message-follow-suppression-registry.ts +7 -14
  370. package/src/runtime/foundation/operation-identity.ts +1 -2
  371. package/src/runtime/foundation/operation-registry.ts +8 -2
  372. package/src/runtime/foundation/raw-service-mesh-runtime.ts +364 -396
  373. package/src/runtime/foundation/route-mesh-connection-policy.ts +7 -8
  374. package/src/runtime/foundation/runtime-state-projections.ts +24 -23
  375. package/src/runtime/foundation/service-authority-payload-codec.ts +54 -57
  376. package/src/runtime/foundation/service-discovery-registry.ts +67 -59
  377. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +28 -29
  378. package/src/runtime/foundation/service-liveness-registry.ts +18 -13
  379. package/src/runtime/foundation/service-mailbox.ts +14 -14
  380. package/src/runtime/foundation/service-maintenance-runtime.ts +22 -21
  381. package/src/runtime/foundation/service-metadata-codec.ts +2 -9
  382. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +39 -36
  383. package/src/runtime/foundation/service-relocation-coordinator.ts +1 -4
  384. package/src/runtime/foundation/service-relocation-object-owner.ts +40 -58
  385. package/src/runtime/foundation/service-relocation-runtime.ts +292 -216
  386. package/src/runtime/foundation/service-runtime-contracts.ts +8 -8
  387. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -4
  388. package/src/runtime/foundation/service-stateful-registry.ts +69 -59
  389. package/src/runtime/foundation/service-stateful-runtime.ts +1233 -1112
  390. package/src/runtime/foundation/service-stateful-wire-codec.ts +318 -270
  391. package/src/runtime/foundation/service-topology-registry.ts +170 -159
  392. package/src/runtime/foundation/service-weighted-selection.ts +9 -15
  393. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -12
  394. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -47
  395. package/src/runtime/framework-errors-internal.ts +31 -30
  396. package/src/runtime/handlers/handler-instance-scope.ts +18 -29
  397. package/src/runtime/handlers/index.ts +18 -8
  398. package/src/runtime/host/actor-packet-relay.ts +290 -261
  399. package/src/runtime/host/actor-placement-coordinator.ts +165 -150
  400. package/src/runtime/host/actor-runtime-options-factory.ts +89 -87
  401. package/src/runtime/host/actor-transfer-authority-runtime.ts +46 -38
  402. package/src/runtime/host/actor-transfer-runtime.ts +391 -395
  403. package/src/runtime/host/application-job-queue.ts +32 -48
  404. package/src/runtime/host/bound-session-relay.ts +7 -9
  405. package/src/runtime/host/channel-runtime-options-factory.ts +75 -35
  406. package/src/runtime/host/host-capacity-status.ts +10 -9
  407. package/src/runtime/host/index.ts +861 -789
  408. package/src/runtime/host/instance-activation-authority.ts +125 -143
  409. package/src/runtime/host/location-runtime-owner.ts +38 -26
  410. package/src/runtime/host/mesh-router-resolver.ts +30 -23
  411. package/src/runtime/host/relocation-direct-transfer.ts +15 -15
  412. package/src/runtime/host/relocation-integrity-fault-gate.ts +3 -2
  413. package/src/runtime/host/remote-actor-join-receiver.ts +43 -34
  414. package/src/runtime/host/remote-actor-packet-target-store.ts +54 -52
  415. package/src/runtime/host/remote-bound-session-relay.ts +274 -247
  416. package/src/runtime/host/route-mesh-runtime-options.ts +1 -3
  417. package/src/runtime/host/route-mesh-runtime.ts +227 -181
  418. package/src/runtime/host/runtime-shutdown.ts +4 -3
  419. package/src/runtime/host/service-relocation-control.ts +14 -5
  420. package/src/runtime/host/service-relocation-host-runtime.ts +1388 -1165
  421. package/src/runtime/host/spot-address-transport.ts +284 -237
  422. package/src/runtime/host/spot-node-runtime-options-factory.ts +14 -8
  423. package/src/runtime/host/spot-runtime-options-factory.ts +71 -62
  424. package/src/runtime/host/stateful-authority-route-runtime.ts +117 -116
  425. package/src/runtime/host/user-spot-creation-coordinator.ts +225 -220
  426. package/src/runtime/locations/actor-location-claims.ts +61 -49
  427. package/src/runtime/locations/actor-session-route-claims.ts +1 -4
  428. package/src/runtime/locations/aggregate-inventory-store.ts +105 -134
  429. package/src/runtime/locations/authority-key-codec.ts +13 -10
  430. package/src/runtime/locations/auto-connect-loop.ts +14 -11
  431. package/src/runtime/locations/auto-connect-planner.ts +42 -31
  432. package/src/runtime/locations/auto-connect-reconciler.ts +106 -63
  433. package/src/runtime/locations/canonical-codec.ts +3 -1
  434. package/src/runtime/locations/creation-operation-id.ts +4 -3
  435. package/src/runtime/locations/domain-store-contract.ts +13 -7
  436. package/src/runtime/locations/in-memory-authority-store.ts +232 -199
  437. package/src/runtime/locations/in-memory-location-store.ts +432 -250
  438. package/src/runtime/locations/in-memory-provider-location-store.ts +16 -17
  439. package/src/runtime/locations/internal-store-contracts.ts +95 -38
  440. package/src/runtime/locations/key-codec.ts +3 -4
  441. package/src/runtime/locations/lease-tracker.ts +36 -27
  442. package/src/runtime/locations/lifecycle-runtime.ts +15 -3
  443. package/src/runtime/locations/lifecycle.ts +33 -28
  444. package/src/runtime/locations/location-store-repository.ts +1329 -1185
  445. package/src/runtime/locations/opaque-record-key.ts +4 -9
  446. package/src/runtime/locations/resolvers.ts +201 -178
  447. package/src/runtime/locations/runtime.ts +251 -159
  448. package/src/runtime/locations/spot-location-claims.ts +110 -112
  449. package/src/runtime/messaging/creation-payload-codec.ts +4 -1
  450. package/src/runtime/messaging/framework-json-v1.ts +34 -15
  451. package/src/runtime/messaging/packet-name.ts +8 -6
  452. package/src/runtime/messaging/payload-codec.ts +70 -50
  453. package/src/runtime/messaging/submission-result.ts +6 -9
  454. package/src/runtime/protocol/service_wire_codec.generated.ts +1376 -159
  455. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +19 -18
  456. package/src/runtime/routing-id.ts +10 -7
  457. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +56 -62
  458. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +23 -20
  459. package/src/runtime/spots/index.ts +595 -564
  460. package/src/runtime/spots/spot-activation-registry.ts +38 -34
  461. package/src/runtime/spots/spot-activation-state.ts +43 -51
  462. package/src/runtime/spots/spot-activation.ts +179 -116
  463. package/src/runtime/spots/spot-actor-admission-coordinator.ts +110 -78
  464. package/src/runtime/spots/spot-actor-join-dispatch.ts +57 -41
  465. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +5 -7
  466. package/src/runtime/spots/spot-actor-membership.ts +25 -27
  467. package/src/runtime/spots/spot-actor-packet-dispatch.ts +196 -148
  468. package/src/runtime/spots/spot-actor-packet-drain.ts +56 -42
  469. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +37 -39
  470. package/src/runtime/spots/spot-closing.ts +11 -12
  471. package/src/runtime/spots/spot-context.ts +46 -26
  472. package/src/runtime/spots/spot-entry-activation.ts +84 -65
  473. package/src/runtime/spots/spot-handle.ts +17 -15
  474. package/src/runtime/spots/spot-handler-registry.ts +44 -31
  475. package/src/runtime/spots/spot-location-claim.ts +5 -4
  476. package/src/runtime/spots/spot-manager-public.ts +62 -82
  477. package/src/runtime/spots/spot-native-actor-join-admission.ts +20 -16
  478. package/src/runtime/spots/spot-node-autoconnect.ts +54 -61
  479. package/src/runtime/spots/spot-node-runtime-manager.ts +235 -222
  480. package/src/runtime/spots/spot-outbound.ts +47 -59
  481. package/src/runtime/spots/spot-publisher-transport.ts +5 -4
  482. package/src/runtime/spots/spot-remote-codec.ts +66 -65
  483. package/src/runtime/spots/spot-remote-route-codec.ts +61 -41
  484. package/src/runtime/spots/spot-route-packet-dispatch.ts +129 -95
  485. package/src/runtime/spots/spot-route-replies.ts +23 -24
  486. package/src/runtime/spots/spot-route-reply-wire.ts +3 -2
  487. package/src/runtime/spots/spot-routed-actor-admission.ts +37 -27
  488. package/src/runtime/spots/spot-routed-bound-session-dispatch.ts +13 -18
  489. package/src/runtime/spots/spot-routed-frame-dispatch.ts +18 -15
  490. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +35 -26
  491. package/src/runtime/spots/spot-routing-internal.ts +1 -4
  492. package/src/runtime/spots/spot-runtime-ports.ts +5 -5
  493. package/src/runtime/spots/spot-serial-executor.ts +5 -9
  494. package/src/runtime/spots/spot-serial-turn-executor.ts +19 -26
  495. package/src/runtime/spots/spot-subscription-dispatch.ts +58 -47
  496. package/src/runtime/spots/spot-timer.ts +103 -91
  497. package/src/runtime/streams/actor-session-binding-registry.ts +421 -292
  498. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +8 -4
  499. package/src/runtime/streams/actor-session-lifecycle-coordinator.ts +3 -1
  500. package/src/runtime/streams/bound-actor-relay-sender.ts +60 -50
  501. package/src/runtime/streams/bound-session-response-target.ts +39 -9
  502. package/src/runtime/streams/bound-session-service.ts +52 -42
  503. package/src/runtime/streams/index.ts +183 -100
  504. package/src/runtime/streams/managed-stream.ts +123 -90
  505. package/src/runtime/streams/native-fallback-bound-session.ts +57 -52
  506. package/src/runtime/streams/protocol.ts +115 -46
  507. package/src/runtime/streams/session-actor-coordinator.ts +109 -93
  508. package/src/runtime/streams/session-calls.ts +2 -8
  509. package/src/runtime/streams/session-context.ts +96 -51
  510. package/src/runtime/streams/session-local-actors.ts +19 -3
  511. package/src/runtime/streams/session-provider.ts +5 -7
  512. package/src/runtime/streams/session-serial-executor.ts +7 -6
  513. package/src/runtime/streams/stream-binding-runtime-ports.ts +79 -29
  514. package/src/runtime/streams/stream-frame-factory.ts +59 -40
  515. package/src/runtime/streams/stream-session-runtime.ts +317 -214
  516. package/src/runtime/workers/index.ts +68 -29
@@ -97,16 +97,13 @@ class ZLinkUserSpotCreationCoordinator {
97
97
  break;
98
98
  excludedNodeRids.add(String(target.nodeRid));
99
99
  }
100
- if (reserved.kind === 'alreadyExists'
101
- || (reserved.kind === 'conflict'
102
- && reserved.current.kind === 'snapshot'
103
- && reserved.current.allocation.objectKind === 'user_spot'
104
- && reserved.current.allocation.stableType === request.stableType)) {
105
- const current = reserved.kind === 'alreadyExists'
106
- ? reserved.current
107
- : reserved.current;
108
- if (current.kind === 'snapshot'
109
- && current.allocation.state === 'active') {
100
+ if (reserved.kind === 'alreadyExists' ||
101
+ (reserved.kind === 'conflict' &&
102
+ reserved.current.kind === 'snapshot' &&
103
+ reserved.current.allocation.objectKind === 'user_spot' &&
104
+ reserved.current.allocation.stableType === request.stableType)) {
105
+ const current = reserved.kind === 'alreadyExists' ? reserved.current : reserved.current;
106
+ if (current.kind === 'snapshot' && current.allocation.state === 'active') {
110
107
  if (request.generatedIdentity === true) {
111
108
  deadline.close();
112
109
  throw spotIdConflict(request.spotId);
@@ -118,8 +115,7 @@ class ZLinkUserSpotCreationCoordinator {
118
115
  spot
119
116
  };
120
117
  }
121
- if (current.kind !== 'snapshot'
122
- || !sameCreationTarget(current, authorityTarget)) {
118
+ if (current.kind !== 'snapshot' || !sameCreationTarget(current, authorityTarget)) {
123
119
  deadline.close();
124
120
  if (request.generatedIdentity === true) {
125
121
  throw spotIdConflict(request.spotId);
@@ -136,9 +132,7 @@ class ZLinkUserSpotCreationCoordinator {
136
132
  }
137
133
  if (current.allocation.state === 'reserved' && target.isLocal) {
138
134
  const pending = current.pendingCreation;
139
- const admitted = pending === undefined
140
- ? undefined
141
- : this.localCreations.get(pending.reservationId);
135
+ const admitted = pending === undefined ? undefined : this.localCreations.get(pending.reservationId);
142
136
  if (admitted === undefined) {
143
137
  try {
144
138
  const spot = await this.awaitReady(request, signal);
@@ -247,8 +241,8 @@ class ZLinkUserSpotCreationCoordinator {
247
241
  requestPayload: Buffer.alloc(0),
248
242
  timeoutMs: 1
249
243
  });
250
- if (String(current.allocation.descriptor.rid) !== String(spot.nodeRid)
251
- || current.allocation.descriptor.meshName !== spot.meshName) {
244
+ if (String(current.allocation.descriptor.rid) !== String(spot.nodeRid) ||
245
+ current.allocation.descriptor.meshName !== spot.meshName) {
252
246
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${String(spot.spotId)}' owner route is stale.`);
253
247
  }
254
248
  return { spot: currentRef, snapshot: current };
@@ -264,11 +258,13 @@ class ZLinkUserSpotCreationCoordinator {
264
258
  const result = this.materializeRemoteCreate(record, materialize, discard, signal);
265
259
  admitted = { fingerprint, result };
266
260
  this.remoteCreations.set(key, admitted);
267
- void result.finally(() => {
261
+ void result
262
+ .finally(() => {
268
263
  if (this.remoteCreations.get(key)?.result === result) {
269
264
  this.remoteCreations.delete(key);
270
265
  }
271
- }).catch(() => undefined);
266
+ })
267
+ .catch(() => undefined);
272
268
  }
273
269
  return await admitted.result;
274
270
  }
@@ -278,11 +274,13 @@ class ZLinkUserSpotCreationCoordinator {
278
274
  if (admitted === undefined) {
279
275
  admitted = this.materializeRemoteCreate(record, materialize, discard, signal);
280
276
  this.localCreations.set(key, admitted);
281
- void admitted.finally(() => {
277
+ void admitted
278
+ .finally(() => {
282
279
  if (this.localCreations.get(key) === admitted) {
283
280
  this.localCreations.delete(key);
284
281
  }
285
- }).catch(() => undefined);
282
+ })
283
+ .catch(() => undefined);
286
284
  }
287
285
  return await admitted;
288
286
  }
@@ -291,21 +289,20 @@ class ZLinkUserSpotCreationCoordinator {
291
289
  const current = await this.options.store.readAuthority(key, signal);
292
290
  const exactIdentity = current.kind !== 'snapshot'
293
291
  ? false
294
- : current.allocation.objectKind === 'user_spot'
295
- && current.allocation.stableType === record.stableType
296
- && current.objectGeneration === record.reservation.objectGeneration
297
- && current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration
298
- && String(current.allocation.descriptor.rid) === record.reservation.targetNodeRid
299
- && current.allocation.descriptorLifecycleGeneration
300
- === record.reservation.targetNodeGeneration
301
- && current.ownerId === record.reservation.targetOwnerId
302
- && current.ownerLeaseGeneration === record.reservation.targetOwnerLeaseGeneration
303
- && current.allocation.capacity.actors === 0
304
- && current.allocation.capacity.spots === record.reservation.pendingCapacityDelta
305
- && current.allocation.capacity.spotType?.objectKind === 'user_spot'
306
- && current.allocation.capacity.spotType.stableType === record.stableType
307
- && current.allocation.capacity.spotType.count
308
- === record.reservation.pendingCapacityDelta;
292
+ : current.allocation.objectKind === 'user_spot' &&
293
+ current.allocation.stableType === record.stableType &&
294
+ current.objectGeneration === record.reservation.objectGeneration &&
295
+ current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration &&
296
+ String(current.allocation.descriptor.rid) === record.reservation.targetNodeRid &&
297
+ current.allocation.descriptorLifecycleGeneration ===
298
+ record.reservation.targetNodeGeneration &&
299
+ current.ownerId === record.reservation.targetOwnerId &&
300
+ current.ownerLeaseGeneration === record.reservation.targetOwnerLeaseGeneration &&
301
+ current.allocation.capacity.actors === 0 &&
302
+ current.allocation.capacity.spots === record.reservation.pendingCapacityDelta &&
303
+ current.allocation.capacity.spotType?.objectKind === 'user_spot' &&
304
+ current.allocation.capacity.spotType.stableType === record.stableType &&
305
+ current.allocation.capacity.spotType.count === record.reservation.pendingCapacityDelta;
309
306
  if (!exactIdentity || current.kind !== 'snapshot') {
310
307
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'Remote User Spot reservation fence is stale.');
311
308
  }
@@ -329,8 +326,7 @@ class ZLinkUserSpotCreationCoordinator {
329
326
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'Remote User Spot Pending StoreVersion is stale.');
330
327
  }
331
328
  const pending = current.pendingCreation;
332
- if (pending === undefined
333
- || pending.reservationId !== record.reservation.reservationId) {
329
+ if (pending === undefined || pending.reservationId !== record.reservation.reservationId) {
334
330
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'Remote User Spot Pending creation projection is missing.');
335
331
  }
336
332
  const requestPayload = decodeLocationCreationContent(pending.requestContentReference, pending.requestSha256, pending.requestEncodedSize);
@@ -427,7 +423,7 @@ class ZLinkUserSpotCreationCoordinator {
427
423
  cleanupDeadline.close();
428
424
  const cleanupErrors = cleanup
429
425
  .filter((item) => item.status === 'rejected')
430
- .map(item => item.reason);
426
+ .map((item) => item.reason);
431
427
  if (cleanupErrors.length > 0) {
432
428
  throw new AggregateError([error, ...cleanupErrors], 'Remote User Spot creation rollback failed.');
433
429
  }
@@ -442,13 +438,12 @@ class ZLinkUserSpotCreationCoordinator {
442
438
  if (current.objectGeneration !== record.target.objectGeneration) {
443
439
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale, `User Spot '${record.target.spotId}' generation is stale.`);
444
440
  }
445
- if (current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration
446
- || current.storeVersion.value !== record.target.expectedStoreVersion
447
- || String(current.allocation.descriptor.rid) !== record.target.targetNodeRid
448
- || current.allocation.descriptorLifecycleGeneration
449
- !== record.target.targetNodeGeneration
450
- || current.allocation.objectKind !== 'user_spot'
451
- || current.allocation.state !== 'active') {
441
+ if (current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration ||
442
+ current.storeVersion.value !== record.target.expectedStoreVersion ||
443
+ String(current.allocation.descriptor.rid) !== record.target.targetNodeRid ||
444
+ current.allocation.descriptorLifecycleGeneration !== record.target.targetNodeGeneration ||
445
+ current.allocation.objectKind !== 'user_spot' ||
446
+ current.allocation.state !== 'active') {
452
447
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${record.target.spotId}' close authority is moving.`, true);
453
448
  }
454
449
  const spot = {
@@ -482,9 +477,9 @@ class ZLinkUserSpotCreationCoordinator {
482
477
  }
483
478
  async beginClosing(key, current, spotId, signal) {
484
479
  const ready = (0, service_authority_payload_codec_1.decodeServiceReadySpotAuthority)(current.payload);
485
- if (ready?.kind !== 'user_spot'
486
- || ready.spotId !== spotId
487
- || ready.stableType !== current.allocation.stableType) {
480
+ if (ready?.kind !== 'user_spot' ||
481
+ ready.spotId !== spotId ||
482
+ ready.stableType !== current.allocation.stableType) {
488
483
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `User Spot '${spotId}' is not in Framework-owned Ready state.`, true);
489
484
  }
490
485
  const closing = await this.options.store.compareExchangeAuthority(key, current.storeVersion, {
@@ -547,8 +542,7 @@ class ZLinkUserSpotCreationCoordinator {
547
542
  },
548
543
  deadlineUnixMs: BigInt(deadlineUnixMs)
549
544
  }, timeoutMs);
550
- if (result.terminalResult !== 0
551
- || result.tail?.kind !== 'userSpotCreate') {
545
+ if (result.terminalResult !== 0 || result.tail?.kind !== 'userSpotCreate') {
552
546
  throw remoteUserSpotFailure(result.terminalResult, result.failureCode, 'Remote User Spot creation failed.');
553
547
  }
554
548
  const spot = {
@@ -569,8 +563,8 @@ class ZLinkUserSpotCreationCoordinator {
569
563
  ...(result.payload === undefined
570
564
  ? {}
571
565
  : {
572
- reply: this.options.decodeRemoteReply?.(result.payload.payload)
573
- ?? Buffer.from(result.payload.payload)
566
+ reply: this.options.decodeRemoteReply?.(result.payload.payload) ??
567
+ Buffer.from(result.payload.payload)
574
568
  })
575
569
  },
576
570
  spot
@@ -596,12 +590,12 @@ function readySpotRoute(spotId, snapshot) {
596
590
  }
597
591
  function spotRef(snapshot, request, allowPending = false) {
598
592
  const decoded = (0, service_authority_payload_codec_1.decodeServiceReadySpotAuthority)(snapshot.payload);
599
- if ((allowPending
600
- ? (snapshot.allocation.objectKind !== 'user_spot'
601
- || snapshot.allocation.stableType !== request.stableType)
602
- : (decoded?.kind !== 'user_spot'
603
- || decoded.stableType !== request.stableType
604
- || decoded.spotId !== String(request.spotId)))) {
593
+ if (allowPending
594
+ ? snapshot.allocation.objectKind !== 'user_spot' ||
595
+ snapshot.allocation.stableType !== request.stableType
596
+ : decoded?.kind !== 'user_spot' ||
597
+ decoded.stableType !== request.stableType ||
598
+ decoded.spotId !== String(request.spotId)) {
605
599
  throw new Error('User Spot Ready authority does not match the requested identity.');
606
600
  }
607
601
  return {
@@ -667,18 +661,18 @@ function decodeLocationCreationContent(reference, expectedSha256, expectedEncode
667
661
  return payload;
668
662
  }
669
663
  function sameCreationTarget(snapshot, target) {
670
- return snapshot.allocation.descriptor.meshName === target.meshName
671
- && String(snapshot.allocation.descriptor.rid) === String(target.nodeRid)
672
- && snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration
673
- && snapshot.ownerId === target.owner.ownerId
674
- && snapshot.ownerLeaseGeneration === target.owner.leaseGeneration;
664
+ return (snapshot.allocation.descriptor.meshName === target.meshName &&
665
+ String(snapshot.allocation.descriptor.rid) === String(target.nodeRid) &&
666
+ snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration &&
667
+ snapshot.ownerId === target.owner.ownerId &&
668
+ snapshot.ownerLeaseGeneration === target.owner.leaseGeneration);
675
669
  }
676
670
  function remoteCreationFingerprint(record) {
677
671
  return JSON.stringify({
678
672
  spotId: record.spotId,
679
673
  stableType: record.stableType,
680
674
  reservation: record.reservation
681
- }, (_key, value) => typeof value === 'bigint' ? `${value}n` : value);
675
+ }, (_key, value) => (typeof value === 'bigint' ? `${value}n` : value));
682
676
  }
683
677
  function userSpotAuthorityPayload(snapshot, spotId, state) {
684
678
  return (0, service_authority_payload_codec_1.encodeServiceUserSpotAuthorityPayload)({
@@ -735,10 +729,10 @@ function waitForAbort(operation, signal) {
735
729
  return new Promise((resolve, reject) => {
736
730
  const abort = () => reject(signal.reason);
737
731
  signal.addEventListener('abort', abort, { once: true });
738
- operation.then(value => {
732
+ operation.then((value) => {
739
733
  signal.removeEventListener('abort', abort);
740
734
  resolve(value);
741
- }, error => {
735
+ }, (error) => {
742
736
  signal.removeEventListener('abort', abort);
743
737
  reject(error);
744
738
  });
@@ -211,10 +211,10 @@ class ZLinkActorLocationClaims {
211
211
  const current = await this.actorStore.resolveActor(key);
212
212
  if (this.actors.get(canonical) !== tracked)
213
213
  continue;
214
- if (current === undefined
215
- || current.ownerId !== owner.ownerId
216
- || (current.leaseGeneration !== tracked.row.leaseGeneration
217
- && current.leaseGeneration !== owner.leaseGeneration)) {
214
+ if (current === undefined ||
215
+ current.ownerId !== owner.ownerId ||
216
+ (current.leaseGeneration !== tracked.row.leaseGeneration &&
217
+ current.leaseGeneration !== owner.leaseGeneration)) {
218
218
  if (this.actors.get(canonical) !== tracked)
219
219
  continue;
220
220
  this.actors.delete(canonical);
@@ -276,8 +276,7 @@ class ZLinkActorLocationClaims {
276
276
  if (result.status === internal_location_contracts_1.ZLinkLocationWriteStatus.Stored) {
277
277
  tracked.row = {
278
278
  ...candidate,
279
- leaseGeneration: this.runtime.currentOwnerToken?.leaseGeneration
280
- ?? candidate.leaseGeneration,
279
+ leaseGeneration: this.runtime.currentOwnerToken?.leaseGeneration ?? candidate.leaseGeneration,
281
280
  updatedAt: result.updatedAt
282
281
  };
283
282
  tracked.generation = result.generation;
@@ -293,14 +292,21 @@ class ZLinkActorLocationClaims {
293
292
  const current = await store.readAuthority(key);
294
293
  if (!matchesActorAuthority(current, actorRef, ownerToken))
295
294
  return;
296
- const result = await store.compareExchangeAuthority(key, current.storeVersion, { kind: 'delete' });
297
- if (result.kind === 'deleted' || (result.kind === 'conflict' && result.current.kind === 'missing')) {
295
+ const result = await store.compareExchangeAuthority(key, current.storeVersion, {
296
+ kind: 'delete'
297
+ });
298
+ if (result.kind === 'deleted' ||
299
+ (result.kind === 'conflict' && result.current.kind === 'missing')) {
298
300
  return;
299
301
  }
300
- if (result.kind === 'conflict' && result.current.kind === 'snapshot'
301
- && matchesActorAuthority(result.current, actorRef, ownerToken)) {
302
- const retry = await store.compareExchangeAuthority(key, result.current.storeVersion, { kind: 'delete' });
303
- if (retry.kind === 'deleted' || (retry.kind === 'conflict' && retry.current.kind === 'missing')) {
302
+ if (result.kind === 'conflict' &&
303
+ result.current.kind === 'snapshot' &&
304
+ matchesActorAuthority(result.current, actorRef, ownerToken)) {
305
+ const retry = await store.compareExchangeAuthority(key, result.current.storeVersion, {
306
+ kind: 'delete'
307
+ });
308
+ if (retry.kind === 'deleted' ||
309
+ (retry.kind === 'conflict' && retry.current.kind === 'missing')) {
304
310
  return;
305
311
  }
306
312
  }
@@ -308,12 +314,12 @@ class ZLinkActorLocationClaims {
308
314
  }
309
315
  exports.ZLinkActorLocationClaims = ZLinkActorLocationClaims;
310
316
  function matchesActorAuthority(current, actorRef, ownerToken) {
311
- return current.kind === 'snapshot'
312
- && current.ownerId === ownerToken.ownerId
313
- && current.ownerLeaseGeneration === ownerToken.leaseGeneration
314
- && current.allocation.state === 'active'
315
- && current.allocation.objectKind === 'actor'
316
- && current.objectGeneration === actorRef.objectGeneration
317
- && current.allocation.descriptor.meshName === actorRef.meshName
318
- && (0, routing_id_1.routingIdsEqual)(current.allocation.descriptor.rid, actorRef.nodeRid);
317
+ return (current.kind === 'snapshot' &&
318
+ current.ownerId === ownerToken.ownerId &&
319
+ current.ownerLeaseGeneration === ownerToken.leaseGeneration &&
320
+ current.allocation.state === 'active' &&
321
+ current.allocation.objectKind === 'actor' &&
322
+ current.objectGeneration === actorRef.objectGeneration &&
323
+ current.allocation.descriptor.meshName === actorRef.meshName &&
324
+ (0, routing_id_1.routingIdsEqual)(current.allocation.descriptor.rid, actorRef.nodeRid));
319
325
  }
@@ -22,9 +22,9 @@ class ZLinkAggregateInventoryStore {
22
22
  const tree = buildTree(request);
23
23
  await parallelForEach(tree.pages, WRITE_CONCURRENCY, async (page) => {
24
24
  const bytes = encode(page);
25
- if (page.entries.length > MAX_PAGE_ENTRIES
26
- || page.children.length > MAX_PAGE_ENTRIES
27
- || bytes.byteLength > MAX_PAGE_BYTES) {
25
+ if (page.entries.length > MAX_PAGE_ENTRIES ||
26
+ page.children.length > MAX_PAGE_ENTRIES ||
27
+ bytes.byteLength > MAX_PAGE_BYTES) {
28
28
  throw new Error('Aggregate inventory page exceeds its encoded bounds.');
29
29
  }
30
30
  await putImmutable(this.provider, pageKey(fence, page.level, page.index), bytes, signal);
@@ -39,8 +39,8 @@ class ZLinkAggregateInventoryStore {
39
39
  }
40
40
  const root = decodeRoot(rootBytes);
41
41
  validateRoot(root, fence);
42
- if (expectedDeclaredDigest !== undefined
43
- && !sameHash(root.declaredDigest, expectedDeclaredDigest)) {
42
+ if (expectedDeclaredDigest !== undefined &&
43
+ !sameHash(root.declaredDigest, expectedDeclaredDigest)) {
44
44
  throw dataLost(fence, 'declared digest does not match');
45
45
  }
46
46
  const entries = [];
@@ -53,26 +53,25 @@ class ZLinkAggregateInventoryStore {
53
53
  throw dataLost(fence, 'page reference is duplicated');
54
54
  visited.add(identity);
55
55
  const bytes = await requireFound(this.provider, pageKey(fence, reference.level, reference.index), signal);
56
- if (bytes.byteLength > MAX_PAGE_BYTES
57
- || !sameHash(reference.sha256, (0, node_crypto_1.createHash)('sha256').update(bytes).digest())) {
56
+ if (bytes.byteLength > MAX_PAGE_BYTES ||
57
+ !sameHash(reference.sha256, (0, node_crypto_1.createHash)('sha256').update(bytes).digest())) {
58
58
  throw dataLost(fence, 'page checksum is invalid');
59
59
  }
60
60
  const page = decodePage(bytes);
61
- if (page.level !== reference.level
62
- || page.index !== reference.index
63
- || page.startIndex !== reference.startIndex
64
- || page.entryCount !== reference.entryCount) {
61
+ if (page.level !== reference.level ||
62
+ page.index !== reference.index ||
63
+ page.startIndex !== reference.startIndex ||
64
+ page.entryCount !== reference.entryCount) {
65
65
  throw dataLost(fence, 'page metadata changed');
66
66
  }
67
- if (page.entries.length > MAX_PAGE_ENTRIES
68
- || page.children.length > MAX_PAGE_ENTRIES) {
67
+ if (page.entries.length > MAX_PAGE_ENTRIES || page.children.length > MAX_PAGE_ENTRIES) {
69
68
  throw dataLost(fence, 'page entry bound is invalid');
70
69
  }
71
70
  observedPageCounts[page.level]++;
72
71
  if (page.level === 0) {
73
- if (page.entries.length < 1
74
- || page.children.length !== 0
75
- || page.entries.length !== page.entryCount) {
72
+ if (page.entries.length < 1 ||
73
+ page.children.length !== 0 ||
74
+ page.entries.length !== page.entryCount) {
76
75
  throw dataLost(fence, 'leaf page bounds are invalid');
77
76
  }
78
77
  for (let offset = 0; offset < page.entries.length; offset++) {
@@ -101,16 +100,15 @@ class ZLinkAggregateInventoryStore {
101
100
  };
102
101
  let expectedStart = 0;
103
102
  for (const reference of root.topPages) {
104
- if (reference.level !== root.topLevel
105
- || reference.startIndex !== expectedStart) {
103
+ if (reference.level !== root.topLevel || reference.startIndex !== expectedStart) {
106
104
  throw dataLost(fence, 'top page references are reordered');
107
105
  }
108
106
  await readPage(reference);
109
107
  expectedStart += reference.entryCount;
110
108
  }
111
- if (expectedStart !== root.totalCount
112
- || entries.length !== root.totalCount
113
- || observedPageCounts.some((count, level) => count !== root.pageCountsByLevel[level])) {
109
+ if (expectedStart !== root.totalCount ||
110
+ entries.length !== root.totalCount ||
111
+ observedPageCounts.some((count, level) => count !== root.pageCountsByLevel[level])) {
114
112
  throw dataLost(fence, 'page counts do not match the root');
115
113
  }
116
114
  for (let level = 0; level < observedPageCounts.length; level++) {
@@ -129,7 +127,7 @@ class ZLinkAggregateInventoryStore {
129
127
  if (!sameHash(root.digest, digest.digest())) {
130
128
  throw dataLost(fence, 'inventory digest does not match');
131
129
  }
132
- return entries.map(entry => ({ ...entry }));
130
+ return entries.map((entry) => ({ ...entry }));
133
131
  }
134
132
  }
135
133
  exports.ZLinkAggregateInventoryStore = ZLinkAggregateInventoryStore;
@@ -148,9 +146,9 @@ function buildTree(request) {
148
146
  authorityPayloadSha256: sha256(participant.authorityPayload),
149
147
  membershipMutationSha256: sha256(participant.membershipMutation)
150
148
  }));
151
- const keys = entries.map(entry => entry.authorityKey);
152
- if (new Set(keys).size !== keys.length
153
- || keys.some((key, index) => index > 0 && keys[index - 1].localeCompare(key) >= 0)) {
149
+ const keys = entries.map((entry) => entry.authorityKey);
150
+ if (new Set(keys).size !== keys.length ||
151
+ keys.some((key, index) => index > 0 && keys[index - 1].localeCompare(key) >= 0)) {
154
152
  throw new TypeError('Aggregate participants must be unique and canonically sorted.');
155
153
  }
156
154
  const digest = (0, node_crypto_1.createHash)('sha256');
@@ -159,9 +157,9 @@ function buildTree(request) {
159
157
  const pages = [];
160
158
  let references = packLeafPages(entries, pages);
161
159
  let level = 0;
162
- while (references.length > MAX_PAGE_ENTRIES
163
- || encode(rootCandidate(entries.length, level, references, pages, '', '')).byteLength
164
- > MAX_PAGE_BYTES) {
160
+ while (references.length > MAX_PAGE_ENTRIES ||
161
+ encode(rootCandidate(entries.length, level, references, pages, '', '')).byteLength >
162
+ MAX_PAGE_BYTES) {
165
163
  level++;
166
164
  if (level >= MAX_TREE_LEVELS) {
167
165
  throw new RangeError('Aggregate inventory tree exceeds 32 levels.');
@@ -252,23 +250,23 @@ function rootCandidate(totalCount, topLevel, topPages, pages, digest, declaredDi
252
250
  };
253
251
  }
254
252
  function validateRoot(root, fence) {
255
- if (!Number.isSafeInteger(root.totalCount)
256
- || root.totalCount < 1
257
- || !isSha256(root.digest)
258
- || !isSha256(root.declaredDigest)
259
- || !Number.isSafeInteger(root.topLevel)
260
- || root.topLevel < 0
261
- || root.topLevel >= MAX_TREE_LEVELS
262
- || root.topPages.length < 1
263
- || root.topPages.length > MAX_PAGE_ENTRIES
264
- || root.pageCountsByLevel.length !== root.topLevel + 1
265
- || root.pageCountsByLevel.some(count => !Number.isSafeInteger(count) || count < 1 || count > root.totalCount)) {
253
+ if (!Number.isSafeInteger(root.totalCount) ||
254
+ root.totalCount < 1 ||
255
+ !isSha256(root.digest) ||
256
+ !isSha256(root.declaredDigest) ||
257
+ !Number.isSafeInteger(root.topLevel) ||
258
+ root.topLevel < 0 ||
259
+ root.topLevel >= MAX_TREE_LEVELS ||
260
+ root.topPages.length < 1 ||
261
+ root.topPages.length > MAX_PAGE_ENTRIES ||
262
+ root.pageCountsByLevel.length !== root.topLevel + 1 ||
263
+ root.pageCountsByLevel.some((count) => !Number.isSafeInteger(count) || count < 1 || count > root.totalCount)) {
266
264
  throw dataLost(fence, 'root metadata is invalid');
267
265
  }
268
266
  const leafPages = root.pageCountsByLevel[0];
269
- if (leafPages > root.totalCount
270
- || root.totalCount > leafPages * MAX_PAGE_ENTRIES
271
- || root.topPages.length !== root.pageCountsByLevel[root.topLevel]) {
267
+ if (leafPages > root.totalCount ||
268
+ root.totalCount > leafPages * MAX_PAGE_ENTRIES ||
269
+ root.topPages.length !== root.pageCountsByLevel[root.topLevel]) {
272
270
  throw dataLost(fence, 'root page counts are invalid');
273
271
  }
274
272
  for (let level = 1; level < root.pageCountsByLevel.length; level++) {
@@ -280,26 +278,26 @@ function validateRoot(root, fence) {
280
278
  }
281
279
  }
282
280
  function validateReference(reference, root, fence) {
283
- if (!Number.isSafeInteger(reference.level)
284
- || reference.level < 0
285
- || reference.level > root.topLevel
286
- || !Number.isSafeInteger(reference.index)
287
- || reference.index < 0
288
- || !Number.isSafeInteger(reference.startIndex)
289
- || reference.startIndex < 0
290
- || !Number.isSafeInteger(reference.entryCount)
291
- || reference.entryCount < 1
292
- || !isSha256(reference.sha256)) {
281
+ if (!Number.isSafeInteger(reference.level) ||
282
+ reference.level < 0 ||
283
+ reference.level > root.topLevel ||
284
+ !Number.isSafeInteger(reference.index) ||
285
+ reference.index < 0 ||
286
+ !Number.isSafeInteger(reference.startIndex) ||
287
+ reference.startIndex < 0 ||
288
+ !Number.isSafeInteger(reference.entryCount) ||
289
+ reference.entryCount < 1 ||
290
+ !isSha256(reference.sha256)) {
293
291
  throw dataLost(fence, 'page reference is invalid');
294
292
  }
295
293
  }
296
294
  function validateEntry(entry, index, fence) {
297
- if (entry.index !== index
298
- || entry.authorityKey.length < 1
299
- || entry.expectedStoreVersion.length < 1
300
- || !['preserve', 'newOwner'].includes(entry.ownerTransition)
301
- || !isSha256(entry.authorityPayloadSha256)
302
- || !isSha256(entry.membershipMutationSha256)) {
295
+ if (entry.index !== index ||
296
+ entry.authorityKey.length < 1 ||
297
+ entry.expectedStoreVersion.length < 1 ||
298
+ !['preserve', 'newOwner'].includes(entry.ownerTransition) ||
299
+ !isSha256(entry.authorityPayloadSha256) ||
300
+ !isSha256(entry.membershipMutationSha256)) {
303
301
  throw dataLost(fence, 'inventory entry is invalid or reordered');
304
302
  }
305
303
  }
@@ -311,8 +309,7 @@ async function putImmutable(provider, key, bytes, signal) {
311
309
  if (result.kind === 'applied')
312
310
  return;
313
311
  const current = await provider.read(key, signal);
314
- if (current.kind !== 'found'
315
- || !Buffer.from(current.value.bytes).equals(Buffer.from(bytes))) {
312
+ if (current.kind !== 'found' || !Buffer.from(current.value.bytes).equals(Buffer.from(bytes))) {
316
313
  throw new Error(`Immutable aggregate inventory value changed: ${key.value}.`);
317
314
  }
318
315
  }
@@ -325,24 +322,24 @@ async function requireFound(provider, key, signal) {
325
322
  }
326
323
  function decodeRoot(bytes) {
327
324
  const value = JSON.parse(Buffer.from(bytes).toString('utf8'));
328
- if (value === null
329
- || typeof value !== 'object'
330
- || !('kind' in value)
331
- || value.kind !== 'aggregate-inventory-root-v1') {
325
+ if (value === null ||
326
+ typeof value !== 'object' ||
327
+ !('kind' in value) ||
328
+ value.kind !== 'aggregate-inventory-root-v1') {
332
329
  throw new Error('Invalid inventory root.');
333
330
  }
334
331
  return value;
335
332
  }
336
333
  function decodePage(bytes) {
337
334
  const value = JSON.parse(Buffer.from(bytes).toString('utf8'));
338
- if (value === null
339
- || typeof value !== 'object'
340
- || !('kind' in value)
341
- || value.kind !== 'aggregate-inventory-page-v1'
342
- || !('entries' in value)
343
- || !Array.isArray(value.entries)
344
- || !('children' in value)
345
- || !Array.isArray(value.children)) {
335
+ if (value === null ||
336
+ typeof value !== 'object' ||
337
+ !('kind' in value) ||
338
+ value.kind !== 'aggregate-inventory-page-v1' ||
339
+ !('entries' in value) ||
340
+ !Array.isArray(value.entries) ||
341
+ !('children' in value) ||
342
+ !Array.isArray(value.children)) {
346
343
  throw new Error('Invalid inventory page.');
347
344
  }
348
345
  return value;
@@ -381,9 +378,9 @@ function isSha256(value) {
381
378
  return typeof value === 'string' && /^[0-9a-f]{64}$/.test(value);
382
379
  }
383
380
  function sameHash(expected, actual) {
384
- return isSha256(expected)
385
- && actual.byteLength === 32
386
- && (0, node_crypto_1.timingSafeEqual)(Buffer.from(expected, 'hex'), Buffer.from(actual));
381
+ return (isSha256(expected) &&
382
+ actual.byteLength === 32 &&
383
+ (0, node_crypto_1.timingSafeEqual)(Buffer.from(expected, 'hex'), Buffer.from(actual)));
387
384
  }
388
385
  function dataLost(fence, reason) {
389
386
  return new Error(`Aggregate '${fence.aggregateId.value}:${fence.aggregateGeneration}' inventory ${reason}.`);
@@ -68,11 +68,11 @@ function percentEncode(bytes) {
68
68
  return result;
69
69
  }
70
70
  function isUnreserved(byte) {
71
- return byte >= 0x41 && byte <= 0x5a
72
- || byte >= 0x61 && byte <= 0x7a
73
- || byte >= 0x30 && byte <= 0x39
74
- || byte === 0x2d
75
- || byte === 0x2e
76
- || byte === 0x5f
77
- || byte === 0x7e;
71
+ return ((byte >= 0x41 && byte <= 0x5a) ||
72
+ (byte >= 0x61 && byte <= 0x7a) ||
73
+ (byte >= 0x30 && byte <= 0x39) ||
74
+ byte === 0x2d ||
75
+ byte === 0x2e ||
76
+ byte === 0x5f ||
77
+ byte === 0x7e);
78
78
  }
@@ -67,9 +67,9 @@ class ZLinkAutoConnectLoop {
67
67
  const liveOwners = this.leaseTracker === undefined
68
68
  ? 0
69
69
  : await this.leaseTracker.getLiveOwnerSetVersion(signal);
70
- if (this.lastStamp === stamp
71
- && this.lastLiveOwnerSetVersion === liveOwners
72
- && this.reconciler.localPublicationReady) {
70
+ if (this.lastStamp === stamp &&
71
+ this.lastLiveOwnerSetVersion === liveOwners &&
72
+ this.reconciler.localPublicationReady) {
73
73
  return;
74
74
  }
75
75
  const tickFailed = await this.runReconcile(signal);