@zlink-systems/framework 0.30.3 → 0.32.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 (398) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
  3. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
  4. package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
  5. package/dist/contracts/Actors/index.d.ts +1 -0
  6. package/dist/contracts/Actors/index.js +1 -0
  7. package/dist/contracts/Common/CoreTypes.d.ts +1 -0
  8. package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
  9. package/dist/contracts/Common/HandlerMessageType.js +41 -0
  10. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
  11. package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
  12. package/dist/contracts/Common/ZLinkMessage.js +11 -7
  13. package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
  14. package/dist/contracts/Common/encoded-payload-storage.js +4 -16
  15. package/dist/contracts/Common/index.d.ts +1 -1
  16. package/dist/contracts/Common/payload-slab.d.ts +4 -0
  17. package/dist/contracts/Common/payload-slab.js +30 -0
  18. package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
  19. package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
  20. package/dist/contracts/Handlers/Contexts.d.ts +1 -0
  21. package/dist/contracts/Locations/Authority.d.ts +2 -0
  22. package/dist/internal.d.ts +9 -0
  23. package/dist/internal.js +23 -1
  24. package/dist/nest-integration.d.ts +1 -0
  25. package/dist/nest-integration.js +3 -1
  26. package/dist/runtime/actors/actor-client.d.ts +6 -2
  27. package/dist/runtime/actors/actor-client.js +120 -82
  28. package/dist/runtime/actors/actor-context.js +16 -5
  29. package/dist/runtime/actors/actor-execution-context.js +2 -2
  30. package/dist/runtime/actors/actor-handoff.d.ts +12 -1
  31. package/dist/runtime/actors/actor-handoff.js +79 -34
  32. package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
  33. package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
  34. package/dist/runtime/actors/actor-local-native-join.js +19 -17
  35. package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
  36. package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
  37. package/dist/runtime/actors/actor-remote-joiner.js +4 -4
  38. package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
  39. package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
  40. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
  41. package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
  42. package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
  43. package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
  44. package/dist/runtime/admission.d.ts +6 -4
  45. package/dist/runtime/admission.js +21 -10
  46. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
  47. package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
  48. package/dist/runtime/backend/contracts/index.d.ts +26 -10
  49. package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
  50. package/dist/runtime/backend/mesh-completion-table.js +84 -20
  51. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
  52. package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
  53. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
  54. package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
  55. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
  56. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
  57. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  58. package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
  59. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
  60. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
  61. package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
  62. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
  63. package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
  64. package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
  65. package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
  66. package/dist/runtime/channels/channel-clients.js +3 -3
  67. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
  68. package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
  69. package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
  70. package/dist/runtime/channels/channel-dispatch-services.js +7 -6
  71. package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
  72. package/dist/runtime/channels/channel-dispatchers.js +57 -36
  73. package/dist/runtime/channels/channel-envelope.d.ts +2 -2
  74. package/dist/runtime/channels/channel-envelope.js +609 -83
  75. package/dist/runtime/channels/channel-multipart.d.ts +1 -0
  76. package/dist/runtime/channels/channel-multipart.js +10 -6
  77. package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
  78. package/dist/runtime/channels/channel-outbound-operations.js +107 -105
  79. package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
  80. package/dist/runtime/channels/channel-receive-loops.js +126 -90
  81. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
  82. package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
  83. package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
  84. package/dist/runtime/channels/channel-runtime-manager.js +32 -14
  85. package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
  86. package/dist/runtime/channels/channel-socket-registry.js +9 -1
  87. package/dist/runtime/channels/channel-transports.d.ts +23 -16
  88. package/dist/runtime/channels/channel-transports.js +139 -119
  89. package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
  90. package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
  91. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  92. package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
  93. package/dist/runtime/channels/local-spot-route-transport.js +15 -18
  94. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
  95. package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
  96. package/dist/runtime/channels/source-spot-router.d.ts +6 -3
  97. package/dist/runtime/channels/source-spot-router.js +34 -23
  98. package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
  99. package/dist/runtime/channels/spot-node-route-transport.js +23 -17
  100. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
  101. package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
  102. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
  103. package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
  104. package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
  105. package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
  106. package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
  107. package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
  108. package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
  109. package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
  110. package/dist/runtime/diagnostics/message-flow-record.js +228 -0
  111. package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
  112. package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
  113. package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
  114. package/dist/runtime/diagnostics/message-flow.js +42 -290
  115. package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
  116. package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
  117. package/dist/runtime/execution/index.d.ts +1 -0
  118. package/dist/runtime/execution/index.js +6 -3
  119. package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
  120. package/dist/runtime/execution/serial-execution-queue.js +75 -71
  121. package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
  122. package/dist/runtime/foundation/durable-service-request.js +158 -73
  123. package/dist/runtime/foundation/operation-registry.d.ts +33 -3
  124. package/dist/runtime/foundation/operation-registry.js +272 -33
  125. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
  126. package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
  127. package/dist/runtime/foundation/request-runtime.d.ts +17 -0
  128. package/dist/runtime/foundation/request-runtime.js +163 -0
  129. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  130. package/dist/runtime/foundation/service-discovery-registry.js +6 -0
  131. package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
  132. package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
  133. package/dist/runtime/foundation/service-mailbox.js +4 -1
  134. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
  135. package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
  136. package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
  137. package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
  138. package/dist/runtime/foundation/service-stateful-registry.js +38 -17
  139. package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
  140. package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
  141. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
  142. package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
  143. package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
  144. package/dist/runtime/foundation/service-topology-registry.js +13 -3
  145. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  146. package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
  147. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
  148. package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
  149. package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
  150. package/dist/runtime/host/actor-packet-relay.js +58 -57
  151. package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
  152. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  153. package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
  154. package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
  155. package/dist/runtime/host/application-job-queue.d.ts +7 -5
  156. package/dist/runtime/host/application-job-queue.js +33 -21
  157. package/dist/runtime/host/bound-session-relay.js +0 -1
  158. package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
  159. package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
  160. package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
  161. package/dist/runtime/host/entry-actor-runtime.js +2 -2
  162. package/dist/runtime/host/index.d.ts +106 -37
  163. package/dist/runtime/host/index.js +303 -151
  164. package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
  165. package/dist/runtime/host/location-runtime-owner.js +1 -1
  166. package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
  167. package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
  168. package/dist/runtime/host/spot-address-transport.d.ts +3 -0
  169. package/dist/runtime/host/spot-address-transport.js +73 -76
  170. package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
  171. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
  172. package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
  173. package/dist/runtime/internal-observation.d.ts +1 -0
  174. package/dist/runtime/internal-observation.js +5 -0
  175. package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
  176. package/dist/runtime/locations/actor-location-claims.js +15 -6
  177. package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
  178. package/dist/runtime/locations/auto-connect-loop.js +25 -19
  179. package/dist/runtime/locations/auto-connect-planner.js +2 -5
  180. package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
  181. package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
  182. package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
  183. package/dist/runtime/locations/in-memory-authority-store.js +15 -5
  184. package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
  185. package/dist/runtime/locations/in-memory-location-store.js +1 -38
  186. package/dist/runtime/locations/lifecycle.d.ts +1 -1
  187. package/dist/runtime/locations/lifecycle.js +2 -2
  188. package/dist/runtime/locations/location-store-repository.d.ts +0 -1
  189. package/dist/runtime/locations/location-store-repository.js +163 -246
  190. package/dist/runtime/locations/resolvers.d.ts +8 -1
  191. package/dist/runtime/locations/resolvers.js +16 -2
  192. package/dist/runtime/locations/runtime.d.ts +3 -3
  193. package/dist/runtime/locations/runtime.js +12 -16
  194. package/dist/runtime/messaging/creation-payload-codec.js +8 -7
  195. package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
  196. package/dist/runtime/messaging/framework-json-v1.js +6 -2
  197. package/dist/runtime/messaging/payload-codec.js +21 -35
  198. package/dist/runtime/messaging/request-deadline.d.ts +4 -2
  199. package/dist/runtime/messaging/request-deadline.js +40 -25
  200. package/dist/runtime/messaging/request-result.d.ts +14 -1
  201. package/dist/runtime/messaging/request-result.js +74 -13
  202. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
  203. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
  204. package/dist/runtime/spots/index.d.ts +28 -7
  205. package/dist/runtime/spots/index.js +31 -6
  206. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
  207. package/dist/runtime/spots/spot-activation-registry.js +13 -8
  208. package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
  209. package/dist/runtime/spots/spot-activation-state.js +1 -0
  210. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
  211. package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
  212. package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
  213. package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
  214. package/dist/runtime/spots/spot-actor-membership.js +3 -3
  215. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
  216. package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
  217. package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
  218. package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
  219. package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
  220. package/dist/runtime/spots/spot-entry-activation.js +7 -12
  221. package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
  222. package/dist/runtime/spots/spot-handler-registry.js +31 -15
  223. package/dist/runtime/spots/spot-manager-public.js +3 -2
  224. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
  225. package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
  226. package/dist/runtime/spots/spot-outbound.d.ts +8 -2
  227. package/dist/runtime/spots/spot-outbound.js +5 -5
  228. package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
  229. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
  230. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
  231. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
  232. package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
  233. package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
  234. package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
  235. package/dist/runtime/spots/spot-timer.d.ts +1 -1
  236. package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
  237. package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
  238. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
  239. package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
  240. package/dist/runtime/streams/bound-session-service.js +6 -7
  241. package/dist/runtime/streams/index.d.ts +3 -3
  242. package/dist/runtime/streams/index.js +22 -2
  243. package/dist/runtime/streams/managed-stream.js +2 -1
  244. package/dist/runtime/streams/session-calls.d.ts +1 -1
  245. package/dist/runtime/streams/session-calls.js +3 -9
  246. package/dist/runtime/streams/session-context.d.ts +2 -2
  247. package/dist/runtime/streams/session-context.js +2 -2
  248. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
  249. package/dist/runtime/streams/stream-session-runtime.js +64 -33
  250. package/package.json +3 -3
  251. package/src/contracts/Actors/ZLinkActor.ts +6 -0
  252. package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
  253. package/src/contracts/Actors/index.ts +1 -0
  254. package/src/contracts/Common/CoreTypes.ts +1 -0
  255. package/src/contracts/Common/HandlerMessageType.ts +50 -0
  256. package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
  257. package/src/contracts/Common/ZLinkMessage.ts +11 -7
  258. package/src/contracts/Common/encoded-payload-storage.ts +4 -16
  259. package/src/contracts/Common/index.ts +1 -1
  260. package/src/contracts/Common/payload-slab.ts +29 -0
  261. package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
  262. package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
  263. package/src/contracts/Handlers/Contexts.ts +1 -0
  264. package/src/contracts/Locations/Authority.ts +7 -1
  265. package/src/internal.ts +17 -0
  266. package/src/nest-integration.ts +1 -0
  267. package/src/runtime/actors/actor-client.ts +257 -163
  268. package/src/runtime/actors/actor-context.ts +26 -14
  269. package/src/runtime/actors/actor-execution-context.ts +2 -2
  270. package/src/runtime/actors/actor-handoff.ts +86 -51
  271. package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
  272. package/src/runtime/actors/actor-local-native-join.ts +38 -17
  273. package/src/runtime/actors/actor-mailbox.ts +1 -1
  274. package/src/runtime/actors/actor-remote-joiner.ts +8 -4
  275. package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
  276. package/src/runtime/actors/actor-routed-json-request.ts +3 -0
  277. package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
  278. package/src/runtime/actors/actor-runtime-state.ts +1 -1
  279. package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
  280. package/src/runtime/admission.ts +42 -15
  281. package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
  282. package/src/runtime/backend/contracts/index.ts +77 -10
  283. package/src/runtime/backend/mesh-completion-table.ts +106 -15
  284. package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
  285. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
  286. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
  287. package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
  288. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
  289. package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
  290. package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
  291. package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
  292. package/src/runtime/backend/raw-binding-port.ts +13 -5
  293. package/src/runtime/channels/channel-clients.ts +26 -11
  294. package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
  295. package/src/runtime/channels/channel-dispatch-services.ts +7 -12
  296. package/src/runtime/channels/channel-dispatchers.ts +93 -39
  297. package/src/runtime/channels/channel-envelope.ts +680 -144
  298. package/src/runtime/channels/channel-multipart.ts +17 -13
  299. package/src/runtime/channels/channel-outbound-operations.ts +204 -178
  300. package/src/runtime/channels/channel-receive-loops.ts +160 -107
  301. package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
  302. package/src/runtime/channels/channel-runtime-manager.ts +74 -27
  303. package/src/runtime/channels/channel-socket-registry.ts +20 -5
  304. package/src/runtime/channels/channel-transports.ts +414 -287
  305. package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
  306. package/src/runtime/channels/local-spot-route-transport.ts +27 -29
  307. package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
  308. package/src/runtime/channels/source-spot-router.ts +75 -38
  309. package/src/runtime/channels/spot-node-route-transport.ts +67 -37
  310. package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
  311. package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
  312. package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
  313. package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
  314. package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
  315. package/src/runtime/diagnostics/message-flow-record.ts +295 -0
  316. package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
  317. package/src/runtime/diagnostics/message-flow.ts +49 -362
  318. package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
  319. package/src/runtime/execution/index.ts +6 -0
  320. package/src/runtime/execution/serial-execution-queue.ts +94 -96
  321. package/src/runtime/foundation/durable-service-request.ts +212 -89
  322. package/src/runtime/foundation/operation-registry.ts +287 -38
  323. package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
  324. package/src/runtime/foundation/request-runtime.ts +227 -0
  325. package/src/runtime/foundation/service-discovery-registry.ts +7 -0
  326. package/src/runtime/foundation/service-liveness-registry.ts +1 -1
  327. package/src/runtime/foundation/service-mailbox.ts +7 -2
  328. package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
  329. package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
  330. package/src/runtime/foundation/service-stateful-registry.ts +52 -19
  331. package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
  332. package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
  333. package/src/runtime/foundation/service-topology-registry.ts +21 -3
  334. package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
  335. package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
  336. package/src/runtime/host/actor-packet-relay.ts +160 -156
  337. package/src/runtime/host/actor-placement-coordinator.ts +1 -1
  338. package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
  339. package/src/runtime/host/actor-transfer-runtime.ts +3 -3
  340. package/src/runtime/host/application-job-queue.ts +56 -27
  341. package/src/runtime/host/bound-session-relay.ts +0 -1
  342. package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
  343. package/src/runtime/host/entry-actor-runtime.ts +14 -6
  344. package/src/runtime/host/index.ts +388 -113
  345. package/src/runtime/host/location-runtime-owner.ts +3 -3
  346. package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
  347. package/src/runtime/host/spot-address-transport.ts +110 -95
  348. package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
  349. package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
  350. package/src/runtime/internal-observation.ts +2 -0
  351. package/src/runtime/locations/actor-location-claims.ts +42 -16
  352. package/src/runtime/locations/auto-connect-loop.ts +24 -16
  353. package/src/runtime/locations/auto-connect-planner.ts +2 -5
  354. package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
  355. package/src/runtime/locations/in-memory-authority-store.ts +27 -7
  356. package/src/runtime/locations/in-memory-location-store.ts +1 -74
  357. package/src/runtime/locations/lifecycle.ts +4 -2
  358. package/src/runtime/locations/location-store-repository.ts +228 -308
  359. package/src/runtime/locations/resolvers.ts +20 -8
  360. package/src/runtime/locations/runtime.ts +16 -28
  361. package/src/runtime/messaging/creation-payload-codec.ts +12 -10
  362. package/src/runtime/messaging/framework-json-v1.ts +10 -1
  363. package/src/runtime/messaging/payload-codec.ts +50 -75
  364. package/src/runtime/messaging/request-deadline.ts +47 -39
  365. package/src/runtime/messaging/request-result.ts +88 -17
  366. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  367. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  368. package/src/runtime/spots/index.ts +57 -10
  369. package/src/runtime/spots/spot-activation-registry.ts +12 -8
  370. package/src/runtime/spots/spot-activation-state.ts +2 -0
  371. package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
  372. package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
  373. package/src/runtime/spots/spot-actor-membership.ts +8 -5
  374. package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
  375. package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
  376. package/src/runtime/spots/spot-entry-activation.ts +25 -35
  377. package/src/runtime/spots/spot-handler-registry.ts +72 -15
  378. package/src/runtime/spots/spot-manager-public.ts +4 -2
  379. package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
  380. package/src/runtime/spots/spot-outbound.ts +26 -10
  381. package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
  382. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
  383. package/src/runtime/spots/spot-runtime-ports.ts +5 -2
  384. package/src/runtime/spots/spot-serial-executor.ts +1 -1
  385. package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
  386. package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
  387. package/src/runtime/spots/spot-timer.ts +1 -1
  388. package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
  389. package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
  390. package/src/runtime/streams/bound-session-service.ts +10 -7
  391. package/src/runtime/streams/index.ts +30 -4
  392. package/src/runtime/streams/managed-stream.ts +2 -1
  393. package/src/runtime/streams/session-calls.ts +9 -14
  394. package/src/runtime/streams/session-context.ts +6 -11
  395. package/src/runtime/streams/stream-session-runtime.ts +79 -40
  396. package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
  397. package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
  398. package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkHostSpotAddressTransport = void 0;
