@zlink-systems/framework 0.30.1 → 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 (340) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  3. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  4. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  5. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  6. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  7. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  8. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  9. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  10. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  11. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  12. package/dist/contracts/Locations/Rows.d.ts +2 -0
  13. package/dist/contracts/Spots/Contracts.d.ts +4 -0
  14. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  15. package/dist/runtime/abort.d.ts +5 -0
  16. package/dist/runtime/abort.js +10 -0
  17. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  18. package/dist/runtime/actors/actor-client.d.ts +0 -1
  19. package/dist/runtime/actors/actor-client.js +38 -45
  20. package/dist/runtime/actors/actor-context.d.ts +2 -0
  21. package/dist/runtime/actors/actor-context.js +46 -9
  22. package/dist/runtime/actors/actor-handoff.d.ts +7 -3
  23. package/dist/runtime/actors/actor-handoff.js +212 -88
  24. package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
  25. package/dist/runtime/actors/actor-local-native-join.js +4 -0
  26. package/dist/runtime/actors/actor-mailbox.js +27 -1
  27. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  28. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  29. package/dist/runtime/actors/actor-reply.js +29 -0
  30. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  31. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  32. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  33. package/dist/runtime/actors/index.d.ts +6 -2
  34. package/dist/runtime/actors/index.js +37 -21
  35. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  36. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  37. package/dist/runtime/admission.d.ts +9 -1
  38. package/dist/runtime/admission.js +55 -32
  39. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
  40. package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
  41. package/dist/runtime/application-jobs/contracts.d.ts +2 -0
  42. package/dist/runtime/backend/contracts/index.d.ts +19 -3
  43. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  44. package/dist/runtime/backend/mesh-completion-table.js +5 -0
  45. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
  46. package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
  47. package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
  48. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
  49. package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
  50. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  51. package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
  52. package/dist/runtime/channels/channel-clients.d.ts +1 -0
  53. package/dist/runtime/channels/channel-clients.js +20 -5
  54. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
  55. package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
  56. package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
  57. package/dist/runtime/channels/channel-dispatchers.js +44 -37
  58. package/dist/runtime/channels/channel-envelope.d.ts +1 -0
  59. package/dist/runtime/channels/channel-envelope.js +74 -31
  60. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  61. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  62. package/dist/runtime/channels/channel-runtime-manager.d.ts +3 -2
  63. package/dist/runtime/channels/channel-runtime-manager.js +4 -4
  64. package/dist/runtime/channels/channel-transports.d.ts +0 -1
  65. package/dist/runtime/channels/channel-transports.js +35 -33
  66. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  67. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  68. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  69. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  70. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  71. package/dist/runtime/diagnostics/flow-context.js +19 -7
  72. package/dist/runtime/diagnostics/index.js +4 -9
  73. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  74. package/dist/runtime/diagnostics/message-flow.js +35 -5
  75. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  76. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  77. package/dist/runtime/execution/index.d.ts +4 -2
  78. package/dist/runtime/execution/index.js +33 -10
  79. package/dist/runtime/execution/serial-execution-queue.d.ts +4 -0
  80. package/dist/runtime/execution/serial-execution-queue.js +21 -2
  81. package/dist/runtime/execution/state-lane.d.ts +2 -0
  82. package/dist/runtime/execution/state-lane.js +5 -0
  83. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  84. package/dist/runtime/foundation/operation-registry.js +86 -18
  85. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +39 -3
  86. package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
  87. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  88. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  89. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  90. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  91. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -3
  92. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
  93. package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
  94. package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -1
  95. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  96. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  97. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  98. package/dist/runtime/foundation/service-stateful-runtime.d.ts +72 -6
  99. package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
  100. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
  101. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  102. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  103. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  104. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  105. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  106. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +10 -0
  107. package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
  108. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  109. package/dist/runtime/host/actor-packet-relay.js +59 -72
  110. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  111. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  112. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  113. package/dist/runtime/host/application-job-queue.d.ts +24 -3
  114. package/dist/runtime/host/application-job-queue.js +28 -41
  115. package/dist/runtime/host/index.d.ts +5 -1
  116. package/dist/runtime/host/index.js +171 -97
  117. package/dist/runtime/host/location-runtime-owner.js +2 -6
  118. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  119. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  120. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  121. package/dist/runtime/host/remote-bound-session-relay.js +71 -190
  122. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  123. package/dist/runtime/host/route-mesh-runtime.js +5 -3
  124. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  125. package/dist/runtime/host/runtime-shutdown.js +3 -2
  126. package/dist/runtime/host/service-relocation-host-runtime.d.ts +17 -7
  127. package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
  128. package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
  129. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  130. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  131. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  132. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  133. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  134. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  135. package/dist/runtime/locations/descriptor-publication.js +11 -0
  136. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  137. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  138. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  139. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  140. package/dist/runtime/locations/index.d.ts +1 -0
  141. package/dist/runtime/locations/index.js +1 -0
  142. package/dist/runtime/locations/lease-tracker.js +1 -6
  143. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  144. package/dist/runtime/locations/location-store-repository.js +363 -139
  145. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  146. package/dist/runtime/locations/relocation-blob.js +52 -1
  147. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  148. package/dist/runtime/locations/request-source-resolver.js +80 -0
  149. package/dist/runtime/locations/resolvers.js +1 -1
  150. package/dist/runtime/locations/runtime.d.ts +6 -2
  151. package/dist/runtime/locations/runtime.js +37 -30
  152. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  153. package/dist/runtime/messaging/payload-codec.js +7 -6
  154. package/dist/runtime/messaging/request-result.js +29 -26
  155. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
  156. package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
  157. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
  158. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
  159. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
  160. package/dist/runtime/spots/index.d.ts +18 -11
  161. package/dist/runtime/spots/index.js +234 -176
  162. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  163. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  164. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  165. package/dist/runtime/spots/spot-activation-state.js +7 -7
  166. package/dist/runtime/spots/spot-activation.d.ts +6 -3
  167. package/dist/runtime/spots/spot-activation.js +123 -44
  168. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  169. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  170. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  171. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  172. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  173. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  174. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  175. package/dist/runtime/spots/spot-entry-activation.js +14 -9
  176. package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
  177. package/dist/runtime/spots/spot-handler-registry.js +6 -2
  178. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  179. package/dist/runtime/spots/spot-manager-public.js +2 -2
  180. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  181. package/dist/runtime/spots/spot-node-autoconnect.js +18 -39
  182. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  183. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  184. package/dist/runtime/spots/spot-outbound.js +3 -3
  185. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  186. package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -1
  187. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  188. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  189. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  190. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -1
  191. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  192. package/dist/runtime/spots/spot-timer.js +287 -103
  193. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  194. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  195. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  196. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  197. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  198. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  199. package/dist/runtime/streams/bound-session-service.js +6 -11
  200. package/dist/runtime/streams/index.d.ts +3 -2
  201. package/dist/runtime/streams/index.js +6 -4
  202. package/dist/runtime/streams/managed-stream.js +3 -2
  203. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  204. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  205. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  206. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  207. package/dist/runtime/streams/stream-session-runtime.js +1 -4
  208. package/dist/runtime/workers/index.js +1 -1
  209. package/package.json +3 -3
  210. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  211. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  212. package/src/contracts/Configuration/Builders.ts +4 -1
  213. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  214. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  215. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  216. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  217. package/src/contracts/Locations/Rows.ts +2 -0
  218. package/src/contracts/Spots/Contracts.ts +8 -0
  219. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  220. package/src/runtime/abort.ts +12 -0
  221. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  222. package/src/runtime/actors/actor-client.ts +61 -70
  223. package/src/runtime/actors/actor-context.ts +49 -9
  224. package/src/runtime/actors/actor-handoff.ts +282 -106
  225. package/src/runtime/actors/actor-join-relocation.ts +2 -0
  226. package/src/runtime/actors/actor-local-native-join.ts +4 -0
  227. package/src/runtime/actors/actor-mailbox.ts +40 -2
  228. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  229. package/src/runtime/actors/actor-reply.ts +42 -0
  230. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  231. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  232. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  233. package/src/runtime/actors/index.ts +41 -27
  234. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  235. package/src/runtime/admission.ts +69 -34
  236. package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
  237. package/src/runtime/application-jobs/contracts.ts +2 -0
  238. package/src/runtime/backend/contracts/index.ts +39 -4
  239. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  240. package/src/runtime/backend/mesh-completion-table.ts +4 -0
  241. package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
  242. package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
  243. package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
  244. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
  245. package/src/runtime/channels/channel-clients.ts +49 -24
  246. package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
  247. package/src/runtime/channels/channel-dispatchers.ts +116 -72
  248. package/src/runtime/channels/channel-envelope.ts +105 -36
  249. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  250. package/src/runtime/channels/channel-runtime-manager.ts +12 -5
  251. package/src/runtime/channels/channel-transports.ts +49 -58
  252. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  253. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  254. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  255. package/src/runtime/diagnostics/flow-context.ts +20 -7
  256. package/src/runtime/diagnostics/index.ts +1 -7
  257. package/src/runtime/diagnostics/message-flow.ts +47 -9
  258. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  259. package/src/runtime/execution/index.ts +40 -14
  260. package/src/runtime/execution/serial-execution-queue.ts +31 -4
  261. package/src/runtime/execution/state-lane.ts +7 -0
  262. package/src/runtime/foundation/operation-registry.ts +98 -20
  263. package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
  264. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  265. package/src/runtime/foundation/service-mailbox.ts +8 -0
  266. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  267. package/src/runtime/foundation/service-relocation-object-owner.ts +54 -37
  268. package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
  269. package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
  270. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  271. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  272. package/src/runtime/foundation/service-stateful-runtime.ts +667 -152
  273. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
  274. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  275. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  276. package/src/runtime/foundation/service-wire-m6a-codec.ts +187 -51
  277. package/src/runtime/host/actor-packet-relay.ts +113 -94
  278. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  279. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  280. package/src/runtime/host/application-job-queue.ts +29 -44
  281. package/src/runtime/host/index.ts +286 -129
  282. package/src/runtime/host/location-runtime-owner.ts +2 -6
  283. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  284. package/src/runtime/host/remote-bound-session-relay.ts +86 -248
  285. package/src/runtime/host/route-mesh-runtime.ts +11 -5
  286. package/src/runtime/host/runtime-shutdown.ts +15 -4
  287. package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
  288. package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
  289. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  290. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  291. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  292. package/src/runtime/locations/auto-connect-types.ts +0 -1
  293. package/src/runtime/locations/descriptor-publication.ts +7 -0
  294. package/src/runtime/locations/domain-store-contract.ts +5 -0
  295. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  296. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  297. package/src/runtime/locations/index.ts +1 -0
  298. package/src/runtime/locations/lease-tracker.ts +2 -9
  299. package/src/runtime/locations/location-store-repository.ts +628 -152
  300. package/src/runtime/locations/relocation-blob.ts +75 -1
  301. package/src/runtime/locations/request-source-resolver.ts +138 -0
  302. package/src/runtime/locations/resolvers.ts +2 -2
  303. package/src/runtime/locations/runtime.ts +70 -40
  304. package/src/runtime/messaging/payload-codec.ts +8 -11
  305. package/src/runtime/messaging/request-result.ts +33 -29
  306. package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
  307. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
  308. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
  309. package/src/runtime/spots/index.ts +375 -281
  310. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  311. package/src/runtime/spots/spot-activation-state.ts +12 -19
  312. package/src/runtime/spots/spot-activation.ts +170 -86
  313. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  314. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  315. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  316. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  317. package/src/runtime/spots/spot-entry-activation.ts +24 -19
  318. package/src/runtime/spots/spot-handler-registry.ts +15 -4
  319. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  320. package/src/runtime/spots/spot-manager-public.ts +2 -2
  321. package/src/runtime/spots/spot-node-autoconnect.ts +22 -45
  322. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  323. package/src/runtime/spots/spot-outbound.ts +3 -3
  324. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  325. package/src/runtime/spots/spot-runtime-ports.ts +0 -1
  326. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  327. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  328. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -1
  329. package/src/runtime/spots/spot-timer.ts +413 -157
  330. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  331. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  332. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  333. package/src/runtime/streams/bound-session-service.ts +7 -10
  334. package/src/runtime/streams/index.ts +12 -6
  335. package/src/runtime/streams/managed-stream.ts +4 -2
  336. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  337. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  338. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  339. package/src/runtime/streams/stream-session-runtime.ts +1 -5
  340. 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;
