@zlink-systems/framework 0.29.1 → 0.30.1

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 (322) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  6. package/dist/contracts/Configuration/Builders.d.ts +1 -2
  7. package/dist/contracts/Configuration/Configs.d.ts +0 -5
  8. package/dist/contracts/Configuration/RegistrationBuilders.js +6 -4
  9. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -6
  10. package/dist/contracts/Configuration/RegistrationValidators.js +4 -4
  11. package/dist/contracts/Configuration/index.d.ts +1 -1
  12. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  13. package/dist/contracts/Handlers/Attributes.js +7 -11
  14. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  15. package/dist/contracts/Handlers/JsonContract.js +4 -153
  16. package/dist/contracts/Spots/Contracts.d.ts +2 -1
  17. package/dist/internal.d.ts +1 -0
  18. package/dist/internal.js +3 -1
  19. package/dist/nest-integration.d.ts +1 -1
  20. package/dist/nest-integration.js +2 -1
  21. package/dist/runtime/actors/actor-client.d.ts +1 -1
  22. package/dist/runtime/actors/actor-client.js +14 -12
  23. package/dist/runtime/actors/actor-handoff.d.ts +3 -2
  24. package/dist/runtime/actors/actor-handoff.js +15 -7
  25. package/dist/runtime/actors/actor-join-relocation.d.ts +1 -0
  26. package/dist/runtime/actors/actor-local-native-join.js +9 -12
  27. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  28. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  29. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  30. package/dist/runtime/actors/index.d.ts +2 -1
  31. package/dist/runtime/actors/index.js +18 -6
  32. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  33. package/dist/runtime/admission.d.ts +1 -1
  34. package/dist/runtime/admission.js +15 -5
  35. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +9 -9
  36. package/dist/runtime/application-jobs/application-ingress-record-owner.js +45 -23
  37. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +5 -2
  38. package/dist/runtime/application-jobs/application-job-queue-scope.js +41 -21
  39. package/dist/runtime/application-jobs/contracts.d.ts +15 -2
  40. package/dist/runtime/backend/contracts/index.d.ts +27 -27
  41. package/dist/runtime/backend/mesh-completion-table.d.ts +15 -5
  42. package/dist/runtime/backend/mesh-completion-table.js +160 -50
  43. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +3 -0
  44. package/dist/runtime/backend/mesh-dispatch-pump.js +53 -36
  45. package/dist/runtime/backend/node/node-backend-adapter-factory.js +6 -1
  46. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -3
  47. package/dist/runtime/backend/node/node-backend-adapter-support.js +33 -31
  48. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  49. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  50. package/dist/runtime/backend/node/node-mesh-backend-adapter.d.ts +1 -9
  51. package/dist/runtime/backend/node/node-mesh-backend-adapter.js +1 -1
  52. package/dist/runtime/backend/node/node-raw-binding-port.js +50 -25
  53. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +22 -16
  54. package/dist/runtime/backend/node/node-raw-mesh-backend.js +133 -149
  55. package/dist/runtime/backend/node/node-socket-backend-adapter.js +15 -10
  56. package/dist/runtime/backend/raw-binding-port.d.ts +10 -3
  57. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  58. package/dist/runtime/backend/runtime-message.js +5 -0
  59. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  60. package/dist/runtime/backend/runtime-values.js +2 -1
  61. package/dist/runtime/channels/channel-clients.d.ts +1 -0
  62. package/dist/runtime/channels/channel-clients.js +58 -21
  63. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +3 -2
  64. package/dist/runtime/channels/channel-dispatch-pipeline.js +20 -11
  65. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  66. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  67. package/dist/runtime/channels/channel-dispatchers.d.ts +1 -1
  68. package/dist/runtime/channels/channel-dispatchers.js +27 -26
  69. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  70. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  71. package/dist/runtime/channels/channel-envelope.d.ts +1 -0
  72. package/dist/runtime/channels/channel-envelope.js +83 -8
  73. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  74. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  75. package/dist/runtime/channels/channel-receive-loops.js +3 -3
  76. package/dist/runtime/channels/channel-runtime-lifecycle.js +2 -1
  77. package/dist/runtime/channels/channel-runtime-manager.d.ts +6 -6
  78. package/dist/runtime/channels/channel-runtime-manager.js +12 -12
  79. package/dist/runtime/channels/channel-socket-registry.d.ts +10 -3
  80. package/dist/runtime/channels/channel-socket-registry.js +59 -82
  81. package/dist/runtime/channels/channel-transports.d.ts +18 -15
  82. package/dist/runtime/channels/channel-transports.js +48 -31
  83. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  84. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  85. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  86. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  87. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  88. package/dist/runtime/channels/source-spot-router.js +4 -4
  89. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  90. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  91. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  92. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  93. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  94. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  95. package/dist/runtime/diagnostics/message-flow.d.ts +1 -0
  96. package/dist/runtime/diagnostics/message-flow.js +3 -3
  97. package/dist/runtime/execution/serial-execution-queue.d.ts +1 -0
  98. package/dist/runtime/execution/serial-execution-queue.js +1 -0
  99. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  100. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  101. package/dist/runtime/foundation/durable-service-request.js +98 -0
  102. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  103. package/dist/runtime/foundation/operation-identity.js +5 -1
  104. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +37 -6
  105. package/dist/runtime/foundation/raw-service-mesh-runtime.js +473 -220
  106. package/dist/runtime/foundation/service-liveness-registry.d.ts +20 -8
  107. package/dist/runtime/foundation/service-liveness-registry.js +57 -44
  108. package/dist/runtime/foundation/service-mailbox.d.ts +3 -0
  109. package/dist/runtime/foundation/service-mailbox.js +2 -1
  110. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +1 -0
  111. package/dist/runtime/foundation/service-relocation-object-owner.js +1 -0
  112. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  113. package/dist/runtime/foundation/service-relocation-runtime.js +13 -1
  114. package/dist/runtime/foundation/service-runtime-contracts.d.ts +2 -0
  115. package/dist/runtime/foundation/service-stateful-runtime.d.ts +10 -9
  116. package/dist/runtime/foundation/service-stateful-runtime.js +78 -126
  117. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +5 -7
  118. package/dist/runtime/foundation/service-stateful-wire-codec.js +43 -61
  119. package/dist/runtime/foundation/service-topology-registry.d.ts +16 -4
  120. package/dist/runtime/foundation/service-topology-registry.js +69 -30
  121. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +3 -3
  122. package/dist/runtime/foundation/service-wire-m6a-codec.js +36 -38
  123. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  124. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  125. package/dist/runtime/host/actor-packet-relay.js +7 -7
  126. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  127. package/dist/runtime/host/application-job-queue.d.ts +28 -9
  128. package/dist/runtime/host/application-job-queue.js +214 -50
  129. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  130. package/dist/runtime/host/entry-actor-runtime.js +4 -1
  131. package/dist/runtime/host/index.d.ts +7 -1
  132. package/dist/runtime/host/index.js +154 -126
  133. package/dist/runtime/host/instance-activation-authority.d.ts +2 -1
  134. package/dist/runtime/host/instance-activation-authority.js +89 -25
  135. package/dist/runtime/host/remote-bound-session-relay.js +2 -18
  136. package/dist/runtime/host/route-mesh-runtime.js +1 -1
  137. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  138. package/dist/runtime/host/service-relocation-control.js +10 -4
  139. package/dist/runtime/host/service-relocation-host-runtime.d.ts +6 -8
  140. package/dist/runtime/host/service-relocation-host-runtime.js +215 -243
  141. package/dist/runtime/host/spot-address-transport.d.ts +1 -0
  142. package/dist/runtime/host/spot-address-transport.js +28 -14
  143. package/dist/runtime/host/spot-runtime-options-factory.js +3 -2
  144. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +1 -0
  145. package/dist/runtime/host/user-spot-creation-coordinator.js +1 -0
  146. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  147. package/dist/runtime/locations/actor-location-claims.js +34 -19
  148. package/dist/runtime/locations/domain-store-contract.d.ts +2 -2
  149. package/dist/runtime/locations/in-memory-authority-store.d.ts +4 -2
  150. package/dist/runtime/locations/in-memory-authority-store.js +80 -8
  151. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  152. package/dist/runtime/locations/in-memory-location-store.js +19 -3
  153. package/dist/runtime/locations/internal-location-contracts.d.ts +3 -0
  154. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  155. package/dist/runtime/locations/lifecycle.js +2 -5
  156. package/dist/runtime/locations/location-store-repository.d.ts +3 -2
  157. package/dist/runtime/locations/location-store-repository.js +165 -22
  158. package/dist/runtime/locations/resolvers.d.ts +2 -1
  159. package/dist/runtime/locations/resolvers.js +10 -1
  160. package/dist/runtime/locations/runtime.d.ts +1 -1
  161. package/dist/runtime/locations/runtime.js +24 -23
  162. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  163. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  164. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  165. package/dist/runtime/messaging/packet-name.js +8 -24
  166. package/dist/runtime/messaging/request-result.d.ts +2 -0
  167. package/dist/runtime/messaging/request-result.js +54 -0
  168. package/dist/runtime/messaging/submission-result.d.ts +2 -1
  169. package/dist/runtime/messaging/submission-result.js +7 -4
  170. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +15 -0
  171. package/dist/runtime/protocol/service_wire_codec.generated.js +144 -0
  172. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +9 -0
  173. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +14 -1
  174. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +9 -2
  175. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +33 -19
  176. package/dist/runtime/spots/index.d.ts +7 -3
  177. package/dist/runtime/spots/index.js +23 -16
  178. package/dist/runtime/spots/spot-activation.d.ts +3 -1
  179. package/dist/runtime/spots/spot-activation.js +21 -12
  180. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +2 -1
  181. package/dist/runtime/spots/spot-actor-admission-coordinator.js +11 -10
  182. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +4 -1
  183. package/dist/runtime/spots/spot-actor-packet-dispatch.js +7 -5
  184. package/dist/runtime/spots/spot-actor-packet-drain.js +2 -0
  185. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -0
  186. package/dist/runtime/spots/spot-entry-activation.js +9 -3
  187. package/dist/runtime/spots/spot-handler-registry.d.ts +3 -1
  188. package/dist/runtime/spots/spot-handler-registry.js +18 -8
  189. package/dist/runtime/spots/spot-node-autoconnect.js +4 -3
  190. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +2 -1
  191. package/dist/runtime/spots/spot-node-runtime-manager.js +4 -11
  192. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  193. package/dist/runtime/spots/spot-outbound.js +24 -15
  194. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  195. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  196. package/dist/runtime/spots/spot-routing-internal.d.ts +6 -0
  197. package/dist/runtime/spots/spot-runtime-ports.d.ts +3 -1
  198. package/dist/runtime/spots/spot-subscription-dispatch.js +0 -3
  199. package/dist/runtime/spots/spot-timer.js +1 -0
  200. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  201. package/dist/runtime/streams/stream-session-runtime.js +14 -28
  202. package/package.json +3 -3
  203. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  204. package/src/contracts/Channels/Calls.ts +2 -1
  205. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  206. package/src/contracts/Configuration/Builders.ts +1 -2
  207. package/src/contracts/Configuration/Configs.ts +0 -6
  208. package/src/contracts/Configuration/RegistrationBuilders.ts +8 -12
  209. package/src/contracts/Configuration/RegistrationTypes.ts +1 -6
  210. package/src/contracts/Configuration/RegistrationValidators.ts +9 -10
  211. package/src/contracts/Configuration/index.ts +1 -6
  212. package/src/contracts/Handlers/Attributes.ts +14 -21
  213. package/src/contracts/Handlers/JsonContract.ts +8 -216
  214. package/src/contracts/Spots/Contracts.ts +2 -1
  215. package/src/internal.ts +1 -0
  216. package/src/nest-integration.ts +1 -0
  217. package/src/runtime/actors/actor-client.ts +40 -16
  218. package/src/runtime/actors/actor-handoff.ts +22 -8
  219. package/src/runtime/actors/actor-join-relocation.ts +1 -0
  220. package/src/runtime/actors/actor-local-native-join.ts +17 -26
  221. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  222. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  223. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  224. package/src/runtime/actors/index.ts +19 -5
  225. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  226. package/src/runtime/admission.ts +18 -5
  227. package/src/runtime/application-jobs/application-ingress-record-owner.ts +53 -27
  228. package/src/runtime/application-jobs/application-job-queue-scope.ts +56 -22
  229. package/src/runtime/application-jobs/contracts.ts +28 -2
  230. package/src/runtime/backend/contracts/index.ts +63 -32
  231. package/src/runtime/backend/mesh-completion-table.ts +175 -59
  232. package/src/runtime/backend/mesh-dispatch-pump.ts +59 -32
  233. package/src/runtime/backend/node/node-backend-adapter-factory.ts +12 -5
  234. package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -31
  235. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  236. package/src/runtime/backend/node/node-mesh-backend-adapter.ts +3 -10
  237. package/src/runtime/backend/node/node-raw-binding-port.ts +73 -37
  238. package/src/runtime/backend/node/node-raw-mesh-backend.ts +209 -176
  239. package/src/runtime/backend/node/node-socket-backend-adapter.ts +32 -13
  240. package/src/runtime/backend/raw-binding-port.ts +18 -3
  241. package/src/runtime/backend/runtime-message.ts +6 -0
  242. package/src/runtime/backend/runtime-values.ts +1 -0
  243. package/src/runtime/channels/channel-clients.ts +90 -41
  244. package/src/runtime/channels/channel-dispatch-pipeline.ts +69 -34
  245. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  246. package/src/runtime/channels/channel-dispatchers.ts +29 -27
  247. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  248. package/src/runtime/channels/channel-envelope.ts +133 -8
  249. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  250. package/src/runtime/channels/channel-receive-loops.ts +3 -3
  251. package/src/runtime/channels/channel-runtime-lifecycle.ts +7 -1
  252. package/src/runtime/channels/channel-runtime-manager.ts +29 -12
  253. package/src/runtime/channels/channel-socket-registry.ts +84 -130
  254. package/src/runtime/channels/channel-transports.ts +128 -60
  255. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  256. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  257. package/src/runtime/channels/source-spot-router.ts +8 -4
  258. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  259. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  260. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  261. package/src/runtime/diagnostics/message-flow.ts +1 -1
  262. package/src/runtime/execution/serial-execution-queue.ts +2 -0
  263. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  264. package/src/runtime/foundation/durable-service-request.ts +137 -0
  265. package/src/runtime/foundation/operation-identity.ts +5 -1
  266. package/src/runtime/foundation/raw-service-mesh-runtime.ts +642 -253
  267. package/src/runtime/foundation/service-liveness-registry.ts +68 -59
  268. package/src/runtime/foundation/service-mailbox.ts +7 -1
  269. package/src/runtime/foundation/service-relocation-object-owner.ts +2 -0
  270. package/src/runtime/foundation/service-relocation-runtime.ts +18 -1
  271. package/src/runtime/foundation/service-runtime-contracts.ts +7 -1
  272. package/src/runtime/foundation/service-stateful-runtime.ts +128 -160
  273. package/src/runtime/foundation/service-stateful-wire-codec.ts +55 -84
  274. package/src/runtime/foundation/service-topology-registry.ts +103 -42
  275. package/src/runtime/foundation/service-wire-m6a-codec.ts +57 -38
  276. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  277. package/src/runtime/host/actor-packet-relay.ts +7 -0
  278. package/src/runtime/host/actor-runtime-options-factory.ts +14 -2
  279. package/src/runtime/host/application-job-queue.ts +249 -48
  280. package/src/runtime/host/entry-actor-runtime.ts +5 -0
  281. package/src/runtime/host/index.ts +224 -160
  282. package/src/runtime/host/instance-activation-authority.ts +132 -27
  283. package/src/runtime/host/remote-bound-session-relay.ts +2 -23
  284. package/src/runtime/host/route-mesh-runtime.ts +1 -1
  285. package/src/runtime/host/service-relocation-control.ts +11 -5
  286. package/src/runtime/host/service-relocation-host-runtime.ts +317 -291
  287. package/src/runtime/host/spot-address-transport.ts +49 -24
  288. package/src/runtime/host/spot-runtime-options-factory.ts +4 -0
  289. package/src/runtime/host/user-spot-creation-coordinator.ts +8 -0
  290. package/src/runtime/locations/actor-location-claims.ts +52 -30
  291. package/src/runtime/locations/domain-store-contract.ts +6 -2
  292. package/src/runtime/locations/in-memory-authority-store.ts +113 -9
  293. package/src/runtime/locations/in-memory-location-store.ts +25 -3
  294. package/src/runtime/locations/internal-location-contracts.ts +4 -0
  295. package/src/runtime/locations/lifecycle.ts +8 -26
  296. package/src/runtime/locations/location-store-repository.ts +220 -15
  297. package/src/runtime/locations/resolvers.ts +25 -2
  298. package/src/runtime/locations/runtime.ts +28 -24
  299. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  300. package/src/runtime/messaging/packet-name.ts +5 -25
  301. package/src/runtime/messaging/request-result.ts +58 -0
  302. package/src/runtime/messaging/submission-result.ts +7 -3
  303. package/src/runtime/protocol/service_wire_codec.generated.ts +131 -1
  304. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  305. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +45 -23
  306. package/src/runtime/spots/index.ts +30 -2
  307. package/src/runtime/spots/spot-activation.ts +33 -10
  308. package/src/runtime/spots/spot-actor-admission-coordinator.ts +13 -0
  309. package/src/runtime/spots/spot-actor-packet-dispatch.ts +10 -0
  310. package/src/runtime/spots/spot-actor-packet-drain.ts +2 -0
  311. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +1 -0
  312. package/src/runtime/spots/spot-entry-activation.ts +12 -2
  313. package/src/runtime/spots/spot-handler-registry.ts +41 -8
  314. package/src/runtime/spots/spot-node-autoconnect.ts +6 -2
  315. package/src/runtime/spots/spot-node-runtime-manager.ts +7 -12
  316. package/src/runtime/spots/spot-outbound.ts +36 -16
  317. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  318. package/src/runtime/spots/spot-routing-internal.ts +14 -0
  319. package/src/runtime/spots/spot-runtime-ports.ts +3 -0
  320. package/src/runtime/spots/spot-subscription-dispatch.ts +0 -3
  321. package/src/runtime/spots/spot-timer.ts +5 -1
  322. package/src/runtime/streams/stream-session-runtime.ts +13 -30
