@zlink-systems/framework 0.30.0 → 0.30.2

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 (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -144,7 +144,8 @@ class ZLinkHostSpotAddressTransport {
144
144
  instanceSpot: call.instanceSpot,
145
145
  timeoutMs: deadline.requireRemaining(),
146
146
  signal: deadline.signal,
147
- metadata: call.metadata
147
+ metadata: call.metadata,
148
+ onAdmitted: call.onAdmitted
148
149
  }), deadline.signal);
149
150
  this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, existing.routerChannelId, existing.stableType, existing.targetNodeRid);
150
151
  return reply;
@@ -173,7 +174,7 @@ class ZLinkHostSpotAddressTransport {
173
174
  const table = this.options.completions(selected.meshName);
174
175
  if (table === undefined)
175
176
  throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
176
- const completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata), deadline.signal);
177
+ const completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata, call.onAdmitted), deadline.signal);
177
178
  this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, selected.meshName, selected.target.stableType, selected.target.targetNodeRid);
178
179
  const completion = await (0, abort_1.awaitWithAbort)(completionPromise, deadline.signal);
179
180
  try {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkSpotRuntimeOptionsFactory = void 0;
4
+ const routing_id_1 = require("../routing-id");
4
5
  const contracts_1 = require("../../contracts");
5
6
  const actors_1 = require("../actors");
6
7
  const channels_1 = require("../channels");
@@ -39,6 +40,13 @@ class ZLinkSpotRuntimeOptionsFactory {
39
40
  }
40
41
  await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
41
42
  },
