@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,29 +1,27 @@
1
- import { ZLinkFrameworkInternalErrorKind, createInternalFrameworkException, wireReplyFailureException } from '../framework-errors-internal';
1
+ import {
2
+ ZLinkFrameworkInternalErrorKind,
3
+ createInternalFrameworkException,
4
+ wireReplyFailureException
5
+ } from '../framework-errors-internal';
2
6
  import { createHash } from 'node:crypto';
3
- import type {
4
- RoutingId,
5
- SpotRef,
6
- ZLinkSpotCreateResult
7
- } from '../../contracts';
7
+ import type { RoutingId, SpotRef, ZLinkSpotCreateResult } from '../../contracts';
8
8
  import type {
9
9
  ZLinkAuthoritySnapshot,
10
10
  ZLinkLocationOwnerToken,
11
11
  ZLinkObjectReserveResult
12
12
  } from '../locations/internal-location-contracts';
13
- import type { ZLinkAuthorityStore, ZLinkObjectCreationStore } from '../locations/internal-store-contracts';
14
- import {
15
- ZLinkFrameworkException,
16
- ZLinkSpotCreateState
17
- } from '../../contracts';
13
+ import type {
14
+ ZLinkAuthorityStore,
15
+ ZLinkObjectCreationStore
16
+ } from '../locations/internal-store-contracts';
17
+ import { ZLinkFrameworkException, ZLinkSpotCreateState } from '../../contracts';
18
18
  import {
19
19
  decodeServiceReadySpotAuthority,
20
20
  encodeServiceUserSpotAuthorityPayload
21
21
  } from '../foundation/service-authority-payload-codec';
22
22
  import { encodeAuthorityKey } from '../locations/authority-key-codec';
23
23
  import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
