@zlink-systems/framework 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -40,6 +40,7 @@ export declare const M6bServiceWireCommand: {
40
40
  readonly boundSessionReplaced: 51;
41
41
  readonly relocationState: 52;
42
42
  readonly relocationFailed: 53;
43
+ readonly boundSessionClose: 54;
43
44
  };
44
45
  export interface ServiceWireOperationId {
45
46
  readonly high: bigint;
@@ -114,6 +115,7 @@ interface ServiceWireRelocationBase {
114
115
  }
115
116
  export interface ServiceMaintenanceRelocationPrepare extends ServiceWireRelocationBase {
116
117
  readonly kind: 'prepare';
118
+ readonly deadlineUnixMs: bigint;
117
119
  readonly target: ServiceWireRelocationTarget;
118
120
  readonly initiatorRole: ServiceWireRelocationRole;
119
121
  readonly object: ServiceWireRelocationObject;
@@ -126,11 +128,6 @@ export interface ServiceMaintenanceRelocationPrepare extends ServiceWireRelocati
126
128
  /** CRC-32C (Castagnoli) over the fully assembled payload bytes. */
127
129
  readonly payloadChecksumCrc32c: number;
128
130
  readonly applicationVersion: bigint;
129
- /** NODE-INTERNAL; serialized as extra frames after canonical command 40. */
130
- readonly nodeInternalBoundSessions?: readonly {
131
- readonly participantKey: string;
132
- readonly payload: Uint8Array;
133
- }[];
134
131
  }
135
132
  export interface ServiceMaintenanceRelocationReady extends ServiceWireRelocationBase {
136
133
  readonly kind: 'ready';
@@ -252,6 +249,8 @@ export interface ServiceSessionRelocationOwnerFence {
252
249
  readonly bindingGeneration: bigint;
253
250
  }
254
251
  export interface ServiceSessionRelocationSeal {
252
+ readonly targetNodeRid: string;
253
+ readonly targetNodeGeneration: bigint;
255
254
  readonly relocation: ServiceWireOperationId;
256
255
  readonly coordinator: ServiceWireRelocationCoordinatorFence;
257
256
  readonly senderRole: 'source' | 'coordinator';
@@ -259,6 +258,7 @@ export interface ServiceSessionRelocationSeal {
259
258
  readonly session: ServiceSessionRelocationOwnerFence;
260
259
  }
261
260
  export interface ServiceSessionRelocationSealed {
261
+ readonly sealResult: 'sealed' | 'bindingAbsent';
262
262
  readonly relocation: ServiceWireOperationId;
263
263
  readonly coordinator: ServiceWireRelocationCoordinatorFence;
264
264
  readonly actor: ServiceBoundSessionActorAuthority;
@@ -457,6 +457,14 @@ export type ServiceStatefulWireRecord = {
457
457
  readonly actor: ServiceActorRouteFence;
458
458
  readonly sessionRid: string;
459
459
  readonly binding: ServiceBoundSessionTransition;
460
+ } | {
461
+ readonly kind: 'boundSessionClose';
462
+ readonly correlation: bigint;
463
+ readonly actor: {
464
+ readonly actorId: string;
465
+ readonly generation: bigint;
466
+ };
467
+ readonly session: ServiceRetiredBoundSessionRouteFence;
460
468
  } | {
461
469
  readonly kind: 'boundSessionReplaced';
462
470
  readonly actorAuthority: ServiceBoundSessionActorAuthority;
@@ -574,7 +582,7 @@ export declare function decodeMaintenanceReplyRelay(frames: readonly Uint8Array[
574
582
  export declare function encodeMaintenanceReplyRelayAck(value: ServiceMaintenanceReplyRelayAck): Buffer;
575
583
  /** Decodes canonical service-wire command 46. */
576
584
  export declare function decodeMaintenanceReplyRelayAck(frame: Uint8Array): ServiceMaintenanceReplyRelayAck;
577
- export declare function decodeStatefulReply(frame: Uint8Array, expectedCorrelation: bigint, operationKind: 'spotRequest' | 'actorRequest' | 'actorLookup' | 'actorDestroy' | 'actorJoin' | 'streamBind' | 'streamUnbind' | 'instanceSpotRequest' | 'userSpotCreate' | 'userSpotClose' | 'actorCreate', hasPayload?: boolean): ServiceStatefulReply;
585
+ export declare function decodeStatefulReply(frame: Uint8Array, expectedCorrelation: bigint, operationKind: 'spotRequest' | 'actorRequest' | 'actorLookup' | 'actorDestroy' | 'actorJoin' | 'streamBind' | 'streamUnbind' | 'boundSessionClose' | 'instanceSpotRequest' | 'userSpotCreate' | 'userSpotClose' | 'actorCreate', hasPayload?: boolean): ServiceStatefulReply;
578
586
  export declare function sessionBindingFromWire(actor: ServiceActorRef, sessionRid: string, sessionOwnerNodeRid: string, generation: bigint, membershipEpoch: bigint, sessionOwnerNodeGeneration?: bigint, sessionOwnerId?: string, sessionOwnerLeaseGeneration?: bigint): ServiceSessionBinding;
579
587
  export declare function decodeServiceWireFrozenRecord(bytes: Uint8Array): ServiceWireFrozenRecord;
580
588
  export declare function encodeServiceWireFrozenRecord(record: ServiceWireFrozenRecord): Buffer;
@@ -35,12 +35,14 @@ exports.sessionBindingFromWire = sessionBindingFromWire;
35
35
  exports.decodeServiceWireFrozenRecord = decodeServiceWireFrozenRecord;
36
36
  exports.encodeServiceWireFrozenRecord = encodeServiceWireFrozenRecord;
37
37
  exports.encodeServiceWireFrozenActorApplicationRecord = encodeServiceWireFrozenActorApplicationRecord;
38
+ const routing_id_1 = require("../routing-id");
39
+ const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
38
40
  const stream_wire_1 = require("@zlink-systems/stream-wire");
39
41
  const InternalDefaults_1 = require("../../contracts/Configuration/InternalDefaults");
40
42
  const framework_errors_internal_1 = require("../framework-errors-internal");
41
- const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
43
+ const service_wire_codec_generated_2 = require("../protocol/service_wire_codec.generated");
42
44
  const service_wire_pilot_codec_generated_1 = require("../protocol/service_wire_pilot_codec.generated");
43
- const routing_id_1 = require("../routing-id");
45
+ const routing_id_2 = require("../routing-id");
44
46
  const service_runtime_contracts_1 = require("./service-runtime-contracts");
45
47
  const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
46
48
  const service_wire_constants_generated_1 = require("./service-wire-constants.generated");
@@ -58,17 +60,13 @@ Object.defineProperty(exports, "RELOCATION_STATE_CHUNK_DATA_MAX_BYTES", { enumer
58
60
  exports.M6bServiceWireFlag = service_wire_constants_generated_1.ServiceWireFlag;
59
61
  function serviceSessionRelocationIdentityKey(value) {
60
62
  const actor = 'targetNodeGeneration' in value.actor ? value.actor.actor : value.actor;
61
- // Session owner가 seal을 대조할 때 쓰는 값만 넣는다 — Session과 Actor binding
62
- // §8.1 "Session owner는 다음 값만 검증한다". coordinator identity는 transport가
63
- // 검증하는 wire fence이므로 여기서 다시 대조하지 않는다.
64
- return [
63
+ // Session–Actor binding §8.3: all original fields are checked against the
64
+ // recorded request; only relocation identity and ActorId select the record.
65
+ return JSON.stringify([
65
66
  value.relocation.high.toString(),
66
67
  value.relocation.low.toString(),
67
- actor.actorId,
68
- actor.generation.toString(),
69
- value.session.sessionRid,
70
- value.session.bindingGeneration.toString()
71
- ].join(':');
68
+ actor.actorId
69
+ ]);
72
70
  }
73
71
  function toGeneratedRoutingId(value, field) {
74
72
  return (0, service_wire_binary_primitives_1.encodeServiceWireRoutingId)(value, field, 0xff, fail);
@@ -294,6 +292,8 @@ function fromGeneratedSessionOwnerFence(value) {
294
292
  }
295
293
  function toGeneratedSessionRelocationSeal(value) {
296
294
  return {
295
+ targetNodeRid: toGeneratedRoutingId(value.targetNodeRid, 'targetNodeRid'),
296
+ targetNodeGeneration: value.targetNodeGeneration,
297
297
  relocation: value.relocation,
298
298
  coordinator: toGeneratedCoordinatorFence(value.coordinator),
299
299
  senderRole: value.senderRole,
@@ -303,6 +303,8 @@ function toGeneratedSessionRelocationSeal(value) {
303
303
  }
304
304
  function fromGeneratedSessionRelocationSeal(value) {
305
305
  return {
306
+ targetNodeRid: fromGeneratedRoutingId(value.targetNodeRid, 'targetNodeRid'),
307
+ targetNodeGeneration: value.targetNodeGeneration,
306
308
  relocation: value.relocation,
307
309
  coordinator: fromGeneratedCoordinatorFence(value.coordinator),
308
310
  senderRole: value.senderRole,
@@ -315,11 +317,13 @@ function toGeneratedSessionRelocationSealed(value) {
315
317
  relocation: value.relocation,
316
318
  coordinator: toGeneratedCoordinatorFence(value.coordinator),
317
319
  actor: toGeneratedRouteFence(value.actor),
318
- ...toGeneratedSessionOwnerFence(value.session)
320
+ ...toGeneratedSessionOwnerFence(value.session),
321
+ sealResult: value.sealResult
319
322
  };
320
323
  }
321
324
  function fromGeneratedSessionRelocationSealed(value) {
322
325
  return {
326
+ sealResult: value.sealResult,
323
327
  relocation: value.relocation,
324
328
  coordinator: fromGeneratedCoordinatorFence(value.coordinator),
325
329
  actor: fromGeneratedRouteFence(value.actor),
@@ -384,6 +388,7 @@ function fromGeneratedRelocationBase(value) {
384
388
  function fromGeneratedRelocationPrepare(value) {
385
389
  return {
386
390
  kind: 'prepare',
391
+ deadlineUnixMs: value.deadlineUnixMs,
387
392
  ...fromGeneratedRelocationBase(value),
388
393
  target: fromGeneratedTargetFence(value.target),
389
394
  initiatorRole: value.initiatorRole,
@@ -531,11 +536,11 @@ function encodeSpotHeader(kind, sourceSpotId, target, correlation, operation = {
531
536
  payload: STATEFUL_HEADER_PAYLOAD,
532
537
  ...(metadataFrame === undefined
533
538
  ? {}
534
- : { metadata: (0, service_wire_codec_generated_1.decodeMetadataFrame)(metadataFrame, STATEFUL_MESSAGE_CONTEXT) })
539
+ : { metadata: (0, service_wire_codec_generated_2.decodeMetadataFrame)(metadataFrame, STATEFUL_MESSAGE_CONTEXT) })
535
540
  };
536
541
  const frames = kind === 'spotSend'
537
- ? (0, service_wire_codec_generated_1.encodeSpotSendCommand)({ command: kind, ...common }, STATEFUL_MESSAGE_CONTEXT)
538
- : (0, service_wire_codec_generated_1.encodeSpotRequestCommand)({
542
+ ? (0, service_wire_codec_generated_2.encodeSpotSendCommand)({ command: kind, ...common }, STATEFUL_MESSAGE_CONTEXT)
543
+ : (0, service_wire_codec_generated_2.encodeSpotRequestCommand)({
539
544
  command: kind,
540
545
  ...common,
541
546
  correlation: requirePositive(correlation, 'correlation')
@@ -566,8 +571,8 @@ function encodeActorHeader(kind, target, correlation, sourceActor, boundSession,
566
571
  payload: STATEFUL_HEADER_PAYLOAD
567
572
  };
568
573
  const frames = kind === 'actorSend'
569
- ? (0, service_wire_codec_generated_1.encodeActorSendCommand)({ command: kind, ...common }, STATEFUL_MESSAGE_CONTEXT)
570
- : (0, service_wire_codec_generated_1.encodeActorRequestCommand)({
574
+ ? (0, service_wire_codec_generated_2.encodeActorSendCommand)({ command: kind, ...common }, STATEFUL_MESSAGE_CONTEXT)
575
+ : (0, service_wire_codec_generated_2.encodeActorRequestCommand)({
571
576
  command: kind,
572
577
  ...common,
573
578
  correlation: requirePositive(correlation, 'correlation')
@@ -618,7 +623,7 @@ function decodeSessionRelocationRoute(frame) {
618
623
  return fromGeneratedSessionRelocationRoute((0, service_wire_pilot_codec_generated_1.decodeSessionRelocationRoute44)(frame));
619
624
  }
620
625
  function encodeInstanceSpotHeader(route, sourceNodeGeneration, sourceNodeRid, sourceSpotId, operationKind, operation, replyRouteId, hasMetadata = false, instanceIntent = false) {
621
- const encodedRoute = (0, service_wire_codec_generated_1.encodeInstanceRouteV1)({
626
+ const encodedRoute = (0, service_wire_codec_generated_2.encodeInstanceRouteV1)({
622
627
  routeKind: 'ready',
623
628
  targetNodeRid: toGeneratedRoutingId(route.targetNodeRid, 'targetNodeRid'),
624
629
  targetNodeGeneration: route.targetNodeGeneration,
@@ -651,7 +656,7 @@ function encodeInstanceSpotActivationHeader(target, sourceNodeGeneration, source
651
656
  if (operationKind === 'send' && replyRouteId !== undefined) {
652
657
  throw new RangeError('Instance Spot send must not carry a reply route.');
653
658
  }
654
- const encodedRoute = (0, service_wire_codec_generated_1.encodeInstanceRouteV1)({
659
+ const encodedRoute = (0, service_wire_codec_generated_2.encodeInstanceRouteV1)({
655
660
  routeKind: 'coldActivation',
656
661
  targetNodeRid: toGeneratedRoutingId(target.targetNodeRid, 'targetNodeRid'),
657
662
  targetNodeGeneration: target.targetNodeGeneration,
@@ -696,14 +701,14 @@ function decodeStatefulHeader(frame, payloadFrame, metadataFrame) {
696
701
  frame,
697
702
  ...(metadataFrame === undefined ? [] : [metadataFrame]),
698
703
  payloadFrame ??
699
- (0, service_wire_codec_generated_1.encodeApplicationPayloadEnvelopeV1)(STATEFUL_HEADER_PAYLOAD, STATEFUL_MESSAGE_CONTEXT)
704
+ (0, service_wire_codec_generated_2.encodeApplicationPayloadEnvelopeV1)(STATEFUL_HEADER_PAYLOAD, STATEFUL_MESSAGE_CONTEXT)
700
705
  ];
701
706
  try {
702
707
  if (frame[3] === exports.M6bServiceWireCommand.spotSend ||
703
708
  frame[3] === exports.M6bServiceWireCommand.spotRequest) {
704
709
  const decoded = frame[3] === exports.M6bServiceWireCommand.spotSend
705
- ? (0, service_wire_codec_generated_1.decodeSpotSendCommand)(frames, STATEFUL_MESSAGE_CONTEXT)
706
- : (0, service_wire_codec_generated_1.decodeSpotRequestCommand)(frames, STATEFUL_MESSAGE_CONTEXT);
710
+ ? (0, service_wire_codec_generated_2.decodeSpotSendCommand)(frames, STATEFUL_MESSAGE_CONTEXT)
711
+ : (0, service_wire_codec_generated_2.decodeSpotRequestCommand)(frames, STATEFUL_MESSAGE_CONTEXT);
707
712
  return {
708
713
  kind: decoded.command,
709
714
  ...(decoded.command === 'spotRequest' ? { correlation: decoded.correlation } : {}),
@@ -723,8 +728,8 @@ function decodeStatefulHeader(frame, payloadFrame, metadataFrame) {
723
728
  };
724
729
  }
725
730
  const decoded = frame[3] === exports.M6bServiceWireCommand.actorSend
726
- ? (0, service_wire_codec_generated_1.decodeActorSendCommand)(frames, STATEFUL_MESSAGE_CONTEXT)
727
- : (0, service_wire_codec_generated_1.decodeActorRequestCommand)(frames, STATEFUL_MESSAGE_CONTEXT);
731
+ ? (0, service_wire_codec_generated_2.decodeActorSendCommand)(frames, STATEFUL_MESSAGE_CONTEXT)
732
+ : (0, service_wire_codec_generated_2.decodeActorRequestCommand)(frames, STATEFUL_MESSAGE_CONTEXT);
728
733
  const source = decoded.sourceActor;
729
734
  return {
730
735
  kind: decoded.command,
@@ -859,6 +864,19 @@ function decodeStatefulHeader(frame, payloadFrame, metadataFrame) {
859
864
  : { state: 'tombstone', retiredGeneration: generation }
860
865
  };
861
866
  }
867
+ case exports.M6bServiceWireCommand.boundSessionClose: {
868
+ const decoded = (0, service_wire_codec_generated_1.decodeBoundSessionCloseCommand)([frame], {});
869
+ return {
870
+ kind: 'boundSessionClose',
871
+ correlation: decoded.correlation,
872
+ actor: { actorId: decoded.actor.actorId, generation: decoded.actor.objectGeneration },
873
+ session: {
874
+ ...decoded.session,
875
+ sessionOwnerNodeRid: (0, routing_id_1.decodeRoutingId)(Buffer.from(decoded.session.sessionOwnerNodeRid).toString('utf8'), Buffer.from(decoded.session.sessionOwnerNodeRid).toString('hex')),
876
+ sessionRid: (0, routing_id_1.decodeRoutingId)(Buffer.from(decoded.session.sessionRid).toString('utf8'), Buffer.from(decoded.session.sessionRid).toString('hex'))
877
+ }
878
+ };
879
+ }
862
880
  case exports.M6bServiceWireCommand.boundSessionReplaced: {
863
881
  requireFlags(command.flags, 0);
864
882
  const actor = reader.actorRef('actorAuthority.actor');
@@ -1001,7 +1019,8 @@ function encodeMaintenanceRelocationControl(value) {
1001
1019
  payloadTotalLength: value.payloadTotalLength,
1002
1020
  payloadChunkCount: value.payloadChunkCount,
1003
1021
  payloadChecksumCrc32c: value.payloadChecksumCrc32c,
1004
- applicationVersion: value.applicationVersion
1022
+ applicationVersion: value.applicationVersion,
1023
+ deadlineUnixMs: value.deadlineUnixMs
1005
1024
  }));
1006
1025
  case 'ready':
1007
1026
  return Buffer.from((0, service_wire_pilot_codec_generated_1.encodeRelocationReady30)({
@@ -1104,6 +1123,8 @@ function decodeStatefulReply(frame, expectedCorrelation, operationKind, hasPaylo
1104
1123
  const terminalResult = reader.u32('terminalResult');
1105
1124
  const failureCode = reader.u32('failureCode');
1106
1125
  validateReplyTerminal(terminalResult, failureCode, hasPayload);
1126
+ if (operationKind === 'boundSessionClose' && hasPayload)
1127
+ fail('A bound Session close reply cannot carry application payload.');
1107
1128
  let tail;
1108
1129
  if (terminalResult === 0) {
1109
1130
  if (operationKind === 'actorLookup') {
@@ -1415,7 +1436,7 @@ function concat(...parts) {
1415
1436
  }
1416
1437
  function decodeCanonicalInstanceRoute(bytes) {
1417
1438
  try {
1418
- return (0, service_wire_codec_generated_1.decodeInstanceRouteV1)(bytes, STATEFUL_MESSAGE_CONTEXT);
1439
+ return (0, service_wire_codec_generated_2.decodeInstanceRouteV1)(bytes, STATEFUL_MESSAGE_CONTEXT);
1419
1440
  }
1420
1441
  catch (error) {
1421
1442
  if (error instanceof RangeError)
@@ -1715,7 +1736,7 @@ function encodeServiceWireFrozenActorApplicationRecord(input) {
1715
1736
  function sameFrozenRecordSummary(left, right) {
1716
1737
  return (left.recordKind === right.recordKind &&
1717
1738
  left.sourceKind === right.sourceKind &&
1718
- (0, routing_id_1.routingIdsEqual)(left.source.nodeRid, right.source.nodeRid) &&
1739
+ (0, routing_id_2.routingIdsEqual)(left.source.nodeRid, right.source.nodeRid) &&
1719
1740
  left.source.nodeGeneration === right.source.nodeGeneration &&
1720
1741
  left.source.ownerId === right.source.ownerId &&
1721
1742
  left.source.leaseGeneration === right.source.leaseGeneration &&
@@ -24,8 +24,13 @@ export interface ServiceNodeDescriptor {
24
24
  readonly activeCapacityUsed: number;
25
25
  readonly pendingCapacityUsed: number;
26
26
  }
27
- export interface AdmittedServicePeer {
27
+ interface ServiceRouteAdmission {
28
28
  readonly descriptor: ServiceNodeDescriptor;
29
+ readonly descriptorBytes?: Uint8Array;
30
+ readonly connectionId?: string | bigint;
31
+ readonly remoteAdmitReceived?: boolean;
32
+ }
33
+ export interface AdmittedServicePeer extends ServiceRouteAdmission {
29
34
  readonly connectionId: string | bigint;
30
35
  readonly liveness?: ServiceLivenessConnection;
31
36
  }
@@ -46,15 +51,19 @@ export declare class ServiceTopologyRegistry {
46
51
  constructor(local: ServiceNodeDescriptor);
47
52
  localDescriptor(): ServiceNodeDescriptor;
48
53
  publishLocal(descriptor: ServiceNodeDescriptor): void;
49
- admit(descriptor: ServiceNodeDescriptor, connectionId: string | bigint, expected?: ServicePeerAdmissionExpectation, admitLiveness?: () => ServiceLivenessConnection): PeerAdmissionResult;
54
+ admit(descriptor: ServiceNodeDescriptor, connectionId: string | bigint, expected?: ServicePeerAdmissionExpectation, admitLiveness?: () => ServiceLivenessConnection, command?: number, descriptorBytes?: Uint8Array): PeerAdmissionResult;
50
55
  disconnect(nodeRoutingId: string, connectionId: string | bigint): boolean;
51
56
  peer(nodeRoutingId: string): AdmittedServicePeer | undefined;
57
+ routeAdmission(nodeRoutingId: string): ServiceRouteAdmission | undefined;
58
+ admittedPeer(nodeRoutingId: string): AdmittedServicePeer | undefined;
52
59
  peers(): readonly AdmittedServicePeer[];
53
60
  private peersCore;
54
61
  notRequiredPeers(): readonly ServiceNodeDescriptor[];
55
62
  replaceDiscoveredNotRequired(descriptors: readonly ServiceNodeDescriptor[]): void;
56
63
  forgetNotRequired(nodeRoutingId: string): void;
57
64
  knownDescriptor(nodeRoutingId: string): ServiceNodeDescriptor | undefined;
65
+ isObjectClientNodeDirectTarget(nodeRoutingId: string): boolean;
66
+ private knownPeerDescriptor;
58
67
  hasKnownChannelTarget(channelName: string): boolean;
59
68
  private remember;
60
69
  selectChannel(channelName: string, isReady?: (peer: AdmittedServicePeer) => boolean): AdmittedServicePeer | undefined;
@@ -72,3 +81,4 @@ export declare class ServiceTopologyRegistry {
72
81
  }
73
82
  export declare function validateDescriptor(descriptor: ServiceNodeDescriptor): void;
74
83
  export declare function sameServiceNodeDescriptor(left: ServiceNodeDescriptor, right: ServiceNodeDescriptor): boolean;
84
+ export {};
@@ -35,13 +35,13 @@ class ServiceTopologyRegistry {
35
35
  }
36
36
  this.local = cloneDescriptor(descriptor);
37
37
  for (const [nodeRoutingId, remote] of this.notRequiredByRid) {
38
- if (!(0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, remote)) {
38
+ if (!(0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, remote.descriptor)) {
39
39
  this.notRequiredByRid.delete(nodeRoutingId);
40
40
  }
41
41
  }
42
42
  this.rebuildSelections();
43
43
  }
44
- admit(descriptor, connectionId, expected, admitLiveness) {
44
+ admit(descriptor, connectionId, expected, admitLiveness, command = service_wire_constants_generated_1.ServiceWireCommand.hello, descriptorBytes) {
45
45
  try {
46
46
  validateDescriptor(descriptor);
47
47
  if (typeof connectionId === 'string')
@@ -63,32 +63,46 @@ class ServiceTopologyRegistry {
63
63
  descriptor.lifecycleGeneration !== expected.lifecycleGeneration)) {
64
64
  return 'invalidDescriptor';
65
65
  }
66
+ const current = this.peersByRid.get(descriptor.nodeRoutingId);
67
+ const previous = current ?? this.notRequiredByRid.get(descriptor.nodeRoutingId);
68
+ const receivedAdmit = command === service_wire_constants_generated_1.ServiceWireCommand.admit ||
69
+ (previous?.connectionId === connectionId && previous.remoteAdmitReceived === true);
70
+ if (previous !== undefined &&
71
+ previous.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration) {
72
+ const existing = previous.descriptor;
73
+ if (descriptor.descriptorRevision < existing.descriptorRevision ||
74
+ (descriptor.descriptorRevision === existing.descriptorRevision &&
75
+ !(previous.descriptorBytes !== undefined && descriptorBytes !== undefined
76
+ ? Buffer.compare(previous.descriptorBytes, descriptorBytes) === 0
77
+ : sameServiceNodeDescriptor(existing, descriptor))) ||
78
+ (descriptor.descriptorRevision > existing.descriptorRevision &&
79
+ command !== service_wire_constants_generated_1.ServiceWireCommand.update))
80
+ return 'staleDescriptor';
81
+ if (descriptor.descriptorRevision > existing.descriptorRevision &&
82
+ !sameImmutableDescriptor(existing, descriptor))
83
+ return 'invalidDescriptor';
84
+ }
85
+ else if (command === service_wire_constants_generated_1.ServiceWireCommand.update) {
86
+ return 'staleDescriptor';
87
+ }
88
+ const admission = {
89
+ descriptor: cloneDescriptor(descriptor),
90
+ ...(descriptorBytes === undefined ? {} : { descriptorBytes: Buffer.from(descriptorBytes) }),
91
+ connectionId,
92
+ remoteAdmitReceived: receivedAdmit
93
+ };
66
94
  if ((0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, descriptor)) {
67
95
  this.peersByRid.delete(descriptor.nodeRoutingId);
68
96
  this.remember(descriptor);
69
- this.notRequiredByRid.set(descriptor.nodeRoutingId, cloneDescriptor(descriptor));
97
+ this.notRequiredByRid.set(descriptor.nodeRoutingId, admission);
70
98
  this.rebuildSelections();
71
99
  return 'notRequired';
72
100
  }
73
101
  this.notRequiredByRid.delete(descriptor.nodeRoutingId);
74
- const current = this.peersByRid.get(descriptor.nodeRoutingId);
75
- if (current !== undefined &&
76
- current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration &&
77
- descriptor.descriptorRevision > current.descriptor.descriptorRevision &&
78
- !sameImmutableDescriptor(current.descriptor, descriptor)) {
79
- return 'invalidDescriptor';
80
- }
81
- if (current !== undefined &&
82
- current.descriptor.lifecycleGeneration === descriptor.lifecycleGeneration &&
83
- (current.descriptor.descriptorRevision > descriptor.descriptorRevision ||
84
- (current.descriptor.descriptorRevision === descriptor.descriptorRevision &&
85
- !sameServiceNodeDescriptor(current.descriptor, descriptor)))) {
86
- return 'staleDescriptor';
87
- }
88
102
  // Core selects the one route per RID (Core ROUTER §10.1); an admission on
89
103
  // that route replaces the admission of a route it replaced.
90
104
  this.peersByRid.set(descriptor.nodeRoutingId, {
91
- descriptor: cloneDescriptor(descriptor),
105
+ ...admission,
92
106
  connectionId,
93
107
  liveness: admitLiveness?.() ?? current?.liveness
94
108
  });
@@ -105,9 +119,15 @@ class ServiceTopologyRegistry {
105
119
  return true;
106
120
  }
107
121
  peer(nodeRoutingId) {
108
- const peer = this.peersByRid.get(nodeRoutingId);
122
+ const peer = this.admittedPeer(nodeRoutingId);
109
123
  return peer === undefined ? undefined : clonePeer(peer);
110
124
  }
125
+ routeAdmission(nodeRoutingId) {
126
+ return this.peersByRid.get(nodeRoutingId) ?? this.notRequiredByRid.get(nodeRoutingId);
127
+ }
128
+ admittedPeer(nodeRoutingId) {
129
+ return this.peersByRid.get(nodeRoutingId);
130
+ }
111
131
  peers() {
112
132
  return this.peersCore();
113
133
  }
@@ -118,8 +138,8 @@ class ServiceTopologyRegistry {
118
138
  }
119
139
  notRequiredPeers() {
120
140
  return [...this.notRequiredByRid.values()]
121
- .sort((left, right) => compareOrdinal(left.nodeRoutingId, right.nodeRoutingId))
122
- .map(cloneDescriptor);
141
+ .sort((left, right) => compareOrdinal(left.descriptor.nodeRoutingId, right.descriptor.nodeRoutingId))
142
+ .map((peer) => cloneDescriptor(peer.descriptor));
123
143
  }
124
144
  replaceDiscoveredNotRequired(descriptors) {
125
145
  const next = new Map();
@@ -128,13 +148,16 @@ class ServiceTopologyRegistry {
128
148
  if (descriptor.meshName === this.local.meshName &&
129
149
  descriptor.nodeRoutingId !== this.local.nodeRoutingId &&
130
150
  (0, route_mesh_connection_policy_1.descriptorConnectionNotRequired)(this.local, descriptor)) {
131
- next.set(descriptor.nodeRoutingId, cloneDescriptor(descriptor));
151
+ next.set(descriptor.nodeRoutingId, {
152
+ ...this.notRequiredByRid.get(descriptor.nodeRoutingId),
153
+ descriptor: cloneDescriptor(descriptor)
154
+ });
132
155
  }
133
156
  }
134
157
  this.notRequiredByRid.clear();
135
- for (const [nodeRoutingId, descriptor] of next) {
136
- this.notRequiredByRid.set(nodeRoutingId, descriptor);
137
- this.remember(descriptor);
158
+ for (const [nodeRoutingId, admission] of next) {
159
+ this.notRequiredByRid.set(nodeRoutingId, admission);
160
+ this.remember(admission.descriptor);
138
161
  }
139
162
  this.rebuildSelections();
140
163
  }
@@ -143,10 +166,21 @@ class ServiceTopologyRegistry {
143
166
  this.rebuildSelections();
144
167
  }
145
168
  knownDescriptor(nodeRoutingId) {
146
- const admitted = this.peersByRid.get(nodeRoutingId)?.descriptor;
147
- const descriptor = admitted ?? this.notRequiredByRid.get(nodeRoutingId) ?? this.knownByRid.get(nodeRoutingId);
169
+ const descriptor = this.knownPeerDescriptor(nodeRoutingId);
148
170
  return descriptor === undefined ? undefined : cloneDescriptor(descriptor);
149
171
  }
172
+ isObjectClientNodeDirectTarget(nodeRoutingId) {
173
+ const descriptor = nodeRoutingId === this.local.nodeRoutingId
174
+ ? this.local
175
+ : this.knownPeerDescriptor(nodeRoutingId);
176
+ return descriptor?.objectRole === 'client';
177
+ }
178
+ knownPeerDescriptor(nodeRoutingId) {
179
+ const admitted = this.peersByRid.get(nodeRoutingId)?.descriptor;
180
+ return (admitted ??
181
+ this.notRequiredByRid.get(nodeRoutingId)?.descriptor ??
182
+ this.knownByRid.get(nodeRoutingId));
183
+ }
150
184
  hasKnownChannelTarget(channelName) {
151
185
  requireText(channelName, 'channelName');
152
186
  return [...this.knownByRid.values()].some((descriptor) => (descriptor.state === 'serving' ||
@@ -5,9 +5,14 @@ export declare const SERVICE_WIRE_FLAGS_OFFSET: number;
5
5
  export declare const SERVICE_WIRE_PREFIX_SIZE: number;
6
6
  export declare const SERVICE_WIRE_TEXT8_MAX_BYTES = 255;
7
7
  export type ServiceWireInvalid = (message: string) => never;
8
+ /**
9
+ * Validates text for the service wire and returns its UTF-8 byte length. An
10
+ * unpaired UTF-16 surrogate is rejected instead of being replaced.
11
+ */
12
+ export declare function canonicalServiceWireTextLength(value: string, field: string, maximumBytes: number, invalid: ServiceWireInvalid): number;
8
13
  /** Encodes text without silently replacing an unpaired UTF-16 surrogate. */
9
14
  export declare function encodeCanonicalServiceWireText(value: string, field: string, maximumBytes: number, invalid: ServiceWireInvalid): Buffer;
10
- /** Decodes schema text and rejects Node's replacement-character fallback. */
15
+ /** Decodes schema text in place and rejects non-canonical UTF-8 and NUL. */
11
16
  export declare function decodeCanonicalServiceWireText(bytes: Uint8Array, field: string, invalid: ServiceWireInvalid): string;
12
17
  /** Preserves the schema's binary-safe RoutingId bytes. */
13
18
  export declare function encodeServiceWireRoutingId(value: RoutingId, field: string, maximumBytes: number, invalid: ServiceWireInvalid): Buffer;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SERVICE_WIRE_TEXT8_MAX_BYTES = exports.SERVICE_WIRE_PREFIX_SIZE = exports.SERVICE_WIRE_FLAGS_OFFSET = exports.SERVICE_WIRE_COMMAND_OFFSET = exports.SERVICE_WIRE_MAJOR_OFFSET = void 0;
4
+ exports.canonicalServiceWireTextLength = canonicalServiceWireTextLength;
4
5
  exports.encodeCanonicalServiceWireText = encodeCanonicalServiceWireText;
5
6
  exports.decodeCanonicalServiceWireText = decodeCanonicalServiceWireText;
6
7
  exports.encodeServiceWireRoutingId = encodeServiceWireRoutingId;
@@ -11,24 +12,39 @@ exports.SERVICE_WIRE_COMMAND_OFFSET = exports.SERVICE_WIRE_MAJOR_OFFSET + 1;
11
12
  exports.SERVICE_WIRE_FLAGS_OFFSET = exports.SERVICE_WIRE_COMMAND_OFFSET + 1;
12
13
  exports.SERVICE_WIRE_PREFIX_SIZE = exports.SERVICE_WIRE_FLAGS_OFFSET + 1;
13
14
  exports.SERVICE_WIRE_TEXT8_MAX_BYTES = 255;
14
- /** Encodes text without silently replacing an unpaired UTF-16 surrogate. */
15
- function encodeCanonicalServiceWireText(value, field, maximumBytes, invalid) {
16
- const bytes = Buffer.from(value, 'utf8');
17
- if (bytes.byteLength < 1 ||
18
- bytes.byteLength > maximumBytes ||
15
+ // Fatal decoding accepts exactly the canonical UTF-8 encodings; a leading
16
+ // U+FEFF stays part of the value.
17
+ const CANONICAL_UTF8 = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });
18
+ /**
19
+ * Validates text for the service wire and returns its UTF-8 byte length. An
20
+ * unpaired UTF-16 surrogate is rejected instead of being replaced.
21
+ */
22
+ function canonicalServiceWireTextLength(value, field, maximumBytes, invalid) {
23
+ const length = Buffer.byteLength(value, 'utf8');
24
+ if (length < 1 ||
25
+ length > maximumBytes ||
19
26
  value.includes('\0') ||
20
- bytes.toString('utf8') !== value) {
27
+ !value.isWellFormed()) {
21
28
  invalid(`${field} must be 1..${maximumBytes} canonical UTF-8 bytes without NUL.`);
22
29
  }
23
- return bytes;
30
+ return length;
31
+ }
32
+ /** Encodes text without silently replacing an unpaired UTF-16 surrogate. */
33
+ function encodeCanonicalServiceWireText(value, field, maximumBytes, invalid) {
34
+ canonicalServiceWireTextLength(value, field, maximumBytes, invalid);
35
+ return Buffer.from(value, 'utf8');
24
36
  }
25
- /** Decodes schema text and rejects Node's replacement-character fallback. */
37
+ /** Decodes schema text in place and rejects non-canonical UTF-8 and NUL. */
26
38
  function decodeCanonicalServiceWireText(bytes, field, invalid) {
27
- const encoded = Buffer.from(bytes);
28
- const value = encoded.toString('utf8');
29
- if (value.includes('\0') || !Buffer.from(value, 'utf8').equals(encoded)) {
39
+ let value;
40
+ try {
41
+ value = CANONICAL_UTF8.decode(bytes);
42
+ }
43
+ catch {
30
44
  invalid(`${field} is not canonical UTF-8 without NUL.`);
31
45
  }
46
+ if (value.includes('\0'))
47
+ invalid(`${field} is not canonical UTF-8 without NUL.`);
32
48
  return value;
33
49
  }
34
50
  /** Preserves the schema's binary-safe RoutingId bytes. */
@@ -45,6 +45,7 @@ export declare const ServiceWireCommand: {
45
45
  readonly boundSessionReplaced: 51;
46
46
  readonly relocationState: 52;
47
47
  readonly relocationFailed: 53;
48
+ readonly boundSessionClose: 54;
48
49
  };
49
50
  export declare const ServiceWireFlag: {
50
51
  readonly metadata: 1;
@@ -49,6 +49,7 @@ exports.ServiceWireCommand = {
49
49
  boundSessionReplaced: 51,
50
50
  relocationState: 52,
51
51
  relocationFailed: 53,
52
+ boundSessionClose: 54,
52
53
  };
53
54
  exports.ServiceWireFlag = {
54
55
  metadata: 1,
@@ -45,6 +45,7 @@ export declare const M6aServiceWireCommand: {
45
45
  readonly boundSessionReplaced: 51;
46
46
  readonly relocationState: 52;
47
47
  readonly relocationFailed: 53;
48
+ readonly boundSessionClose: 54;
48
49
  };
49
50
  export interface ServiceApplicationPayload {
50
51
  readonly packetName: string;
@@ -66,11 +67,11 @@ export declare class ServiceWireProtocolError extends Error {
66
67
  }
67
68
  export declare function encodeNodeSendHeader(): Buffer;
68
69
  export declare function encodeNodeRequestHeader(correlation: bigint): Buffer;
69
- export declare function decodeNodeRequestHeader(frame: Uint8Array): bigint;
70
+ export declare function decodeNodeRequestHeader(frame: Uint8Array, header?: ServiceWireHeader): bigint;
70
71
  export declare function encodeChannelSendHeader(channelName: string): Buffer;
71
- export declare function decodeChannelSendHeader(frame: Uint8Array): string;
72
+ export declare function decodeChannelSendHeader(frame: Uint8Array, header?: ServiceWireHeader): string;
72
73
  export declare function encodeChannelRequestHeader(correlation: bigint, channelName: string): Buffer;
73
- export declare function decodeChannelRequestHeader(frame: Uint8Array): {
74
+ export declare function decodeChannelRequestHeader(frame: Uint8Array, header?: ServiceWireHeader): {
74
75
  readonly correlation: bigint;
75
76
  readonly channelName: string;
76
77
  };
@@ -90,6 +91,15 @@ export declare function decodeApplicationPayload(frame: Uint8Array): ServiceAppl
90
91
  * they must hand the multipart bytes to another runtime-owned queue.
91
92
  */
92
93
  export declare function decodeApplicationPayloadView(frame: Uint8Array): ServiceApplicationPayload;
94
+ /**
95
+ * Decodes the framework multipart application frame, whose packet name and
96
+ * content type are the schema's multipart constants, and returns a view of its
97
+ * multipart payload without decoding either text field.
98
+ */
99
+ export declare function decodeMultipartApplicationPayloadView(frame: Uint8Array): ServiceApplicationPayload;
100
+ /** Materializes final message parts directly over the retained application frame. */
101
+ export declare function decodeMultipartApplicationParts<T>(frame: Uint8Array, materialize: (part: Buffer) => T, release?: (part: T) => void): T[];
102
+ export declare function decodeMultipartParts<T>(payload: Uint8Array, materialize: (part: Buffer) => T, release?: (part: T) => void, offset?: number): T[];
93
103
  /**
94
104
  * Validates the M6A envelope without retaining a second payload buffer. The
95
105
  * stateful activation path uses this before storing a durable request; the