43
+ admitEntryActorPacketPrefix: (meshName, actorId, records) => {
44
+ const runtime = this.options.spotNodeRuntime();
45
+ if (runtime === undefined) {
46
+ throw new configuration_1.ZLinkConfigurationException('Entry Actor replay requires the MeshNode runtime.');
47
+ }
48
+ return runtime.admitEntryActorPacketPrefix(meshName, actorId, records);
49
+ },
42
50
  executeEntryActor: (meshName, actorId, operation) => {
43
51
  const runtime = this.options.spotNodeRuntime();
44
52
  if (runtime === undefined) {
@@ -135,8 +143,9 @@ class ZLinkSpotRuntimeOptionsFactory {
135
143
  nativeSpotNodeProvider: (meshName) => this.options.spotNodeRuntime()?.meshNode(meshName),
136
144
  spotRouteResolver: this.options.createLocationSpotRouteResolver(),
137
145
  actorResolver: (actorId) => {
138
- const state = this.options.actorManager()?.getState(actorId);
139
- return state?.isMoving === true ? undefined : state?.actor;
146
+ const manager = this.options.actorManager();
147
+ const state = manager?.getState(actorId);
148
+ return state?.isMoving === true ? undefined : manager?.resolveLocalActor(actorId);
140
149
  },
141
150
  canonicalActorJoinResolver: (fence) => this.options.boundSessionRelay.actorJoins.prepareCanonicalActorJoin({
142
151
  actorId: fence.actorId,
@@ -152,13 +161,12 @@ class ZLinkSpotRuntimeOptionsFactory {
152
161
  const actorRef = state?.nativeActorRef === undefined
153
162
  ? undefined
154
163
  : (0, actors_1.toFrameworkActorRef)(state.nativeActorRef, state.meshName ?? '');
155
- const localNodeRid = this.primaryNodeRoutingId();
164
+ const localNodeRid = state?.meshName === undefined ? undefined : this.meshNodeRoutingId(state.meshName);
156
165
  if (state?.actor === undefined ||
157
- state.spot === undefined ||
158
166
  state.remoteActorPacketTarget !== undefined ||
159
167
  actorRef === undefined ||
160
168
  localNodeRid === undefined ||
161
- String(actorRef.nodeRid) !== localNodeRid) {
169
+ !(0, routing_id_1.routingIdsEqual)(actorRef.nodeRid, localNodeRid)) {
162
170
  return {};
163
171
  }
164
172
  return {
@@ -178,6 +186,7 @@ class ZLinkSpotRuntimeOptionsFactory {
178
186
  contracts_1.ZLinkSpotRelocationCoordinationMode.FrameworkManaged);
179
187
  },
180
188
  actorTransferRuntime,
189
+ releaseActorMembers: (meshName, spotId) => this.options.actorManager()?.releaseSpotActorMembers(meshName, spotId) ?? Promise.resolve(),
181
190
  boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
182
191
  actorHandoffRuntime: this.options.actorHandoff,
183
192
  metrics: this.options.metrics,
@@ -192,11 +201,11 @@ class ZLinkSpotRuntimeOptionsFactory {
192
201
  }
193
202
  primaryNodeRoutingId() {
194
203
  const node = this.primaryNode();
195
- return node === undefined ? undefined : String(node.status().routingId);
204
+ return node === undefined ? undefined : node.status().routingId;
196
205
  }
197
206
  meshNodeRoutingId(meshName) {
198
207
  const node = this.options.spotNodeRuntime()?.meshNode(meshName);
199
- return node === undefined ? undefined : String(node.status().routingId);
208
+ return node === undefined ? undefined : node.status().routingId;
200
209
  }
201
210
  }
202
211
  exports.ZLinkSpotRuntimeOptionsFactory = ZLinkSpotRuntimeOptionsFactory;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkUserSpotCreationCoordinator = void 0;
4
4
  exports.encodeLocationCreationContent = encodeLocationCreationContent;
5
5
  exports.decodeLocationCreationContent = decodeLocationCreationContent;
6
+ const routing_id_1 = require("../routing-id");
6
7
  const node_crypto_1 = require("node:crypto");
7
8
  const contracts_1 = require("../../contracts");
8
9
  const service_authority_payload_codec_1 = require("../foundation/service-authority-payload-codec");
@@ -32,7 +33,6 @@ class ZLinkUserSpotCreationCoordinator {
32
33
  const contentReference = encodeLocationCreationContent(request.requestPayload);
33
34
  const excludedNodeRids = new Set();
34
35
  let target;
35
- let authorityTarget;
36
36
  let reserved;
37
37
  for (;;) {
38
38
  try {
@@ -48,12 +48,12 @@ class ZLinkUserSpotCreationCoordinator {
48
48
  deadline.close();
49
49
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, 'No eligible User Spot placement target is ready.', true);
50
50
  }
51
- if (excludedNodeRids.has(String(target.nodeRid))) {
51
+ if (excludedNodeRids.has((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid))) {
52
52
  deadline.close();
53
53
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, 'No additional User Spot placement target is ready.', true);
54
54
  }
55
55
  const owner = target.owner;
56
- authorityTarget = {
56
+ const authorityTarget = {
57
57
  meshName: target.meshName,
58
58
  nodeRid: target.nodeRid,
59
59
  nodeLifecycleGeneration: target.nodeGeneration,
@@ -97,84 +97,31 @@ class ZLinkUserSpotCreationCoordinator {
97
97
  throw error;
98
98
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot reservation Store operation failed.', false, error);
99
99
  }
100
- if (reserved.kind !== 'placementCapacityExhausted')
101
- break;
102
- excludedNodeRids.add(String(target.nodeRid));
103
- }
104
- if (reserved.kind === 'alreadyExists' ||
105
- (reserved.kind === 'conflict' &&
106
- reserved.current.kind === 'snapshot' &&
107
- reserved.current.allocation.objectKind === 'user_spot' &&
108
- reserved.current.allocation.stableType === request.stableType)) {
109
- const current = reserved.kind === 'alreadyExists' ? reserved.current : reserved.current;
110
- if (current.kind === 'snapshot' && 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)) {
111
105
  if (request.generatedIdentity === true) {
112
106
  deadline.close();
113
107
  throw spotIdConflict(request.spotId);
114
108
  }
115
- const spot = spotRef(current, request);
116
- deadline.close();
117
- return {
118
- result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing },
119
- spot
120
- };
121
- }
122
- if (current.kind !== 'snapshot' || !sameCreationTarget(current, authorityTarget)) {
123
- deadline.close();
124
- if (request.generatedIdentity === true) {
125
- throw spotIdConflict(request.spotId);
126
- }
127
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot creation requires a remote generation-fenced create operation.');
128
- }
129
- if (current.allocation.state === 'reserved' && !target.isLocal) {
130
109
  try {
131
- return await this.remoteCreate(request, current, target.nodeRid, target.nodeGeneration, deadlineUnixMs, deadlineMs);
132
- }
133
- finally {
134
- deadline.close();
135
- }
136
- }
137
- if (current.allocation.state === 'reserved' && target.isLocal) {
138
- const pending = current.pendingCreation;
139
- const admitted = pending === undefined ? undefined : this.localCreations.get(pending.reservationId);
140
- if (admitted === undefined) {
141
- try {
142
- const spot = await this.awaitReady(request, signal);
143
- return {
144
- result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing },
145
- spot
146
- };
147
- }
148
- finally {
110
+ const spot = await this.awaitReady(request, signal);
111
+ if (spot !== undefined) {
149
112
  deadline.close();
113
+ return { result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing }, spot };
150
114
  }
151
115
  }
152
- try {
153
- const result = await admitted;
154
- return result.result.state === contracts_1.ZLinkSpotCreateState.Created
155
- ? {
156
- result: {
157
- ...result.result,
158
- state: contracts_1.ZLinkSpotCreateState.Existing
159
- },
160
- spot: result.spot
161
- }
162
- : result;
163
- }
164
- finally {
116
+ catch (error) {
165
117
  deadline.close();
118
+ throw error;
166
119
  }
120
+ continue;
167
121
  }
168
- try {
169
- const spot = await this.awaitReady(request, signal);
170
- return {
171
- result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing },
172
- spot
173
- };
174
- }
175
- finally {
176
- deadline.close();
177
- }
122
+ if (reserved.kind !== 'placementCapacityExhausted')
123
+ break;
124
+ excludedNodeRids.add((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid));
178
125
  }
179
126
  if (reserved.kind === 'typeMismatch') {
180
127
  deadline.close();
@@ -272,7 +219,7 @@ class ZLinkUserSpotCreationCoordinator {
272
219
  current.allocation.stableType === record.stableType &&
273
220
  current.objectGeneration === record.reservation.objectGeneration &&
274
221
  current.authorityOwnerGeneration === record.reservation.authorityOwnerGeneration &&
275
- String(current.allocation.descriptor.rid) === record.reservation.targetNodeRid &&
222
+ (0, routing_id_1.routingIdsEqual)(current.allocation.descriptor.rid, record.reservation.targetNodeRid) &&
276
223
  current.allocation.descriptorLifecycleGeneration ===
277
224
  record.reservation.targetNodeGeneration &&
278
225
  current.ownerId === record.reservation.targetOwnerId &&
@@ -313,7 +260,7 @@ class ZLinkUserSpotCreationCoordinator {
313
260
  try {
314
261
  local = await materialize(requestPayload, current, signal ?? new AbortController().signal);
315
262
  if (local.state === contracts_1.ZLinkSpotCreateState.Rejected) {
316
- local.publication?.abort();
263
+ await local.publication?.abort();
317
264
  await this.options.store.abort({
318
265
  key: { kind: 'user_spot', globalId: record.spotId },
319
266
  reservationId: pending.reservationId,
@@ -372,14 +319,16 @@ class ZLinkUserSpotCreationCoordinator {
372
319
  objectGeneration: committed.ready.objectGeneration
373
320
  };
374
321
  this.options.publishReadyRoute?.(committed.ready.allocation.descriptor.meshName, readySpotRoute(record.spotId, committed.ready));
375
- local.publication?.publish();
322
+ await local.publication?.publish();
376
323
  return {
377
324
  result: { spot: readySpot, state: local.state, reply: local.reply },
378
325
  spot: readySpot
379
326
  };
380
327
  }
381
328
  catch (error) {
382
- local?.publication?.abort();
329
+ const publicationCleanup = await Promise.allSettled([
330
+ Promise.resolve().then(() => local?.publication?.abort())
331
+ ]);
383
332
  const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS);
384
333
  const cleanupSignal = cleanupDeadline.signal;
385
334
  const cleanup = await Promise.allSettled([
@@ -400,7 +349,7 @@ class ZLinkUserSpotCreationCoordinator {
400
349
  waitForAbort(discard?.(cleanupSignal) ?? Promise.resolve(), cleanupSignal)
401
350
  ]);
402
351
  cleanupDeadline.close();
403
- const cleanupErrors = cleanup
352
+ const cleanupErrors = [...publicationCleanup, ...cleanup]
404
353
  .filter((item) => item.status === 'rejected')
405
354
  .map((item) => item.reason);
406
355
  if (cleanupErrors.length > 0) {
@@ -475,7 +424,14 @@ class ZLinkUserSpotCreationCoordinator {
475
424
  for (;;) {
476
425
  signal.throwIfAborted();
477
426
  const current = await this.options.store.readAuthority(key, signal);
478
- if (current.kind === 'snapshot' && current.allocation.state === 'active') {
427
+ if (current.kind === 'missing')
428
+ return undefined;
429
+ if (current.allocation.objectKind !== 'user_spot' ||
430
+ current.allocation.stableType !== request.stableType) {
431
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotTypeMismatch, `User Spot '${String(request.spotId)}' has another stable type.`);
432
+ }
433
+ if (current.allocation.state === 'active' &&
434
+ (0, service_authority_payload_codec_1.decodeServiceClosingSpotAuthority)(current.payload) === undefined) {
479
435
  return spotRef(current, request);
480
436
  }
481
437
  await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
@@ -574,7 +530,7 @@ function requireCloseTarget(current, spotId, fence) {
574
530
  decoded.ownerLeaseGeneration !== current.ownerLeaseGeneration ||
575
531
  allocation.objectKind !== 'user_spot' ||
576
532
  allocation.state !== 'active' ||
577
- String(allocation.descriptor.rid) !== fence.nodeRid ||
533
+ !(0, routing_id_1.routingIdsEqual)(allocation.descriptor.rid, fence.nodeRid) ||
578
534
  (fence.meshName !== undefined && allocation.descriptor.meshName !== fence.meshName) ||
579
535
  (fence.nodeGeneration !== undefined &&
580
536
  allocation.descriptorLifecycleGeneration !== fence.nodeGeneration) ||
@@ -662,13 +618,6 @@ function decodeLocationCreationContent(reference, expectedSha256, expectedEncode
662
618
  }
663
619
  return payload;
664
620
  }
665
- function sameCreationTarget(snapshot, target) {
666
- return (snapshot.allocation.descriptor.meshName === target.meshName &&
667
- String(snapshot.allocation.descriptor.rid) === String(target.nodeRid) &&
668
- snapshot.allocation.descriptorLifecycleGeneration === target.nodeLifecycleGeneration &&
669
- snapshot.ownerId === target.owner.ownerId &&
670
- snapshot.ownerLeaseGeneration === target.owner.leaseGeneration);
671
- }
672
621
  function remoteCreationFingerprint(record) {
673
622
  return JSON.stringify({
674
623
  spotId: record.spotId,
@@ -1,6 +1,7 @@
1
1
  import type { ActorRef, RoutingId } from '../../contracts/Common';
2
2
  import { type ZLinkActorLocation } from './internal-location-contracts';
3
3
  import type { ZLinkActorLocationStore, ZLinkAuthorityStore } from './internal-store-contracts';
4
+ import { ZLinkSpotKind } from '../../contracts/Spots';
4
5
  import type { IZLinkLocationLifecycleRuntime, ZLinkOwnershipLostEvent } from './lifecycle-runtime';
5
6
  export declare enum ZLinkActorClaimStatus {
6
7
  Claimed = "claimed",
@@ -31,8 +32,7 @@ export declare class ZLinkActorLocationClaims {
31
32
  claim(actorType: string, actorId: string, nodeRid: RoutingId, deactivate?: () => Promise<void>): Promise<ZLinkActorClaimResult>;
32
33
  setRef(actorType: string, actorId: string, actorRef: ActorRef, ownerNodeGeneration: bigint): Promise<void>;
33
34
  takeoverJoinedSpot(actorType: string, actorId: string, actorRef: ActorRef, spotMeshName: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint, deactivate?: () => Promise<void>): Promise<ZLinkActorClaimResult>;
34
- notifyJoinedSpot(actorType: string, actorId: string, _spotMeshName: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint): Promise<void>;
35
- notifyLeftSpot(actorType: string, actorId: string, entrySpotId: RoutingId, entrySpotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint): Promise<void>;
35
+ commitMembership(actorType: string, actorRef: ActorRef, authorityOwnerGeneration: bigint, spotId: RoutingId, spotGeneration: bigint, spotKind: ZLinkSpotKind.Entry | ZLinkSpotKind.User, ownerNodeGeneration: bigint): Promise<void>;
36
36
  release(_actorType: string, actorId: string, actorRef?: ActorRef): Promise<void>;
37
37
  owns(_actorType: string, actorId: string): boolean;
38
38
  snapshot(actorId: string): ZLinkActorLocation | undefined;
@@ -6,6 +6,7 @@ const Spots_1 = require("../../contracts/Spots");
6
6
  const key_codec_1 = require("./key-codec");
7
7
  const authority_key_codec_1 = require("./authority-key-codec");
8
8
  const routing_id_1 = require("../routing-id");
9
+ const actor_authority_publication_1 = require("../actors/actor-authority-publication");
9
10
  var ZLinkActorClaimStatus;
10
11
  (function (ZLinkActorClaimStatus) {
11
12
  ZLinkActorClaimStatus["Claimed"] = "claimed";
@@ -149,25 +150,39 @@ class ZLinkActorLocationClaims {
149
150
  });
150
151
  return { status: ZLinkActorClaimStatus.Claimed, claimed, generation: result.generation };
151
152
  }
152
- async notifyJoinedSpot(actorType, actorId, _spotMeshName, spotId, spotGeneration, membershipEpoch, ownerNodeGeneration) {
153
- await this.renew(actorType, actorId, (row) => ({
154
- ...row,
155
- spotKind: Spots_1.ZLinkSpotKind.User,
156
- spotId,
157
- spotGeneration,
158
- membershipEpoch,
159
- ownerNodeGeneration
160
- }));
161
- }
162
- async notifyLeftSpot(actorType, actorId, entrySpotId, entrySpotGeneration, membershipEpoch, ownerNodeGeneration) {
163
- await this.renew(actorType, actorId, (row) => ({
164
- ...row,
165
- spotKind: Spots_1.ZLinkSpotKind.Entry,
166
- spotId: entrySpotId,
167
- spotGeneration: entrySpotGeneration,
168
- membershipEpoch,
169
- ownerNodeGeneration
170
- }));
153
+ async commitMembership(actorType, actorRef, authorityOwnerGeneration, spotId, spotGeneration, spotKind, ownerNodeGeneration) {
154
+ const actorId = actorRef.actorId;
155
+ const store = this.authorityStore;
156
+ const owner = this.runtime.currentOwnerToken;
157
+ if (store === undefined || owner === undefined) {
158
+ throw new Error('Actor membership commit requires Location Store authority and owner.');
159
+ }
160
+ const key = (0, authority_key_codec_1.encodeAuthorityKey)('actor', actorId);
161
+ const current = await store.readAuthority(key);
162
+ if (!matchesActorAuthority(current, actorRef, owner) ||
163
+ current.allocation.stableType !== actorType ||
164
+ current.authorityOwnerGeneration !== authorityOwnerGeneration ||
165
+ current.allocation.descriptorLifecycleGeneration !== ownerNodeGeneration) {
166
+ throw new Error(`Actor '${actorId}' membership authority fence does not match.`);
167
+ }
168
+ const identity = (0, actor_authority_publication_1.decodeActorAuthorityIdentity)(current.payload, current.objectGeneration);
169
+ if (identity === undefined ||
170
+ identity.actorType !== actorType ||
171
+ identity.ownerNodeGeneration !== ownerNodeGeneration ||
172
+ identity.owner.ownerId !== owner.ownerId ||
173
+ identity.owner.leaseGeneration !== owner.leaseGeneration ||
174
+ !(0, routing_id_1.routingIdsEqual)(identity.actor.nodeRid, actorRef.nodeRid) ||
175
+ identity.meshName !== actorRef.meshName) {
176
+ throw new Error(`Actor '${actorId}' membership authority identity does not match.`);
177
+ }
178
+ const result = await store.compareExchangeAuthority(key, current.storeVersion, {
179
+ kind: 'put',
180
+ generationTransition: 'preserve',
181
+ payload: (0, actor_authority_publication_1.rewriteActorAuthorityRoute)(current.payload, actorRef, String(spotId), spotGeneration, spotKind)
182
+ });
183
+ if (result.kind !== 'stored') {
184
+ throw new Error(`Actor '${actorId}' membership commit was rejected with status ${result.kind}.`);
185
+ }
171
186
  }
172
187
  async release(_actorType, actorId, actorRef) {
173
188
  const key = { meshName: this.entryMeshName, actorId };
@@ -28,10 +28,12 @@ export declare class ZLinkAutoConnectLoop {
28
28
  private lastTickFailed;
29
29
  constructor(options: ZLinkAutoConnectLoopOptions);
30
30
  start(signal?: AbortSignal): Promise<void>;
31
+ requestPeerReconcile(meshName: string, _peerRid: string): Promise<void>;
31
32
  stop(signal?: AbortSignal): Promise<void>;
32
33
  prepareTransportShutdown(): Promise<void>;
33
34
  finishTransportShutdown(signal?: AbortSignal): Promise<void>;
34
35
  tick(signal?: AbortSignal): Promise<void>;
36
+ private tickCore;
35
37
  private runReconcile;
36
38
  private scheduleNext;
37
39
  }
@@ -40,6 +40,16 @@ class ZLinkAutoConnectLoop {
40
40
  return;
41
41
  this.scheduleNext();
42
42
  }
43
+ async requestPeerReconcile(meshName, _peerRid) {
44
+ const controller = this.controller;
45
+ if (meshName !== this.meshName || controller === undefined)
46
+ return;
47
+ // A fresh descriptor scan uses the same RID ordering and connection owner as a periodic tick.
48
+ await this.lane.run(async () => {
49
+ if (!controller.signal.aborted)
50
+ await this.runReconcile(controller.signal);
51
+ });
52
+ }
43
53
  async stop(signal) {
44
54
  await this.prepareTransportShutdown();
45
55
  await this.finishTransportShutdown(signal);
@@ -60,7 +70,10 @@ class ZLinkAutoConnectLoop {
60
70
  await this.reconciler.unpublishLocal(signal);
61
71
  }
62
72
  async tick(signal) {
63
- const lastTickFailed = await this.lane.run(() => this.lastTickFailed);
73
+ await this.lane.run(() => this.tickCore(signal));
74
+ }
75
+ async tickCore(signal) {
76
+ const lastTickFailed = this.lastTickFailed;
64
77
  if (this.changeStampStore?.getMeshNodeChangeStamp !== undefined && !lastTickFailed) {
65
78
  try {
66
79
  const stamp = await this.changeStampStore.getMeshNodeChangeStamp(this.meshName, signal);
@@ -73,11 +86,10 @@ class ZLinkAutoConnectLoop {
73
86
  return;
74
87
  }
75
88
  const tickFailed = await this.runReconcile(signal);
76
- if (!tickFailed)
77
- await this.lane.run(() => {
78
- this.lastStamp = stamp;
79
- this.lastLiveOwnerSetVersion = liveOwners;
80
- });
89
+ if (!tickFailed) {
90
+ this.lastStamp = stamp;
91
+ this.lastLiveOwnerSetVersion = liveOwners;
92
+ }
81
93
  return;
82
94
  }
83
95
  catch {
@@ -85,17 +97,13 @@ class ZLinkAutoConnectLoop {
85
97
  }
86
98
  }
87
99
  await this.runReconcile(signal);
88
- await this.lane.run(() => {
89
- this.lastStamp = undefined;
90
- this.lastLiveOwnerSetVersion = undefined;
91
- });
100
+ this.lastStamp = undefined;
101
+ this.lastLiveOwnerSetVersion = undefined;
92
102
  }
93
103
  async runReconcile(signal) {
94
104
  await this.reconciler.tick(signal);
95
- return await this.lane.run(() => {
96
- this.lastTickFailed = this.reconciler.storeFailed;
97
- return this.lastTickFailed;
98
- });
105
+ this.lastTickFailed = this.reconciler.storeFailed;
106
+ return this.lastTickFailed;
99
107
  }
100
108
  scheduleNext() {
101
109
  if (this.controller === undefined || this.controller.signal.aborted) {
@@ -148,17 +148,12 @@ class ZLinkAutoConnectReconciler {
148
148
  desired.set(key, target);
149
149
  }
150
150
  const deferringMissingTargets = this.monotonicNowMs() < (await this.lane.run(() => this.recoveryDeferUntilMs));
151
- let staleCandidates = candidates;
152
151
  if (deferringMissingTargets) {
153
- const retainedCandidates = new Map(candidates);
154
152
  const lastDesired = await this.lane.run(() => [...this.lastDesired]);
155
153
  for (const [key, target] of lastDesired) {
156
154
  if (!desired.has(key))
157
155
  desired.set(key, target);
158
- if (!retainedCandidates.has(key))
159
- retainedCandidates.set(key, target);
160
156
  }
161
- staleCandidates = retainedCandidates;
162
157
  }
163
158
  await this.lane.run(() => {
164
159
  this.lastDesired = new Map(desired);
@@ -219,7 +214,6 @@ class ZLinkAutoConnectReconciler {
219
214
  });
220
215
  }
221
216
  }
222
- this.executor.disconnectStalePeers?.([...staleCandidates.values()]);
223
217
  const activeTargets = await this.lane.run(() => [...this.active]);
224
218
  for (const [key, target] of activeTargets) {
225
219
  if (!desired.has(key)) {
@@ -22,7 +22,6 @@ export interface ZLinkAutoConnectTarget {
22
22
  export interface IZLinkAutoConnectExecutor {
23
23
  connect(target: ZLinkAutoConnectTarget): Promise<boolean>;
24
24
  disconnect(target: ZLinkAutoConnectTarget): void;
25
- disconnectStalePeers?(targets: readonly ZLinkAutoConnectTarget[]): void;
26
25
  isDisconnected?(target: ZLinkAutoConnectTarget): boolean;
27
26
  onDisconnected?(handler: (endpoint: string) => void): void;
28
27
  replaceNotRequired?(targets: readonly ZLinkAutoConnectTarget[]): void;
@@ -0,0 +1,4 @@
1
+ /** A descriptor Store write failed without a confirmed result (Location runtime section 5). */
2
+ export declare class ZLinkDescriptorPublicationUnconfirmedError extends Error {
3
+ constructor(cause: unknown);
4
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZLinkDescriptorPublicationUnconfirmedError = void 0;
4
+ /** A descriptor Store write failed without a confirmed result (Location runtime section 5). */
5
+ class ZLinkDescriptorPublicationUnconfirmedError extends Error {
6
+ constructor(cause) {
7
+ super(cause instanceof Error ? cause.message : String(cause), { cause });
8
+ this.name = 'ZLinkDescriptorPublicationUnconfirmedError';
9
+ }
10
+ }
11
+ exports.ZLinkDescriptorPublicationUnconfirmedError = ZLinkDescriptorPublicationUnconfirmedError;
@@ -6,6 +6,7 @@ import type { ZLinkObjectReserveRequest, ZLinkEndedOwnerReleaseIntent } from './
6
6
  * implement this interface; the framework maps it to the opaque Store SPI.
7
7
  */
8
8
  export interface ZLinkDomainLocationStore {
9
+ confirmedCapacity?(key: ZLinkMeshNodeDescriptorKey, limits: ZLinkMeshNodeDescriptor['populationCapacity']): ZLinkMeshNodeDescriptor['populationCapacity'] | undefined;
9
10
  updateMeshNode(descriptor: ZLinkMeshNodeDescriptor, intent: ZLinkLocationWriteIntent, signal?: AbortSignal): Promise<ZLinkLocationWriteResult>;
10
11
  removeMeshNode(key: ZLinkMeshNodeDescriptorKey, owner: ZLinkLocationOwnerToken, signal?: AbortSignal): Promise<ZLinkLocationWriteStatus>;
11
12
  listMeshNodes(meshName: string, page?: ZLinkPageRequest, signal?: AbortSignal): Promise<ZLinkLocationPage<ZLinkMeshNodeDescriptor>>;
@@ -4,7 +4,6 @@ export interface ZLinkInMemoryAuthorityValidation {
4
4
  isTargetLive(descriptor: ZLinkMeshNodeDescriptorKey, lifecycleGeneration: bigint, owner: ZLinkLocationOwnerToken): boolean;
5
5
  placementCapacityAvailable?(descriptor: ZLinkMeshNodeDescriptorKey, requested: ZLinkCapacityVector, currentReserved: ZLinkCapacityVector, currentActive: ZLinkCapacityVector): boolean;
6
6
  identityClaimed?(authorityKey: string): boolean;
7
- hasSpotMembers?(spotId: string, objectGeneration: bigint): boolean;
8
7
  }
9
8
  /**
10
9
  * In-memory reference provider for the provider-owned authority state machine.
@@ -31,6 +30,13 @@ export declare class ZLinkInMemoryAuthorityStore {
31
30
  releaseEndedReservation(key: ZLinkAuthorityKey, expectedStoreVersion: string, signal?: AbortSignal, request?: ZLinkEndedOwnerReleaseIntent): Promise<boolean>;
32
31
  acceptsUserSpotMembership(spotId: string, objectGeneration: bigint): boolean;
33
32
  private tryReleaseEndedReservation;
33
+ /**
34
+ * Every Actor membership of the old User Spot incarnation must belong to an ended-owner
35
+ * member (location runtime §6.1): a steady Ready, activated authority outside any aggregate
36
+ * with an invalid owner lease. The release must fit one provider batch; its key set mirrors
37
+ * the provider repository batch (authorities, owner leases, descriptor and capacity records).
38
+ */
39
+ private endedSpotMembers;
34
40
  reserve(request: ZLinkObjectReserveRequest, signal?: AbortSignal): Promise<ZLinkObjectReserveResult>;
35
41
  commit(request: ZLinkObjectCommitRequest, signal?: AbortSignal): Promise<ZLinkObjectCommitResult>;
36
42
  completeCreation(request: ZLinkObjectCreationCompleteRequest, signal?: AbortSignal): Promise<ZLinkObjectCreationCompleteResult>;