@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
|
@@ -49,7 +49,8 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
|
|
|
49
49
|
);
|
|
50
50
|
const resolvedPacketName = packetName ?? metadata?.packetName;
|
|
51
51
|
if (metadata === undefined || resolvedPacketName === undefined) {
|
|
52
|
-
throw
|
|
52
|
+
throw createInternalFrameworkException(
|
|
53
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
53
54
|
`Actor packet handler '${handlerType.name}' must declare a packet name.`
|
|
54
55
|
);
|
|
55
56
|
}
|
|
@@ -68,7 +69,8 @@ export class ZLinkSpotActorHandlerRegistryRuntime implements ZLinkActorHandlerRe
|
|
|
68
69
|
addPacket(descriptor: ZLinkActorPacketDescriptor): this {
|
|
69
70
|
const key = packetKey(descriptor.kind, descriptor.actorType, descriptor.packetName);
|
|
70
71
|
if (this.packets.has(key)) {
|
|
71
|
-
throw
|
|
72
|
+
throw createInternalFrameworkException(
|
|
73
|
+
ZLinkFrameworkInternalErrorKind.InvalidOperation,
|
|
72
74
|
`Actor packet '${descriptor.packetName}' for '${descriptor.actorType.name}' is already registered.`
|
|
73
75
|
);
|
|
74
76
|
}
|
package/src/runtime/admission.ts
CHANGED
|
@@ -2,8 +2,15 @@ import {
|
|
|
2
2
|
ZLinkFrameworkInternalErrorKind,
|
|
3
3
|
createInternalFrameworkException
|
|
4
4
|
} from './framework-errors-internal';
|
|
5
|
+
import { isPromiseLike } from './abort';
|
|
5
6
|
const BACKING_ARRAY_COMPACTION_MIN_HEAD = 1024;
|
|
6
7
|
|
|
8
|
+
/** Runs host admission inside the domain's request completion boundary. */
|
|
9
|
+
export type ZLinkMeshDispatchAdmission = (
|
|
10
|
+
dispatch: () => void | Promise<void>,
|
|
11
|
+
onRejected?: (error: unknown) => void | Promise<void>
|
|
12
|
+
) => void | Promise<void>;
|
|
13
|
+
|
|
7
14
|
/** 소비한 배열 prefix가 정리 조건에 도달했는지 판정합니다. */
|
|
8
15
|
export function shouldCompactBackingArray(head: number, length: number): boolean {
|
|
9
16
|
return head >= BACKING_ARRAY_COMPACTION_MIN_HEAD && head * 2 >= length;
|
|
@@ -64,21 +71,63 @@ export class ZLinkRuntimeAdmissionGate {
|
|
|
64
71
|
}
|
|
65
72
|
|
|
66
73
|
claim(meshName: string, operation: string): ZLinkApplicationWorkClaim {
|
|
74
|
+
const state = this.enter(meshName, operation);
|
|
75
|
+
let closed = false;
|
|
76
|
+
return {
|
|
77
|
+
close: () => {
|
|
78
|
+
if (closed) return;
|
|
79
|
+
closed = true;
|
|
80
|
+
exitAdmission(state);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Runs one admitted unit of work. Work that completes synchronously leaves
|
|
87
|
+
* admission in the same turn; asynchronous work leaves it from the single
|
|
88
|
+
* continuation on its result.
|
|
89
|
+
*/
|
|
90
|
+
run<T>(
|
|
91
|
+
meshName: string,
|
|
92
|
+
operation: string,
|
|
93
|
+
work: () => T | Promise<T>,
|
|
94
|
+
onRejected?: (error: unknown) => T | Promise<T>
|
|
95
|
+
): T | Promise<T> {
|
|
96
|
+
let state: ZLinkMeshAdmissionState;
|
|
97
|
+
let result: T | Promise<T>;
|
|
98
|
+
try {
|
|
99
|
+
state = this.enter(meshName, operation);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
// The domain owns admission rejection completion, just as it owns handler failure.
|
|
102
|
+
return onRejected === undefined ? Promise.reject(error) : onRejected(error);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
result = work();
|
|
106
|
+
} catch (error) {
|
|
107
|
+
exitAdmission(state);
|
|
108
|
+
return Promise.reject(error);
|
|
109
|
+
}
|
|
110
|
+
if (!isPromiseLike(result)) {
|
|
111
|
+
exitAdmission(state);
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
return Promise.resolve(result).then(
|
|
115
|
+
(value) => {
|
|
116
|
+
exitAdmission(state);
|
|
117
|
+
return value;
|
|
118
|
+
},
|
|
119
|
+
(error: unknown) => {
|
|
120
|
+
exitAdmission(state);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private enter(meshName: string, operation: string): ZLinkMeshAdmissionState {
|
|
67
127
|
const state = this.requireState(meshName);
|
|
68
128
|
if (this.ownerAdmissionOpen() && !state.sealed) {
|
|
69
129
|
state.active += 1;
|
|
70
|
-
|
|
71
|
-
return {
|
|
72
|
-
close: () => {
|
|
73
|
-
if (closed) return;
|
|
74
|
-
closed = true;
|
|
75
|
-
state.active -= 1;
|
|
76
|
-
if (state.active === 0) {
|
|
77
|
-
let resolve: (() => void) | undefined;
|
|
78
|
-
while ((resolve = takeWaiter(state)) !== undefined) resolve();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
};
|
|
130
|
+
return state;
|
|
82
131
|
}
|
|
83
132
|
throw createInternalFrameworkException(
|
|
84
133
|
state.sealedReason,
|
|
@@ -86,15 +135,6 @@ export class ZLinkRuntimeAdmissionGate {
|
|
|
86
135
|
);
|
|
87
136
|
}
|
|
88
137
|
|
|
89
|
-
async run<T>(meshName: string, operation: string, work: () => Promise<T>): Promise<T> {
|
|
90
|
-
const claim = this.claim(meshName, operation);
|
|
91
|
-
try {
|
|
92
|
-
return await work();
|
|
93
|
-
} finally {
|
|
94
|
-
claim.close();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
138
|
awaitZero(meshName: string, signal?: AbortSignal): Promise<void> {
|
|
99
139
|
const state = this.requireState(meshName);
|
|
100
140
|
if (state.active === 0) return Promise.resolve();
|
|
@@ -178,6 +218,14 @@ interface ZLinkMeshAdmissionState {
|
|
|
178
218
|
waiterCount: number;
|
|
179
219
|
}
|
|
180
220
|
|
|
221
|
+
function exitAdmission(state: ZLinkMeshAdmissionState): void {
|
|
222
|
+
state.active -= 1;
|
|
223
|
+
if (state.active === 0) {
|
|
224
|
+
let resolve: (() => void) | undefined;
|
|
225
|
+
while ((resolve = takeWaiter(state)) !== undefined) resolve();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
181
229
|
function takeWaiter(state: ZLinkMeshAdmissionState): (() => void) | undefined {
|
|
182
230
|
advanceWaiterHead(state);
|
|
183
231
|
const waiter = state.waiters[state.waiterHead];
|
|
@@ -16,7 +16,7 @@ export interface IngressRecordPort {
|
|
|
16
16
|
* ordinary Framework-owned ingress record closes after the last child terminal.
|
|
17
17
|
*/
|
|
18
18
|
export class ApplicationIngressRecordOwner {
|
|
19
|
-
private
|
|
19
|
+
private stop?: AbortController;
|
|
20
20
|
private closed = false;
|
|
21
21
|
|
|
22
22
|
private constructor(private readonly shared: SharedIngressRecordState) {}
|
|
@@ -46,17 +46,34 @@ export class ApplicationIngressRecordOwner {
|
|
|
46
46
|
return job;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
acquire(
|
|
50
50
|
domain: ApplicationJobRecordDomain,
|
|
51
51
|
signal?: AbortSignal
|
|
52
|
-
): Promise<ApplicationJobRecordLease> {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
): ApplicationJobRecordLease | Promise<ApplicationJobRecordLease> {
|
|
53
|
+
try {
|
|
54
|
+
this.requireOpen();
|
|
55
|
+
const initial = this.shared.takeInitialPermit(domain);
|
|
56
|
+
if (initial !== undefined) return initial;
|
|
57
|
+
} catch (error) {
|
|
58
|
+
return Promise.reject(error);
|
|
59
|
+
}
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
return this.acquireAdditional(domain, signal);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private async acquireAdditional(
|
|
65
|
+
domain: ApplicationJobRecordDomain,
|
|
66
|
+
signal?: AbortSignal
|
|
67
|
+
): Promise<ApplicationJobRecordLease> {
|
|
68
|
+
const stop = (this.stop ??= new AbortController());
|
|
69
|
+
const waitSignal = signal === undefined ? stop.signal : AbortSignal.any([stop.signal, signal]);
|
|
70
|
+
let permit: ApplicationJobPermitPort;
|
|
71
|
+
try {
|
|
72
|
+
permit = await this.shared.acquirePermit(waitSignal);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
if (error === ownerClosedError) throw ownerClosedError();
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
60
77
|
if (this.closed) {
|
|
61
78
|
permit.releaseAfterInternalProcessing();
|
|
62
79
|
throw ownerClosedError();
|
|
@@ -67,7 +84,8 @@ export class ApplicationIngressRecordOwner {
|
|
|
67
84
|
close(): void {
|
|
68
85
|
if (this.closed) return;
|
|
69
86
|
this.closed = true;
|
|
70
|
-
this.
|
|
87
|
+
// The queue forwards this reason; only a rejected acquisition constructs the error.
|
|
88
|
+
this.stop?.abort(ownerClosedError);
|
|
71
89
|
this.shared.releaseOwner();
|
|
72
90
|
}
|
|
73
91
|
|
|
@@ -79,14 +97,12 @@ export class ApplicationIngressRecordOwner {
|
|
|
79
97
|
/** Queue-permit child of one shared raw ingress record. */
|
|
80
98
|
export class ApplicationJobRecordLease implements ApplicationJobPermitPort {
|
|
81
99
|
private ingressClosed = false;
|
|
82
|
-
private permitReleased = false;
|
|
83
100
|
private processingTerminal = false;
|
|
84
|
-
|
|
85
|
-
private jobReleased = false;
|
|
101
|
+
detachedForHandlerTurn = false;
|
|
86
102
|
|
|
87
103
|
constructor(
|
|
88
104
|
private readonly shared: SharedIngressRecordState,
|
|
89
|
-
private
|
|
105
|
+
private permit: ApplicationJobPermitPort | undefined
|
|
90
106
|
) {}
|
|
91
107
|
|
|
92
108
|
get origin(): ApplicationJobOrigin {
|
|
@@ -103,12 +119,12 @@ export class ApplicationJobRecordLease implements ApplicationJobPermitPort {
|
|
|
103
119
|
}
|
|
104
120
|
|
|
105
121
|
releaseBeforeHandler(): void {
|
|
106
|
-
this.
|
|
122
|
+
this.permit?.releaseBeforeHandler();
|
|
107
123
|
}
|
|
108
124
|
|
|
109
125
|
releaseAfterInternalProcessing(): void {
|
|
110
126
|
this.processingTerminal = true;
|
|
111
|
-
this.
|
|
127
|
+
this.permit?.releaseAfterInternalProcessing();
|
|
112
128
|
this.releaseJobIfTerminal();
|
|
113
129
|
}
|
|
114
130
|
|
|
@@ -122,16 +138,15 @@ export class ApplicationJobRecordLease implements ApplicationJobPermitPort {
|
|
|
122
138
|
this.releaseJobIfTerminal();
|
|
123
139
|
}
|
|
124
140
|
|
|
125
|
-
private releasePermit(release: () => void): void {
|
|
126
|
-
if (this.permitReleased) return;
|
|
127
|
-
this.permitReleased = true;
|
|
128
|
-
release();
|
|
129
|
-
}
|
|
130
|
-
|
|
131
141
|
private releaseJobIfTerminal(): void {
|
|
132
|
-
|
|
133
|
-
this.
|
|
134
|
-
this.
|
|
142
|
+
const permit = this.permit;
|
|
143
|
+
if (permit === undefined || !this.ingressClosed || !this.processingTerminal) return;
|
|
144
|
+
this.permit = undefined;
|
|
145
|
+
try {
|
|
146
|
+
this.shared.releaseJob();
|
|
147
|
+
} finally {
|
|
148
|
+
permit.releaseStorage?.();
|
|
149
|
+
}
|
|
135
150
|
}
|
|
136
151
|
}
|
|
137
152
|
|
|
@@ -203,6 +218,7 @@ class SharedIngressRecordState {
|
|
|
203
218
|
try {
|
|
204
219
|
this.initialPermit?.releaseAfterInternalProcessing();
|
|
205
220
|
} finally {
|
|
221
|
+
this.initialPermit?.releaseStorage?.();
|
|
206
222
|
this.initialPermit = undefined;
|
|
207
223
|
this.record.close();
|
|
208
224
|
}
|
|
@@ -2,39 +2,96 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
2
2
|
|
|
3
3
|
import type { ApplicationJobOrigin, ApplicationJobPermitPort } from './contracts';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const applicationJobPermitScope = new AsyncLocalStorage<ApplicationJobPermitPort | undefined>();
|
|
6
|
+
|
|
7
|
+
function releasePermitTurn(): void {
|
|
8
|
+
releaseApplicationJobPermitTurn(applicationJobPermitScope.getStore());
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
/** Ends the internal processing of one record turn unless its handler detached the permit. */
|
|
12
|
+
export function releaseApplicationJobPermitTurn(
|
|
13
|
+
permit: ApplicationJobPermitPort | undefined
|
|
14
|
+
): void {
|
|
15
|
+
if (permit !== undefined && !permit.detachedForHandlerTurn)
|
|
16
|
+
permit.releaseAfterInternalProcessing();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Makes `permit` the current record's permit for the synchronous part of a
|
|
21
|
+
* dispatch. The caller restores the returned previous scope with
|
|
22
|
+
* {@link leaveApplicationJobPermitScope} and releases the turn itself, so a
|
|
23
|
+
* dispatcher that already continues on the handler result needs no second
|
|
24
|
+
* continuation here.
|
|
25
|
+
*/
|
|
26
|
+
export function enterApplicationJobPermitScope(
|
|
27
|
+
permit: ApplicationJobPermitPort
|
|
28
|
+
): ApplicationJobPermitPort | undefined {
|
|
29
|
+
const previous = applicationJobPermitScope.getStore();
|
|
30
|
+
applicationJobPermitScope.enterWith(permit);
|
|
31
|
+
return previous;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function leaveApplicationJobPermitScope(
|
|
35
|
+
previous: ApplicationJobPermitPort | undefined
|
|
36
|
+
): void {
|
|
37
|
+
applicationJobPermitScope.enterWith(previous);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function releasePermitSuccess<TResult>(value: TResult): TResult {
|
|
41
|
+
releasePermitTurn();
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function releasePermitFailure(error: unknown): never {
|
|
46
|
+
releasePermitTurn();
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
11
49
|
|
|
12
50
|
/**
|
|
13
51
|
* Carries the host-owned queue permit through internal async dispatch without
|
|
14
52
|
* leaking capacity ownership into public handler contracts.
|
|
15
53
|
*/
|
|
16
|
-
export
|
|
54
|
+
export function runWithApplicationJobPermit<TResult>(
|
|
55
|
+
permit: ApplicationJobPermitPort,
|
|
56
|
+
callback: () => Promise<TResult>
|
|
57
|
+
): Promise<TResult>;
|
|
58
|
+
export function runWithApplicationJobPermit<TResult, TFirst = undefined, TSecond = undefined>(
|
|
17
59
|
permit: ApplicationJobPermitPort,
|
|
18
|
-
callback: () => Promise<TResult> | TResult
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
60
|
+
callback: (first: TFirst, second: TSecond) => Promise<TResult> | TResult,
|
|
61
|
+
first?: TFirst,
|
|
62
|
+
second?: TSecond
|
|
63
|
+
): TResult | Promise<TResult>;
|
|
64
|
+
export function runWithApplicationJobPermit<TResult, TFirst, TSecond>(
|
|
65
|
+
permit: ApplicationJobPermitPort,
|
|
66
|
+
callback: (first: TFirst, second: TSecond) => Promise<TResult> | TResult,
|
|
67
|
+
first?: TFirst,
|
|
68
|
+
second?: TSecond
|
|
69
|
+
): TResult | Promise<TResult> {
|
|
70
|
+
const previous = applicationJobPermitScope.getStore();
|
|
71
|
+
applicationJobPermitScope.enterWith(permit);
|
|
72
|
+
try {
|
|
73
|
+
const result = callback(first as TFirst, second as TSecond);
|
|
74
|
+
if (result !== null && (typeof result === 'object' || typeof result === 'function')) {
|
|
75
|
+
return Promise.resolve(result).then(releasePermitSuccess, releasePermitFailure);
|
|
26
76
|
}
|
|
27
|
-
|
|
77
|
+
releasePermitTurn();
|
|
78
|
+
return result;
|
|
79
|
+
} catch (error) {
|
|
80
|
+
releasePermitTurn();
|
|
81
|
+
return Promise.reject(error);
|
|
82
|
+
} finally {
|
|
83
|
+
applicationJobPermitScope.enterWith(previous);
|
|
84
|
+
}
|
|
28
85
|
}
|
|
29
86
|
|
|
30
87
|
/** Releases the current job permit immediately before the first user callback. */
|
|
31
88
|
export function releaseApplicationJobPermitBeforeHandler(): void {
|
|
32
|
-
applicationJobPermitScope.getStore()?.
|
|
89
|
+
applicationJobPermitScope.getStore()?.releaseBeforeHandler();
|
|
33
90
|
}
|
|
34
91
|
|
|
35
92
|
/** @internal Returns an ingress permit after a durable queue takes record ownership. */
|
|
36
93
|
export function releaseApplicationJobPermitForDurableHandoff(): void {
|
|
37
|
-
applicationJobPermitScope.getStore()?.
|
|
94
|
+
applicationJobPermitScope.getStore()?.releaseAfterInternalProcessing();
|
|
38
95
|
}
|
|
39
96
|
|
|
40
97
|
/** True while dispatch already owns the host-wide application job permit. */
|
|
@@ -42,9 +99,14 @@ export function hasApplicationJobPermit(): boolean {
|
|
|
42
99
|
return applicationJobPermitScope.getStore() !== undefined;
|
|
43
100
|
}
|
|
44
101
|
|
|
102
|
+
/** The current ingress reservation; capacity remains owned by its host queue. */
|
|
103
|
+
export function currentApplicationJobPermit(): ApplicationJobPermitPort | undefined {
|
|
104
|
+
return applicationJobPermitScope.getStore();
|
|
105
|
+
}
|
|
106
|
+
|
|
45
107
|
/** Keeps the ingress origin when a durable record later reacquires its permit. */
|
|
46
108
|
export function currentApplicationJobOrigin(): ApplicationJobOrigin {
|
|
47
|
-
return applicationJobPermitScope.getStore()!.
|
|
109
|
+
return applicationJobPermitScope.getStore()!.origin;
|
|
48
110
|
}
|
|
49
111
|
|
|
50
112
|
/** Re-enters the captured permit scope when a serial executor runs later. */
|
|
@@ -61,9 +123,8 @@ export function bindApplicationJobPermit<TResult, TArgument>(
|
|
|
61
123
|
* detached owner must release it at handler entry or at a pre-start terminal.
|
|
62
124
|
*/
|
|
63
125
|
export function detachApplicationJobPermit(): ApplicationJobPermitPort | undefined {
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return scope.permit;
|
|
126
|
+
const permit = applicationJobPermitScope.getStore();
|
|
127
|
+
if (permit === undefined) return undefined;
|
|
128
|
+
permit.detachForHandlerTurn();
|
|
129
|
+
return permit;
|
|
69
130
|
}
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
export type ApplicationJobOrigin = 'local' | 'remote';
|
|
2
2
|
|
|
3
3
|
export interface ApplicationJobPermitPort {
|
|
4
|
+
/** Reacquires this record's host supply after durable FIFO ownership. */
|
|
5
|
+
reacquire?(signal: AbortSignal): Promise<ApplicationJobPermitPort>;
|
|
4
6
|
readonly origin: ApplicationJobOrigin;
|
|
7
|
+
readonly detachedForHandlerTurn: boolean;
|
|
5
8
|
markApplicationQueued(): void;
|
|
6
9
|
/** Transfers ingress-record cleanup to a detached exact-target handler turn. */
|
|
7
|
-
detachForHandlerTurn
|
|
10
|
+
detachForHandlerTurn(): void;
|
|
8
11
|
releaseBeforeHandler(): void;
|
|
9
12
|
releaseAfterInternalProcessing(): void;
|
|
13
|
+
/** Returns reusable reservation storage only after its ingress lifetime ends. */
|
|
14
|
+
releaseStorage?(): void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ApplicationJobReceiveRotationPort {
|
|
18
|
+
reserve(): void;
|
|
19
|
+
take(): ApplicationJobPermitPort | undefined;
|
|
20
|
+
releaseUnused(): void;
|
|
10
21
|
}
|
|
11
22
|
|
|
12
23
|
export interface ApplicationJobQueuePort {
|
|
24
|
+
createReceiveRotation(
|
|
25
|
+
capacity: number,
|
|
26
|
+
origin: ApplicationJobOrigin
|
|
27
|
+
): ApplicationJobReceiveRotationPort;
|
|
13
28
|
acquire(
|
|
14
29
|
signal: AbortSignal | undefined,
|
|
15
30
|
origin: ApplicationJobOrigin
|
|
@@ -61,12 +61,32 @@ export type ZLinkBackendObjectPlacement =
|
|
|
61
61
|
| { readonly kind: 'capacity' }
|
|
62
62
|
| { readonly kind: 'unavailable' };
|
|
63
63
|
|
|
64
|
+
export type ZLinkBackendRequestSourceAcceptance = (
|
|
65
|
+
nodeRid: string,
|
|
66
|
+
nodeGeneration: bigint,
|
|
67
|
+
nodeRidStorageHex: string,
|
|
68
|
+
signal?: AbortSignal
|
|
69
|
+
) =>
|
|
70
|
+
| import('../../locations/request-source-resolver').ZLinkRequestSourceFence
|
|
71
|
+
| undefined
|
|
72
|
+
| Promise<import('../../locations/request-source-resolver').ZLinkRequestSourceFence | undefined>;
|
|
73
|
+
|
|
64
74
|
export interface ZLinkBackendMeshNode {
|
|
75
|
+
acceptRelocatedActorTerminal?(
|
|
76
|
+
operation: { readonly high: bigint; readonly low: bigint },
|
|
77
|
+
replyRouteId: bigint,
|
|
78
|
+
result: import('../../foundation/service-stateful-runtime').ServiceStatefulResult
|
|
79
|
+
): 'terminalReceived' | 'alreadyTerminal' | undefined;
|
|
80
|
+
readonly routingId?: RoutingId;
|
|
81
|
+
cancelPendingOperations?(reason: unknown): void;
|
|
65
82
|
completeClosedInstance?(spotId: string, objectGeneration: bigint): void;
|
|
66
83
|
setDispatchErrorReporter?(
|
|
67
84
|
reporter: import('../../channels/dispatch-error-reporter').ZLinkDispatchErrorReporter,
|
|
68
85
|
meshName: string
|
|
69
86
|
): void;
|
|
87
|
+
setSessionOwnerDescriptors?(
|
|
88
|
+
source: import('../../foundation/service-stateful-runtime').ServiceSessionOwnerDescriptors
|
|
89
|
+
): void;
|
|
70
90
|
setRoutingId(routingId: unknown): void;
|
|
71
91
|
setBind(endpoint: string): void;
|
|
72
92
|
setAdvertiseHost(host: string): void;
|
|
@@ -97,9 +117,9 @@ export interface ZLinkBackendMeshNode {
|
|
|
97
117
|
'kind'
|
|
98
118
|
>
|
|
99
119
|
): Promise<boolean>;
|
|
100
|
-
shutdown(timeoutMs: number): RequestResult
|
|
120
|
+
shutdown(timeoutMs: number): Promise<RequestResult>;
|
|
101
121
|
publishDraining?(): Promise<void>;
|
|
102
|
-
close(): void
|
|
122
|
+
close(): Promise<void>;
|
|
103
123
|
addChannelName(name: string): void;
|
|
104
124
|
setChannelWeight(name: string, weight: number): Promise<void>;
|
|
105
125
|
setPlacementWeight(weight: number): Promise<void>;
|
|
@@ -125,7 +145,8 @@ export interface ZLinkBackendMeshNode {
|
|
|
125
145
|
parts: ZLinkBackendMessageLike | readonly ZLinkBackendMessageLike[],
|
|
126
146
|
deadlineUnixMs: bigint,
|
|
127
147
|
sourceSpotId?: string,
|
|
128
|
-
metadata?: ReadonlyMap<string, string
|
|
148
|
+
metadata?: ReadonlyMap<string, string>,
|
|
149
|
+
onAdmitted?: () => void
|
|
129
150
|
): MeshOperationId;
|
|
130
151
|
sendToInstanceSpot(
|
|
131
152
|
route: ServiceInstanceRouteFence,
|
|
@@ -140,7 +161,8 @@ export interface ZLinkBackendMeshNode {
|
|
|
140
161
|
timeoutMs?: number,
|
|
141
162
|
sourceSpotId?: string,
|
|
142
163
|
metadata?: ReadonlyMap<string, string>,
|
|
143
|
-
instanceIntent?: boolean
|
|
164
|
+
instanceIntent?: boolean,
|
|
165
|
+
onAdmitted?: () => void
|
|
144
166
|
): MeshOperationId;
|
|
145
167
|
registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
|
|
146
168
|
requestUserSpotCreate(
|
|
@@ -181,13 +203,28 @@ export interface ZLinkBackendMeshNode {
|
|
|
181
203
|
readonly securityIdentity?: string;
|
|
182
204
|
readonly lifecycleGeneration: bigint;
|
|
183
205
|
}): void;
|
|
206
|
+
/**
|
|
207
|
+
* Installs the source request owner check the first accepting owner runs on Actor and Spot
|
|
208
|
+
* ingress (Location runtime §9.3). Undefined from the check ends the request Unavailable.
|
|
209
|
+
*/
|
|
210
|
+
setRequestSourceAcceptance?(acceptance: ZLinkBackendRequestSourceAcceptance): void;
|
|
184
211
|
isObjectClientNodeDirectTarget?(targetRid: unknown): boolean;
|
|
212
|
+
observePeerRoute?(
|
|
213
|
+
targetRid: unknown
|
|
214
|
+
): import('../../foundation/durable-service-request').PeerRouteObservation;
|
|
215
|
+
hasPeerRouteOrConnectionIntent?(targetRid: unknown, endpoint: string): boolean;
|
|
185
216
|
isPeerRouteReady?(targetRid: unknown, lifecycleGeneration?: bigint): boolean;
|
|
217
|
+
waitForPeerRoute?(
|
|
218
|
+
targetRid: unknown,
|
|
219
|
+
lifecycleGeneration: bigint,
|
|
220
|
+
deadlineUnixMs: bigint,
|
|
221
|
+
signal?: AbortSignal
|
|
222
|
+
): Promise<void>;
|
|
186
223
|
sendToNode(
|
|
187
224
|
targetRid: unknown,
|
|
188
225
|
parts: MessageLike | readonly MessageLike[],
|
|
189
226
|
options?: { flags?: number }
|
|
190
|
-
): Promise<SubmitResult>;
|
|
227
|
+
): SubmitResult | Promise<SubmitResult>;
|
|
191
228
|
/**
|
|
192
229
|
* Sends service-wire infrastructure frames directly to a peer. Relocation
|
|
193
230
|
* Prepare may add NODE-INTERNAL sideband frames after its canonical frame.
|
|
@@ -208,12 +245,21 @@ export interface ZLinkBackendMeshNode {
|
|
|
208
245
|
requestInfrastructureControlFrames?(
|
|
209
246
|
targetRid: unknown,
|
|
210
247
|
frames: readonly Uint8Array[],
|
|
211
|
-
options?: {
|
|
248
|
+
options?: {
|
|
249
|
+
readonly timeoutMs?: number;
|
|
250
|
+
readonly signal?: AbortSignal;
|
|
251
|
+
readonly onSubmitted?: (signal: AbortSignal) => Promise<void>;
|
|
252
|
+
}
|
|
212
253
|
): Promise<readonly Uint8Array[]>;
|
|
213
254
|
requestToNode(
|
|
214
255
|
targetRid: unknown,
|
|
215
256
|
parts: MessageLike | readonly MessageLike[],
|
|
216
|
-
options?: {
|
|
257
|
+
options?: {
|
|
258
|
+
flags?: number;
|
|
259
|
+
timeoutMs?: number;
|
|
260
|
+
applicationMetadata?: Buffer;
|
|
261
|
+
onAdmitted?: () => void;
|
|
262
|
+
}
|
|
217
263
|
): MeshOperationId;
|
|
218
264
|
sendToChannel(
|
|
219
265
|
channelName: string,
|
|
@@ -223,7 +269,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
223
269
|
requestToChannel(
|
|
224
270
|
channelName: string,
|
|
225
271
|
parts: MessageLike | readonly MessageLike[],
|
|
226
|
-
options?: {
|
|
272
|
+
options?: {
|
|
273
|
+
flags?: number;
|
|
274
|
+
timeoutMs?: number;
|
|
275
|
+
applicationMetadata?: Buffer;
|
|
276
|
+
onAdmitted?: () => void;
|
|
277
|
+
}
|
|
227
278
|
): MeshOperationId;
|
|
228
279
|
status(): MeshNodeStatus;
|
|
229
280
|
peers(): MeshPeerEntry[];
|
|
@@ -296,9 +347,10 @@ export interface ZLinkBackendMeshNode {
|
|
|
296
347
|
source: ServiceDirectSpotRouteFence
|
|
297
348
|
): ServiceSpotMessageFollowSeal | undefined;
|
|
298
349
|
abortSpotMessageFollowIngress?(seal: ServiceSpotMessageFollowSeal): boolean;
|
|
350
|
+
/** A null target consumes the committed seal without installing a Follow route. */
|
|
299
351
|
commitSpotMessageFollowIngress?(
|
|
300
352
|
seal: ServiceSpotMessageFollowSeal,
|
|
301
|
-
target: ServiceDirectSpotRouteFence,
|
|
353
|
+
target: ServiceDirectSpotRouteFence | null,
|
|
302
354
|
durationMs: number
|
|
303
355
|
): Promise<boolean>;
|
|
304
356
|
joinActorSpot(
|
|
@@ -344,12 +396,21 @@ export interface ZLinkBackendMeshNode {
|
|
|
344
396
|
sendToActor(
|
|
345
397
|
actor: ZLinkBackendActorRef,
|
|
346
398
|
parts: MessageLike | readonly MessageLike[],
|
|
347
|
-
options?: {
|
|
399
|
+
options?: {
|
|
400
|
+
flags?: number;
|
|
401
|
+
routeFence?: import('../../foundation/service-stateful-wire-codec').ServiceActorRouteFence;
|
|
402
|
+
}
|
|
348
403
|
): Promise<SubmitResult>;
|
|
349
404
|
requestToActor(
|
|
350
405
|
actor: ZLinkBackendActorRef,
|
|
351
406
|
parts: MessageLike | readonly MessageLike[],
|
|
352
|
-
options?: {
|
|
407
|
+
options?: {
|
|
408
|
+
flags?: number;
|
|
409
|
+
timeoutMs?: number;
|
|
410
|
+
applicationMetadata?: Buffer;
|
|
411
|
+
onAdmitted?: () => void;
|
|
412
|
+
routeFence?: import('../../foundation/service-stateful-wire-codec').ServiceActorRouteFence;
|
|
413
|
+
}
|
|
353
414
|
): MeshOperationId;
|
|
354
415
|
actorSendToActor(
|
|
355
416
|
source: ZLinkBackendActorRef,
|
|
@@ -361,7 +422,12 @@ export interface ZLinkBackendMeshNode {
|
|
|
361
422
|
source: ZLinkBackendActorRef,
|
|
362
423
|
target: ZLinkBackendActorRef,
|
|
363
424
|
parts: MessageLike | readonly MessageLike[],
|
|
364
|
-
options?: {
|
|
425
|
+
options?: {
|
|
426
|
+
flags?: number;
|
|
427
|
+
timeoutMs?: number;
|
|
428
|
+
applicationMetadata?: Buffer;
|
|
429
|
+
onAdmitted?: () => void;
|
|
430
|
+
}
|
|
365
431
|
): MeshOperationId;
|
|
366
432
|
sendActorBoundSession(
|
|
367
433
|
actor: ZLinkBackendActorRef,
|
|
@@ -484,7 +550,11 @@ export interface ZLinkBackendDealerSocket extends ZLinkBackendConnectableSocket
|
|
|
484
550
|
receiveTimeoutMs: number;
|
|
485
551
|
maxMessageSize: number;
|
|
486
552
|
send(message: Message | readonly Message[]): Promise<void>;
|
|
487
|
-
request(
|
|
553
|
+
request(
|
|
554
|
+
message: Message | readonly Message[],
|
|
555
|
+
timeoutMs?: number,
|
|
556
|
+
onAdmitted?: () => void
|
|
557
|
+
): Promise<readonly Message[]>;
|
|
488
558
|
recv(flags?: ZLinkBackendRecvFlags): Received | undefined;
|
|
489
559
|
}
|
|
490
560
|
|
|
@@ -501,7 +571,7 @@ export interface ZLinkBackendSendOperation {
|
|
|
501
571
|
export interface ZLinkBackendRequestOperation {
|
|
502
572
|
message(message: MessageLike): ZLinkBackendRequestOperation;
|
|
503
573
|
timeout(timeoutMs: number): ZLinkBackendRequestOperation;
|
|
504
|
-
submit(): Promise<readonly Message[]>;
|
|
574
|
+
submit(onAdmitted?: () => void): Promise<readonly Message[]>;
|
|
505
575
|
}
|
|
506
576
|
|
|
507
577
|
export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket {
|
|
@@ -519,7 +589,8 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
519
589
|
request(
|
|
520
590
|
routingId: RoutingId,
|
|
521
591
|
message: Message | readonly Message[],
|
|
522
|
-
timeoutMs?: number
|
|
592
|
+
timeoutMs?: number,
|
|
593
|
+
onAdmitted?: () => void
|
|
523
594
|
): Promise<readonly Message[]>;
|
|
524
595
|
sendToSpot(
|
|
525
596
|
targetNodeRid: RoutingId,
|
|
@@ -531,7 +602,8 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
|
|
|
531
602
|
targetNodeRid: RoutingId,
|
|
532
603
|
targetSpotId: RoutingId,
|
|
533
604
|
parts: readonly Message[],
|
|
534
|
-
timeoutMs?: number
|
|
605
|
+
timeoutMs?: number,
|
|
606
|
+
onAdmitted?: () => void
|
|
535
607
|
): Promise<readonly Message[]>;
|
|
536
608
|
disconnectPeer(routingId: RoutingId): void;
|
|
537
609
|
reply(routingId: RoutingId, replyToken: unknown): ZLinkBackendReplyOperation;
|
|
@@ -688,7 +760,8 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
688
760
|
requestToChannel(
|
|
689
761
|
channelName: string,
|
|
690
762
|
payload: Message | readonly Message[],
|
|
691
|
-
timeoutMs?: number
|
|
763
|
+
timeoutMs?: number,
|
|
764
|
+
onAdmitted?: () => void
|
|
692
765
|
): Promise<readonly Message[]>;
|
|
693
766
|
sendToChannel(channelName: string, payload: Message | readonly Message[]): Promise<void>;
|
|
694
767
|
publish(
|
|
@@ -705,7 +778,8 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
|
|
|
705
778
|
targetRid: RoutingId,
|
|
706
779
|
spotId: RoutingId,
|
|
707
780
|
payload: Message | readonly Message[],
|
|
708
|
-
timeoutMs?: number
|
|
781
|
+
timeoutMs?: number,
|
|
782
|
+
onAdmitted?: () => void
|
|
709
783
|
): Promise<readonly Message[]>;
|
|
710
784
|
dispose(): Promise<void>;
|
|
711
785
|
}
|