24
- import type {
25
- ServiceUserSpotOperationResult
26
- } from '../foundation/service-stateful-runtime';
24
+ import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
27
25
  import type {
28
26
  ServiceUserSpotCloseRecord,
29
27
  ServiceUserSpotCreateRecord,
@@ -32,16 +30,20 @@ import type {
32
30
 
33
31
  export interface ZLinkUserSpotCreationCoordinatorOptions {
34
32
  readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
35
- readonly target: (request: Pick<
36
- ZLinkUserSpotCreationRequest,
37
- 'meshName' | 'stableType'
38
- >, signal?: AbortSignal, excludedNodeRids?: ReadonlySet<string>) => Promise<{
39
- readonly meshName: string;
40
- readonly nodeRid: RoutingId;
41
- readonly nodeGeneration: bigint;
42
- readonly owner: ZLinkLocationOwnerToken;
43
- readonly isLocal: boolean;
44
- } | undefined>;
33
+ readonly target: (
34
+ request: Pick<ZLinkUserSpotCreationRequest, 'meshName' | 'stableType'>,
35
+ signal?: AbortSignal,
36
+ excludedNodeRids?: ReadonlySet<string>
37
+ ) => Promise<
38
+ | {
39
+ readonly meshName: string;
40
+ readonly nodeRid: RoutingId;
41
+ readonly nodeGeneration: bigint;
42
+ readonly owner: ZLinkLocationOwnerToken;
43
+ readonly isLocal: boolean;
44
+ }
45
+ | undefined
46
+ >;
45
47
  readonly pollIntervalMs?: number;
46
48
  readonly cleanupTimeoutMs?: number;
47
49
  readonly remoteCreate?: (
@@ -83,20 +85,27 @@ export interface ZLinkUserSpotCloseTarget {
83
85
  */
84
86
  export class ZLinkUserSpotCreationCoordinator {
85
87
  private readonly localCreations = new Map<string, Promise<ZLinkUserSpotCreationResult>>();
86
- private readonly remoteCreations = new Map<string, {
87
- readonly fingerprint: string;
88
- readonly result: Promise<ZLinkUserSpotCreationResult>;
89
- }>();
88
+ private readonly remoteCreations = new Map<
89
+ string,
90
+ {
91
+ readonly fingerprint: string;
92
+ readonly result: Promise<ZLinkUserSpotCreationResult>;
93
+ }
94
+ >();
90
95
 
91
96
  constructor(private readonly options: ZLinkUserSpotCreationCoordinatorOptions) {}
92
97
 
93
98
  async getOrCreate(
94
99
  request: ZLinkUserSpotCreationRequest,
95
- materialize: (target: {
96
- readonly meshName: string;
97
- readonly nodeRid: RoutingId;
98
- readonly isLocal: boolean;
99
- }, authority: ZLinkAuthoritySnapshot, signal: AbortSignal) => Promise<ZLinkLocalSpotCreateResult>,
100
+ materialize: (
101
+ target: {
102
+ readonly meshName: string;
103
+ readonly nodeRid: RoutingId;
104
+ readonly isLocal: boolean;
105
+ },
106
+ authority: ZLinkAuthoritySnapshot,
107
+ signal: AbortSignal
108
+ ) => Promise<ZLinkLocalSpotCreateResult>,
100
109
  discard?: (signal?: AbortSignal) => Promise<void>
101
110
  ): Promise<ZLinkUserSpotCreationResult> {
102
111
  const deadline = createDeadline(request.timeoutMs, request.signal);
@@ -147,35 +156,38 @@ export class ZLinkUserSpotCreationCoordinator {
147
156
  owner
148
157
  };
149
158
  try {
150
- reserved = await this.options.store.reserve({
151
- key: { kind: 'user_spot', globalId: String(request.spotId) },
152
- intent: {
153
- stableType: request.stableType,
154
- requestContentReference: contentReference,
155
- requestSha256: sha256,
156
- requestEncodedSize: BigInt(request.requestPayload.byteLength)
157
- },
158
- target: authorityTarget,
159
- creatingPayload: encodeServiceUserSpotAuthorityPayload({
160
- state: 'creating',
161
- stableType: request.stableType,
162
- spotId: String(request.spotId),
163
- ownerId: owner.ownerId,
164
- ownerLeaseGeneration: owner.leaseGeneration,
165
- ownerMeshName: target.meshName,
166
- ownerNodeRid: String(target.nodeRid),
167
- ownerNodeGeneration: target.nodeGeneration
168
- }),
169
- capacity: {
170
- actors: 0,
171
- spots: 1,
172
- spotType: {
173
- objectKind: 'user_spot',
159
+ reserved = await this.options.store.reserve(
160
+ {
161
+ key: { kind: 'user_spot', globalId: String(request.spotId) },
162
+ intent: {
163
+ stableType: request.stableType,
164
+ requestContentReference: contentReference,
165
+ requestSha256: sha256,
166
+ requestEncodedSize: BigInt(request.requestPayload.byteLength)
167
+ },
168
+ target: authorityTarget,
169
+ creatingPayload: encodeServiceUserSpotAuthorityPayload({
170
+ state: 'creating',
174
171
  stableType: request.stableType,
175
- count: 1
172
+ spotId: String(request.spotId),
173
+ ownerId: owner.ownerId,
174
+ ownerLeaseGeneration: owner.leaseGeneration,
175
+ ownerMeshName: target.meshName,
176
+ ownerNodeRid: String(target.nodeRid),
177
+ ownerNodeGeneration: target.nodeGeneration
178
+ }),
179
+ capacity: {
180
+ actors: 0,
181
+ spots: 1,
182
+ spotType: {
183
+ objectKind: 'user_spot',
184
+ stableType: request.stableType,
185
+ count: 1
186
+ }
176
187
  }
177
- }
178
- }, signal);
188
+ },
189
+ signal
190
+ );
179
191
  } catch (error) {
180
192
  deadline.close();
181
193
  if (error instanceof ZLinkFrameworkException) throw error;
@@ -190,21 +202,14 @@ export class ZLinkUserSpotCreationCoordinator {
190
202
  excludedNodeRids.add(String(target.nodeRid));
191
203
  }
192
204
  if (
193
- reserved.kind === 'alreadyExists'
194
- || (
195
- reserved.kind === 'conflict'
196
- && reserved.current.kind === 'snapshot'
197
- && reserved.current.allocation.objectKind === 'user_spot'
198
- && reserved.current.allocation.stableType === request.stableType
199
- )
205
+ reserved.kind === 'alreadyExists' ||
206
+ (reserved.kind === 'conflict' &&
207
+ reserved.current.kind === 'snapshot' &&
208
+ reserved.current.allocation.objectKind === 'user_spot' &&
209
+ reserved.current.allocation.stableType === request.stableType)
200
210
  ) {
201
- const current = reserved.kind === 'alreadyExists'
202
- ? reserved.current
203
- : reserved.current;
204
- if (
205
- current.kind === 'snapshot'
206
- && current.allocation.state === 'active'
207
- ) {
211
+ const current = reserved.kind === 'alreadyExists' ? reserved.current : reserved.current;
212
+ if (current.kind === 'snapshot' && current.allocation.state === 'active') {
208
213
  if (request.generatedIdentity === true) {
209
214
  deadline.close();
210
215
  throw spotIdConflict(request.spotId);
@@ -216,10 +221,7 @@ export class ZLinkUserSpotCreationCoordinator {
216
221
  spot
217
222
  };
218
223
  }
219
- if (
220
- current.kind !== 'snapshot'
221
- || !sameCreationTarget(current, authorityTarget)
222
- ) {
224
+ if (current.kind !== 'snapshot' || !sameCreationTarget(current, authorityTarget)) {
223
225
  deadline.close();
224
226
  if (request.generatedIdentity === true) {
225
227
  throw spotIdConflict(request.spotId);
@@ -245,9 +247,8 @@ export class ZLinkUserSpotCreationCoordinator {
245
247
  }
246
248
  if (current.allocation.state === 'reserved' && target.isLocal) {
247
249
  const pending = current.pendingCreation;
248
- const admitted = pending === undefined
249
- ? undefined
250
- : this.localCreations.get(pending.reservationId);
250
+ const admitted =
251
+ pending === undefined ? undefined : this.localCreations.get(pending.reservationId);
251
252
  if (admitted === undefined) {
252
253
  try {
253
254
  const spot = await this.awaitReady(request, signal);
@@ -312,8 +313,7 @@ export class ZLinkUserSpotCreationCoordinator {
312
313
  target.nodeGeneration,
313
314
  deadlineUnixMs
314
315
  ),
315
- (_payload, authority, localSignal) =>
316
- materialize(target, authority, localSignal),
316
+ (_payload, authority, localSignal) => materialize(target, authority, localSignal),
317
317
  discard,
318
318
  signal
319
319
  )
@@ -405,8 +405,8 @@ export class ZLinkUserSpotCreationCoordinator {
405
405
  timeoutMs: 1
406
406
  });
407
407
  if (
408
- String(current.allocation.descriptor.rid) !== String(spot.nodeRid)
409
- || current.allocation.descriptor.meshName !== spot.meshName
408
+ String(current.allocation.descriptor.rid) !== String(spot.nodeRid) ||
409
+ current.allocation.descriptor.meshName !== spot.meshName
410
410
  ) {
411
411
  throw createInternalFrameworkException(
412
412
  ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
@@ -439,11 +439,13 @@ export class ZLinkUserSpotCreationCoordinator {
439
439
  const result = this.materializeRemoteCreate(record, materialize, discard, signal);
440
440
  admitted = { fingerprint, result };
441
441
  this.remoteCreations.set(key, admitted);
442
- void result.finally(() => {
443
- if (this.remoteCreations.get(key)?.result === result) {
444
- this.remoteCreations.delete(key);
445
- }
446
- }).catch(() => undefined);
442
+ void result
443
+ .finally(() => {
444
+ if (this.remoteCreations.get(key)?.result === result) {
445
+ this.remoteCreations.delete(key);
446
+ }
447
+ })
448
+ .catch(() => undefined);
447
449
  }
448
450
  return await admitted.result;
449
451
  }
@@ -463,11 +465,13 @@ export class ZLinkUserSpotCreationCoordinator {
463
465
  if (admitted === undefined) {
464
466
  admitted = this.materializeRemoteCreate(record, materialize, discard, signal);
465
467
  this.localCreations.set(key, admitted);
466
- void admitted.finally(() => {
467
- if (this.localCreations.get(key) === admitted) {
468
- this.localCreations.delete(key);
469
- }
470
- }).catch(() => undefined);
468
+ void admitted
469
+ .finally(() => {
470
+ if (this.localCreations.get(key) === admitted) {
471
+ this.localCreations.delete(key);
472
+ }
473
+ })
474
+ .catch(() => undefined);
471
475
  }
472
476
  return await admitted;
473
477
  }
@@ -487,21 +491,20 @@ export class ZLinkUserSpotCreationCoordinator {
487
491
  const exactIdentity =
488
492
  current.kind !== 'snapshot'
489
493
  ? false
490
- : current.allocation.objectKind === 'user_spot'
491
- && current.allocation.stableType === record.stableType
492
- && current.objectGeneration === record.reservation.objectGeneration
493
- && current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration
494
- && String(current.allocation.descriptor.rid) === record.reservation.targetNodeRid
495
- && current.allocation.descriptorLifecycleGeneration
496
- === record.reservation.targetNodeGeneration
497
- && current.ownerId === record.reservation.targetOwnerId
498
- && current.ownerLeaseGeneration === record.reservation.targetOwnerLeaseGeneration
499
- && current.allocation.capacity.actors === 0
500
- && current.allocation.capacity.spots === record.reservation.pendingCapacityDelta
501
- && current.allocation.capacity.spotType?.objectKind === 'user_spot'
502
- && current.allocation.capacity.spotType.stableType === record.stableType
503
- && current.allocation.capacity.spotType.count
504
- === record.reservation.pendingCapacityDelta;
494
+ : current.allocation.objectKind === 'user_spot' &&
495
+ current.allocation.stableType === record.stableType &&
496
+ current.objectGeneration === record.reservation.objectGeneration &&
497
+ current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration &&
498
+ String(current.allocation.descriptor.rid) === record.reservation.targetNodeRid &&
499
+ current.allocation.descriptorLifecycleGeneration ===
500
+ record.reservation.targetNodeGeneration &&
501
+ current.ownerId === record.reservation.targetOwnerId &&
502
+ current.ownerLeaseGeneration === record.reservation.targetOwnerLeaseGeneration &&
503
+ current.allocation.capacity.actors === 0 &&
504
+ current.allocation.capacity.spots === record.reservation.pendingCapacityDelta &&
505
+ current.allocation.capacity.spotType?.objectKind === 'user_spot' &&
506
+ current.allocation.capacity.spotType.stableType === record.stableType &&
507
+ current.allocation.capacity.spotType.count === record.reservation.pendingCapacityDelta;
505
508
  if (!exactIdentity || current.kind !== 'snapshot') {
506
509
  throw createInternalFrameworkException(
507
510
  ZLinkFrameworkInternalErrorKind.SpotMoving,
@@ -531,10 +534,7 @@ export class ZLinkUserSpotCreationCoordinator {
531
534
  );
532
535
  }
533
536
  const pending = current.pendingCreation;
534
- if (
535
- pending === undefined
536
- || pending.reservationId !== record.reservation.reservationId
537
- ) {
537
+ if (pending === undefined || pending.reservationId !== record.reservation.reservationId) {
538
538
  throw createInternalFrameworkException(
539
539
  ZLinkFrameworkInternalErrorKind.RequestFailed,
540
540
  'Remote User Spot Pending creation projection is missing.'
@@ -547,27 +547,26 @@ export class ZLinkUserSpotCreationCoordinator {
547
547
  );
548
548
  let local: ZLinkLocalSpotCreateResult | undefined;
549
549
  try {
550
- local = await materialize(
551
- requestPayload,
552
- current,
553
- signal ?? new AbortController().signal
554
- );
550
+ local = await materialize(requestPayload, current, signal ?? new AbortController().signal);
555
551
  if (local.state === ZLinkSpotCreateState.Rejected) {
556
552
  local.publication?.abort();
557
- await this.options.store.abort({
558
- key: { kind: 'user_spot', globalId: record.spotId },
559
- reservationId: pending.reservationId,
560
- expectedStoreVersion: current.storeVersion.value,
561
- target: {
562
- meshName: current.allocation.descriptor.meshName,
563
- nodeRid: current.allocation.descriptor.rid,
564
- nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
565
- owner: {
566
- ownerId: current.ownerId,
567
- leaseGeneration: current.ownerLeaseGeneration
553
+ await this.options.store.abort(
554
+ {
555
+ key: { kind: 'user_spot', globalId: record.spotId },
556
+ reservationId: pending.reservationId,
557
+ expectedStoreVersion: current.storeVersion.value,
558
+ target: {
559
+ meshName: current.allocation.descriptor.meshName,
560
+ nodeRid: current.allocation.descriptor.rid,
561
+ nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
562
+ owner: {
563
+ ownerId: current.ownerId,
564
+ leaseGeneration: current.ownerLeaseGeneration
565
+ }
568
566
  }
569
- }
570
- }, signal);
567
+ },
568
+ signal
569
+ );
571
570
  await discard?.(signal);
572
571
  return {
573
572
  result: { spot, state: local.state, reply: local.reply },
@@ -576,30 +575,33 @@ export class ZLinkUserSpotCreationCoordinator {
576
575
  }
577
576
  let committed;
578
577
  try {
579
- committed = await this.options.store.commit({
580
- key: { kind: 'user_spot', globalId: record.spotId },
581
- reservationId: pending.reservationId,
582
- expectedStoreVersion: current.storeVersion.value,
583
- target: {
584
- meshName: current.allocation.descriptor.meshName,
585
- nodeRid: current.allocation.descriptor.rid,
586
- nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
587
- owner: {
578
+ committed = await this.options.store.commit(
579
+ {
580
+ key: { kind: 'user_spot', globalId: record.spotId },
581
+ reservationId: pending.reservationId,
582
+ expectedStoreVersion: current.storeVersion.value,
583
+ target: {
584
+ meshName: current.allocation.descriptor.meshName,
585
+ nodeRid: current.allocation.descriptor.rid,
586
+ nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
587
+ owner: {
588
+ ownerId: current.ownerId,
589
+ leaseGeneration: current.ownerLeaseGeneration
590
+ }
591
+ },
592
+ readyPayload: encodeServiceUserSpotAuthorityPayload({
593
+ state: 'ready',
594
+ stableType: record.stableType,
595
+ spotId: record.spotId,
588
596
  ownerId: current.ownerId,
589
- leaseGeneration: current.ownerLeaseGeneration
590
- }
597
+ ownerLeaseGeneration: current.ownerLeaseGeneration,
598
+ ownerMeshName: current.allocation.descriptor.meshName,
599
+ ownerNodeRid: String(current.allocation.descriptor.rid),
600
+ ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
601
+ })
591
602
  },
592
- readyPayload: encodeServiceUserSpotAuthorityPayload({
593
- state: 'ready',
594
- stableType: record.stableType,
595
- spotId: record.spotId,
596
- ownerId: current.ownerId,
597
- ownerLeaseGeneration: current.ownerLeaseGeneration,
598
- ownerMeshName: current.allocation.descriptor.meshName,
599
- ownerNodeRid: String(current.allocation.descriptor.rid),
600
- ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
601
- })
602
- }, signal);
603
+ signal
604
+ );
603
605
  } catch (error) {
604
606
  throw createInternalFrameworkException(
605
607
  ZLinkFrameworkInternalErrorKind.RequestFailed,
@@ -632,26 +634,32 @@ export class ZLinkUserSpotCreationCoordinator {
632
634
  const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? 1_000);
633
635
  const cleanupSignal = cleanupDeadline.signal;
634
636
  const cleanup = await Promise.allSettled([
635
- waitForAbort(this.options.store.abort({
636
- key: { kind: 'user_spot', globalId: record.spotId },
637
- reservationId: pending.reservationId,
638
- expectedStoreVersion: current.storeVersion.value,
639
- target: {
640
- meshName: current.allocation.descriptor.meshName,
641
- nodeRid: current.allocation.descriptor.rid,
642
- nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
643
- owner: {
644
- ownerId: current.ownerId,
645
- leaseGeneration: current.ownerLeaseGeneration
646
- }
647
- }
648
- }, cleanupSignal), cleanupSignal),
637
+ waitForAbort(
638
+ this.options.store.abort(
639
+ {
640
+ key: { kind: 'user_spot', globalId: record.spotId },
641
+ reservationId: pending.reservationId,
642
+ expectedStoreVersion: current.storeVersion.value,
643
+ target: {
644
+ meshName: current.allocation.descriptor.meshName,
645
+ nodeRid: current.allocation.descriptor.rid,
646
+ nodeLifecycleGeneration: current.allocation.descriptorLifecycleGeneration,
647
+ owner: {
648
+ ownerId: current.ownerId,
649
+ leaseGeneration: current.ownerLeaseGeneration
650
+ }
651
+ }
652
+ },
653
+ cleanupSignal
654
+ ),
655
+ cleanupSignal
656
+ ),
649
657
  waitForAbort(discard?.(cleanupSignal) ?? Promise.resolve(), cleanupSignal)
650
658
  ]);
651
659
  cleanupDeadline.close();
652
660
  const cleanupErrors = cleanup
653
661
  .filter((item): item is PromiseRejectedResult => item.status === 'rejected')
654
- .map(item => item.reason);
662
+ .map((item) => item.reason);
655
663
  if (cleanupErrors.length > 0) {
656
664
  throw new AggregateError(
657
665
  [error, ...cleanupErrors],
@@ -670,22 +678,19 @@ export class ZLinkUserSpotCreationCoordinator {
670
678
  const key = encodeAuthorityKey('user_spot', record.target.spotId);
671
679
  const current = await this.options.store.readAuthority(key, signal);
672
680
  if (current.kind === 'missing') return false;
673
- if (
674
- current.objectGeneration !== record.target.objectGeneration
675
- ) {
681
+ if (current.objectGeneration !== record.target.objectGeneration) {
676
682
  throw createInternalFrameworkException(
677
683
  ZLinkFrameworkInternalErrorKind.SpotGenerationStale,
678
684
  `User Spot '${record.target.spotId}' generation is stale.`
679
685
  );
680
686
  }
681
687
  if (
682
- current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration
683
- || current.storeVersion.value !== record.target.expectedStoreVersion
684
- || String(current.allocation.descriptor.rid) !== record.target.targetNodeRid
685
- || current.allocation.descriptorLifecycleGeneration
686
- !== record.target.targetNodeGeneration
687
- || current.allocation.objectKind !== 'user_spot'
688
- || current.allocation.state !== 'active'
688
+ current.authorityOwnerGeneration !== record.target.authorityOwnerGeneration ||
689
+ current.storeVersion.value !== record.target.expectedStoreVersion ||
690
+ String(current.allocation.descriptor.rid) !== record.target.targetNodeRid ||
691
+ current.allocation.descriptorLifecycleGeneration !== record.target.targetNodeGeneration ||
692
+ current.allocation.objectKind !== 'user_spot' ||
693
+ current.allocation.state !== 'active'
689
694
  ) {
690
695
  throw createInternalFrameworkException(
691
696
  ZLinkFrameworkInternalErrorKind.SpotMoving,
@@ -743,9 +748,9 @@ export class ZLinkUserSpotCreationCoordinator {
743
748
  ): Promise<ZLinkAuthoritySnapshot> {
744
749
  const ready = decodeServiceReadySpotAuthority(current.payload);
745
750
  if (
746
- ready?.kind !== 'user_spot'
747
- || ready.spotId !== spotId
748
- || ready.stableType !== current.allocation.stableType
751
+ ready?.kind !== 'user_spot' ||
752
+ ready.spotId !== spotId ||
753
+ ready.stableType !== current.allocation.stableType
749
754
  ) {
750
755
  throw createInternalFrameworkException(
751
756
  ZLinkFrameworkInternalErrorKind.SpotMoving,
@@ -861,10 +866,7 @@ export class ZLinkUserSpotCreationCoordinator {
861
866
  },
862
867
  timeoutMs
863
868
  );
864
- if (
865
- result.terminalResult !== 0
866
- || result.tail?.kind !== 'userSpotCreate'
867
- ) {
869
+ if (result.terminalResult !== 0 || result.tail?.kind !== 'userSpotCreate') {
868
870
  throw remoteUserSpotFailure(
869
871
  result.terminalResult,
870
872
  result.failureCode,
@@ -877,11 +879,12 @@ export class ZLinkUserSpotCreationCoordinator {
877
879
  meshName: snapshot.allocation.descriptor.meshName,
878
880
  nodeRid: targetNodeRid
879
881
  };
880
- const state = result.tail.createResult === 'existing'
881
- ? ZLinkSpotCreateState.Existing
882
- : result.tail.createResult === 'created'
883
- ? ZLinkSpotCreateState.Created
884
- : ZLinkSpotCreateState.Rejected;
882
+ const state =
883
+ result.tail.createResult === 'existing'
884
+ ? ZLinkSpotCreateState.Existing
885
+ : result.tail.createResult === 'created'
886
+ ? ZLinkSpotCreateState.Created
887
+ : ZLinkSpotCreateState.Rejected;
885
888
  return {
886
889
  result: {
887
890
  spot,
@@ -889,14 +892,14 @@ export class ZLinkUserSpotCreationCoordinator {
889
892
  ...(result.payload === undefined
890
893
  ? {}
891
894
  : {
892
- reply: this.options.decodeRemoteReply?.(result.payload.payload)
893
- ?? Buffer.from(result.payload.payload)
895
+ reply:
896
+ this.options.decodeRemoteReply?.(result.payload.payload) ??
897
+ Buffer.from(result.payload.payload)
894
898
  })
895
899
  },
896
900
  spot
897
901
  };
898
902
  }
899
-
900
903
  }
901
904
 
902
905
  function spotIdConflict(spotId: RoutingId): ZLinkFrameworkException {
@@ -930,18 +933,12 @@ function spotRef(
930
933
  ): SpotRef {
931
934
  const decoded = decodeServiceReadySpotAuthority(snapshot.payload);
932
935
  if (
933
- (
934
- allowPending
935
- ? (
936
- snapshot.allocation.objectKind !== 'user_spot'
937
- || snapshot.allocation.stableType !== request.stableType
938
- )
939
- : (
940
- decoded?.kind !== 'user_spot'
941
- || decoded.stableType !== request.stableType
942
- || decoded.spotId !== String(request.spotId)
943
- )
944
- )
936
+ allowPending
937
+ ? snapshot.allocation.objectKind !== 'user_spot' ||
938
+ snapshot.allocation.stableType !== request.stableType
939
+ : decoded?.kind !== 'user_spot' ||
940
+ decoded.stableType !== request.stableType ||
941
+ decoded.spotId !== String(request.spotId)
945
942
  ) {
946
943
  throw new Error('User Spot Ready authority does not match the requested identity.');
947
944
  }
@@ -1037,11 +1034,13 @@ function sameCreationTarget(
1037
1034
  snapshot: ZLinkAuthoritySnapshot,
1038
1035
  target: Parameters<ZLinkObjectCreationStore['reserve']>[0]['target']
1039
1036
  ): boolean {
1040
- return snapshot.allocation.descriptor.meshName === target.meshName
1041
- && String(snapshot.allocation.descriptor.rid) === String(target.nodeRid)
1042
- && snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration
1043
- && snapshot.ownerId === target.owner.ownerId
1044
- && snapshot.ownerLeaseGeneration === target.owner.leaseGeneration;
1037
+ return (
1038
+ snapshot.allocation.descriptor.meshName === target.meshName &&
1039
+ String(snapshot.allocation.descriptor.rid) === String(target.nodeRid) &&
1040
+ snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration &&
1041
+ snapshot.ownerId === target.owner.ownerId &&
1042
+ snapshot.ownerLeaseGeneration === target.owner.leaseGeneration
1043
+ );
1045
1044
  }
1046
1045
 
1047
1046
  function remoteCreationFingerprint(record: ServiceUserSpotCreateRecord): string {
@@ -1051,7 +1050,7 @@ function remoteCreationFingerprint(record: ServiceUserSpotCreateRecord): string
1051
1050
  stableType: record.stableType,
1052
1051
  reservation: record.reservation
1053
1052
  },
1054
- (_key, value: unknown) => typeof value === 'bigint' ? `${value}n` : value
1053
+ (_key, value: unknown) => (typeof value === 'bigint' ? `${value}n` : value)
1055
1054
  );
1056
1055
  }
1057
1056
 
@@ -1091,17 +1090,23 @@ function remoteUserSpotFailure(
1091
1090
  );
1092
1091
  }
1093
1092
 
1094
- function createDeadline(timeoutMs: number, parent?: AbortSignal): {
1093
+ function createDeadline(
1094
+ timeoutMs: number,
1095
+ parent?: AbortSignal
1096
+ ): {
1095
1097
  readonly signal: AbortSignal;
1096
1098
  close(): void;
1097
1099
  } {
1098
1100
  const controller = new AbortController();
1099
1101
  const timeout = setTimeout(
1100
- () => controller.abort(createInternalFrameworkException(
1101
- ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
1102
- 'User Spot creation exceeded its end-to-end deadline.',
1103
- true
1104
- )),
1102
+ () =>
1103
+ controller.abort(
1104
+ createInternalFrameworkException(
1105
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
1106
+ 'User Spot creation exceeded its end-to-end deadline.',
1107
+ true
1108
+ )
1109
+ ),
1105
1110
  timeoutMs
1106
1111
  );
1107
1112
  const abort = () => controller.abort(parent?.reason);
@@ -1136,11 +1141,11 @@ function waitForAbort<T>(operation: Promise<T>, signal: AbortSignal): Promise<T>
1136
1141
  const abort = () => reject(signal.reason);
1137
1142
  signal.addEventListener('abort', abort, { once: true });
1138
1143
  operation.then(
1139
- value => {
1144
+ (value) => {
1140
1145
  signal.removeEventListener('abort', abort);
1141
1146
  resolve(value);
1142
1147
  },
1143
- error => {
1148
+ (error) => {
1144
1149
  signal.removeEventListener('abort', abort);
1145
1150
  reject(error);
1146
1151
  }