@@ -42,6 +42,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
42
42
  context: {
43
43
  readonly channelName: string;
44
44
  readonly signal?: AbortSignal;
45
+ readonly onAdmitted?: () => void;
45
46
  readonly metadata?: ReadonlyMap<string, string>;
46
47
  }
47
48
  ): Promise<TReply>;
@@ -163,7 +164,8 @@ export class ZLinkSpotRouteDispatchStrategy {
163
164
  request: unknown,
164
165
  timeoutMs: number | undefined,
165
166
  signal?: AbortSignal,
166
- metadata?: ReadonlyMap<string, string>
167
+ metadata?: ReadonlyMap<string, string>,
168
+ onAdmitted?: () => void
167
169
  ): Promise<TReply> {
168
170
  return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
169
171
  this.routeRequestToSpotScoped<TReply>(
@@ -172,7 +174,8 @@ export class ZLinkSpotRouteDispatchStrategy {
172
174
  request,
173
175
  timeoutMs,
174
176
  signal,
175
- metadata
177
+ metadata,
178
+ onAdmitted
176
179
  )
177
180
  );
178
181
  }
@@ -183,7 +186,8 @@ export class ZLinkSpotRouteDispatchStrategy {
183
186
  request: unknown,
184
187
  timeoutMs: number | undefined,
185
188
  signal?: AbortSignal,
186
- metadata?: ReadonlyMap<string, string>
189
+ metadata?: ReadonlyMap<string, string>,
190
+ onAdmitted?: () => void
187
191
  ): Promise<TReply> {
188
192
  throwIfAborted(signal);
189
193
  const localSpotRouteNode = this.targets.localRouteNode(spotRouteTarget);
@@ -194,7 +198,8 @@ export class ZLinkSpotRouteDispatchStrategy {
194
198
  packetName,
195
199
  request,
196
200
  timeoutMs,
197
- signal
201
+ signal,
202
+ onAdmitted
198
203
  );
199
204
  }
