@zlink-systems/framework 0.30.3 → 0.32.0
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/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Actors/ZLinkActor.d.ts +2 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.d.ts +6 -0
- package/dist/contracts/Actors/ZLinkSessionBindingIdentity.js +2 -0
- package/dist/contracts/Actors/index.d.ts +1 -0
- package/dist/contracts/Actors/index.js +1 -0
- package/dist/contracts/Common/CoreTypes.d.ts +1 -0
- package/dist/contracts/Common/HandlerMessageType.d.ts +8 -0
- package/dist/contracts/Common/HandlerMessageType.js +41 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +1 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.js +12 -20
- package/dist/contracts/Common/ZLinkMessage.js +11 -7
- package/dist/contracts/Common/encoded-payload-storage.d.ts +0 -2
- package/dist/contracts/Common/encoded-payload-storage.js +4 -16
- package/dist/contracts/Common/index.d.ts +1 -1
- package/dist/contracts/Common/payload-slab.d.ts +4 -0
- package/dist/contracts/Common/payload-slab.js +30 -0
- package/dist/contracts/Configuration/RegistrationBuilders.js +15 -9
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +19 -0
- package/dist/contracts/Handlers/Contexts.d.ts +1 -0
- package/dist/contracts/Locations/Authority.d.ts +2 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +23 -1
- package/dist/nest-integration.d.ts +1 -0
- package/dist/nest-integration.js +3 -1
- package/dist/runtime/actors/actor-client.d.ts +6 -2
- package/dist/runtime/actors/actor-client.js +120 -82
- package/dist/runtime/actors/actor-context.js +16 -5
- package/dist/runtime/actors/actor-execution-context.js +2 -2
- package/dist/runtime/actors/actor-handoff.d.ts +12 -1
- package/dist/runtime/actors/actor-handoff.js +79 -34
- package/dist/runtime/actors/actor-join-deferred-scope.js +6 -6
- package/dist/runtime/actors/actor-local-native-join.d.ts +2 -2
- package/dist/runtime/actors/actor-local-native-join.js +19 -17
- package/dist/runtime/actors/actor-mailbox.d.ts +1 -1
- package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
- package/dist/runtime/actors/actor-remote-joiner.js +4 -4
- package/dist/runtime/actors/actor-routed-join-transport.d.ts +9 -3
- package/dist/runtime/actors/actor-routed-json-request.d.ts +3 -0
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -2
- package/dist/runtime/actors/actor-runtime-state.d.ts +1 -1
- package/dist/runtime/actors/spot-actor-dispatch.d.ts +9 -5
- package/dist/runtime/actors/spot-actor-dispatch.js +60 -38
- package/dist/runtime/admission.d.ts +6 -4
- package/dist/runtime/admission.js +21 -10
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +1 -0
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +3 -0
- package/dist/runtime/backend/contracts/index.d.ts +26 -10
- package/dist/runtime/backend/mesh-completion-table.d.ts +7 -1
- package/dist/runtime/backend/mesh-completion-table.js +84 -20
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +19 -6
- package/dist/runtime/backend/mesh-dispatch-pump.js +246 -147
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -2
- package/dist/runtime/backend/node/node-backend-adapter-support.js +27 -19
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +5 -2
- package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +70 -13
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
- package/dist/runtime/backend/node/node-event-loop-poller.js +4 -3
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +5 -1
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +7 -2
- package/dist/runtime/backend/node/node-raw-binding-port.js +99 -63
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +34 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +210 -106
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +20 -6
- package/dist/runtime/backend/raw-binding-port.d.ts +6 -3
- package/dist/runtime/channels/channel-clients.js +3 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +11 -7
- package/dist/runtime/channels/channel-dispatch-pipeline.js +40 -22
- package/dist/runtime/channels/channel-dispatch-services.d.ts +3 -1
- package/dist/runtime/channels/channel-dispatch-services.js +7 -6
- package/dist/runtime/channels/channel-dispatchers.d.ts +13 -6
- package/dist/runtime/channels/channel-dispatchers.js +57 -36
- package/dist/runtime/channels/channel-envelope.d.ts +2 -2
- package/dist/runtime/channels/channel-envelope.js +609 -83
- package/dist/runtime/channels/channel-multipart.d.ts +1 -0
- package/dist/runtime/channels/channel-multipart.js +10 -6
- package/dist/runtime/channels/channel-outbound-operations.d.ts +6 -9
- package/dist/runtime/channels/channel-outbound-operations.js +107 -105
- package/dist/runtime/channels/channel-receive-loops.d.ts +9 -7
- package/dist/runtime/channels/channel-receive-loops.js +126 -90
- package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +23 -6
- package/dist/runtime/channels/channel-runtime-lifecycle.js +47 -38
- package/dist/runtime/channels/channel-runtime-manager.d.ts +13 -6
- package/dist/runtime/channels/channel-runtime-manager.js +32 -14
- package/dist/runtime/channels/channel-socket-registry.d.ts +28 -4
- package/dist/runtime/channels/channel-socket-registry.js +9 -1
- package/dist/runtime/channels/channel-transports.d.ts +23 -16
- package/dist/runtime/channels/channel-transports.js +139 -119
- package/dist/runtime/channels/dispatch-error-reporter.d.ts +4 -4
- package/dist/runtime/channels/dispatch-error-reporter.js +5 -5
- package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
- package/dist/runtime/channels/local-spot-route-transport.d.ts +5 -2
- package/dist/runtime/channels/local-spot-route-transport.js +15 -18
- package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +6 -3
- package/dist/runtime/channels/router-socket-spot-route-transport.js +33 -19
- package/dist/runtime/channels/source-spot-router.d.ts +6 -3
- package/dist/runtime/channels/source-spot-router.js +34 -23
- package/dist/runtime/channels/spot-node-route-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-node-route-transport.js +23 -17
- package/dist/runtime/channels/spot-route-bridge-transport.d.ts +6 -3
- package/dist/runtime/channels/spot-route-bridge-transport.js +38 -24
- package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +8 -4
- package/dist/runtime/channels/spot-route-dispatch-strategy.js +36 -23
- package/dist/runtime/diagnostics/dispatch-error-details.js +9 -3
- package/dist/runtime/diagnostics/message-flow-bootstrap.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-bootstrap.js +8 -0
- package/dist/runtime/diagnostics/message-flow-delivery.d.ts +47 -0
- package/dist/runtime/diagnostics/message-flow-delivery.js +149 -0
- package/dist/runtime/diagnostics/message-flow-record.d.ts +50 -0
- package/dist/runtime/diagnostics/message-flow-record.js +228 -0
- package/dist/runtime/diagnostics/message-flow-worker.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow-worker.js +118 -0
- package/dist/runtime/diagnostics/message-flow.d.ts +7 -19
- package/dist/runtime/diagnostics/message-flow.js +42 -290
- package/dist/runtime/diagnostics/runtime-metrics.d.ts +4 -3
- package/dist/runtime/diagnostics/runtime-metrics.js +8 -4
- package/dist/runtime/execution/index.d.ts +1 -0
- package/dist/runtime/execution/index.js +6 -3
- package/dist/runtime/execution/serial-execution-queue.d.ts +26 -13
- package/dist/runtime/execution/serial-execution-queue.js +75 -71
- package/dist/runtime/foundation/durable-service-request.d.ts +12 -3
- package/dist/runtime/foundation/durable-service-request.js +158 -73
- package/dist/runtime/foundation/operation-registry.d.ts +33 -3
- package/dist/runtime/foundation/operation-registry.js +272 -33
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +62 -23
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +373 -194
- package/dist/runtime/foundation/request-runtime.d.ts +17 -0
- package/dist/runtime/foundation/request-runtime.js +163 -0
- package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
- package/dist/runtime/foundation/service-discovery-registry.js +6 -0
- package/dist/runtime/foundation/service-liveness-registry.d.ts +1 -1
- package/dist/runtime/foundation/service-mailbox.d.ts +4 -2
- package/dist/runtime/foundation/service-mailbox.js +4 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +2 -2
- package/dist/runtime/foundation/service-relocation-object-owner.js +12 -5
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +7 -2
- package/dist/runtime/foundation/service-stateful-registry.d.ts +6 -2
- package/dist/runtime/foundation/service-stateful-registry.js +38 -17
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +91 -26
- package/dist/runtime/foundation/service-stateful-runtime.js +245 -120
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -0
- package/dist/runtime/foundation/service-stateful-wire-codec.js +15 -0
- package/dist/runtime/foundation/service-topology-registry.d.ts +2 -0
- package/dist/runtime/foundation/service-topology-registry.js +13 -3
- package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
- package/dist/runtime/foundation/service-wire-constants.generated.js +12 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +5 -1
- package/dist/runtime/foundation/service-wire-m6a-codec.js +50 -15
- package/dist/runtime/host/actor-packet-relay.d.ts +5 -6
- package/dist/runtime/host/actor-packet-relay.js +58 -57
- package/dist/runtime/host/actor-placement-coordinator.d.ts +1 -1
- package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/actor-runtime-options-factory.js +3 -2
- package/dist/runtime/host/actor-transfer-runtime.d.ts +3 -3
- package/dist/runtime/host/application-job-queue.d.ts +7 -5
- package/dist/runtime/host/application-job-queue.js +33 -21
- package/dist/runtime/host/bound-session-relay.js +0 -1
- package/dist/runtime/host/channel-runtime-options-factory.d.ts +2 -0
- package/dist/runtime/host/channel-runtime-options-factory.js +1 -0
- package/dist/runtime/host/entry-actor-runtime.d.ts +5 -2
- package/dist/runtime/host/entry-actor-runtime.js +2 -2
- package/dist/runtime/host/index.d.ts +106 -37
- package/dist/runtime/host/index.js +303 -151
- package/dist/runtime/host/location-runtime-owner.d.ts +2 -2
- package/dist/runtime/host/location-runtime-owner.js +1 -1
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +195 -45
- package/dist/runtime/host/service-relocation-host-runtime.js +257 -144
- package/dist/runtime/host/spot-address-transport.d.ts +3 -0
- package/dist/runtime/host/spot-address-transport.js +73 -76
- package/dist/runtime/host/spot-runtime-options-factory.js +2 -0
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -1
- package/dist/runtime/host/user-spot-creation-coordinator.js +49 -21
- package/dist/runtime/internal-observation.d.ts +1 -0
- package/dist/runtime/internal-observation.js +5 -0
- package/dist/runtime/locations/actor-location-claims.d.ts +1 -1
- package/dist/runtime/locations/actor-location-claims.js +15 -6
- package/dist/runtime/locations/auto-connect-loop.d.ts +0 -1
- package/dist/runtime/locations/auto-connect-loop.js +25 -19
- package/dist/runtime/locations/auto-connect-planner.js +2 -5
- package/dist/runtime/locations/auto-connect-reconciler.d.ts +1 -0
- package/dist/runtime/locations/auto-connect-reconciler.js +35 -23
- package/dist/runtime/locations/in-memory-authority-store.d.ts +1 -0
- package/dist/runtime/locations/in-memory-authority-store.js +15 -5
- package/dist/runtime/locations/in-memory-location-store.d.ts +0 -2
- package/dist/runtime/locations/in-memory-location-store.js +1 -38
- package/dist/runtime/locations/lifecycle.d.ts +1 -1
- package/dist/runtime/locations/lifecycle.js +2 -2
- package/dist/runtime/locations/location-store-repository.d.ts +0 -1
- package/dist/runtime/locations/location-store-repository.js +163 -246
- package/dist/runtime/locations/resolvers.d.ts +8 -1
- package/dist/runtime/locations/resolvers.js +16 -2
- package/dist/runtime/locations/runtime.d.ts +3 -3
- package/dist/runtime/locations/runtime.js +12 -16
- package/dist/runtime/messaging/creation-payload-codec.js +8 -7
- package/dist/runtime/messaging/framework-json-v1.d.ts +1 -1
- package/dist/runtime/messaging/framework-json-v1.js +6 -2
- package/dist/runtime/messaging/payload-codec.js +21 -35
- package/dist/runtime/messaging/request-deadline.d.ts +4 -2
- package/dist/runtime/messaging/request-deadline.js +40 -25
- package/dist/runtime/messaging/request-result.d.ts +14 -1
- package/dist/runtime/messaging/request-result.js +74 -13
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +4 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +17 -7
- package/dist/runtime/spots/index.d.ts +28 -7
- package/dist/runtime/spots/index.js +31 -6
- package/dist/runtime/spots/spot-activation-registry.d.ts +3 -2
- package/dist/runtime/spots/spot-activation-registry.js +13 -8
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -0
- package/dist/runtime/spots/spot-activation-state.js +1 -0
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +9 -4
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +33 -12
- package/dist/runtime/spots/spot-actor-ingress-admission.d.ts +40 -0
- package/dist/runtime/spots/spot-actor-ingress-admission.js +78 -0
- package/dist/runtime/spots/spot-actor-membership.js +3 -3
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +16 -43
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +56 -113
- package/dist/runtime/spots/spot-actor-packet-drain.d.ts +1 -0
- package/dist/runtime/spots/spot-actor-packet-drain.js +12 -5
- package/dist/runtime/spots/spot-entry-activation.d.ts +4 -3
- package/dist/runtime/spots/spot-entry-activation.js +7 -12
- package/dist/runtime/spots/spot-handler-registry.d.ts +5 -1
- package/dist/runtime/spots/spot-handler-registry.js +31 -15
- package/dist/runtime/spots/spot-manager-public.js +3 -2
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +11 -6
- package/dist/runtime/spots/spot-node-runtime-manager.js +6 -1
- package/dist/runtime/spots/spot-outbound.d.ts +8 -2
- package/dist/runtime/spots/spot-outbound.js +5 -5
- package/dist/runtime/spots/spot-route-packet-dispatch.js +13 -8
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +3 -3
- package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +9 -5
- package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -2
- package/dist/runtime/spots/spot-serial-executor.d.ts +2 -1
- package/dist/runtime/spots/spot-serial-turn-executor.js +20 -26
- package/dist/runtime/spots/spot-subscription-dispatch.js +5 -2
- package/dist/runtime/spots/spot-timer.d.ts +1 -1
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +11 -3
- package/dist/runtime/streams/actor-session-binding-registry.js +28 -0
- package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -2
- package/dist/runtime/streams/bound-actor-relay-sender.js +3 -4
- package/dist/runtime/streams/bound-session-service.js +6 -7
- package/dist/runtime/streams/index.d.ts +3 -3
- package/dist/runtime/streams/index.js +22 -2
- package/dist/runtime/streams/managed-stream.js +2 -1
- package/dist/runtime/streams/session-calls.d.ts +1 -1
- package/dist/runtime/streams/session-calls.js +3 -9
- package/dist/runtime/streams/session-context.d.ts +2 -2
- package/dist/runtime/streams/session-context.js +2 -2
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -0
- package/dist/runtime/streams/stream-session-runtime.js +64 -33
- package/package.json +3 -3
- package/src/contracts/Actors/ZLinkActor.ts +6 -0
- package/src/contracts/Actors/ZLinkSessionBindingIdentity.ts +7 -0
- package/src/contracts/Actors/index.ts +1 -0
- package/src/contracts/Common/CoreTypes.ts +1 -0
- package/src/contracts/Common/HandlerMessageType.ts +50 -0
- package/src/contracts/Common/ZLinkEncodedPayload.ts +13 -25
- package/src/contracts/Common/ZLinkMessage.ts +11 -7
- package/src/contracts/Common/encoded-payload-storage.ts +4 -16
- package/src/contracts/Common/index.ts +1 -1
- package/src/contracts/Common/payload-slab.ts +29 -0
- package/src/contracts/Configuration/RegistrationBuilders.ts +29 -15
- package/src/contracts/Configuration/RegistrationTypes.ts +19 -0
- package/src/contracts/Handlers/Contexts.ts +1 -0
- package/src/contracts/Locations/Authority.ts +7 -1
- package/src/internal.ts +17 -0
- package/src/nest-integration.ts +1 -0
- package/src/runtime/actors/actor-client.ts +257 -163
- package/src/runtime/actors/actor-context.ts +26 -14
- package/src/runtime/actors/actor-execution-context.ts +2 -2
- package/src/runtime/actors/actor-handoff.ts +86 -51
- package/src/runtime/actors/actor-join-deferred-scope.ts +6 -6
- package/src/runtime/actors/actor-local-native-join.ts +38 -17
- package/src/runtime/actors/actor-mailbox.ts +1 -1
- package/src/runtime/actors/actor-remote-joiner.ts +8 -4
- package/src/runtime/actors/actor-routed-join-transport.ts +13 -5
- package/src/runtime/actors/actor-routed-json-request.ts +3 -0
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -2
- package/src/runtime/actors/actor-runtime-state.ts +1 -1
- package/src/runtime/actors/spot-actor-dispatch.ts +70 -68
- package/src/runtime/admission.ts +42 -15
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +4 -0
- package/src/runtime/backend/contracts/index.ts +77 -10
- package/src/runtime/backend/mesh-completion-table.ts +106 -15
- package/src/runtime/backend/mesh-dispatch-pump.ts +294 -146
- package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -32
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +91 -34
- package/src/runtime/backend/node/node-event-loop-poller.ts +14 -5
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +5 -1
- package/src/runtime/backend/node/node-raw-binding-port.ts +180 -69
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +386 -157
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +56 -11
- package/src/runtime/backend/raw-binding-port.ts +13 -5
- package/src/runtime/channels/channel-clients.ts +26 -11
- package/src/runtime/channels/channel-dispatch-pipeline.ts +77 -65
- package/src/runtime/channels/channel-dispatch-services.ts +7 -12
- package/src/runtime/channels/channel-dispatchers.ts +93 -39
- package/src/runtime/channels/channel-envelope.ts +680 -144
- package/src/runtime/channels/channel-multipart.ts +17 -13
- package/src/runtime/channels/channel-outbound-operations.ts +204 -178
- package/src/runtime/channels/channel-receive-loops.ts +160 -107
- package/src/runtime/channels/channel-runtime-lifecycle.ts +64 -59
- package/src/runtime/channels/channel-runtime-manager.ts +74 -27
- package/src/runtime/channels/channel-socket-registry.ts +20 -5
- package/src/runtime/channels/channel-transports.ts +414 -287
- package/src/runtime/channels/dispatch-error-reporter.ts +4 -9
- package/src/runtime/channels/local-spot-route-transport.ts +27 -29
- package/src/runtime/channels/router-socket-spot-route-transport.ts +63 -32
- package/src/runtime/channels/source-spot-router.ts +75 -38
- package/src/runtime/channels/spot-node-route-transport.ts +67 -37
- package/src/runtime/channels/spot-route-bridge-transport.ts +62 -30
- package/src/runtime/channels/spot-route-dispatch-strategy.ts +105 -34
- package/src/runtime/diagnostics/dispatch-error-details.ts +10 -2
- package/src/runtime/diagnostics/message-flow-bootstrap.ts +6 -0
- package/src/runtime/diagnostics/message-flow-delivery.ts +171 -0
- package/src/runtime/diagnostics/message-flow-record.ts +295 -0
- package/src/runtime/diagnostics/message-flow-worker.ts +146 -0
- package/src/runtime/diagnostics/message-flow.ts +49 -362
- package/src/runtime/diagnostics/runtime-metrics.ts +10 -4
- package/src/runtime/execution/index.ts +6 -0
- package/src/runtime/execution/serial-execution-queue.ts +94 -96
- package/src/runtime/foundation/durable-service-request.ts +212 -89
- package/src/runtime/foundation/operation-registry.ts +287 -38
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +617 -292
- package/src/runtime/foundation/request-runtime.ts +227 -0
- package/src/runtime/foundation/service-discovery-registry.ts +7 -0
- package/src/runtime/foundation/service-liveness-registry.ts +1 -1
- package/src/runtime/foundation/service-mailbox.ts +7 -2
- package/src/runtime/foundation/service-relocation-object-owner.ts +21 -6
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -2
- package/src/runtime/foundation/service-stateful-registry.ts +52 -19
- package/src/runtime/foundation/service-stateful-runtime.ts +365 -198
- package/src/runtime/foundation/service-stateful-wire-codec.ts +18 -0
- package/src/runtime/foundation/service-topology-registry.ts +21 -3
- package/src/runtime/foundation/service-wire-constants.generated.ts +10 -0
- package/src/runtime/foundation/service-wire-m6a-codec.ts +69 -17
- package/src/runtime/host/actor-packet-relay.ts +160 -156
- package/src/runtime/host/actor-placement-coordinator.ts +1 -1
- package/src/runtime/host/actor-runtime-options-factory.ts +7 -2
- package/src/runtime/host/actor-transfer-runtime.ts +3 -3
- package/src/runtime/host/application-job-queue.ts +56 -27
- package/src/runtime/host/bound-session-relay.ts +0 -1
- package/src/runtime/host/channel-runtime-options-factory.ts +3 -0
- package/src/runtime/host/entry-actor-runtime.ts +14 -6
- package/src/runtime/host/index.ts +388 -113
- package/src/runtime/host/location-runtime-owner.ts +3 -3
- package/src/runtime/host/service-relocation-host-runtime.ts +380 -252
- package/src/runtime/host/spot-address-transport.ts +110 -95
- package/src/runtime/host/spot-runtime-options-factory.ts +3 -0
- package/src/runtime/host/user-spot-creation-coordinator.ts +69 -22
- package/src/runtime/internal-observation.ts +2 -0
- package/src/runtime/locations/actor-location-claims.ts +42 -16
- package/src/runtime/locations/auto-connect-loop.ts +24 -16
- package/src/runtime/locations/auto-connect-planner.ts +2 -5
- package/src/runtime/locations/auto-connect-reconciler.ts +37 -24
- package/src/runtime/locations/in-memory-authority-store.ts +27 -7
- package/src/runtime/locations/in-memory-location-store.ts +1 -74
- package/src/runtime/locations/lifecycle.ts +4 -2
- package/src/runtime/locations/location-store-repository.ts +228 -308
- package/src/runtime/locations/resolvers.ts +20 -8
- package/src/runtime/locations/runtime.ts +16 -28
- package/src/runtime/messaging/creation-payload-codec.ts +12 -10
- package/src/runtime/messaging/framework-json-v1.ts +10 -1
- package/src/runtime/messaging/payload-codec.ts +50 -75
- package/src/runtime/messaging/request-deadline.ts +47 -39
- package/src/runtime/messaging/request-result.ts +88 -17
- package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
- package/src/runtime/spots/index.ts +57 -10
- package/src/runtime/spots/spot-activation-registry.ts +12 -8
- package/src/runtime/spots/spot-activation-state.ts +2 -0
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +62 -37
- package/src/runtime/spots/spot-actor-ingress-admission.ts +157 -0
- package/src/runtime/spots/spot-actor-membership.ts +8 -5
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +122 -206
- package/src/runtime/spots/spot-actor-packet-drain.ts +21 -6
- package/src/runtime/spots/spot-entry-activation.ts +25 -35
- package/src/runtime/spots/spot-handler-registry.ts +72 -15
- package/src/runtime/spots/spot-manager-public.ts +4 -2
- package/src/runtime/spots/spot-node-runtime-manager.ts +16 -7
- package/src/runtime/spots/spot-outbound.ts +26 -10
- package/src/runtime/spots/spot-route-packet-dispatch.ts +18 -8
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +14 -8
- package/src/runtime/spots/spot-runtime-ports.ts +5 -2
- package/src/runtime/spots/spot-serial-executor.ts +1 -1
- package/src/runtime/spots/spot-serial-turn-executor.ts +25 -40
- package/src/runtime/spots/spot-subscription-dispatch.ts +9 -2
- package/src/runtime/spots/spot-timer.ts +1 -1
- package/src/runtime/streams/actor-session-binding-registry.ts +46 -3
- package/src/runtime/streams/bound-actor-relay-sender.ts +16 -5
- package/src/runtime/streams/bound-session-service.ts +10 -7
- package/src/runtime/streams/index.ts +30 -4
- package/src/runtime/streams/managed-stream.ts +2 -1
- package/src/runtime/streams/session-calls.ts +9 -14
- package/src/runtime/streams/session-context.ts +6 -11
- package/src/runtime/streams/stream-session-runtime.ts +79 -40
- package/dist/runtime/spots/spot-lifecycle-metrics.d.ts +0 -8
- package/dist/runtime/spots/spot-lifecycle-metrics.js +0 -17
- package/src/runtime/spots/spot-lifecycle-metrics.ts +0 -16
|
@@ -99,7 +99,7 @@ class ZLinkLocationRuntime {
|
|
|
99
99
|
get currentOwnerToken() {
|
|
100
100
|
return this.ownerToken;
|
|
101
101
|
}
|
|
102
|
-
/** Location runtime §5: a
|
|
102
|
+
/** Location runtime §5: a descriptor publication ends within the renew timeout. */
|
|
103
103
|
async writeDescriptor(action, signal) {
|
|
104
104
|
try {
|
|
105
105
|
return await withTimeout(action, this.options.ownerLeaseRenewTimeoutMs, signal);
|
|
@@ -226,7 +226,7 @@ class ZLinkLocationRuntime {
|
|
|
226
226
|
async cleanupOwner(signal) {
|
|
227
227
|
const pending = this.heartbeatRenewal;
|
|
228
228
|
try {
|
|
229
|
-
await
|
|
229
|
+
await (pending ?? Promise.resolve());
|
|
230
230
|
}
|
|
231
231
|
catch (error) {
|
|
232
232
|
if (!(0, abort_1.isAbortError)(error))
|
|
@@ -240,18 +240,14 @@ class ZLinkLocationRuntime {
|
|
|
240
240
|
return;
|
|
241
241
|
}
|
|
242
242
|
try {
|
|
243
|
-
const owner = this.ownerToken ??
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if (currentLease.kind === 'found') {
|
|
252
|
-
await this.stores.ownerLeaseStore.releaseOwnerLease(currentLease.token, cleanupSignal);
|
|
253
|
-
}
|
|
254
|
-
}, undefined, signal);
|
|
243
|
+
const owner = this.ownerToken ?? this.lastOwnerToken;
|
|
244
|
+
signal?.throwIfAborted();
|
|
245
|
+
if (owner !== undefined) {
|
|
246
|
+
await this.stores.locationStore.removeAllByOwner(owner, signal);
|
|
247
|
+
signal?.throwIfAborted();
|
|
248
|
+
await this.stores.ownerLeaseStore.releaseOwnerLease(owner, signal);
|
|
249
|
+
signal?.throwIfAborted();
|
|
250
|
+
}
|
|
255
251
|
this.ownerToken = undefined;
|
|
256
252
|
this.lastOwnerToken = undefined;
|
|
257
253
|
this.ownerCleanupComplete = true;
|
|
@@ -334,7 +330,7 @@ class ZLinkLocationRuntime {
|
|
|
334
330
|
}
|
|
335
331
|
try {
|
|
336
332
|
if (!this.started) {
|
|
337
|
-
|
|
333
|
+
this.lastOwnerToken = claim.token;
|
|
338
334
|
return false;
|
|
339
335
|
}
|
|
340
336
|
this.lastOwnerToken = this.ownerToken;
|
|
@@ -500,7 +496,7 @@ class ZLinkLocationRuntime {
|
|
|
500
496
|
// row was stored under.
|
|
501
497
|
const normalizedEndpoint = (0, EndpointNotation_1.normalizeEndpoint)(peer.endpoint);
|
|
502
498
|
const stamped = { ...peer, endpoint: normalizedEndpoint, ownerId: this.ownerId };
|
|
503
|
-
const result = await this.guardWrite(() => this.stores.peerStore.updatePeer(stamped, intent, signal));
|
|
499
|
+
const result = await this.guardWrite(() => this.writeDescriptor((writeSignal) => this.stores.peerStore.updatePeer(stamped, intent, writeSignal), signal));
|
|
504
500
|
const key = {
|
|
505
501
|
autoConnectType: peer.autoConnectType,
|
|
506
502
|
meshName: peer.meshName,
|
|
@@ -8,25 +8,26 @@ const service_wire_m6a_codec_1 = require("../foundation/service-wire-m6a-codec")
|
|
|
8
8
|
const payload_codec_1 = require("./payload-codec");
|
|
9
9
|
const CREATION_PACKET_NAME = 'ZLinkFrameworkCreationRequest';
|
|
10
10
|
function encodeFrameworkCreationPayload(payload, registry) {
|
|
11
|
-
const
|
|
11
|
+
const message = (0, payload_codec_1.encodeFrameworkPayloadMessage)(payload ?? null, registry);
|
|
12
12
|
try {
|
|
13
|
-
return (0, service_wire_m6a_codec_1.
|
|
13
|
+
return (0, service_wire_m6a_codec_1.encodeOwnedApplicationPayload)({
|
|
14
14
|
packetName: CREATION_PACKET_NAME,
|
|
15
|
-
contentType:
|
|
16
|
-
payload:
|
|
15
|
+
contentType: (0, payload_codec_1.frameworkPayloadContentType)(message),
|
|
16
|
+
payload: message.data()
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
finally {
|
|
20
|
-
|
|
20
|
+
message.close();
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
function decodeFrameworkCreationPayload(payload, registry) {
|
|
24
24
|
try {
|
|
25
|
-
const application = (0, service_wire_m6a_codec_1.
|
|
25
|
+
const application = (0, service_wire_m6a_codec_1.decodeApplicationPayloadView)(payload);
|
|
26
26
|
if (application.packetName !== CREATION_PACKET_NAME) {
|
|
27
27
|
throw new RangeError('Creation payload has an unexpected packet name.');
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
// Creation frames use owned storage and stay alive through synchronous decode.
|
|
30
|
+
const message = runtime_message_1.ZLinkBufferMessage.fromOwned(application.payload);
|
|
30
31
|
try {
|
|
31
32
|
return (0, payload_codec_1.decodeFrameworkPayloadMessage)(message, registry, undefined, application.contentType);
|
|
32
33
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as profile from '@zlink-systems/stream-wire/internal/json';
|
|
2
2
|
export declare const FRAMEWORK_JSON_V1_PROFILE = "framework-json-v1";
|
|
3
3
|
export declare const stringifyFrameworkJsonV1: typeof profile.stringifyFrameworkJsonV1;
|
|
4
|
-
export declare
|
|
4
|
+
export declare function parseFrameworkJsonV1(text: string, options?: profile.FrameworkJsonParseOptions, schema?: Parameters<typeof profile.parseFrameworkJsonV1>[2], reviver?: Parameters<typeof profile.parseFrameworkJsonV1>[3]): unknown;
|
|
5
5
|
export type { FrameworkJsonParseOptions } from '@zlink-systems/stream-wire/internal/json';
|
|
@@ -33,8 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.stringifyFrameworkJsonV1 = exports.FRAMEWORK_JSON_V1_PROFILE = void 0;
|
|
37
|
+
exports.parseFrameworkJsonV1 = parseFrameworkJsonV1;
|
|
37
38
|
const profile = __importStar(require("@zlink-systems/stream-wire/internal/json"));
|
|
38
39
|
exports.FRAMEWORK_JSON_V1_PROFILE = profile.FRAMEWORK_JSON_V1_PROFILE;
|
|
39
40
|
exports.stringifyFrameworkJsonV1 = profile.stringifyFrameworkJsonV1;
|
|
40
|
-
|
|
41
|
+
const DEFAULT_PARSE_OPTIONS = Object.freeze({});
|
|
42
|
+
function parseFrameworkJsonV1(text, options = DEFAULT_PARSE_OPTIONS, schema, reviver) {
|
|
43
|
+
return profile.parseFrameworkJsonV1(text, options, schema, reviver);
|
|
44
|
+
}
|
|
@@ -34,16 +34,10 @@ const defaultReceiveCodecs = new Map([[JSON_CONTENT_TYPE, frameworkJsonReceiveCo
|
|
|
34
34
|
const serializerSelectionPlans = new WeakMap();
|
|
35
35
|
const encodedContentTypes = new WeakMap();
|
|
36
36
|
function encodeFrameworkPayloadMessage(payload, registry, packetName, contractPart = 'payload') {
|
|
37
|
-
return encodeFrameworkPayload(payload, registry, packetName, contractPart).message;
|
|
38
|
-
}
|
|
39
|
-
function encodeFrameworkPayload(payload, registry, packetName, contractPart = 'payload') {
|
|
40
37
|
let declaredType;
|
|
41
38
|
if ((0, contracts_1.isZLinkMessage)(payload)) {
|
|
42
39
|
if (payload.isEncoded()) {
|
|
43
|
-
return
|
|
44
|
-
message: rememberContentType(toRuntimeMessage(payload.toEncodedPayload()), stream_wire_1.ZlinkStreamContentType.Raw),
|
|
45
|
-
contentType: stream_wire_1.ZlinkStreamContentType.Raw
|
|
46
|
-
};
|
|
40
|
+
return rememberContentType(toRuntimeMessage(payload.toEncodedPayload()), stream_wire_1.ZlinkStreamContentType.Raw);
|
|
47
41
|
}
|
|
48
42
|
declaredType = (0, ZLinkMessage_1.readZLinkMessageDeclaredType)(payload);
|
|
49
43
|
payload = payload.decode();
|
|
@@ -56,16 +50,14 @@ function encodeFrameworkPayload(payload, registry, packetName, contractPart = 'p
|
|
|
56
50
|
}
|
|
57
51
|
const selected = selectSerializerWithContentType(payload, registry, declaredType);
|
|
58
52
|
if (selected !== undefined) {
|
|
59
|
-
return
|
|
60
|
-
message: rememberContentType(toRuntimeMessage(selected.serializer.serialize(payload)), selected.contentType),
|
|
61
|
-
contentType: selected.contentType
|
|
62
|
-
};
|
|
53
|
+
return rememberContentType(toRuntimeMessage(selected.serializer.serialize(payload)), selected.contentType);
|
|
63
54
|
}
|
|
64
|
-
return
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
return rememberContentType(runtime_message_1.ZLinkBufferMessage.fromOwned(Buffer.from((0, framework_json_v1_1.stringifyFrameworkJsonV1)(payload, ((0, packet_name_1.resolveFrameworkPacketJsonContract)(payload, packetName) ??
|
|
56
|
+
(packetName === undefined ? undefined : (0, Attributes_1.readZLinkPacketJsonContract)(packetName)))?.[contractPart]))), JSON_CONTENT_TYPE);
|
|
57
|
+
}
|
|
58
|
+
function encodeFrameworkPayload(payload, registry, packetName, contractPart = 'payload') {
|
|
59
|
+
const message = encodeFrameworkPayloadMessage(payload, registry, packetName, contractPart);
|
|
60
|
+
return { message, contentType: frameworkPayloadContentType(message) };
|
|
69
61
|
}
|
|
70
62
|
function frameworkPayloadContentType(message) {
|
|
71
63
|
return encodedContentTypes.get(message) ?? JSON_CONTENT_TYPE;
|
|
@@ -85,11 +77,15 @@ function decodeFrameworkPayload(message, registry, type, contentType, packetName
|
|
|
85
77
|
}
|
|
86
78
|
if (message.isEmpty())
|
|
87
79
|
return undefined;
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
80
|
+
const schema = schemaForDecode(type, packetName, contractPart);
|
|
81
|
+
let value;
|
|
82
|
+
try {
|
|
83
|
+
value = (0, framework_json_v1_1.parseFrameworkJsonV1)(message.getString('utf8'), undefined, schema);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, 'PayloadDecodeFailed: framework payload is not valid JSON.', false, error);
|
|
91
87
|
}
|
|
92
|
-
|
|
88
|
+
return (0, ZLinkMessage_1.materializeZLinkMessageValue)(value, type);
|
|
93
89
|
}
|
|
94
90
|
function wrapFrameworkPayloadMessage(message, registry, contentType = JSON_CONTENT_TYPE, packetName, contractPart = 'payload') {
|
|
95
91
|
const payload = encodedPayloadFromOwned(message.data());
|
|
@@ -106,7 +102,7 @@ function decodeFrameworkEncodedPayload(payload, registry, type, contentType, pac
|
|
|
106
102
|
return undefined;
|
|
107
103
|
const text = payload.getString('utf8');
|
|
108
104
|
try {
|
|
109
|
-
return (0, ZLinkMessage_1.materializeZLinkMessageValue)((0, framework_json_v1_1.parseFrameworkJsonV1)(text,
|
|
105
|
+
return (0, ZLinkMessage_1.materializeZLinkMessageValue)((0, framework_json_v1_1.parseFrameworkJsonV1)(text, undefined, schemaForDecode(type, packetName, contractPart)), type);
|
|
110
106
|
}
|
|
111
107
|
catch (error) {
|
|
112
108
|
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, 'PayloadDecodeFailed: framework payload is not valid JSON.', false, error);
|
|
@@ -143,11 +139,9 @@ function serializerSelectionPlanOf(registry) {
|
|
|
143
139
|
if (serializers === undefined || serializers.size === 0) {
|
|
144
140
|
return undefined;
|
|
145
141
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return cached;
|
|
150
|
-
}
|
|
142
|
+
return serializerSelectionPlans.get(serializers) ?? prepareSerializerSelectionPlan(serializers);
|
|
143
|
+
}
|
|
144
|
+
function prepareSerializerSelectionPlan(serializers) {
|
|
151
145
|
const entries = [];
|
|
152
146
|
const registeredSelections = (0, CodecSerializerSelection_1.codecSerializerSelectionsOf)(serializers);
|
|
153
147
|
for (const [contentType, serializer] of serializers) {
|
|
@@ -181,7 +175,7 @@ function serializerSelectionPlanOf(registry) {
|
|
|
181
175
|
return selected;
|
|
182
176
|
}
|
|
183
177
|
};
|
|
184
|
-
serializerSelectionPlans.set(
|
|
178
|
+
serializerSelectionPlans.set(serializers, plan);
|
|
185
179
|
return plan;
|
|
186
180
|
}
|
|
187
181
|
function outboundBusinessType(value) {
|
|
@@ -226,14 +220,6 @@ function selectDefaultSerializerFromEntries(serializers) {
|
|
|
226
220
|
function unsupportedContentType(contentType) {
|
|
227
221
|
return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.PayloadDecodeFailed, `PayloadDecodeFailed: unsupported framework content type '${contentType}'.`);
|
|
228
222
|
}
|
|
229
|
-
function parseJsonPayload(message, schema) {
|
|
230
|
-
try {
|
|
231
|
-
return { valid: true, value: (0, framework_json_v1_1.parseFrameworkJsonV1)(message.getString('utf8'), {}, schema) };
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
return { valid: false, error };
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
223
|
function serializerMapOf(registry) {
|
|
238
224
|
if (registry === undefined) {
|
|
239
225
|
return undefined;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type PendingOperation } from '../foundation/operation-registry';
|
|
1
2
|
export declare function remainingRequestTimeout(operation: string, deadlineMs: number | undefined): number | undefined;
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
export declare function requestTerminalError(operation: string, error: unknown): unknown;
|
|
4
|
+
/** Observes a stage without registering or completing the logical request. */
|
|
5
|
+
export declare function waitRequestReply<T>(stage: Promise<T>, operation: string, pending: PendingOperation<unknown>, endWait?: () => void, discardLateReply?: (reply: T) => void): Promise<T>;
|
|
@@ -1,39 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.remainingRequestTimeout = remainingRequestTimeout;
|
|
4
|
+
exports.requestTerminalError = requestTerminalError;
|
|
4
5
|
exports.waitRequestReply = waitRequestReply;
|
|
6
|
+
const runtime_values_1 = require("../backend/runtime-values");
|
|
5
7
|
const abort_1 = require("../abort");
|
|
8
|
+
const operation_registry_1 = require("../foundation/operation-registry");
|
|
6
9
|
const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
7
10
|
function remainingRequestTimeout(operation, deadlineMs) {
|
|
8
11
|
if (deadlineMs === undefined)
|
|
9
12
|
return undefined;
|
|
10
13
|
const remaining = deadlineMs - performance.now();
|
|
11
|
-
if (remaining <= 0)
|
|
12
|
-
throw (
|
|
13
|
-
}
|
|
14
|
+
if (remaining <= 0)
|
|
15
|
+
throw requestTimeout(operation);
|
|
14
16
|
return Math.max(1, Math.ceil(remaining));
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
function requestTerminalError(operation, error) {
|
|
19
|
+
return error instanceof operation_registry_1.OperationTimeoutError ||
|
|
20
|
+
((0, runtime_values_1.isZLinkBackendResultError)(error) &&
|
|
21
|
+
error.operation === 'request' &&
|
|
22
|
+
error.result === runtime_values_1.RequestResult.TimedOut)
|
|
23
|
+
? requestTimeout(operation)
|
|
24
|
+
: error;
|
|
25
|
+
}
|
|
26
|
+
function requestTimeout(operation) {
|
|
27
|
+
return (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.DeadlineExceeded, `${operation} exceeded its deadline.`);
|
|
28
|
+
}
|
|
29
|
+
/** Observes a stage without registering or completing the logical request. */
|
|
30
|
+
function waitRequestReply(stage, operation, pending, endWait, discardLateReply) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
const fail = (error) => {
|
|
33
|
+
endWait?.();
|
|
34
|
+
if (discardLateReply !== undefined)
|
|
35
|
+
void stage.then(discardLateReply, () => undefined);
|
|
36
|
+
reject((0, abort_1.isAbortError)(error) ? (0, abort_1.createAbortError)() : requestTerminalError(operation, error));
|
|
37
|
+
};
|
|
38
|
+
pending.setFailureDispatcher(fail);
|
|
39
|
+
void stage.then((value) => {
|
|
40
|
+
pending.clearFailureDispatcher(fail);
|
|
41
|
+
resolve(value);
|
|
42
|
+
}, (error) => {
|
|
43
|
+
const terminal = requestTerminalError(operation, error);
|
|
44
|
+
if (terminal !== error) {
|
|
45
|
+
if (!pending.fail(terminal))
|
|
46
|
+
void pending.promise.then(() => fail(terminal), fail);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
pending.clearFailureDispatcher(fail);
|
|
50
|
+
fail(error);
|
|
51
|
+
}
|
|
24
52
|
});
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
return await (0, abort_1.awaitWithAbort)(waiting, signal);
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
endWait?.();
|
|
32
|
-
if (discardLateReply !== undefined)
|
|
33
|
-
void reply.then(discardLateReply, () => undefined);
|
|
34
|
-
throw error;
|
|
35
|
-
}
|
|
36
|
-
finally {
|
|
37
|
-
clearTimeout(timer);
|
|
38
|
-
}
|
|
53
|
+
});
|
|
39
54
|
}
|
|
@@ -1,2 +1,15 @@
|
|
|
1
|
+
import type { PendingOperation } from '../foundation/operation-registry';
|
|
1
2
|
import type { ZLinkRequest } from '../../contracts/Handlers/Attributes';
|
|
2
|
-
|
|
3
|
+
/** Transport preparation is separate from typed result delivery. */
|
|
4
|
+
export interface ZLinkRequestResult<TReply> {
|
|
5
|
+
readonly operation?: PendingOperation<TReply>;
|
|
6
|
+
readonly pending: Promise<unknown>;
|
|
7
|
+
decode(value: unknown): TReply;
|
|
8
|
+
readonly mapFailure: (error: unknown) => unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare const identityRequestReply: <TReply>(value: TReply) => TReply;
|
|
11
|
+
export declare function prepareZLinkRequestReply<TSource, TReply>(pending: Promise<TSource>, decode: (value: TSource) => TReply, mapFailure?: (error: unknown) => unknown): ZLinkRequestResult<TReply>;
|
|
12
|
+
export declare function rejectZLinkRequestReply<TReply>(error: unknown): ZLinkRequestResult<TReply>;
|
|
13
|
+
/** Yield applies the same transport decoding without public admission. */
|
|
14
|
+
export declare function mapZLinkRequestReply<TReply>(result: ZLinkRequestResult<TReply>): Promise<TReply>;
|
|
15
|
+
export declare function createZLinkRequest<TReply>(start: (onAdmitted: () => void) => ZLinkRequestResult<TReply>, deliverReply?: (reply: Promise<TReply>) => Promise<TReply>): ZLinkRequest<TReply>;
|
|
@@ -1,8 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identityRequestReply = void 0;
|
|
4
|
+
exports.prepareZLinkRequestReply = prepareZLinkRequestReply;
|
|
5
|
+
exports.rejectZLinkRequestReply = rejectZLinkRequestReply;
|
|
6
|
+
exports.mapZLinkRequestReply = mapZLinkRequestReply;
|
|
3
7
|
exports.createZLinkRequest = createZLinkRequest;
|
|
8
|
+
const flow_context_1 = require("../diagnostics/flow-context");
|
|
4
9
|
const completedAdmission = Promise.resolve();
|
|
5
10
|
const ignoreAdmissionFailure = () => { };
|
|
11
|
+
const REQUEST_ADMISSION = Symbol('zlink.requestAdmission');
|
|
12
|
+
// Every public request shares this getter. A getter closure per request gives
|
|
13
|
+
// each reply Promise its own hidden class, and V8 then keeps its properties in
|
|
14
|
+
// a per-request dictionary.
|
|
15
|
+
const ADMITTED_PROPERTY = {
|
|
16
|
+
get() {
|
|
17
|
+
return this[REQUEST_ADMISSION].observe();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const identityRequestReply = (value) => value;
|
|
21
|
+
exports.identityRequestReply = identityRequestReply;
|
|
22
|
+
function prepareZLinkRequestReply(pending, decode, mapFailure = exports.identityRequestReply) {
|
|
23
|
+
const flow = (0, flow_context_1.currentFlowContext)();
|
|
24
|
+
if (flow === undefined)
|
|
25
|
+
return { pending, decode, mapFailure };
|
|
26
|
+
// The completion reaction is registered after the outbound flow scope returns.
|
|
27
|
+
return {
|
|
28
|
+
pending,
|
|
29
|
+
decode: (value) => (0, flow_context_1.runWithFlow)(flow, () => decode(value)),
|
|
30
|
+
mapFailure: (error) => (0, flow_context_1.runWithFlow)(flow, () => mapFailure(error))
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function rejectZLinkRequestReply(error) {
|
|
34
|
+
return prepareZLinkRequestReply(Promise.reject(error), exports.identityRequestReply);
|
|
35
|
+
}
|
|
6
36
|
class RequestAdmission {
|
|
7
37
|
admitted;
|
|
8
38
|
resolveAdmission;
|
|
@@ -33,25 +63,56 @@ class RequestAdmission {
|
|
|
33
63
|
return this.admitted;
|
|
34
64
|
}
|
|
35
65
|
}
|
|
66
|
+
function requestFailure(result, error) {
|
|
67
|
+
try {
|
|
68
|
+
return result.mapFailure(error);
|
|
69
|
+
}
|
|
70
|
+
catch (mappedError) {
|
|
71
|
+
return mappedError;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Yield applies the same transport decoding without public admission. */
|
|
75
|
+
function mapZLinkRequestReply(result) {
|
|
76
|
+
if (result.operation !== undefined &&
|
|
77
|
+
result.operation.mapCaller(result.decode, (error) => requestFailure(result, error)))
|
|
78
|
+
return result.operation.promise;
|
|
79
|
+
return result.pending.then((value) => result.decode(value), (error) => {
|
|
80
|
+
throw requestFailure(result, error);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
36
83
|
function createZLinkRequest(start, deliverReply) {
|
|
37
84
|
const admission = new RequestAdmission();
|
|
85
|
+
const confirm = () => admission.confirm();
|
|
38
86
|
let pending;
|
|
39
87
|
try {
|
|
40
|
-
|
|
88
|
+
const result = start(confirm);
|
|
89
|
+
const onValue = (value) => {
|
|
90
|
+
try {
|
|
91
|
+
const reply = result.decode(value);
|
|
92
|
+
admission.confirm();
|
|
93
|
+
return reply;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
admission.fail(error);
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const onFailure = (error) => {
|
|
101
|
+
const failure = requestFailure(result, error);
|
|
102
|
+
admission.fail(failure);
|
|
103
|
+
throw failure;
|
|
104
|
+
};
|
|
105
|
+
if (result.operation !== undefined && result.operation.mapCaller(onValue, onFailure)) {
|
|
106
|
+
pending = result.operation.promise;
|
|
107
|
+
}
|
|
108
|
+
else
|
|
109
|
+
pending = result.pending.then(onValue, onFailure);
|
|
41
110
|
}
|
|
42
111
|
catch (error) {
|
|
112
|
+
admission.fail(error);
|
|
43
113
|
pending = Promise.reject(error);
|
|
44
114
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return value;
|
|
49
|
-
}, (error) => {
|
|
50
|
-
admission.fail(error);
|
|
51
|
-
throw error;
|
|
52
|
-
});
|
|
53
|
-
const reply = deliverReply?.(observed) ?? observed;
|
|
54
|
-
return Object.defineProperty(reply, 'admitted', {
|
|
55
|
-
get: () => admission.observe()
|
|
56
|
-
});
|
|
115
|
+
const reply = deliverReply?.(pending) ?? pending;
|
|
116
|
+
Object.defineProperty(reply, REQUEST_ADMISSION, { value: admission });
|
|
117
|
+
return Object.defineProperty(reply, 'admitted', ADMITTED_PROPERTY);
|
|
57
118
|
}
|
|
@@ -859,6 +859,10 @@ export type RequestSpecificTail = {
|
|
|
859
859
|
readonly terminalResult: "ok";
|
|
860
860
|
readonly bindingGeneration: NonzeroU64;
|
|
861
861
|
readonly authorityOwnerGeneration: NonzeroU64;
|
|
862
|
+
} | {
|
|
863
|
+
readonly originalOperationKind: "streamBind";
|
|
864
|
+
readonly terminalResult: "rejected";
|
|
865
|
+
readonly rejectionMessage: NonemptyText16;
|
|
862
866
|
} | {
|
|
863
867
|
readonly originalOperationKind: "userSpotCreate";
|
|
864
868
|
readonly terminalResult: "ok";
|
|
@@ -6601,6 +6601,9 @@ function readRequestSpecificTail(reader, context, enclosing, flags) {
|
|
|
6601
6601
|
value["bindingGeneration"] = readNonzeroU64(body, context, value, flags);
|
|
6602
6602
|
value["authorityOwnerGeneration"] = readNonzeroU64(body, context, value, flags);
|
|
6603
6603
|
}
|
|
6604
|
+
else if (same(value["originalOperationKind"], "streamBind") && same(value["terminalResult"], "rejected")) {
|
|
6605
|
+
value["rejectionMessage"] = readNonemptyText16(body, context, value, flags);
|
|
6606
|
+
}
|
|
6604
6607
|
else if (same(value["originalOperationKind"], "userSpotCreate") && same(value["terminalResult"], "ok")) {
|
|
6605
6608
|
value["createResult"] = readUserSpotCreateResult(body, context, value, flags);
|
|
6606
6609
|
value["spot"] = readSpotRef(body, context, value, flags);
|
|
@@ -6622,7 +6625,7 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
|
|
|
6622
6625
|
const value = input;
|
|
6623
6626
|
const body = writer;
|
|
6624
6627
|
if (same(value["originalOperationKind"], "actorLookup") && same(value["terminalResult"], "ok")) {
|
|
6625
|
-
if (value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6628
|
+
if (value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6626
6629
|
fail("request-specific-tail discriminator agreement");
|
|
6627
6630
|
if (value["actor"] === undefined)
|
|
6628
6631
|
fail("actor required");
|
|
@@ -6641,14 +6644,14 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
|
|
|
6641
6644
|
writeNonzeroU64(numeric(value["authorityOwnerGeneration"]), body, context, value, flags);
|
|
6642
6645
|
}
|
|
6643
6646
|
else if (same(value["originalOperationKind"], "actorJoin") && same(value["terminalResult"], "ok")) {
|
|
6644
|
-
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6647
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6645
6648
|
fail("request-specific-tail discriminator agreement");
|
|
6646
6649
|
if (value["join"] === undefined)
|
|
6647
6650
|
fail("join required");
|
|
6648
6651
|
writeActorJoinReplyTail(value["join"], body, context, value, flags);
|
|
6649
6652
|
}
|
|
6650
6653
|
else if (same(value["originalOperationKind"], "streamBind") && same(value["terminalResult"], "ok")) {
|
|
6651
|
-
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["join"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6654
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["join"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6652
6655
|
fail("request-specific-tail discriminator agreement");
|
|
6653
6656
|
if (value["bindingGeneration"] === undefined)
|
|
6654
6657
|
fail("bindingGeneration required");
|
|
@@ -6657,8 +6660,15 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
|
|
|
6657
6660
|
fail("authorityOwnerGeneration required");
|
|
6658
6661
|
writeNonzeroU64(numeric(value["authorityOwnerGeneration"]), body, context, value, flags);
|
|
6659
6662
|
}
|
|
6663
|
+
else if (same(value["originalOperationKind"], "streamBind") && same(value["terminalResult"], "rejected")) {
|
|
6664
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6665
|
+
fail("request-specific-tail discriminator agreement");
|
|
6666
|
+
if (value["rejectionMessage"] === undefined)
|
|
6667
|
+
fail("rejectionMessage required");
|
|
6668
|
+
writeNonemptyText16(value["rejectionMessage"], body, context, value, flags);
|
|
6669
|
+
}
|
|
6660
6670
|
else if (same(value["originalOperationKind"], "userSpotCreate") && same(value["terminalResult"], "ok")) {
|
|
6661
|
-
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6671
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6662
6672
|
fail("request-specific-tail discriminator agreement");
|
|
6663
6673
|
if (value["createResult"] === undefined)
|
|
6664
6674
|
fail("createResult required");
|
|
@@ -6668,21 +6678,21 @@ function writeRequestSpecificTail(input, writer, context, enclosing, flags) {
|
|
|
6668
6678
|
writeSpotRef(value["spot"], body, context, value, flags);
|
|
6669
6679
|
}
|
|
6670
6680
|
else if (same(value["originalOperationKind"], "userSpotClose") && same(value["terminalResult"], "ok")) {
|
|
6671
|
-
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["creation"] !== undefined)
|
|
6681
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["creation"] !== undefined)
|
|
6672
6682
|
fail("request-specific-tail discriminator agreement");
|
|
6673
6683
|
if (value["closed"] === undefined)
|
|
6674
6684
|
fail("closed required");
|
|
6675
6685
|
writeBool8(value["closed"], body, context, value, flags);
|
|
6676
6686
|
}
|
|
6677
6687
|
else if (same(value["originalOperationKind"], "actorCreate") && same(value["terminalResult"], "ok")) {
|
|
6678
|
-
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined)
|
|
6688
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined)
|
|
6679
6689
|
fail("request-specific-tail discriminator agreement");
|
|
6680
6690
|
if (value["creation"] === undefined)
|
|
6681
6691
|
fail("creation required");
|
|
6682
6692
|
writeActorCreateTerminal(value["creation"], body, context, value, flags);
|
|
6683
6693
|
}
|
|
6684
6694
|
else {
|
|
6685
|
-
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6695
|
+
if (value["actor"] !== undefined || value["spotId"] !== undefined || value["spotGeneration"] !== undefined || value["membershipEpoch"] !== undefined || value["authorityOwnerGeneration"] !== undefined || value["join"] !== undefined || value["bindingGeneration"] !== undefined || value["rejectionMessage"] !== undefined || value["createResult"] !== undefined || value["spot"] !== undefined || value["closed"] !== undefined || value["creation"] !== undefined)
|
|
6686
6696
|
fail("request-specific-tail discriminator agreement");
|
|
6687
6697
|
}
|
|
6688
6698
|
}
|