@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
|
@@ -1,326 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as profile from '@zlink-systems/stream-wire/internal/json';
|
|
2
2
|
|
|
3
|
-
export const FRAMEWORK_JSON_V1_PROFILE =
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export interface FrameworkJsonParseOptions {
|
|
9
|
-
readonly rejectPropertyName?: (name: string) => boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function stringifyFrameworkJsonV1(value: unknown, schema?: ZLinkJsonSchema): string {
|
|
13
|
-
if (value === undefined || typeof value === 'function' || typeof value === 'symbol') {
|
|
14
|
-
throw new TypeError('framework-json-v1 payload is not a JSON value.');
|
|
15
|
-
}
|
|
16
|
-
const encoded = JSON.stringify(value, frameworkJsonV1Replacer);
|
|
17
|
-
if (schema !== undefined) {
|
|
18
|
-
validateFrameworkJsonV1Value(JSON.parse(encoded), schema, '$', false);
|
|
19
|
-
}
|
|
20
|
-
return encoded;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Module-level so JSON.stringify does not allocate a fresh closure per
|
|
24
|
-
// encoded message. On the root call `this` is the {'': value} wrapper, so
|
|
25
|
-
// this[key] resolves the raw (pre-toJSON) source for every key including ''.
|
|
26
|
-
function frameworkJsonV1Replacer(
|
|
27
|
-
this: Record<string, unknown>,
|
|
28
|
-
key: string,
|
|
29
|
-
item: unknown
|
|
30
|
-
): unknown {
|
|
31
|
-
const source = this[key];
|
|
32
|
-
if (typeof source === 'number' && !Number.isFinite(source)) {
|
|
33
|
-
throw new TypeError('framework-json-v1 only accepts finite JSON numbers.');
|
|
34
|
-
}
|
|
35
|
-
if (typeof source === 'bigint') {
|
|
36
|
-
if (source < SIGNED_64_MIN || source > UNSIGNED_64_MAX) {
|
|
37
|
-
throw new RangeError('framework-json-v1 64-bit integer is outside the supported range.');
|
|
38
|
-
}
|
|
39
|
-
return source.toString(10);
|
|
40
|
-
}
|
|
41
|
-
if (source instanceof Uint8Array) {
|
|
42
|
-
return Buffer.from(source.buffer, source.byteOffset, source.byteLength).toString('base64');
|
|
43
|
-
}
|
|
44
|
-
if (source instanceof Date) {
|
|
45
|
-
throw new TypeError('framework-json-v1 does not implicitly encode Date values.');
|
|
46
|
-
}
|
|
47
|
-
if (
|
|
48
|
-
typeof source === 'object' &&
|
|
49
|
-
source !== null &&
|
|
50
|
-
typeof (source as { readonly toJSON?: unknown }).toJSON === 'function'
|
|
51
|
-
) {
|
|
52
|
-
throw new TypeError('framework-json-v1 does not implicitly invoke custom toJSON methods.');
|
|
53
|
-
}
|
|
54
|
-
return item;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function parseFrameworkJsonV1(
|
|
58
|
-
text: string,
|
|
59
|
-
options: FrameworkJsonParseOptions = {},
|
|
60
|
-
schema?: ZLinkJsonSchema
|
|
61
|
-
): unknown {
|
|
62
|
-
if (text.charCodeAt(0) === 0xfeff) {
|
|
63
|
-
throw new SyntaxError('framework-json-v1 does not allow a UTF-8 BOM.');
|
|
64
|
-
}
|
|
65
|
-
new JsonPropertyScanner(text, options).scan();
|
|
66
|
-
const parsed = JSON.parse(text);
|
|
67
|
-
return schema === undefined ? parsed : validateFrameworkJsonV1Value(parsed, schema, '$', true);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Sticky pattern shared across scans; matching happens synchronously so the
|
|
71
|
-
// mutable lastIndex never crosses calls.
|
|
72
|
-
const NUMBER_TOKEN_PATTERN = /-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/uy;
|
|
73
|
-
|
|
74
|
-
const BASE64_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;
|
|
75
|
-
const INT32_MIN = -2_147_483_648;
|
|
76
|
-
const INT32_MAX = 2_147_483_647;
|
|
77
|
-
const UINT32_MAX = 4_294_967_295;
|
|
78
|
-
|
|
79
|
-
function validateFrameworkJsonV1Value(
|
|
80
|
-
value: unknown,
|
|
81
|
-
schema: ZLinkJsonSchema,
|
|
82
|
-
path: string,
|
|
83
|
-
decode: boolean
|
|
84
|
-
): unknown {
|
|
85
|
-
switch (schema.type) {
|
|
86
|
-
case 'boolean':
|
|
87
|
-
if (typeof value !== 'boolean') schemaFailure(path, 'a boolean');
|
|
88
|
-
return value;
|
|
89
|
-
case 'string':
|
|
90
|
-
if (typeof value !== 'string') schemaFailure(path, 'a string');
|
|
91
|
-
return value;
|
|
92
|
-
case 'number':
|
|
93
|
-
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
94
|
-
schemaFailure(path, 'a finite number');
|
|
95
|
-
return value;
|
|
96
|
-
case 'int32':
|
|
97
|
-
if (
|
|
98
|
-
!Number.isInteger(value) ||
|
|
99
|
-
(value as number) < INT32_MIN ||
|
|
100
|
-
(value as number) > INT32_MAX
|
|
101
|
-
) {
|
|
102
|
-
schemaFailure(path, 'an int32 JSON number');
|
|
103
|
-
}
|
|
104
|
-
return value;
|
|
105
|
-
case 'uint32':
|
|
106
|
-
if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {
|
|
107
|
-
schemaFailure(path, 'a uint32 JSON number');
|
|
108
|
-
}
|
|
109
|
-
return value;
|
|
110
|
-
case 'int64':
|
|
111
|
-
return validateDecimalInteger(value, path, true, decode);
|
|
112
|
-
case 'uint64':
|
|
113
|
-
return validateDecimalInteger(value, path, false, decode);
|
|
114
|
-
case 'bytes': {
|
|
115
|
-
if (typeof value !== 'string' || !BASE64_PATTERN.test(value)) {
|
|
116
|
-
schemaFailure(path, 'padded RFC 4648 base64');
|
|
117
|
-
}
|
|
118
|
-
const bytes = Buffer.from(value as string, 'base64');
|
|
119
|
-
if (bytes.toString('base64') !== value)
|
|
120
|
-
schemaFailure(path, 'canonical padded RFC 4648 base64');
|
|
121
|
-
return decode ? Uint8Array.from(bytes) : value;
|
|
122
|
-
}
|
|
123
|
-
case 'enum':
|
|
124
|
-
if (typeof value !== 'string' || !schema.names.includes(value)) {
|
|
125
|
-
schemaFailure(path, `one of ${schema.names.join(', ')}`);
|
|
126
|
-
}
|
|
127
|
-
return value;
|
|
128
|
-
case 'nullable':
|
|
129
|
-
return value === null
|
|
130
|
-
? null
|
|
131
|
-
: validateFrameworkJsonV1Value(value, schema.value, path, decode);
|
|
132
|
-
case 'array':
|
|
133
|
-
if (!Array.isArray(value)) schemaFailure(path, 'an array');
|
|
134
|
-
return (value as unknown[]).map((item, index) =>
|
|
135
|
-
validateFrameworkJsonV1Value(item, schema.items, `${path}[${index}]`, decode)
|
|
136
|
-
);
|
|
137
|
-
case 'record': {
|
|
138
|
-
if (!isJsonObject(value)) schemaFailure(path, 'an object');
|
|
139
|
-
const result: Record<string, unknown> = {};
|
|
140
|
-
for (const [name, item] of Object.entries(value as Record<string, unknown>)) {
|
|
141
|
-
result[name] = validateFrameworkJsonV1Value(item, schema.values, `${path}.${name}`, decode);
|
|
142
|
-
}
|
|
143
|
-
return decode ? result : value;
|
|
144
|
-
}
|
|
145
|
-
case 'object': {
|
|
146
|
-
if (!isJsonObject(value)) schemaFailure(path, 'an object');
|
|
147
|
-
const input = value as Record<string, unknown>;
|
|
148
|
-
for (const name of schema.required) {
|
|
149
|
-
if (!Object.prototype.hasOwnProperty.call(input, name)) {
|
|
150
|
-
throw new TypeError(`framework-json-v1 required property '${path}.${name}' is missing.`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
const result: Record<string, unknown> = {};
|
|
154
|
-
for (const [name, item] of Object.entries(input)) {
|
|
155
|
-
const propertySchema: unknown = schema.properties[name];
|
|
156
|
-
if (propertySchema === undefined) {
|
|
157
|
-
if (schema.additionalProperties === false) {
|
|
158
|
-
throw new TypeError(`framework-json-v1 property '${path}.${name}' is not allowed.`);
|
|
159
|
-
}
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
result[name] = validateFrameworkJsonV1Value(
|
|
163
|
-
item,
|
|
164
|
-
propertySchema as ZLinkJsonSchema,
|
|
165
|
-
`${path}.${name}`,
|
|
166
|
-
decode
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
return decode ? result : value;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function validateDecimalInteger(
|
|
175
|
-
value: unknown,
|
|
176
|
-
path: string,
|
|
177
|
-
signed: boolean,
|
|
178
|
-
decode: boolean
|
|
179
|
-
): unknown {
|
|
180
|
-
if (typeof value !== 'string' || !/^(?:0|[1-9][0-9]*|-[1-9][0-9]*)$/u.test(value)) {
|
|
181
|
-
schemaFailure(
|
|
182
|
-
path,
|
|
183
|
-
signed ? 'a canonical int64 decimal string' : 'a canonical uint64 decimal string'
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
const parsed = BigInt(value as string);
|
|
187
|
-
const minimum = signed ? SIGNED_64_MIN : 0n;
|
|
188
|
-
const maximum = signed ? (1n << 63n) - 1n : UNSIGNED_64_MAX;
|
|
189
|
-
if (parsed < minimum || parsed > maximum)
|
|
190
|
-
schemaFailure(path, signed ? 'an int64 value' : 'a uint64 value');
|
|
191
|
-
return decode ? parsed : value;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function isJsonObject(value: unknown): value is Record<string, unknown> {
|
|
195
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function schemaFailure(path: string, expected: string): never {
|
|
199
|
-
throw new TypeError(`framework-json-v1 value '${path}' must be ${expected}.`);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
class JsonPropertyScanner {
|
|
203
|
-
private index = 0;
|
|
204
|
-
|
|
205
|
-
constructor(
|
|
206
|
-
private readonly text: string,
|
|
207
|
-
private readonly options: FrameworkJsonParseOptions
|
|
208
|
-
) {}
|
|
209
|
-
|
|
210
|
-
scan(): void {
|
|
211
|
-
this.skipWhitespace();
|
|
212
|
-
this.scanValue();
|
|
213
|
-
this.skipWhitespace();
|
|
214
|
-
if (this.index !== this.text.length) this.fail('trailing data');
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
private scanValue(): void {
|
|
218
|
-
this.skipWhitespace();
|
|
219
|
-
const token = this.text[this.index];
|
|
220
|
-
if (token === '{') return this.scanObject();
|
|
221
|
-
if (token === '[') return this.scanArray();
|
|
222
|
-
if (token === '"') {
|
|
223
|
-
this.scanString();
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
if (token === 't') return this.scanLiteral('true');
|
|
227
|
-
if (token === 'f') return this.scanLiteral('false');
|
|
228
|
-
if (token === 'n') return this.scanLiteral('null');
|
|
229
|
-
this.scanNumber();
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
private scanObject(): void {
|
|
233
|
-
this.index++;
|
|
234
|
-
this.skipWhitespace();
|
|
235
|
-
if (this.text[this.index] === '}') {
|
|
236
|
-
this.index++;
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
const properties = new Set<string>();
|
|
240
|
-
for (;;) {
|
|
241
|
-
this.skipWhitespace();
|
|
242
|
-
if (this.text[this.index] !== '"') this.fail('object property name');
|
|
243
|
-
const property = this.scanString();
|
|
244
|
-
if (properties.has(property)) {
|
|
245
|
-
throw new SyntaxError(`framework-json-v1 duplicate property '${property}'.`);
|
|
246
|
-
}
|
|
247
|
-
properties.add(property);
|
|
248
|
-
if (this.options.rejectPropertyName?.(property) === true) {
|
|
249
|
-
throw new SyntaxError(`framework-json-v1 property '${property}' is not allowed.`);
|
|
250
|
-
}
|
|
251
|
-
this.skipWhitespace();
|
|
252
|
-
if (this.text[this.index] !== ':') this.fail("':' after object property");
|
|
253
|
-
this.index++;
|
|
254
|
-
this.scanValue();
|
|
255
|
-
this.skipWhitespace();
|
|
256
|
-
const delimiter = this.text[this.index++];
|
|
257
|
-
if (delimiter === '}') return;
|
|
258
|
-
if (delimiter !== ',') this.fail("',' or '}' after object property");
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
private scanArray(): void {
|
|
263
|
-
this.index++;
|
|
264
|
-
this.skipWhitespace();
|
|
265
|
-
if (this.text[this.index] === ']') {
|
|
266
|
-
this.index++;
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
for (;;) {
|
|
270
|
-
this.scanValue();
|
|
271
|
-
this.skipWhitespace();
|
|
272
|
-
const delimiter = this.text[this.index++];
|
|
273
|
-
if (delimiter === ']') return;
|
|
274
|
-
if (delimiter !== ',') this.fail("',' or ']' after array item");
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
private scanString(): string {
|
|
279
|
-
const start = this.index++;
|
|
280
|
-
let sawEscape = false;
|
|
281
|
-
for (;;) {
|
|
282
|
-
if (this.index >= this.text.length) this.fail('unterminated string');
|
|
283
|
-
const character = this.text[this.index++]!;
|
|
284
|
-
if (character === '"') {
|
|
285
|
-
// Without escapes the token content is verbatim; the outer
|
|
286
|
-
// JSON.parse pass still rejects any raw control characters.
|
|
287
|
-
return sawEscape
|
|
288
|
-
? (JSON.parse(this.text.slice(start, this.index)) as string)
|
|
289
|
-
: this.text.slice(start + 1, this.index - 1);
|
|
290
|
-
}
|
|
291
|
-
if (character === '\\') {
|
|
292
|
-
sawEscape = true;
|
|
293
|
-
if (this.index >= this.text.length) this.fail('unterminated escape');
|
|
294
|
-
const escaped = this.text[this.index++]!;
|
|
295
|
-
if (escaped === 'u') this.index += 4;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
private scanLiteral(value: 'true' | 'false' | 'null'): void {
|
|
301
|
-
if (!this.text.startsWith(value, this.index)) this.fail(value);
|
|
302
|
-
this.index += value.length;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
private scanNumber(): void {
|
|
306
|
-
NUMBER_TOKEN_PATTERN.lastIndex = this.index;
|
|
307
|
-
const match = NUMBER_TOKEN_PATTERN.exec(this.text);
|
|
308
|
-
if (match === null) this.fail('JSON value');
|
|
309
|
-
this.index += match[0].length;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
private skipWhitespace(): void {
|
|
313
|
-
for (;;) {
|
|
314
|
-
const code = this.text.charCodeAt(this.index);
|
|
315
|
-
if (code === 0x20 || code === 0x09 || code === 0x0a || code === 0x0d) {
|
|
316
|
-
this.index += 1;
|
|
317
|
-
continue;
|
|
318
|
-
}
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
private fail(expected: string): never {
|
|
324
|
-
throw new SyntaxError(`framework-json-v1 expected ${expected} at offset ${this.index}.`);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
3
|
+
export const FRAMEWORK_JSON_V1_PROFILE = profile.FRAMEWORK_JSON_V1_PROFILE;
|
|
4
|
+
export const stringifyFrameworkJsonV1 = profile.stringifyFrameworkJsonV1;
|
|
5
|
+
export const parseFrameworkJsonV1 = profile.parseFrameworkJsonV1;
|
|
6
|
+
export type { FrameworkJsonParseOptions } from '@zlink-systems/stream-wire/internal/json';
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
readFrameworkPacketJsonContract,
|
|
3
|
+
normalizePacketName
|
|
4
|
+
} from '@zlink-systems/stream-wire/internal/json';
|
|
1
5
|
import { readZLinkDecoratorMetadata } from '../../contracts/Handlers/Attributes';
|
|
2
6
|
import type { ZLinkPacketJsonContract } from '../../contracts/Handlers/JsonContract';
|
|
3
7
|
import { ZLinkConfigurationException } from '../configuration';
|
|
@@ -42,23 +46,7 @@ export function resolveFrameworkPacketJsonContract(
|
|
|
42
46
|
return readFrameworkPacketJsonContract(constructor, explicitPacketName);
|
|
43
47
|
}
|
|
44
48
|
|
|
45
|
-
export
|
|
46
|
-
type: object,
|
|
47
|
-
explicitPacketName?: string
|
|
48
|
-
): ZLinkPacketJsonContract | undefined {
|
|
49
|
-
const expectedPacketName = normalizePacketName(explicitPacketName);
|
|
50
|
-
for (const metadata of readZLinkDecoratorMetadata(type)) {
|
|
51
|
-
if (
|
|
52
|
-
metadata.kind === 'packet' &&
|
|
53
|
-
metadata.jsonContract !== undefined &&
|
|
54
|
-
(expectedPacketName === undefined ||
|
|
55
|
-
normalizePacketName(metadata.packetName) === expectedPacketName)
|
|
56
|
-
) {
|
|
57
|
-
return metadata.jsonContract;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
49
|
+
export { readFrameworkPacketJsonContract } from '@zlink-systems/stream-wire/internal/json';
|
|
62
50
|
|
|
63
51
|
function tryDecoratorPacketName(payload: unknown): string | undefined {
|
|
64
52
|
if (typeof payload !== 'object' || payload === null) {
|
|
@@ -86,11 +74,3 @@ function tryConstructorPacketName(payload: unknown): string | undefined {
|
|
|
86
74
|
}
|
|
87
75
|
return normalizePacketName(name);
|
|
88
76
|
}
|
|
89
|
-
|
|
90
|
-
function normalizePacketName(value: unknown): string | undefined {
|
|
91
|
-
if (typeof value !== 'string') {
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
const trimmed = value.trim();
|
|
95
|
-
return trimmed.length > 0 ? trimmed : undefined;
|
|
96
|
-
}
|
|
@@ -17,10 +17,7 @@ import {
|
|
|
17
17
|
materializeZLinkMessageValue,
|
|
18
18
|
readZLinkMessageDeclaredType
|
|
19
19
|
} from '../../contracts/Common/ZLinkMessage';
|
|
20
|
-
import {
|
|
21
|
-
adoptEncodedPayload,
|
|
22
|
-
borrowEncodedPayload
|
|
23
|
-
} from '../../contracts/Common/encoded-payload-storage';
|
|
20
|
+
import { borrowEncodedPayload } from '../../contracts/Common/encoded-payload-storage';
|
|
24
21
|
import { ZLinkConfigurationException } from '../configuration';
|
|
25
22
|
import { parseFrameworkJsonV1, stringifyFrameworkJsonV1 } from './framework-json-v1';
|
|
26
23
|
import type { ZLinkJsonSchema } from '../../contracts/Handlers/JsonContract';
|
|
@@ -434,13 +431,13 @@ function toRuntimeMessage(payload: ZLinkEncodedPayload): Message {
|
|
|
434
431
|
: RuntimeMessage.fromOwned(owned);
|
|
435
432
|
}
|
|
436
433
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
return
|
|
434
|
+
/**
|
|
435
|
+
* Wraps received bytes for a serializer without copying them. Binding receive
|
|
436
|
+
* Buffers keep their storage after the message closes and nothing writes to
|
|
437
|
+
* them, so the payload may adopt them; the public from() and data() still copy.
|
|
438
|
+
*/
|
|
439
|
+
export function encodedPayloadFromOwned(bytes: Uint8Array): ZLinkEncodedPayload {
|
|
440
|
+
return ZLinkEncodedPayload.fromOwned(bytes);
|
|
444
441
|
}
|
|
445
442
|
|
|
446
443
|
function rememberContentType(message: Message, contentType: string): Message {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
|
|
2
|
+
|
|
3
|
+
const completedAdmission = Promise.resolve();
|
|
4
|
+
const ignoreAdmissionFailure = (): void => {};
|
|
5
|
+
|
|
6
|
+
class RequestAdmission {
|
|
7
|
+
private admitted: Promise<void> | undefined;
|
|
8
|
+
private resolveAdmission: (() => void) | undefined;
|
|
9
|
+
private rejectAdmission: ((error: unknown) => void) | undefined;
|
|
10
|
+
confirm(): void {
|
|
11
|
+
this.admitted ??= completedAdmission;
|
|
12
|
+
this.resolveAdmission?.();
|
|
13
|
+
}
|
|
14
|
+
fail(error: unknown): void {
|
|
15
|
+
if (this.admitted === undefined) {
|
|
16
|
+
this.admitted = Promise.reject(error);
|
|
17
|
+
// Existing callers may observe only the reply Promise. Observing the
|
|
18
|
+
// rejection here leaves the public admission Promise rejected.
|
|
19
|
+
void this.admitted.catch(ignoreAdmissionFailure);
|
|
20
|
+
} else {
|
|
21
|
+
this.rejectAdmission?.(error);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
observe(): Promise<void> {
|
|
25
|
+
if (this.admitted === undefined) {
|
|
26
|
+
this.admitted = new Promise<void>((resolve, reject) => {
|
|
27
|
+
this.resolveAdmission = resolve;
|
|
28
|
+
this.rejectAdmission = reject;
|
|
29
|
+
});
|
|
30
|
+
void this.admitted.catch(ignoreAdmissionFailure);
|
|
31
|
+
}
|
|
32
|
+
return this.admitted;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function createZLinkRequest<TReply>(
|
|
37
|
+
start: (onAdmitted: () => void) => Promise<TReply>,
|
|
38
|
+
deliverReply?: (reply: Promise<TReply>) => Promise<TReply>
|
|
39
|
+
): ZLinkRequest<TReply> {
|
|
40
|
+
const admission = new RequestAdmission();
|
|
41
|
+
let pending: Promise<TReply>;
|
|
42
|
+
try {
|
|
43
|
+
pending = start(() => admission.confirm());
|
|
44
|
+
} catch (error) {
|
|
45
|
+
pending = Promise.reject(error);
|
|
46
|
+
}
|
|
47
|
+
const observed = pending.then(
|
|
48
|
+
(value) => {
|
|
49
|
+
// A successful reply proves admission even without an observation callback.
|
|
50
|
+
admission.confirm();
|
|
51
|
+
return value;
|
|
52
|
+
},
|
|
53
|
+
(error: unknown) => {
|
|
54
|
+
admission.fail(error);
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
const reply = deliverReply?.(observed) ?? observed;
|
|
59
|
+
return Object.defineProperty(reply, 'admitted', {
|
|
60
|
+
get: () => admission.observe()
|
|
61
|
+
}) as ZLinkRequest<TReply>;
|
|
62
|
+
}
|
|
@@ -18,6 +18,10 @@ export interface ZLinkSubmitResult {
|
|
|
18
18
|
readonly status: ZLinkSubmitStatus;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
export const submittedResult: ZLinkSubmitResult = Object.freeze({
|
|
22
|
+
status: ZLinkSubmitStatus.Submitted
|
|
23
|
+
});
|
|
24
|
+
|
|
21
25
|
/** Projects typed submit failure; capacity refusal has no admission wait token. */
|
|
22
26
|
export function submitToRequestResult(result: number, phase: 'submit' | 'completion'): number {
|
|
23
27
|
switch (result) {
|
|
@@ -54,7 +58,7 @@ export function classifySubmitResult(
|
|
|
54
58
|
const terminal = submitToRequestResult(result, phase);
|
|
55
59
|
switch (terminal) {
|
|
56
60
|
case RequestResult.Ok:
|
|
57
|
-
return
|
|
61
|
+
return submittedResult;
|
|
58
62
|
case RequestResult.TimedOut:
|
|
59
63
|
return { status: ZLinkSubmitStatus.TimedOut };
|
|
60
64
|
case RequestResult.NotFound:
|