200
205
  const codecs = codecsForFrameworkPacket(packetName, this.options.codecs);
@@ -216,7 +221,8 @@ export class ZLinkSpotRouteDispatchStrategy {
216
221
  parts,
217
222
  codecs,
218
223
  timeoutMs,
219
- signal
224
+ signal,
225
+ onAdmitted
220
226
  );
221
227
  if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
222
228
  }
@@ -226,7 +232,8 @@ export class ZLinkSpotRouteDispatchStrategy {
226
232
  parts,
227
233
  codecs,
228
234
  timeoutMs,
229
- signal
235
+ signal,
236
+ onAdmitted
230
237
  );
231
238
  }
232
239
  if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
@@ -236,7 +243,8 @@ export class ZLinkSpotRouteDispatchStrategy {
236
243
  codecs,
237
244
  ZLINK_SEND_DONT_WAIT,
238
245
  timeoutMs,
239
- signal
246
+ signal,
247
+ onAdmitted
240
248
  );
241
249
  }
242
250
  const spotNodeRequest = this.spotNodeTransport.request<TReply>(
@@ -244,7 +252,8 @@ export class ZLinkSpotRouteDispatchStrategy {
244
252
  parts,
245
253
  codecs,
246
254
  timeoutMs,
247
- signal
255
+ signal,
256
+ onAdmitted
248
257
  );
249
258
  if (spotNodeRequest !== undefined) {
250
259
  return spotNodeRequest;
@@ -255,7 +264,8 @@ export class ZLinkSpotRouteDispatchStrategy {
255
264
  codecs,
256
265
  0,
257
266
  timeoutMs,
258
- signal
267
+ signal,
268
+ onAdmitted
259
269
  );
260
270
  }
261
271
 
@@ -265,7 +275,8 @@ export class ZLinkSpotRouteDispatchStrategy {
265
275
  packetName: string | undefined,
266
276
  request: unknown,
267
277
  timeoutMs: number | undefined,
268
- signal?: AbortSignal
278
+ signal?: AbortSignal,
279
+ onAdmitted?: () => void
269
280
  ): Promise<TReply> {
270
281
  return this.sourceSpotRouter.request<TReply>(
271
282
  sourceSpot,
@@ -273,7 +284,8 @@ export class ZLinkSpotRouteDispatchStrategy {
273
284
  packetName,
274
285
  request,
275
286
  timeoutMs,
276
- signal
287
+ signal,
288
+ onAdmitted
277
289
  );
278
290
  }
279
291
 
@@ -292,14 +304,16 @@ export class ZLinkSpotRouteDispatchStrategy {
292
304
  spotRouteTarget: ZLinkSpotRouteTarget,
293
305
  request: Message,
294
306
  timeoutMs: number | undefined,
295
- signal?: AbortSignal
307
+ signal?: AbortSignal,
308
+ onAdmitted?: () => void
296
309
  ): Promise<readonly Message[]> {
297
310
  return this.sourceSpotRouter.requestRaw(
298
311
  sourceSpot,
299
312
  spotRouteTarget,
300
313
  request,
301
314
  timeoutMs,
302
- signal
315
+ signal,
316
+ onAdmitted
303
317
  );
304
318
  }
305
319
 
@@ -307,7 +321,8 @@ export class ZLinkSpotRouteDispatchStrategy {
307
321
  spotRouteTarget: ZLinkSpotRouteTarget,
308
322
  request: Message,
309
323
  timeoutMs: number | undefined,
310
- signal?: AbortSignal
324
+ signal?: AbortSignal,
325
+ onAdmitted?: () => void
311
326
  ): Promise<readonly Message[]> {
312
327
  throwIfAborted(signal);
313
328
  if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
@@ -315,23 +330,37 @@ export class ZLinkSpotRouteDispatchStrategy {
315
330
  spotRouteTarget,
316
331
  request,
317
332
  timeoutMs,
318
- signal
333
+ signal,
334
+ onAdmitted
319
335
  );
320
336
  if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
321
337
  }
322
338
  if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
323
- return this.bridgeTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
339
+ return this.bridgeTransport.requestRaw(
340
+ spotRouteTarget,
341
+ request,
342
+ timeoutMs,
343
+ signal,
344
+ onAdmitted
345
+ );
324
346
  }
325
347
  const spotNodeRequest = this.spotNodeTransport.requestRaw(
326
348
  spotRouteTarget,
327
349
  request,
328
350
  timeoutMs,
329
- signal
351
+ signal,
352
+ onAdmitted
330
353
  );
331
354
  if (spotNodeRequest !== undefined) {
332
355
  return spotNodeRequest;
333
356
  }
334
357
 
335
- return this.routerSocketTransport.requestRaw(spotRouteTarget, request, timeoutMs, signal);
358
+ return this.routerSocketTransport.requestRaw(
359
+ spotRouteTarget,
360
+ request,
361
+ timeoutMs,
362
+ signal,
363
+ onAdmitted
364
+ );
336
365
  }