4
4
  exports.hasObjectClientCapability = hasObjectClientCapability;
5
+ const request_runtime_1 = require("../foundation/request-runtime");
6
+ const request_deadline_1 = require("../messaging/request-deadline");
7
+ const request_result_1 = require("../messaging/request-result");
5
8
  const contracts_1 = require("../../contracts");
6
9
  const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
7
10
  const abort_1 = require("../abort");
@@ -19,8 +22,10 @@ function hasObjectClientCapability(role) {
19
22
  /** Owns global Spot authority lookup and Missing Instance placement. */
20
23
  class ZLinkHostSpotAddressTransport {
21
24
  options;
25
+ requests;
22
26
  constructor(options) {
23
27
  this.options = options;
28
+ this.requests = options.requests ?? new request_runtime_1.RequestRuntime();
24
29
  }
25
30
  sendToSpotAddress(spotId, message, call) {
26
31
  // Call-scoped flow (spec 27 §4): the envelope encoders and the
@@ -92,61 +97,71 @@ class ZLinkHostSpotAddressTransport {
92
97
  }
93
98
  async requestToSpotAddressScoped(spotId, request, call) {
94
99
  const timeoutMs = call.timeoutMs ?? this.options.defaultRequestTimeoutMs;
95
- const deadline = createSpotAddressDeadline(timeoutMs, call.signal);
96
- try {
97
- const resolution = await this.resolveExisting(spotId, deadline.signal, call);
98
- const existing = resolution !== undefined && !('kind' in resolution) ? resolution : undefined;
99
- if (resolution !== undefined && 'kind' in resolution)
100
- call = this.reactivationCall(resolution, call);
101
- deadline.requireRemaining();
102
- if (existing === undefined) {
103
- return await this.requestToMissingInstance(spotId, request, call, deadline, resolution);
104
- }
105
- this.validateExisting(existing, call);
100
+ return this.requests.request(timeoutMs, call.signal, async (requestOperation) => {
101
+ const deadline = createSpotAddressDeadline(requestOperation, call.signal);
106
102
  try {
107
- return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
103
+ for (;;) {
104
+ deadline.requireRemaining();
105
+ const resolution = await (0, request_deadline_1.waitRequestReply)(this.resolveExisting(spotId, deadline.signal, call), 'Spot address resolve', requestOperation, () => deadline.close());
106
+ const existing = resolution !== undefined && !('kind' in resolution) ? resolution : undefined;
107
+ if (resolution !== undefined && 'kind' in resolution)
108
+ call = this.reactivationCall(resolution, call);
109
+ deadline.requireRemaining();
110
+ try {
111
+ if (existing === undefined) {
112
+ return await this.requestToMissingInstance(spotId, request, call, deadline, resolution);
113
+ }
114
+ this.validateExisting(existing, call);
115
+ return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
116
+ }
117
+ catch (error) {
118
+ if ((existing !== undefined || isPreAdmissionStaleRoute(error)) &&
119
+ isSpotRouteRefreshError(error)) {
120
+ this.options.resolver()?.invalidate?.(spotId);
121
+ }
122
+ // §9 keeps admission-before-stale-route handling in this logical request.
123
+ if (call.instanceSpot && isPreAdmissionStaleRoute(error))
124
+ continue;
125
+ if (existing !== undefined) {
126
+ this.reportInstanceRequestError(spotId, request, error, existing.routerChannelId, existing.targetNodeRid, existing.stableType, addressedInstanceErrorReason(error));
127
+ }
128
+ throw error;
129
+ }
130
+ }
108
131
  }
109
132
  catch (error) {
110
- if (isSpotRouteRefreshError(error)) {
111
- this.options.resolver()?.invalidate?.(spotId);
112
- }
113
- // Failover policy §4.4: SpotMoving is the owner's Ready owner-fence
114
- // refusal, made before admission. With Instance intent, one authority
115
- // read under the same deadline decides: Missing means Close released
116
- // the incarnation, so the request activates a new one. Any other
117
- // answer, and any message the owner admitted, keeps this terminal.
118
- if (call.instanceSpot &&
119
- isOwnerFenceRefusal(error) &&
120
- (await this.resolveExisting(spotId, deadline.signal)) === undefined) {
121
- deadline.requireRemaining();
122
- return await this.requestToMissingInstance(spotId, request, call, deadline);
133
+ if (error instanceof contracts_1.ZLinkFrameworkException &&
134
+ (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded) {
135
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Spot request for '${String(spotId)}' exceeded its end-to-end deadline.`, true, error);
123
136
  }
124
- this.reportInstanceRequestError(spotId, request, error, existing.routerChannelId, existing.targetNodeRid, existing.stableType, addressedInstanceErrorReason(error));
125
137
  throw error;
126
138
  }
127
- }
128
- catch (error) {
129
- if (deadline.expired() &&
130
- !(error instanceof contracts_1.ZLinkFrameworkException &&
131
- (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) ===
132
- framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound)) {
133
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `Spot request for '${String(spotId)}' exceeded its end-to-end deadline.`, true, error);
139
+ finally {
140
+ deadline.close();
134
141
  }
135
- throw error;
136
- }
137
- finally {
138
- deadline.close();
139
- }
142
+ });
140
143
  }
141
144
  async requestToExistingSpot(spotId, request, call, existing, deadline) {
142
145
  this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, existing.routerChannelId, existing.stableType, existing.targetNodeRid);
143
- const reply = await (0, abort_1.awaitWithAbort)(this.options.routed.requestToSpot(existing, request, {
144
- instanceSpot: call.instanceSpot,
145
- timeoutMs: deadline.requireRemaining(),
146
- signal: deadline.signal,
147
- metadata: call.metadata,
148
- onAdmitted: call.onAdmitted
149
- }), deadline.signal);
146
+ // The address request owns the terminal entry. Observe the wire stage so
147
+ // a pre-admission refusal can reach the authority decision in §9.
148
+ const stage = new Promise((resolve, reject) => {
149
+ const result = this.options.routed.requestToSpot(existing, request, {
150
+ instanceSpot: call.instanceSpot,
151
+ timeoutMs: deadline.requireRemaining(),
152
+ deadlineMs: deadline.deadlineMs,
153
+ signal: deadline.signal,
154
+ metadata: call.metadata,
155
+ onAdmitted: call.onAdmitted,
156
+ requestOperation: deadline.operation
157
+ }, {
158
+ operationCompleted: (_id, value) => resolve(value),
159
+ operationFailed: (_id, error) => reject(error)
160
+ });
161
+ if (result.operation === undefined)
162
+ void (0, request_result_1.mapZLinkRequestReply)(result).then(resolve, reject);
163
+ });
164
+ const reply = await (0, request_deadline_1.waitRequestReply)(stage, 'Spot request', deadline.operation);
150
165
  this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.ReplyReceived, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, existing.routerChannelId, existing.stableType, existing.targetNodeRid);
151
166
  return reply;
152
167
  }
@@ -174,9 +189,9 @@ class ZLinkHostSpotAddressTransport {
174
189
  const table = this.options.completions(selected.meshName);
175
190
  if (table === undefined)
176
191
  throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
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);
192
+ const completionPromise = table.submit(() => selected.node.requestToMissingInstanceSpot(selected.target, encoded, deadlineUnixMs, call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId), call.metadata, call.onAdmitted, deadline.operation), deadline.signal, deadline.operation);
178
193
  this.traceInstanceAddress(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Sent, ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request, spotId, request, selected.meshName, selected.target.stableType, selected.target.targetNodeRid);
179
- const completion = await (0, abort_1.awaitWithAbort)(completionPromise, deadline.signal);
194
+ const completion = await completionPromise;
180
195
  try {
181
196
  if (completion.terminalResult !== 0 || completion.failureErrno !== 0) {
182
197
  const error = missingInstanceRequestFailure(completion.terminalResult, completion.failureErrno);
@@ -360,16 +375,16 @@ function isSpotRouteRefreshError(error) {
360
375
  if (!(error instanceof contracts_1.ZLinkFrameworkException))
361
376
  return false;
362
377
  const kind = (0, framework_errors_internal_1.internalFrameworkErrorKind)(error);
363
- return (kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
364
- kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
365
- kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving ||
378
+ return (isPreAdmissionStaleRoute(error) ||
379
+ kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
366
380
  kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound ||
367
- kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale ||
368
381
  kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected);
369
382
  }
370
- function isOwnerFenceRefusal(error) {
383
+ function isPreAdmissionStaleRoute(error) {
371
384
  return (error instanceof contracts_1.ZLinkFrameworkException &&
372
- (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving);
385
+ ((0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving ||
386
+ (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.ActorLocationStale ||
387
+ (0, framework_errors_internal_1.internalFrameworkErrorKind)(error) === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale));
373
388
  }
374
389
  function submitResultReason(status) {
375
390
  switch (status) {
@@ -421,34 +436,19 @@ function addressedInstanceErrorReason(error) {
421
436
  }
422
437
  return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException;
423
438
  }
424
- function createSpotAddressDeadline(timeoutMs, parent) {
439
+ function createSpotAddressDeadline(operation, parent) {
425
440
  const startedAtMs = performance.now();
426
441
  const startedAtUnixMs = Date.now();
427
- const deadlineMs = startedAtMs + Math.max(0, timeoutMs);
442
+ const deadlineMs = operation.deadlineMs ?? Number.POSITIVE_INFINITY;
428
443
  const controller = new AbortController();
429
- let expired = false;
430
- let timeout;
431
- const expire = () => {
432
- expired = true;
433
- controller.abort();
434
- };
435
- const arm = () => {
436
- if (timeout !== undefined)
437
- clearTimeout(timeout);
438
- const remainingMs = deadlineMs - performance.now();
439
- if (remainingMs <= 0) {
440
- expire();
441
- return;
442
- }
443
- timeout = setTimeout(expire, remainingMs);
444
- };
445
- arm();
446
444
  const abort = () => controller.abort(parent?.reason);
447
445
  if (parent?.aborted === true)
448
446
  abort();
449
447
  else
450
448
  parent?.addEventListener('abort', abort, { once: true });
451
449
  return {
450
+ operation,
451
+ deadlineMs,
452
452
  get deadlineUnixMs() {
453
453
  return Math.round(startedAtUnixMs + (deadlineMs - startedAtMs));
454
454
  },
@@ -456,15 +456,12 @@ function createSpotAddressDeadline(timeoutMs, parent) {
456
456
  requireRemaining() {
457
457
  const remainingMs = deadlineMs - performance.now();
458
458
  if (remainingMs <= 0) {
459
- expired = true;
460
459
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, 'Spot address operation exceeded its end-to-end deadline.', true);
461
460
  }
462
461
  return Math.max(1, Math.ceil(remainingMs));
463
462
  },
464
- expired: () => expired,
465
463
  close() {
466
- if (timeout !== undefined)
467
- clearTimeout(timeout);
464
+ controller.abort();
468
465
  parent?.removeEventListener('abort', abort);
469
466
  }
470
467
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkSpotRuntimeOptionsFactory = void 0;
4
+ const Registration_1 = require("../../contracts/Configuration/Registration");
4
5
  const routing_id_1 = require("../routing-id");
5
6
  const contracts_1 = require("../../contracts");
6
7
  const actors_1 = require("../actors");
@@ -14,6 +15,7 @@ class ZLinkSpotRuntimeOptionsFactory {
14
15
  create(actorTransferRuntime) {
15
16
  const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
16
17
  return {
18
+ defaultRequestTimeoutMs: this.options.registration.requestTimeoutMs ?? Registration_1.DEFAULT_REQUEST_TIMEOUT_MS,
17
19
  nodeRid: undefined,
18
20
  nodeRidProvider: (meshName) => this.meshNodeRoutingId(meshName),
19
21
  nodeGenerationProvider: (meshName) => this.options.spotNodeRuntime()?.meshNode(meshName)?.status().lifecycleGeneration,
@@ -1,12 +1,14 @@
1
1
  import { type RoutingId, type SpotRef, type ZLinkSpotCreateResult } from '../../contracts';
2
2
  import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
3
3
  import type { ServiceDirectSpotRouteFence, ServiceUserSpotCloseRecord, ServiceUserSpotCreateRecord } from '../foundation/service-stateful-wire-codec';
4
+ import type { ZLinkOwnerLeaseTracker } from '../locations/lease-tracker';
4
5
  import type { ZLinkAuthoritySnapshot, ZLinkLocationOwnerToken } from '../locations/internal-location-contracts';
5
6
  import type { ZLinkAuthorityStore, ZLinkObjectCreationStore } from '../locations/internal-store-contracts';
6
7
  import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
7
8
  export interface ZLinkUserSpotCreationCoordinatorOptions {
8
- readonly relocationPolicy?: (meshName: string, stableType: string) => import('../locations/internal-location-contracts').ZLinkObjectReserveRequest['actorRelocationPolicy'];
9
+ readonly relocationPolicy?: (meshName: string | undefined, stableType: string) => import('../locations/internal-location-contracts').ZLinkObjectReserveRequest['actorRelocationPolicy'];
9
10
  readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
11
+ readonly leaseTracker: Pick<ZLinkOwnerLeaseTracker, 'isOwnerTokenLive'>;
10
12
  readonly target: (request: Pick<ZLinkUserSpotCreationRequest, 'meshName' | 'stableType'>, signal?: AbortSignal, excludedNodeRids?: ReadonlySet<string>) => Promise<{
11
13
  readonly meshName: string;
12
14
  readonly nodeRid: RoutingId;
@@ -35,6 +35,17 @@ class ZLinkUserSpotCreationCoordinator {
35
35
  let target;
36
36
  let reserved;
37
37
  for (;;) {
38
+ try {
39
+ const spot = await this.awaitReady(request, signal);
40
+ if (spot !== undefined) {
41
+ deadline.close();
42
+ return { result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing }, spot };
43
+ }
44
+ }
45
+ catch (error) {
46
+ deadline.close();
47
+ throw error;
48
+ }
38
49
  try {
39
50
  target = await this.options.target(request, signal, excludedNodeRids);
40
51
  }
@@ -45,6 +56,15 @@ class ZLinkUserSpotCreationCoordinator {
45
56
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot placement provider failed.', false, error);
46
57
  }
47
58
  if (target === undefined) {
59
+ try {
60
+ const current = await this.options.store.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('user_spot', String(request.spotId)), signal);
61
+ if (current.kind !== 'missing')
62
+ continue;
63
+ }
64
+ catch (error) {
65
+ deadline.close();
66
+ throw error;
67
+ }
48
68
  deadline.close();
49
69
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted, 'No eligible User Spot placement target is ready.', true);
50
70
  }
@@ -98,28 +118,11 @@ class ZLinkUserSpotCreationCoordinator {
98
118
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'User Spot reservation Store operation failed.', false, error);
99
119
  }
100
120
  if (reserved.kind === 'alreadyExists' ||
101
- (reserved.kind === 'conflict' &&
102
- reserved.current.kind === 'snapshot' &&
103
- reserved.current.allocation.objectKind === 'user_spot' &&
104
- reserved.current.allocation.stableType === request.stableType)) {
105
- if (request.generatedIdentity === true) {
106
- deadline.close();
107
- throw spotIdConflict(request.spotId);
108
- }
109
- try {
110
- const spot = await this.awaitReady(request, signal);
111
- if (spot !== undefined) {
112
- deadline.close();
113
- return { result: { spot, state: contracts_1.ZLinkSpotCreateState.Existing }, spot };
114
- }
115
- }
116
- catch (error) {
117
- deadline.close();
118
- throw error;
119
- }
121
+ (reserved.kind === 'conflict' && reserved.current.kind === 'snapshot'))
120
122
  continue;
121
- }
122
- if (reserved.kind !== 'placementCapacityExhausted')
123
+ if (reserved.kind === 'placementCapacityExhausted')
124
+ continue;
125
+ if (!(reserved.kind === 'conflict' && reserved.current.kind === 'missing'))
123
126
  break;
124
127
  excludedNodeRids.add((0, routing_id_1.encodeRoutingIdStorageHex)(target.nodeRid));
125
128
  }
@@ -426,10 +429,35 @@ class ZLinkUserSpotCreationCoordinator {
426
429
  const current = await this.options.store.readAuthority(key, signal);
427
430
  if (current.kind === 'missing')
428
431
  return undefined;
432
+ if (request.generatedIdentity === true)
433
+ throw spotIdConflict(request.spotId);
429
434
  if (current.allocation.objectKind !== 'user_spot' ||
430
435
  current.allocation.stableType !== request.stableType) {
431
436
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotTypeMismatch, `User Spot '${String(request.spotId)}' has another stable type.`);
432
437
  }
438
+ const ownerLive = await this.options.leaseTracker.isOwnerTokenLive({
439
+ ownerId: current.ownerId,
440
+ leaseGeneration: current.ownerLeaseGeneration
441
+ }, signal);
442
+ if (!ownerLive || current.allocation.state !== 'active') {
443
+ const release = this.options.store.releaseEndedReservation;
444
+ if (release === undefined) {
445
+ throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.NotConfigured, 'User Spot creation requires repository ended-owner release support.');
446
+ }
447
+ if (await release.call(this.options.store, key, current.storeVersion.value, signal, {
448
+ key: { kind: 'user_spot', globalId: String(request.spotId) },
449
+ intent: { stableType: request.stableType },
450
+ actorRelocationPolicy: this.options.relocationPolicy?.(request.meshName, request.stableType)
451
+ }))
452
+ continue;
453
+ const confirmed = await this.options.store.readAuthority(key, signal);
454
+ if (confirmed.kind === 'missing' ||
455
+ confirmed.storeVersion.value !== current.storeVersion.value)
456
+ continue;
457
+ if (!ownerLive) {
458
+ throw new contracts_1.ZLinkFrameworkException(contracts_1.ZLinkFrameworkErrorKind.Unavailable, 'User Spot authority owner lease is unavailable.');
459
+ }
460
+ }
433
461
  if (current.allocation.state === 'active' &&
434
462
  (0, service_authority_payload_codec_1.decodeServiceClosingSpotAuthority)(current.payload) === undefined) {
435
463
  return spotRef(current, request);
@@ -0,0 +1 @@
1
+ export declare const inspectRuntime: unique symbol;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inspectRuntime = void 0;
4
+ // Internal snapshots are available only through this module, not a package entry.
5
+ exports.inspectRuntime = Symbol('zlink.internal.runtime-observation');
@@ -32,7 +32,7 @@ export declare class ZLinkActorLocationClaims {
32
32
  claim(actorType: string, actorId: string, nodeRid: RoutingId, deactivate?: () => Promise<void>): Promise<ZLinkActorClaimResult>;
33
33
  setRef(actorType: string, actorId: string, actorRef: ActorRef, ownerNodeGeneration: bigint): Promise<void>;
34
34
  takeoverJoinedSpot(actorType: string, actorId: string, actorRef: ActorRef, spotMeshName: string, spotId: RoutingId, spotGeneration: bigint, membershipEpoch: bigint, ownerNodeGeneration: bigint, deactivate?: () => Promise<void>): Promise<ZLinkActorClaimResult>;
35
- commitMembership(actorType: string, actorRef: ActorRef, authorityOwnerGeneration: bigint, spotId: RoutingId, spotGeneration: bigint, spotKind: ZLinkSpotKind.Entry | ZLinkSpotKind.User, ownerNodeGeneration: bigint): Promise<void>;
35
+ commitMembership(actorType: string, actorRef: ActorRef, authorityOwnerGeneration: bigint, spotId: RoutingId, spotGeneration: bigint, spotKind: ZLinkSpotKind.Entry | ZLinkSpotKind.User, ownerNodeGeneration: bigint, signal?: AbortSignal): 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;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkActorLocationClaims = exports.ZLinkActorClaimStatus = void 0;
4
+ const Errors_1 = require("../../contracts/Errors");
4
5
  const internal_location_contracts_1 = require("./internal-location-contracts");
5
6
  const Spots_1 = require("../../contracts/Spots");
6
7
  const key_codec_1 = require("./key-codec");
@@ -150,7 +151,7 @@ class ZLinkActorLocationClaims {
150
151
  });
151
152
  return { status: ZLinkActorClaimStatus.Claimed, claimed, generation: result.generation };
152
153
  }
153
- async commitMembership(actorType, actorRef, authorityOwnerGeneration, spotId, spotGeneration, spotKind, ownerNodeGeneration) {
154
+ async commitMembership(actorType, actorRef, authorityOwnerGeneration, spotId, spotGeneration, spotKind, ownerNodeGeneration, signal) {
154
155
  const actorId = actorRef.actorId;
155
156
  const store = this.authorityStore;
156
157
  const owner = this.runtime.currentOwnerToken;
@@ -158,12 +159,12 @@ class ZLinkActorLocationClaims {
158
159
  throw new Error('Actor membership commit requires Location Store authority and owner.');
159
160
  }
160
161
  const key = (0, authority_key_codec_1.encodeAuthorityKey)('actor', actorId);
161
- const current = await store.readAuthority(key);
162
+ const current = await store.readAuthority(key, signal);
162
163
  if (!matchesActorAuthority(current, actorRef, owner) ||
163
164
  current.allocation.stableType !== actorType ||
164
165
  current.authorityOwnerGeneration !== authorityOwnerGeneration ||
165
166
  current.allocation.descriptorLifecycleGeneration !== ownerNodeGeneration) {
166
- throw new Error(`Actor '${actorId}' membership authority fence does not match.`);
167
+ throw new Errors_1.ZLinkFrameworkException(classifyMembershipAuthorityFailure(current, actorRef), `Actor '${actorId}' membership authority fence does not match.`);
167
168
  }
168
169
  const identity = (0, actor_authority_publication_1.decodeActorAuthorityIdentity)(current.payload, current.objectGeneration);
169
170
  if (identity === undefined ||
@@ -173,15 +174,18 @@ class ZLinkActorLocationClaims {
173
174
  identity.owner.leaseGeneration !== owner.leaseGeneration ||
174
175
  !(0, routing_id_1.routingIdsEqual)(identity.actor.nodeRid, actorRef.nodeRid) ||
175
176
  identity.meshName !== actorRef.meshName) {
176
- throw new Error(`Actor '${actorId}' membership authority identity does not match.`);
177
+ throw new Errors_1.ZLinkFrameworkException(Errors_1.ZLinkFrameworkErrorKind.Unavailable, `Actor '${actorId}' membership authority identity does not match.`);
177
178
  }
178
179
  const result = await store.compareExchangeAuthority(key, current.storeVersion, {
179
180
  kind: 'put',
180
181
  generationTransition: 'preserve',
181
182
  payload: (0, actor_authority_publication_1.rewriteActorAuthorityRoute)(current.payload, actorRef, String(spotId), spotGeneration, spotKind)
182
- });
183
+ }, signal);
183
184
  if (result.kind !== 'stored') {
184
- throw new Error(`Actor '${actorId}' membership commit was rejected with status ${result.kind}.`);
185
+ throw new Errors_1.ZLinkFrameworkException(result.kind === 'conflict'
186
+ ? (result.membershipFailure ??
187
+ classifyMembershipAuthorityFailure(result.current, actorRef))
188
+ : Errors_1.ZLinkFrameworkErrorKind.InternalFailure, `Actor '${actorId}' membership commit was rejected with status ${result.kind}.`);
185
189
  }
186
190
  }
187
191
  async release(_actorType, actorId, actorRef) {
@@ -328,6 +332,11 @@ class ZLinkActorLocationClaims {
328
332
  }
329
333
  }
330
334
  exports.ZLinkActorLocationClaims = ZLinkActorLocationClaims;
335
+ function classifyMembershipAuthorityFailure(current, actorRef) {
336
+ return current.kind === 'snapshot' && current.objectGeneration !== actorRef.objectGeneration
337
+ ? Errors_1.ZLinkFrameworkErrorKind.InvalidOperation
338
+ : Errors_1.ZLinkFrameworkErrorKind.Unavailable;
339
+ }
331
340
  function matchesActorAuthority(current, actorRef, ownerToken) {
332
341
  return (current.kind === 'snapshot' &&
333
342
  current.ownerId === ownerToken.ownerId &&
@@ -13,7 +13,6 @@ export interface ZLinkAutoConnectLoopOptions {
13
13
  readonly clearTimer?: (handle: unknown) => void;
14
14
  }
15
15
  export declare class ZLinkAutoConnectLoop {
16
- private readonly lane;
17
16
  private readonly reconciler;
18
17
  private readonly options;
19
18
  private readonly meshName;
@@ -2,9 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkAutoConnectLoop = void 0;
4
4
  const Options_1 = require("../../contracts/Locations/Options");
5
- const state_lane_1 = require("../execution/state-lane");
6
5
  class ZLinkAutoConnectLoop {
7
- lane = new state_lane_1.ZLinkStateLane();
8
6
  reconciler;
9
7
  options;
10
8
  meshName;
@@ -29,18 +27,21 @@ class ZLinkAutoConnectLoop {
29
27
  this.clearTimer = options.clearTimer ?? ((handle) => clearTimeout(handle));
30
28
  }
31
29
  async start(signal) {
32
- if (await this.lane.run(() => this.controller !== undefined))
30
+ if (this.controller !== undefined)
33
31
  return;
34
- await this.tick(signal);
35
- const started = await this.lane.run(() => {
36
- if (this.controller !== undefined)
37
- return false;
38
- this.controller = new AbortController();
39
- return true;
40
- });
41
- if (!started)
42
- return;
43
- this.scheduleNext();
32
+ // Reserve the lifecycle before yielding so stop also owns the first publication.
33
+ const controller = new AbortController();
34
+ this.controller = controller;
35
+ try {
36
+ await this.tick(signal);
37
+ }
38
+ catch (error) {
39
+ if (this.controller === controller) {
40
+ await this.prepareTransportShutdown();
41
+ }
42
+ throw error;
43
+ }
44
+ this.scheduleNext(controller);
44
45
  }
45
46
  async requestPeerReconcile(meshName, _peerRid) {
46
47
  const controller = this.controller;
@@ -74,9 +75,14 @@ class ZLinkAutoConnectLoop {
74
75
  }
75
76
  async tick(signal) {
76
77
  const controller = this.controller;
78
+ const tickSignal = controller === undefined
79
+ ? signal
80
+ : signal === undefined
81
+ ? controller.signal
82
+ : AbortSignal.any([signal, controller.signal]);
77
83
  await this.enqueueTick(async () => {
78
- if (controller?.signal.aborted !== true)
79
- await this.tickCore(signal ?? controller?.signal);
84
+ if (tickSignal?.aborted !== true)
85
+ await this.tickCore(tickSignal);
80
86
  });
81
87
  }
82
88
  enqueueTick(operation) {
@@ -118,15 +124,15 @@ class ZLinkAutoConnectLoop {
118
124
  this.lastTickFailed = this.reconciler.storeFailed;
119
125
  return this.lastTickFailed;
120
126
  }
121
- scheduleNext() {
122
- if (this.controller === undefined || this.controller.signal.aborted) {
127
+ scheduleNext(controller) {
128
+ if (this.controller !== controller || controller.signal.aborted) {
123
129
  return;
124
130
  }
125
131
  this.timer = this.setTimer(() => {
126
132
  this.timer = undefined;
127
- void this.tick(this.controller?.signal)
133
+ void this.tick(controller.signal)
128
134
  .catch(() => undefined)
129
- .finally(() => this.scheduleNext());
135
+ .finally(() => this.scheduleNext(controller));
130
136
  }, this.options.pollingIntervalMs);
131
137
  }
132
138
  }
@@ -94,12 +94,9 @@ function targetOf(peer) {
94
94
  };
95
95
  }
96
96
  function isAutoConnectSelf(local, peer) {
97
- if (local.nodeRid !== undefined &&
97
+ return (local.nodeRid !== undefined &&
98
98
  peer.nodeRid !== undefined &&
99
- (0, routing_id_1.routingIdsEqual)(local.nodeRid, peer.nodeRid)) {
100
- return true;
101
- }
102
- return peer.endpoint === local.endpoint;
99
+ (0, routing_id_1.routingIdsEqual)(local.nodeRid, peer.nodeRid));
103
100
  }
104
101
  function shouldDialAutoConnectPeer(local, peer) {
105
102
  switch (local.autoConnectType) {
@@ -47,6 +47,7 @@ export declare class ZLinkAutoConnectReconciler {
47
47
  disconnectPeers(): void;
48
48
  unpublishLocal(signal?: AbortSignal): Promise<void>;
49
49
  private disconnectIfNeeded;
50
+ private publishLocalForTick;
50
51
  private publishLocal;
51
52
  private prepareUnpublishLocalCore;
52
53
  private preparePublishLocalCore;