@@ -247,6 +249,8 @@ export interface ServiceSessionRelocationOwnerFence {
247
249
  readonly bindingGeneration: bigint;
248
250
  }
249
251
  export interface ServiceSessionRelocationSeal {
252
+ readonly targetNodeRid: string;
253
+ readonly targetNodeGeneration: bigint;
250
254
  readonly relocation: ServiceWireOperationId;
251
255
  readonly coordinator: ServiceWireRelocationCoordinatorFence;
252
256
  readonly senderRole: 'source' | 'coordinator';
@@ -254,6 +258,7 @@ export interface ServiceSessionRelocationSeal {
254
258
  readonly session: ServiceSessionRelocationOwnerFence;
255
259
  }
256
260
  export interface ServiceSessionRelocationSealed {
261
+ readonly sealResult: 'sealed' | 'bindingAbsent';
257
262
  readonly relocation: ServiceWireOperationId;
258
263
  readonly coordinator: ServiceWireRelocationCoordinatorFence;
259
264
  readonly actor: ServiceBoundSessionActorAuthority;
@@ -452,6 +457,14 @@ export type ServiceStatefulWireRecord = {
452
457
  readonly actor: ServiceActorRouteFence;
453
458
  readonly sessionRid: string;
454
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;
455
468
  } | {
456
469
  readonly kind: 'boundSessionReplaced';
457
470
  readonly actorAuthority: ServiceBoundSessionActorAuthority;
@@ -569,7 +582,7 @@ export declare function decodeMaintenanceReplyRelay(frames: readonly Uint8Array[
569
582
  export declare function encodeMaintenanceReplyRelayAck(value: ServiceMaintenanceReplyRelayAck): Buffer;
570
583
  /** Decodes canonical service-wire command 46. */
571
584
  export declare function decodeMaintenanceReplyRelayAck(frame: Uint8Array): ServiceMaintenanceReplyRelayAck;
572
- 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;
573
586
  export declare function sessionBindingFromWire(actor: ServiceActorRef, sessionRid: string, sessionOwnerNodeRid: string, generation: bigint, membershipEpoch: bigint, sessionOwnerNodeGeneration?: bigint, sessionOwnerId?: string, sessionOwnerLeaseGeneration?: bigint): ServiceSessionBinding;
574
587
  export declare function decodeServiceWireFrozenRecord(bytes: Uint8Array): ServiceWireFrozenRecord;
575
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 &&
@@ -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;
@@ -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