337
366
  }
@@ -35,7 +35,7 @@ export const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions = {
35
35
  includeMessageSizes: false
36
36
  };
37
37
 
38
- const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
38
+ export const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
39
39
  const telemetryTracer = openTelemetryTrace.getTracer('@zlink-systems/framework');
40
40
 
41
41
  let diagnosticsGeneration = 0n;
@@ -9,6 +9,7 @@ import {
9
9
  export type ZLinkSerialWorkLane = 'application' | 'lifecycle';
10
10
 
11
11
  export interface ZLinkSerialWorkOptions {
12
+ readonly onAdmitted?: () => void;
12
13
  readonly lane?: ZLinkSerialWorkLane;
13
14
  readonly payloadBytes?: number;
14
15
  readonly metadataBytes?: number;
@@ -269,6 +270,7 @@ export class ZLinkSerialExecutionQueue {
269
270
  release();
270
271
  throw error;
271
272
  }
273
+ options.onAdmitted?.();
272
274
  this.scheduleDrain();
273
275
  return result;
274
276
  }
@@ -131,7 +131,7 @@ export function encodeCanonicalActorJoinRecoverySavedWork(
131
131
  const replyContentType =
132
132
  operationId === undefined
133
133
  ? null
134
- : requireText(input.replyContentType, 'Actor Join reply content type');
134
+ : (nullableText(input.replyContentType ?? null, 'Actor Join reply content type') ?? null);
135
135
  const metadata = encodeMetadataJson({
136
136
  Request: {
137
137
  ActorId: requireText(input.actorId, 'Actor id'),
@@ -288,7 +288,7 @@ export function decodeCanonicalActorJoinRecoverySavedWork(
288
288
  const operationLow = integer(metadata.OperationIdLow, 'OperationIdLow');
289
289
  const hasOperation = operationHigh !== 0n || operationLow !== 0n;
290
290
  const replyContentType = nullableText(metadata.ReplyContentType, 'ReplyContentType');
291
- if (hasOperation !== (replyContentType !== undefined)) {
291
+ if (!hasOperation && replyContentType !== undefined) {
292
292
  throw new TypeError('Canonical Actor Join recovery reply identity is invalid.');
293
293
  }
294
294
  const targetNodeRid = base64(metadata.TargetNodeRid, 'TargetNodeRid');
@@ -0,0 +1,137 @@
1
+ import { awaitWithAbort } from '../abort';
2
+ import { RequestResult, SubmitResult, isZLinkBackendResultError } from '../backend/runtime-values';
3
+ import {
4
+ ZLinkFrameworkInternalErrorKind,
5
+ createInternalFrameworkException
6
+ } from '../framework-errors-internal';
7
+
8
+ export interface PeerRouteObservation {
9
+ readonly generation?: bigint;
10
+ readonly ready: boolean;
11
+ }
12
+
13
+ export interface DurableServiceRequestPort {
14
+ readonly requestStopSignal?: AbortSignal;
15
+ observePeerRoute(target: string): PeerRouteObservation;
16
+ observePeerRouteChanged(listener: (target: string) => void): () => void;
17
+ observePeerConnectionIntentRemoved(listener: (target: string) => void): () => void;
18
+ requestService(
19
+ target: string,
20
+ parts: readonly Uint8Array[],
21
+ timeoutMs: number,
22
+ onAdmitted?: () => void
23
+ ): Promise<readonly Buffer[]>;
24
+ }
25
+
26
+ /** Actor model §8.1: a ready edge or a typed transport failure owns replay. */
27
+ export async function requestDurableService(
28
+ port: DurableServiceRequestPort,
29
+ target: string,
30
+ parts: readonly Uint8Array[],
31
+ deadlineMs: number,
32
+ operationKind: string,
33
+ signal?: AbortSignal,
34
+ onSubmitted?: (signal: AbortSignal) => Promise<void>
35
+ ): Promise<readonly Buffer[]> {
36
+ let wasAdmitted = false;
37
+ const stop = new AbortController();
38
+ const exhausted = (cause?: unknown) =>
39
+ createInternalFrameworkException(
40
+ wasAdmitted
41
+ ? ZLinkFrameworkInternalErrorKind.DeadlineExceeded
42
+ : ZLinkFrameworkInternalErrorKind.RouteNotConnected,
43
+ `${operationKind} exhausted its end-to-end deadline.`,
44
+ true,
45
+ cause
46
+ );
47
+ const timer = setTimeout(
48
+ () => stop.abort(exhausted()),
49
+ Math.max(0, Math.ceil(deadlineMs - performance.now()))
50
+ );
51
+ const unobserveIntent = port.observePeerConnectionIntentRemoved((rid) => {
52
+ if (rid === target)
53
+ stop.abort(
54
+ createInternalFrameworkException(
55
+ ZLinkFrameworkInternalErrorKind.RouteNotConnected,
56
+ `${operationKind} target node lifecycle ended.`,
57
+ true
58
+ )
59
+ );
60
+ });
61
+ const cancellation = AbortSignal.any([
62
+ stop.signal,
63
+ ...(signal === undefined ? [] : [signal]),
64
+ ...(port.requestStopSignal === undefined ? [] : [port.requestStopSignal])
65
+ ]);
66
+ try {
67
+ for (;;) {
68
+ cancellation.throwIfAborted();
69
+ const remainingMs = Math.ceil(deadlineMs - performance.now());
70
+ if (remainingMs <= 0) throw exhausted();
71
+ let changed!: () => void;
72
+ const transition = new Promise<void>((resolve) => {
73
+ changed = resolve;
74
+ });
75
+ let submittedGeneration: bigint | undefined;
76
+ const attemptStop = new AbortController();
77
+ const attemptSignal = AbortSignal.any([cancellation, attemptStop.signal]);
78
+ const unobserveRoute = port.observePeerRouteChanged((rid) => {
79
+ if (rid !== target) return;
80
+ const route = port.observePeerRoute(target);
81
+ if (
82
+ submittedGeneration === undefined
83
+ ? route.ready
84
+ : route.generation !== undefined && route.generation !== submittedGeneration
85
+ ) {
86
+ changed();
87
+ attemptStop.abort();
88
+ }
89
+ });
90
+ try {
91
+ const route = port.observePeerRoute(target);
92
+ if (!route.ready) {
93
+ await awaitWithAbort(transition, cancellation);
94
+ continue;
95
+ }
96
+ submittedGeneration = route.generation;
97
+ const reply = port.requestService(target, parts, remainingMs, () => {
98
+ wasAdmitted = true;
99
+ });
100
+ const request =
101
+ onSubmitted === undefined
102
+ ? reply
103
+ : Promise.race([
104
+ reply,
105
+ Promise.resolve()
106
+ .then(() => onSubmitted(attemptSignal))
107
+ .then(() => reply)
108
+ ]);
109
+ const result = await awaitWithAbort(
110
+ Promise.race([request.then((parts) => ({ parts })), transition.then(() => undefined)]),
111
+ cancellation
112
+ );
113
+ if (result !== undefined) return result.parts;
114
+ } catch (error) {
115
+ cancellation.throwIfAborted();
116
+ if (!durableRequestCanReplay(error)) throw error;
117
+ if (isZLinkBackendResultError(error) && error.operation === 'request') wasAdmitted = true;
118
+ } finally {
119
+ attemptStop.abort();
120
+ unobserveRoute();
121
+ }
122
+ }
123
+ } finally {
124
+ clearTimeout(timer);
125
+ unobserveIntent();
126
+ }
127
+ }
128
+
129
+ export function durableRequestCanReplay(error: unknown): boolean {
130
+ if (!isZLinkBackendResultError(error)) return false;
131
+ return error.operation === 'request'
132
+ ? error.result === RequestResult.NotConnected || error.result === RequestResult.TimedOut
133
+ : error.result === SubmitResult.NotConnected ||
134
+ error.result === SubmitResult.NotFound ||
135
+ error.result === SubmitResult.NotAdmitted ||
136
+ error.result === SubmitResult.Backpressured;
137
+ }
@@ -19,12 +19,16 @@ export type ZLinkOperationIdentityKey = string & {
19
19
  export function operationIdentityKey(
20
20
  operationId: ZLinkOperationIdentity128
21
21
  ): ZLinkOperationIdentityKey {
22
+ validateOperationIdentity(operationId);
23
+ return `${operationId.high.toString(16)}:${operationId.low.toString(16)}` as ZLinkOperationIdentityKey;
24
+ }
25
+
26
+ export function validateOperationIdentity(operationId: ZLinkOperationIdentity128): void {
22
27
  requireUnsigned64(operationId.high, 'operationId.high');
23
28
  requireUnsigned64(operationId.low, 'operationId.low');
24
29
  if (operationId.high === 0n && operationId.low === 0n) {
25
30
  throw new RangeError('Operation identity must not be all zero.');
26
31
  }
27
- return `${operationId.high.toString(16)}:${operationId.low.toString(16)}` as ZLinkOperationIdentityKey;
28
32
  }
29
33
 
30
34
  export function createRandomOperationIdentity(