@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
@@ -99,7 +99,7 @@ class ZLinkLocationRuntime {
99
99
  get currentOwnerToken() {
100
100
  return this.ownerToken;
101
101
  }
102
- /** Location runtime §5: a startup Store request ends within the renew timeout. */
102
+ /** Location runtime §5: a descriptor publication ends within the renew timeout. */
103
103
  async writeDescriptor(action, signal) {
104
104
  try {
105
105
  return await withTimeout(action, this.options.ownerLeaseRenewTimeoutMs, signal);
@@ -226,7 +226,7 @@ class ZLinkLocationRuntime {
226
226
  async cleanupOwner(signal) {
227
227
  const pending = this.heartbeatRenewal;
228
228
  try {
229
- await withTimeout(() => pending ?? Promise.resolve(), undefined, signal);
229
+ await (pending ?? Promise.resolve());
230
230
  }
231
231
  catch (error) {
232
232
  if (!(0, abort_1.isAbortError)(error))
@@ -240,18 +240,14 @@ class ZLinkLocationRuntime {
240
240
  return;
241
241
  }
242
242
  try {
243
- const owner = this.ownerToken ??
244
- this.lastOwnerToken ?? {
245
- ownerId: this.ownerId,
246
- leaseGeneration: 0n
247
- };
248
- await withTimeout(async (cleanupSignal) => {
249
- await this.stores.locationStore.removeAllByOwner(owner, cleanupSignal);
250
- const currentLease = await this.stores.ownerLeaseStore.readOwnerLease(this.ownerId, cleanupSignal);
251
- if (currentLease.kind === 'found') {
252
- await this.stores.ownerLeaseStore.releaseOwnerLease(currentLease.token, cleanupSignal);
253
- }
254
- }, undefined, signal);
243
+ const owner = this.ownerToken ?? this.lastOwnerToken;
244
+ signal?.throwIfAborted();
245
+ if (owner !== undefined) {
246
+ await this.stores.locationStore.removeAllByOwner(owner, signal);
247
+ signal?.throwIfAborted();
248
+ await this.stores.ownerLeaseStore.releaseOwnerLease(owner, signal);
249
+ signal?.throwIfAborted();
250
+ }
255
251
  this.ownerToken = undefined;
256
252
  this.lastOwnerToken = undefined;
257
253
  this.ownerCleanupComplete = true;
@@ -334,7 +330,7 @@ class ZLinkLocationRuntime {
334
330
  }
335
331
  try {
336
332
  if (!this.started) {
337
- // stop owns confirmation and release under the host shutdown signal.
333
+ this.lastOwnerToken = claim.token;
338
334
  return false;
339
335
  }
340
336
  this.lastOwnerToken = this.ownerToken;
@@ -500,7 +496,7 @@ class ZLinkLocationRuntime {
500
496
  // row was stored under.
501
497
  const normalizedEndpoint = (0, EndpointNotation_1.normalizeEndpoint)(peer.endpoint);
502
498
  const stamped = { ...peer, endpoint: normalizedEndpoint, ownerId: this.ownerId };
503
- const result = await this.guardWrite(() => this.stores.peerStore.updatePeer(stamped, intent, signal));
499
+ const result = await this.guardWrite(() => this.writeDescriptor((writeSignal) => this.stores.peerStore.updatePeer(stamped, intent, writeSignal), signal));
504
500
  const key = {
505
501
  autoConnectType: peer.autoConnectType,
506
502
  meshName: peer.meshName,
@@ -8,25 +8,26 @@ const service_wire_m6a_codec_1 = require("../foundation/service-wire-m6a-codec")
8
8
  const payload_codec_1 = require("./payload-codec");
9
9
  const CREATION_PACKET_NAME = 'ZLinkFrameworkCreationRequest';
10
10
  function encodeFrameworkCreationPayload(payload, registry) {
11
- const encoded = (0, payload_codec_1.encodeFrameworkPayload)(payload ?? null, registry);
11
+ const message = (0, payload_codec_1.encodeFrameworkPayloadMessage)(payload ?? null, registry);
12
12
  try {
13
- return (0, service_wire_m6a_codec_1.encodeApplicationPayload)({
13
+ return (0, service_wire_m6a_codec_1.encodeOwnedApplicationPayload)({
14
14
  packetName: CREATION_PACKET_NAME,
15
- contentType: encoded.contentType,
16
- payload: encoded.message.data()
15
+ contentType: (0, payload_codec_1.frameworkPayloadContentType)(message),
16
+ payload: message.data()
17
17
  });
18
18
  }
19
19
  finally {
20
- encoded.message.close();
20
+ message.close();
21
21
  }
22
22
  }
23
23
  function decodeFrameworkCreationPayload(payload, registry) {
24
24
  try {
25
- const application = (0, service_wire_m6a_codec_1.decodeApplicationPayload)(payload);
25
+ const application = (0, service_wire_m6a_codec_1.decodeApplicationPayloadView)(payload);
26
26
  if (application.packetName !== CREATION_PACKET_NAME) {
27
27
  throw new RangeError('Creation payload has an unexpected packet name.');
28
28
  }
29
- const message = runtime_message_1.ZLinkBufferMessage.from(application.payload);
29
+ // Creation frames use owned storage and stay alive through synchronous decode.
30
+ const message = runtime_message_1.ZLinkBufferMessage.fromOwned(application.payload);
30
31
  try {
31
32
  return (0, payload_codec_1.decodeFrameworkPayloadMessage)(message, registry, undefined, application.contentType);
32
33
  }
@@ -1,5 +1,5 @@
1
1
  import * as profile from '@zlink-systems/stream-wire/internal/json';
2
2
  export declare const FRAMEWORK_JSON_V1_PROFILE = "framework-json-v1";
3
3
  export declare const stringifyFrameworkJsonV1: typeof profile.stringifyFrameworkJsonV1;
4
- export declare const parseFrameworkJsonV1: typeof profile.parseFrameworkJsonV1;
4
+ export declare function parseFrameworkJsonV1(text: string, options?: profile.FrameworkJsonParseOptions, schema?: Parameters<typeof profile.parseFrameworkJsonV1>[2], reviver?: Parameters<typeof profile.parseFrameworkJsonV1>[3]): unknown;
5
5
  export type { FrameworkJsonParseOptions } from '@zlink-systems/stream-wire/internal/json';
@@ -33,8 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.parseFrameworkJsonV1 = exports.stringifyFrameworkJsonV1 = exports.FRAMEWORK_JSON_V1_PROFILE = void 0;
36
+ exports.stringifyFrameworkJsonV1 = exports.FRAMEWORK_JSON_V1_PROFILE = void 0;
37
+ exports.parseFrameworkJsonV1 = parseFrameworkJsonV1;
37
38
  const profile = __importStar(require("@zlink-systems/stream-wire/internal/json"));
38
39
  exports.FRAMEWORK_JSON_V1_PROFILE = profile.FRAMEWORK_JSON_V1_PROFILE;
39
40
  exports.stringifyFrameworkJsonV1 = profile.stringifyFrameworkJsonV1;
40
- exports.parseFrameworkJsonV1 = profile.parseFrameworkJsonV1;
41
+ const DEFAULT_PARSE_OPTIONS = Object.freeze({});
42
+ function parseFrameworkJsonV1(text, options = DEFAULT_PARSE_OPTIONS, schema, reviver) {
43
+ return profile.parseFrameworkJsonV1(text, options, schema, reviver);
44
+ }
@@ -34,16 +34,10 @@ const defaultReceiveCodecs = new Map([[JSON_CONTENT_TYPE, frameworkJsonReceiveCo
34
34
  const serializerSelectionPlans = new WeakMap();
35
35
  const encodedContentTypes = new WeakMap();
36
36
  function encodeFrameworkPayloadMessage(payload, registry, packetName, contractPart = 'payload') {
37
- return encodeFrameworkPayload(payload, registry, packetName, contractPart).message;
38
- }
39
- function encodeFrameworkPayload(payload, registry, packetName, contractPart = 'payload') {
40
37
  let declaredType;
41
38
  if ((0, contracts_1.isZLinkMessage)(payload)) {
42
39
  if (payload.isEncoded()) {
43
- return {
44
- message: rememberContentType(toRuntimeMessage(payload.toEncodedPayload()), stream_wire_1.ZlinkStreamContentType.Raw),
45
- contentType: stream_wire_1.ZlinkStreamContentType.Raw
46
- };
40
+ return rememberContentType(toRuntimeMessage(payload.toEncodedPayload()), stream_wire_1.ZlinkStreamContentType.Raw);
47
41
  }
48
42
  declaredType = (0, ZLinkMessage_1.readZLinkMessageDeclaredType)(payload);
49
43
  payload = payload.decode();
@@ -56,16 +50,14 @@ function encodeFrameworkPayload(payload, registry, packetName, contractPart = 'p
56
50
  }
57
51
  const selected = selectSerializerWithContentType(payload, registry, declaredType);
58
52
  if (selected !== undefined) {
59
- return {
60
- message: rememberContentType(toRuntimeMessage(selected.serializer.serialize(payload)), selected.contentType),
61
- contentType: selected.contentType
62
- };
53
+ return rememberContentType(toRuntimeMessage(selected.serializer.serialize(payload)), selected.contentType);
63
54
  }
64
- return {
65
- message: rememberContentType(runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from((0, framework_json_v1_1.stringifyFrameworkJsonV1)(payload, ((0, packet_name_1.resolveFrameworkPacketJsonContract)(payload, packetName) ??
66
- (packetName === undefined ? undefined : (0, Attributes_1.readZLinkPacketJsonContract)(packetName)))?.[contractPart]))), JSON_CONTENT_TYPE),
67
- contentType: JSON_CONTENT_TYPE
68
- };
55
+ return rememberContentType(runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from((0, framework_json_v1_1.stringifyFrameworkJsonV1)(payload, ((0, packet_name_1.resolveFrameworkPacketJsonContract)(payload, packetName) ??
56
+ (packetName === undefined ? undefined : (0, Attributes_1.readZLinkPacketJsonContract)(packetName)))?.[contractPart]))), JSON_CONTENT_TYPE);
57
+ }
58
+ function encodeFrameworkPayload(payload, registry, packetName, contractPart = 'payload') {
59
+ const message = encodeFrameworkPayloadMessage(payload, registry, packetName, contractPart);
60
+ return { message, contentType: frameworkPayloadContentType(message) };
69
61
  }
70
62
  function frameworkPayloadContentType(message) {
71
63
  return encodedContentTypes.get(message) ?? JSON_CONTENT_TYPE;
@@ -85,11 +77,15 @@ function decodeFrameworkPayload(message, registry, type, contentType, packetName
85
77
  }
86
78
  if (message.isEmpty())
87
79
  return undefined;
88
- const parsedPayload = parseJsonPayload(message, schemaForDecode(type, packetName, contractPart));
89
- if (parsedPayload.valid) {
90
- return (0, ZLinkMessage_1.materializeZLinkMessageValue)(parsedPayload.value, type);
80
+ const schema = schemaForDecode(type, packetName, contractPart);
81
+ let value;
82
+ try {
83
+ value = (0, framework_json_v1_1.parseFrameworkJsonV1)(message.getString('utf8'), undefined, schema);
84
+ }
85
+ catch (error) {
86
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, 'PayloadDecodeFailed: framework payload is not valid JSON.', false, error);
91
87
  }
92
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, 'PayloadDecodeFailed: framework payload is not valid JSON.', false, parsedPayload.error);
88
+ return (0, ZLinkMessage_1.materializeZLinkMessageValue)(value, type);
93
89
  }
94
90
  function wrapFrameworkPayloadMessage(message, registry, contentType = JSON_CONTENT_TYPE, packetName, contractPart = 'payload') {
95
91
  const payload = encodedPayloadFromOwned(message.data());
@@ -106,7 +102,7 @@ function decodeFrameworkEncodedPayload(payload, registry, type, contentType, pac
106
102
  return undefined;
107
103
  const text = payload.getString('utf8');
108
104
  try {
109
- return (0, ZLinkMessage_1.materializeZLinkMessageValue)((0, framework_json_v1_1.parseFrameworkJsonV1)(text, {}, schemaForDecode(type, packetName, contractPart)), type);
105
+ return (0, ZLinkMessage_1.materializeZLinkMessageValue)((0, framework_json_v1_1.parseFrameworkJsonV1)(text, undefined, schemaForDecode(type, packetName, contractPart)), type);
110
106
  }
111
107
  catch (error) {
112
108
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, 'PayloadDecodeFailed: framework payload is not valid JSON.', false, error);
@@ -143,11 +139,9 @@ function serializerSelectionPlanOf(registry) {
143
139
  if (serializers === undefined || serializers.size === 0) {
144
140
  return undefined;
145
141
  }
146
- const key = serializers;
147
- const cached = serializerSelectionPlans.get(key);
148
- if (cached !== undefined) {
149
- return cached;
150
- }
142
+ return serializerSelectionPlans.get(serializers) ?? prepareSerializerSelectionPlan(serializers);
143
+ }
144
+ function prepareSerializerSelectionPlan(serializers) {
151
145
  const entries = [];
152
146
  const registeredSelections = (0, CodecSerializerSelection_1.codecSerializerSelectionsOf)(serializers);
153
147
  for (const [contentType, serializer] of serializers) {
@@ -181,7 +175,7 @@ function serializerSelectionPlanOf(registry) {
181
175
  return selected;
182
176
  }
183
177
  };
184
- serializerSelectionPlans.set(key, plan);
178
+ serializerSelectionPlans.set(serializers, plan);
185
179
  return plan;
186
180
  }
187
181
  function outboundBusinessType(value) {
@@ -226,14 +220,6 @@ function selectDefaultSerializerFromEntries(serializers) {
226
220
  function unsupportedContentType(contentType) {
227
221
  return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, `PayloadDecodeFailed: unsupported framework content type '${contentType}'.`);
228
222
  }
229
- function parseJsonPayload(message, schema) {
230
- try {
231
- return { valid: true, value: (0, framework_json_v1_1.parseFrameworkJsonV1)(message.getString('utf8'), {}, schema) };
232
- }
233
- catch (error) {
234
- return { valid: false, error };
235
- }
236
- }
237
223
  function serializerMapOf(registry) {
238
224
  if (registry === undefined) {
239
225
  return undefined;
@@ -1,3 +1,5 @@
1
+ import { type PendingOperation } from '../foundation/operation-registry';
1
2
  export declare function remainingRequestTimeout(operation: string, deadlineMs: number | undefined): number | undefined;
2
- /** Bounds caller waiting across outbound admission and reply; late completions stay observed. */
3
- export declare function waitRequestReply<T>(reply: Promise<T>, operation: string, deadlineMs: number | undefined, signal?: AbortSignal, endWait?: () => void, discardLateReply?: (reply: T) => void): Promise<T>;
3
+ export declare function requestTerminalError(operation: string, error: unknown): unknown;
4
+ /** Observes a stage without registering or completing the logical request. */
5
+ export declare function waitRequestReply<T>(stage: Promise<T>, operation: string, pending: PendingOperation<unknown>, endWait?: () => void, discardLateReply?: (reply: T) => void): Promise<T>;
@@ -1,39 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.remainingRequestTimeout = remainingRequestTimeout;
4
+ exports.requestTerminalError = requestTerminalError;
4
5
  exports.waitRequestReply = waitRequestReply;
6
+ const runtime_values_1 = require("../backend/runtime-values");
5
7
  const abort_1 = require("../abort");
8
+ const operation_registry_1 = require("../foundation/operation-registry");
6
9
  const framework_errors_internal_1 = require("../framework-errors-internal");
7
10
  function remainingRequestTimeout(operation, deadlineMs) {
8
11
  if (deadlineMs === undefined)
9
12
  return undefined;
10
13
  const remaining = deadlineMs - performance.now();
11
- if (remaining <= 0) {
12
- throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `${operation} exceeded its deadline.`);
13
- }
14
+ if (remaining <= 0)
15
+ throw requestTimeout(operation);
14
16
  return Math.max(1, Math.ceil(remaining));
15
17
  }
16
- /** Bounds caller waiting across outbound admission and reply; late completions stay observed. */
17
- async function waitRequestReply(reply, operation, deadlineMs, signal, endWait, discardLateReply) {
18
- let timer;
19
- let waiting = reply;
20
- if (deadlineMs !== undefined) {
21
- const timeout = new Promise((_resolve, reject) => {
22
- const remaining = remainingRequestTimeout(operation, deadlineMs);
23
- timer = setTimeout(() => reject((0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `${operation} exceeded its deadline.`)), remaining);
18
+ function requestTerminalError(operation, error) {
19
+ return error instanceof operation_registry_1.OperationTimeoutError ||
20
+ ((0, runtime_values_1.isZLinkBackendResultError)(error) &&
21
+ error.operation === 'request' &&
22
+ error.result === runtime_values_1.RequestResult.TimedOut)
23
+ ? requestTimeout(operation)
24
+ : error;
25
+ }
26
+ function requestTimeout(operation) {
27
+ return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `${operation} exceeded its deadline.`);
28
+ }
29
+ /** Observes a stage without registering or completing the logical request. */
30
+ function waitRequestReply(stage, operation, pending, endWait, discardLateReply) {
31
+ return new Promise((resolve, reject) => {
32
+ const fail = (error) => {
33
+ endWait?.();
34
+ if (discardLateReply !== undefined)
35
+ void stage.then(discardLateReply, () => undefined);
36
+ reject((0, abort_1.isAbortError)(error) ? (0, abort_1.createAbortError)() : requestTerminalError(operation, error));
37
+ };
38
+ pending.setFailureDispatcher(fail);
39
+ void stage.then((value) => {
40
+ pending.clearFailureDispatcher(fail);
41
+ resolve(value);
42
+ }, (error) => {
43
+ const terminal = requestTerminalError(operation, error);
44
+ if (terminal !== error) {
45
+ if (!pending.fail(terminal))
46
+ void pending.promise.then(() => fail(terminal), fail);
47
+ }
48
+ else {
49
+ pending.clearFailureDispatcher(fail);
50
+ fail(error);
51
+ }
24
52
  });
25
- waiting = Promise.race([reply, timeout]);
26
- }
27
- try {
28
- return await (0, abort_1.awaitWithAbort)(waiting, signal);
29
- }
30
- catch (error) {
31
- endWait?.();
32
- if (discardLateReply !== undefined)
33
- void reply.then(discardLateReply, () => undefined);
34
- throw error;
35
- }
36
- finally {
37
- clearTimeout(timer);
38
- }
53
+ });
39
54
  }
@@ -1,2 +1,15 @@
1
+ import type { PendingOperation } from '../foundation/operation-registry';
1
2
  import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
2
- export declare function createZLinkRequest<TReply>(start: (onAdmitted: () => void) => Promise<TReply>, deliverReply?: (reply: Promise<TReply>) => Promise<TReply>): ZLinkRequest<TReply>;
3
+ /** Transport preparation is separate from typed result delivery. */
4
+ export interface ZLinkRequestResult<TReply> {
5
+ readonly operation?: PendingOperation<TReply>;
6
+ readonly pending: Promise<unknown>;
7
+ decode(value: unknown): TReply;
8
+ readonly mapFailure: (error: unknown) => unknown;
9
+ }
10
+ export declare const identityRequestReply: <TReply>(value: TReply) => TReply;
11
+ export declare function prepareZLinkRequestReply<TSource, TReply>(pending: Promise<TSource>, decode: (value: TSource) => TReply, mapFailure?: (error: unknown) => unknown): ZLinkRequestResult<TReply>;
12
+ export declare function rejectZLinkRequestReply<TReply>(error: unknown): ZLinkRequestResult<TReply>;
13
+ /** Yield applies the same transport decoding without public admission. */
14
+ export declare function mapZLinkRequestReply<TReply>(result: ZLinkRequestResult<TReply>): Promise<TReply>;
15
+ export declare function createZLinkRequest<TReply>(start: (onAdmitted: () => void) => ZLinkRequestResult<TReply>, deliverReply?: (reply: Promise<TReply>) => Promise<TReply>): ZLinkRequest<TReply>;
@@ -1,8 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.identityRequestReply = void 0;
4
+ exports.prepareZLinkRequestReply = prepareZLinkRequestReply;
5
+ exports.rejectZLinkRequestReply = rejectZLinkRequestReply;
6
+ exports.mapZLinkRequestReply = mapZLinkRequestReply;
3
7
  exports.createZLinkRequest = createZLinkRequest;
8
+ const flow_context_1 = require("../diagnostics/flow-context");
4
9
  const completedAdmission = Promise.resolve();
5
10
  const ignoreAdmissionFailure = () => { };
11
+ const REQUEST_ADMISSION = Symbol('zlink.requestAdmission');
12
+ // Every public request shares this getter. A getter closure per request gives
13
+ // each reply Promise its own hidden class, and V8 then keeps its properties in
14
+ // a per-request dictionary.
15
+ const ADMITTED_PROPERTY = {
16
+ get() {
17
+ return this[REQUEST_ADMISSION].observe();
18
+ }
19
+ };
20
+ const identityRequestReply = (value) => value;
21
+ exports.identityRequestReply = identityRequestReply;
22
+ function prepareZLinkRequestReply(pending, decode, mapFailure = exports.identityRequestReply) {
23
+ const flow = (0, flow_context_1.currentFlowContext)();
24
+ if (flow === undefined)
25
+ return { pending, decode, mapFailure };
26
+ // The completion reaction is registered after the outbound flow scope returns.
27
+ return {
28
+ pending,
29
+ decode: (value) => (0, flow_context_1.runWithFlow)(flow, () => decode(value)),
30
+ mapFailure: (error) => (0, flow_context_1.runWithFlow)(flow, () => mapFailure(error))
31
+ };
32
+ }
33
+ function rejectZLinkRequestReply(error) {
34
+ return prepareZLinkRequestReply(Promise.reject(error), exports.identityRequestReply);
35
+ }
6
36
  class RequestAdmission {
7
37
  admitted;
8
38
  resolveAdmission;
@@ -33,25 +63,56 @@ class RequestAdmission {
33
63
  return this.admitted;
34
64
  }
35
65
  }
66
+ function requestFailure(result, error) {
67
+ try {
68
+ return result.mapFailure(error);
69
+ }
70
+ catch (mappedError) {
71
+ return mappedError;
72
+ }
73
+ }
74
+ /** Yield applies the same transport decoding without public admission. */
75
+ function mapZLinkRequestReply(result) {
76
+ if (result.operation !== undefined &&
77
+ result.operation.mapCaller(result.decode, (error) => requestFailure(result, error)))
78
+ return result.operation.promise;
79
+ return result.pending.then((value) => result.decode(value), (error) => {
80
+ throw requestFailure(result, error);
81
+ });
82
+ }
36
83
  function createZLinkRequest(start, deliverReply) {
37
84
  const admission = new RequestAdmission();
85
+ const confirm = () => admission.confirm();
38
86
  let pending;
39
87
  try {
40
- pending = start(() => admission.confirm());
88
+ const result = start(confirm);
89
+ const onValue = (value) => {
90
+ try {
91
+ const reply = result.decode(value);
92
+ admission.confirm();
93
+ return reply;
94
+ }
95
+ catch (error) {
96
+ admission.fail(error);
97
+ throw error;
98
+ }
99
+ };
100
+ const onFailure = (error) => {
101
+ const failure = requestFailure(result, error);
102
+ admission.fail(failure);
103
+ throw failure;
104
+ };
105
+ if (result.operation !== undefined && result.operation.mapCaller(onValue, onFailure)) {
106
+ pending = result.operation.promise;
107
+ }
108
+ else
109
+ pending = result.pending.then(onValue, onFailure);
41
110
  }
42
111
  catch (error) {
112
+ admission.fail(error);
43
113
  pending = Promise.reject(error);
44
114
  }
45
- const observed = pending.then((value) => {
46
- // A successful reply proves admission even without an observation callback.
47
- admission.confirm();
48
- return value;
49
- }, (error) => {
50
- admission.fail(error);
51
- throw error;
52
- });
53
- const reply = deliverReply?.(observed) ?? observed;
54
- return Object.defineProperty(reply, 'admitted', {
55
- get: () => admission.observe()
56
- });
115
+ const reply = deliverReply?.(pending) ?? pending;
116
+ Object.defineProperty(reply, REQUEST_ADMISSION, { value: admission });
117
+ return Object.defineProperty(reply, 'admitted', ADMITTED_PROPERTY);
57
118
  }
@@ -859,6 +859,10 @@ export type RequestSpecificTail = {
859
859
  readonly terminalResult: "ok";
860
860
  readonly bindingGeneration: NonzeroU64;
861
861
  readonly authorityOwnerGeneration: NonzeroU64;
862
+ } | {
863
+ readonly originalOperationKind: "streamBind";
864
+ readonly terminalResult: "rejected";
865
+ readonly rejectionMessage: NonemptyText16;
862
866
  } | {
863
867
  readonly originalOperationKind: "userSpotCreate";
864
868
  readonly terminalResult: "ok";
@@ -6601,6 +6601,9 @@ function readRequestSpecificTail(reader, context, enclosing, flags) {
6601
6601
  value["bindingGeneration"] = readNonzeroU64(body, context, value, flags);
6602
6602
  value["authorityOwnerGeneration"] = readNonzeroU64(body, context, value, flags);
6603
6603
  }
6604
+ else if (same(value["originalOperationKind"], "streamBind") && same(value["terminalResult"], "rejected")) {
6605
+ value["rejectionMessage"] = readNonemptyText16(body, context, value, flags);
6606
+ }
6604
6607
  else if (same(value["originalOperationKind"], "userSpotCreate") && same(value["terminalResult"], "ok")) {
6605
6608
  value["createResult"] = readUserSpotCreateResult(body, context, value, flags);
6606
6609
  value["spot"] = readSpotRef(body, context, value, flags);
@@ -6622,7 +6625,7 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
6622
6625
  const value = input;
6623
6626
  const body = writer;
6624
6627
  if (same(value["originalOperationKind"], "actorLookup") && same(value["terminalResult"], "ok")) {
6625
- if (value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6628
+ if (value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6626
6629
  fail("request-specific-tail discriminator agreement");
6627
6630
  if (value["actor"] === undefined)
6628
6631
  fail("actor required");
@@ -6641,14 +6644,14 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
6641
6644
  writeNonzeroU64(numeric(value["authorityOwnerGeneration"]), body, context, value, flags);
6642
6645
  }
6643
6646
  else if (same(value["originalOperationKind"], "actorJoin") && same(value["terminalResult"], "ok")) {
6644
- if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6647
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6645
6648
  fail("request-specific-tail discriminator agreement");
6646
6649
  if (value["join"] === undefined)
6647
6650
  fail("join required");
6648
6651
  writeActorJoinReplyTail(value["join"], body, context, value, flags);
6649
6652
  }
6650
6653
  else if (same(value["originalOperationKind"], "streamBind") && same(value["terminalResult"], "ok")) {
6651
- if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["join"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6654
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["join"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6652
6655
  fail("request-specific-tail discriminator agreement");
6653
6656
  if (value["bindingGeneration"] === undefined)
6654
6657
  fail("bindingGeneration required");
@@ -6657,8 +6660,15 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
6657
6660
  fail("authorityOwnerGeneration required");
6658
6661
  writeNonzeroU64(numeric(value["authorityOwnerGeneration"]), body, context, value, flags);
6659
6662
  }
6663
+ else if (same(value["originalOperationKind"], "streamBind") && same(value["terminalResult"], "rejected")) {
6664
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6665
+ fail("request-specific-tail discriminator agreement");
6666
+ if (value["rejectionMessage"] === undefined)
6667
+ fail("rejectionMessage required");
6668
+ writeNonemptyText16(value["rejectionMessage"], body, context, value, flags);
6669
+ }
6660
6670
  else if (same(value["originalOperationKind"], "userSpotCreate") && same(value["terminalResult"], "ok")) {
6661
- if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6671
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6662
6672
  fail("request-specific-tail discriminator agreement");
6663
6673
  if (value["createResult"] === undefined)
6664
6674
  fail("createResult required");
@@ -6668,21 +6678,21 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
6668
6678
  writeSpotRef(value["spot"], body, context, value, flags);
6669
6679
  }
6670
6680
  else if (same(value["originalOperationKind"], "userSpotClose") && same(value["terminalResult"], "ok")) {
6671
- if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["creation"] !== undefined)
6681
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["creation"] !== undefined)
6672
6682
  fail("request-specific-tail discriminator agreement");
6673
6683
  if (value["closed"] === undefined)
6674
6684
  fail("closed required");
6675
6685
  writeBool8(value["closed"], body, context, value, flags);
6676
6686
  }
6677
6687
  else if (same(value["originalOperationKind"], "actorCreate") && same(value["terminalResult"], "ok")) {
6678
- if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined)
6688
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined)
6679
6689
  fail("request-specific-tail discriminator agreement");
6680
6690
  if (value["creation"] === undefined)
6681
6691
  fail("creation required");
6682
6692
  writeActorCreateTerminal(value["creation"], body, context, value, flags);
6683
6693
  }
6684
6694
  else {
6685
- if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6695
+ if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
6686
6696
  fail("request-specific-tail discriminator agreement");
6687
6697
  }
6688
6698
  }