@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.
- package/LICENSE +150 -68
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
- package/dist/contracts/Channels/Calls.d.ts +2 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
- package/dist/contracts/Common/encoded-payload-storage.js +5 -2
- package/dist/contracts/Configuration/Builders.d.ts +1 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
- package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
- package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
- package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
- package/dist/contracts/Handlers/Attributes.d.ts +5 -13
- package/dist/contracts/Handlers/Attributes.js +7 -11
- package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
- package/dist/contracts/Handlers/JsonContract.js +4 -153
- package/dist/contracts/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +6 -1
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/abort.d.ts +5 -0
- package/dist/runtime/abort.js +10 -0
- package/dist/runtime/actors/actor-authority-publication.js +3 -2
- package/dist/runtime/actors/actor-client.d.ts +1 -2
- package/dist/runtime/actors/actor-client.js +52 -57
- package/dist/runtime/actors/actor-context.d.ts +2 -0
- package/dist/runtime/actors/actor-context.js +46 -9
- package/dist/runtime/actors/actor-handoff.d.ts +8 -4
- package/dist/runtime/actors/actor-handoff.js +219 -92
- package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
- package/dist/runtime/actors/actor-local-native-join.js +13 -12
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-remote-wire.js +15 -0
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -0
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
- package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
- package/dist/runtime/actors/actor-runtime-state.js +2 -20
- package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
- package/dist/runtime/actors/index.d.ts +8 -3
- package/dist/runtime/actors/index.js +55 -27
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +56 -23
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
- package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
- package/dist/runtime/application-jobs/contracts.d.ts +12 -1
- package/dist/runtime/backend/contracts/index.d.ts +37 -12
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
- package/dist/runtime/backend/mesh-completion-table.js +154 -49
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
- package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
- package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
- package/dist/runtime/backend/runtime-message.d.ts +1 -0
- package/dist/runtime/backend/runtime-message.js +5 -0
- package/dist/runtime/backend/runtime-values.d.ts +1 -0
- package/dist/runtime/backend/runtime-values.js +2 -1
- package/dist/runtime/channels/channel-clients.d.ts +2 -0
- package/dist/runtime/channels/channel-clients.js +75 -23
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
- package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
- package/dist/runtime/channels/channel-dispatch-services.js +45 -0
- package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
- package/dist/runtime/channels/channel-dispatchers.js +62 -54
- package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
- package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
- package/dist/runtime/channels/channel-envelope.d.ts +2 -0
- package/dist/runtime/channels/channel-envelope.js +146 -28
- package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
- package/dist/runtime/channels/channel-outbound-operations.js +8 -8
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
- package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
- package/dist/runtime/channels/channel-runtime-manager.js +16 -16
- package/dist/runtime/channels/channel-transports.d.ts +18 -16
- package/dist/runtime/channels/channel-transports.js +77 -58
- package/dist/runtime/channels/client-server-location-runtime.js +5 -4
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
- package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/fanout-location-runtime.js +3 -3
- package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.js +2 -1
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
- package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
- package/dist/runtime/channels/source-spot-router.d.ts +2 -2
- package/dist/runtime/channels/source-spot-router.js +4 -4
- package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-node-route-transport.js +4 -4
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
- package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
- package/dist/runtime/diagnostics/flow-context.js +19 -7
- package/dist/runtime/diagnostics/index.js +4 -9
- package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
- package/dist/runtime/diagnostics/message-flow.js +35 -5
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
- package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
- package/dist/runtime/execution/index.d.ts +4 -2
- package/dist/runtime/execution/index.js +33 -10
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
- package/dist/runtime/execution/serial-execution-queue.js +22 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
- package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
- package/dist/runtime/foundation/durable-service-request.js +98 -0
- package/dist/runtime/foundation/operation-identity.d.ts +1 -0
- package/dist/runtime/foundation/operation-identity.js +5 -1
- package/dist/runtime/foundation/operation-registry.d.ts +25 -1
- package/dist/runtime/foundation/operation-registry.js +86 -18
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
- package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
- package/dist/runtime/foundation/service-liveness-registry.js +38 -0
- package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
- package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
- package/dist/runtime/foundation/service-stateful-registry.js +24 -26
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
- package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
- package/dist/runtime/foundation/service-topology-registry.js +61 -27
- package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
- package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
- package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
- package/dist/runtime/handlers/handler-instance-scope.js +54 -11
- package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
- package/dist/runtime/host/actor-packet-relay.js +59 -72
- package/dist/runtime/host/actor-placement-coordinator.js +25 -8
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
- package/dist/runtime/host/actor-transfer-runtime.js +85 -331
- package/dist/runtime/host/application-job-queue.d.ts +40 -7
- package/dist/runtime/host/application-job-queue.js +137 -42
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +3 -0
- package/dist/runtime/host/index.d.ts +12 -2
- package/dist/runtime/host/index.js +300 -202
- package/dist/runtime/host/location-runtime-owner.js +2 -6
- package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
- package/dist/runtime/host/mesh-router-resolver.js +14 -6
- package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
- package/dist/runtime/host/remote-bound-session-relay.js +73 -208
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +6 -4
- package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
- package/dist/runtime/host/runtime-shutdown.js +3 -2
- package/dist/runtime/host/service-relocation-control.d.ts +1 -0
- package/dist/runtime/host/service-relocation-control.js +10 -4
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
- package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
- package/dist/runtime/host/spot-address-transport.js +3 -2
- package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
- package/dist/runtime/locations/actor-location-claims.js +34 -19
- package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
- package/dist/runtime/locations/auto-connect-loop.js +22 -14
- package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
- package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
- package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
- package/dist/runtime/locations/descriptor-publication.js +11 -0
- package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
- package/dist/runtime/locations/in-memory-authority-store.js +56 -19
- package/dist/runtime/locations/in-memory-location-store.js +1 -10
- package/dist/runtime/locations/index.d.ts +1 -0
- package/dist/runtime/locations/index.js +1 -0
- package/dist/runtime/locations/lease-tracker.js +1 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -2
- package/dist/runtime/locations/lifecycle.js +2 -5
- package/dist/runtime/locations/location-store-repository.d.ts +51 -1
- package/dist/runtime/locations/location-store-repository.js +363 -139
- package/dist/runtime/locations/relocation-blob.d.ts +18 -1
- package/dist/runtime/locations/relocation-blob.js +52 -1
- package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
- package/dist/runtime/locations/request-source-resolver.js +80 -0
- package/dist/runtime/locations/resolvers.js +1 -1
- package/dist/runtime/locations/runtime.d.ts +7 -3
- package/dist/runtime/locations/runtime.js +61 -53
- package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
- package/dist/runtime/messaging/framework-json-v1.js +38 -294
- package/dist/runtime/messaging/packet-name.d.ts +1 -1
- package/dist/runtime/messaging/packet-name.js +8 -24
- package/dist/runtime/messaging/payload-codec.d.ts +7 -1
- package/dist/runtime/messaging/payload-codec.js +7 -6
- package/dist/runtime/messaging/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +57 -0
- package/dist/runtime/messaging/submission-result.d.ts +1 -0
- package/dist/runtime/messaging/submission-result.js +5 -2
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
- package/dist/runtime/spots/index.d.ts +21 -11
- package/dist/runtime/spots/index.js +243 -178
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +21 -11
- package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
- package/dist/runtime/spots/spot-activation-state.js +7 -7
- package/dist/runtime/spots/spot-activation.d.ts +7 -3
- package/dist/runtime/spots/spot-activation.js +140 -52
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
- package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
- package/dist/runtime/spots/spot-actor-membership.js +0 -8
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
- package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
- package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
- package/dist/runtime/spots/spot-entry-activation.js +20 -11
- package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
- package/dist/runtime/spots/spot-handler-registry.js +24 -10
- package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
- package/dist/runtime/spots/spot-manager-public.js +2 -2
- package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
- package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
- package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +27 -18
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
- package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
- package/dist/runtime/spots/spot-serial-executor.js +61 -8
- package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
- package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +288 -103
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
- package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
- package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
- package/dist/runtime/streams/bound-session-service.d.ts +1 -1
- package/dist/runtime/streams/bound-session-service.js +6 -11
- package/dist/runtime/streams/index.d.ts +3 -2
- package/dist/runtime/streams/index.js +6 -4
- package/dist/runtime/streams/managed-stream.js +3 -2
- package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
- package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
- package/dist/runtime/streams/session-actor-coordinator.js +15 -32
- package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -31
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
- package/src/contracts/Channels/Calls.ts +2 -1
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Common/encoded-payload-storage.ts +6 -3
- package/src/contracts/Configuration/Builders.ts +4 -1
- package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
- package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
- package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +10 -1
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/nest-integration.ts +1 -0
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +100 -85
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +291 -110
- package/src/runtime/actors/actor-join-relocation.ts +3 -0
- package/src/runtime/actors/actor-local-native-join.ts +21 -26
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-remote-wire.ts +17 -0
- package/src/runtime/actors/actor-reply.ts +42 -0
- package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
- package/src/runtime/actors/actor-routed-json-request.ts +10 -2
- package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
- package/src/runtime/actors/actor-runtime-state.ts +2 -20
- package/src/runtime/actors/actor-source-transfer.ts +1 -34
- package/src/runtime/actors/index.ts +60 -32
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +69 -21
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
- package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
- package/src/runtime/application-jobs/contracts.ts +16 -1
- package/src/runtime/backend/contracts/index.ts +92 -18
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +160 -57
- package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
- package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
- package/src/runtime/backend/raw-binding-port.ts +7 -2
- package/src/runtime/backend/runtime-message.ts +6 -0
- package/src/runtime/backend/runtime-values.ts +1 -0
- package/src/runtime/channels/channel-clients.ts +132 -58
- package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +136 -90
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +225 -31
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +41 -17
- package/src/runtime/channels/channel-transports.ts +171 -112
- package/src/runtime/channels/client-server-location-runtime.ts +11 -10
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
- package/src/runtime/channels/fanout-location-runtime.ts +17 -9
- package/src/runtime/channels/local-spot-route-transport.ts +3 -1
- package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
- package/src/runtime/channels/source-spot-router.ts +8 -4
- package/src/runtime/channels/spot-node-route-transport.ts +8 -4
- package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
- package/src/runtime/diagnostics/flow-context.ts +20 -7
- package/src/runtime/diagnostics/index.ts +1 -7
- package/src/runtime/diagnostics/message-flow.ts +47 -9
- package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
- package/src/runtime/execution/index.ts +40 -14
- package/src/runtime/execution/serial-execution-queue.ts +33 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
- package/src/runtime/foundation/durable-service-request.ts +137 -0
- package/src/runtime/foundation/operation-identity.ts +5 -1
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
- package/src/runtime/foundation/service-liveness-registry.ts +39 -0
- package/src/runtime/foundation/service-mailbox.ts +8 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
- package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
- package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
- package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
- package/src/runtime/foundation/service-stateful-registry.ts +38 -35
- package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
- package/src/runtime/foundation/service-topology-registry.ts +91 -36
- package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
- package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +113 -94
- package/src/runtime/host/actor-placement-coordinator.ts +31 -8
- package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
- package/src/runtime/host/actor-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +160 -41
- package/src/runtime/host/entry-actor-runtime.ts +4 -0
- package/src/runtime/host/index.ts +473 -271
- package/src/runtime/host/location-runtime-owner.ts +2 -6
- package/src/runtime/host/mesh-router-resolver.ts +13 -5
- package/src/runtime/host/remote-bound-session-relay.ts +88 -271
- package/src/runtime/host/route-mesh-runtime.ts +12 -6
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
- package/src/runtime/host/spot-address-transport.ts +4 -2
- package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/auto-connect-loop.ts +22 -14
- package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
- package/src/runtime/locations/auto-connect-types.ts +0 -1
- package/src/runtime/locations/descriptor-publication.ts +7 -0
- package/src/runtime/locations/domain-store-contract.ts +5 -0
- package/src/runtime/locations/in-memory-authority-store.ts +85 -23
- package/src/runtime/locations/in-memory-location-store.ts +1 -12
- package/src/runtime/locations/index.ts +1 -0
- package/src/runtime/locations/lease-tracker.ts +2 -9
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +628 -152
- package/src/runtime/locations/relocation-blob.ts +75 -1
- package/src/runtime/locations/request-source-resolver.ts +138 -0
- package/src/runtime/locations/resolvers.ts +2 -2
- package/src/runtime/locations/runtime.ts +98 -64
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +62 -0
- package/src/runtime/messaging/submission-result.ts +5 -1
- package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
- package/src/runtime/spots/index.ts +389 -283
- package/src/runtime/spots/spot-activation-registry.ts +25 -13
- package/src/runtime/spots/spot-activation-state.ts +12 -19
- package/src/runtime/spots/spot-activation.ts +198 -96
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
- package/src/runtime/spots/spot-actor-membership.ts +0 -15
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
- package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
- package/src/runtime/spots/spot-entry-activation.ts +33 -21
- package/src/runtime/spots/spot-handler-registry.ts +56 -12
- package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
- package/src/runtime/spots/spot-manager-public.ts +2 -2
- package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +39 -19
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-runtime-ports.ts +1 -1
- package/src/runtime/spots/spot-serial-executor.ts +97 -25
- package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
- package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
- package/src/runtime/spots/spot-timer.ts +418 -158
- package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
- package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
- package/src/runtime/streams/bound-session-service.ts +7 -10
- package/src/runtime/streams/index.ts +12 -6
- package/src/runtime/streams/managed-stream.ts +4 -2
- package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
- package/src/runtime/streams/session-actor-coordinator.ts +39 -88
- package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
- package/src/runtime/streams/stream-session-runtime.ts +13 -34
- 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
|
|
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
|
|
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
|
-
//
|
|
62
|
-
//
|
|
63
|
-
|
|
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
|
-
|
|
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,
|
|
539
|
+
: { metadata: (0, service_wire_codec_generated_2.decodeMetadataFrame)(metadataFrame, STATEFUL_MESSAGE_CONTEXT) })
|
|
535
540
|
};
|
|
536
541
|
const frames = kind === 'spotSend'
|
|
537
|
-
? (0,
|
|
538
|
-
: (0,
|
|
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,
|
|
570
|
-
: (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
706
|
-
: (0,
|
|
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,
|
|
727
|
-
: (0,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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.
|
|
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,
|
|
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,
|
|
136
|
-
this.notRequiredByRid.set(nodeRoutingId,
|
|
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
|
|
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
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
27
|
+
!value.isWellFormed()) {
|
|
21
28
|
invalid(`${field} must be 1..${maximumBytes} canonical UTF-8 bytes without NUL.`);
|
|
22
29
|
}
|
|
23
|
-
return
|
|
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
|
|
37
|
+
/** Decodes schema text in place and rejects non-canonical UTF-8 and NUL. */
|
|
26
38
|
function decodeCanonicalServiceWireText(bytes, field, invalid) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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 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
|