@zlink-systems/framework 0.30.1 → 0.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
- package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
- 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/Locations/Rows.d.ts +2 -0
- package/dist/contracts/Spots/Contracts.d.ts +4 -0
- package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
- 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 +0 -1
- package/dist/runtime/actors/actor-client.js +38 -45
- 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 +7 -3
- package/dist/runtime/actors/actor-handoff.js +212 -88
- package/dist/runtime/actors/actor-join-relocation.d.ts +2 -0
- package/dist/runtime/actors/actor-local-native-join.js +4 -0
- package/dist/runtime/actors/actor-mailbox.js +27 -1
- package/dist/runtime/actors/actor-remote-joiner.js +3 -1
- package/dist/runtime/actors/actor-reply.d.ts +4 -0
- package/dist/runtime/actors/actor-reply.js +29 -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 +6 -2
- package/dist/runtime/actors/index.js +37 -21
- package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
- package/dist/runtime/actors/session-disconnected-wire.js +48 -0
- package/dist/runtime/admission.d.ts +9 -1
- package/dist/runtime/admission.js +55 -32
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +13 -0
- package/dist/runtime/application-jobs/application-job-queue-scope.js +27 -1
- package/dist/runtime/application-jobs/contracts.d.ts +2 -0
- package/dist/runtime/backend/contracts/index.d.ts +19 -3
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
- package/dist/runtime/backend/mesh-completion-table.js +5 -0
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +26 -2
- package/dist/runtime/backend/mesh-dispatch-pump.js +193 -107
- package/dist/runtime/backend/node/node-raw-binding-port.js +90 -58
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +33 -8
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +142 -143
- package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +5 -5
- package/dist/runtime/channels/channel-clients.d.ts +1 -0
- package/dist/runtime/channels/channel-clients.js +20 -5
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +22 -3
- package/dist/runtime/channels/channel-dispatch-pipeline.js +103 -57
- package/dist/runtime/channels/channel-dispatchers.d.ts +3 -2
- package/dist/runtime/channels/channel-dispatchers.js +44 -37
- package/dist/runtime/channels/channel-envelope.d.ts +1 -0
- package/dist/runtime/channels/channel-envelope.js +74 -31
- 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 +3 -2
- package/dist/runtime/channels/channel-runtime-manager.js +4 -4
- package/dist/runtime/channels/channel-transports.d.ts +0 -1
- package/dist/runtime/channels/channel-transports.js +35 -33
- 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/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 +4 -0
- package/dist/runtime/execution/serial-execution-queue.js +21 -2
- package/dist/runtime/execution/state-lane.d.ts +2 -0
- package/dist/runtime/execution/state-lane.js +5 -0
- 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 +39 -3
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +151 -55
- 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 +2 -3
- package/dist/runtime/foundation/service-relocation-object-owner.js +48 -35
- package/dist/runtime/foundation/service-relocation-runtime.js +7 -3
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +8 -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 +72 -6
- package/dist/runtime/foundation/service-stateful-runtime.js +444 -117
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -1
- package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -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 +10 -0
- package/dist/runtime/foundation/service-wire-m6a-codec.js +166 -53
- 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-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 +24 -3
- package/dist/runtime/host/application-job-queue.js +28 -41
- package/dist/runtime/host/index.d.ts +5 -1
- package/dist/runtime/host/index.js +171 -97
- 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 +71 -190
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
- package/dist/runtime/host/route-mesh-runtime.js +5 -3
- 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-host-runtime.d.ts +17 -7
- package/dist/runtime/host/service-relocation-host-runtime.js +550 -367
- package/dist/runtime/host/spot-runtime-options-factory.js +15 -7
- package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
- 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/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 +6 -2
- package/dist/runtime/locations/runtime.js +37 -30
- 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.js +29 -26
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +19 -1
- package/dist/runtime/protocol/service_wire_codec.generated.js +85 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +7 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +23 -7
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +3 -2
- package/dist/runtime/spots/index.d.ts +18 -11
- package/dist/runtime/spots/index.js +234 -176
- 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 +6 -3
- package/dist/runtime/spots/spot-activation.js +123 -44
- 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 +14 -9
- package/dist/runtime/spots/spot-handler-registry.d.ts +4 -3
- package/dist/runtime/spots/spot-handler-registry.js +6 -2
- 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 +18 -39
- 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.js +3 -3
- package/dist/runtime/spots/spot-remote-codec.js +5 -1
- package/dist/runtime/spots/spot-runtime-ports.d.ts +0 -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 -1
- package/dist/runtime/spots/spot-timer.d.ts +57 -5
- package/dist/runtime/spots/spot-timer.js +287 -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.js +1 -4
- package/dist/runtime/workers/index.js +1 -1
- package/package.json +3 -3
- package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
- 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/Locations/Rows.ts +2 -0
- package/src/contracts/Spots/Contracts.ts +8 -0
- package/src/contracts/Spots/ZLinkSpot.ts +3 -3
- package/src/runtime/abort.ts +12 -0
- package/src/runtime/actors/actor-authority-publication.ts +3 -2
- package/src/runtime/actors/actor-client.ts +61 -70
- package/src/runtime/actors/actor-context.ts +49 -9
- package/src/runtime/actors/actor-handoff.ts +282 -106
- package/src/runtime/actors/actor-join-relocation.ts +2 -0
- package/src/runtime/actors/actor-local-native-join.ts +4 -0
- package/src/runtime/actors/actor-mailbox.ts +40 -2
- package/src/runtime/actors/actor-remote-joiner.ts +6 -1
- package/src/runtime/actors/actor-reply.ts +42 -0
- 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 +41 -27
- package/src/runtime/actors/session-disconnected-wire.ts +66 -0
- package/src/runtime/admission.ts +69 -34
- package/src/runtime/application-jobs/application-job-queue-scope.ts +33 -1
- package/src/runtime/application-jobs/contracts.ts +2 -0
- package/src/runtime/backend/contracts/index.ts +39 -4
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
- package/src/runtime/backend/mesh-completion-table.ts +4 -0
- package/src/runtime/backend/mesh-dispatch-pump.ts +223 -124
- package/src/runtime/backend/node/node-raw-binding-port.ts +106 -70
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +221 -170
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -5
- package/src/runtime/channels/channel-clients.ts +49 -24
- package/src/runtime/channels/channel-dispatch-pipeline.ts +173 -124
- package/src/runtime/channels/channel-dispatchers.ts +116 -72
- package/src/runtime/channels/channel-envelope.ts +105 -36
- package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
- package/src/runtime/channels/channel-runtime-manager.ts +12 -5
- package/src/runtime/channels/channel-transports.ts +49 -58
- 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/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 +31 -4
- package/src/runtime/execution/state-lane.ts +7 -0
- package/src/runtime/foundation/operation-registry.ts +98 -20
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +244 -67
- 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 +54 -37
- package/src/runtime/foundation/service-relocation-runtime.ts +7 -3
- package/src/runtime/foundation/service-runtime-contracts.ts +12 -1
- 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 +667 -152
- package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -11
- 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 +187 -51
- 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-transfer-runtime.ts +104 -430
- package/src/runtime/host/application-job-queue.ts +29 -44
- package/src/runtime/host/index.ts +286 -129
- 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 +86 -248
- package/src/runtime/host/route-mesh-runtime.ts +11 -5
- package/src/runtime/host/runtime-shutdown.ts +15 -4
- package/src/runtime/host/service-relocation-host-runtime.ts +784 -475
- package/src/runtime/host/spot-runtime-options-factory.ts +18 -7
- package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
- 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/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 +70 -40
- package/src/runtime/messaging/payload-codec.ts +8 -11
- package/src/runtime/messaging/request-result.ts +33 -29
- package/src/runtime/protocol/service_wire_codec.generated.ts +87 -4
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +13 -10
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +3 -2
- package/src/runtime/spots/index.ts +375 -281
- 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 +170 -86
- 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 +24 -19
- package/src/runtime/spots/spot-handler-registry.ts +15 -4
- 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 +22 -45
- package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
- package/src/runtime/spots/spot-outbound.ts +3 -3
- package/src/runtime/spots/spot-remote-codec.ts +9 -2
- package/src/runtime/spots/spot-runtime-ports.ts +0 -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 -1
- package/src/runtime/spots/spot-timer.ts +413 -157
- 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 +1 -5
- package/src/runtime/workers/index.ts +1 -1
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
export declare class ZLinkEncodedPayload {
|
|
2
2
|
private constructor();
|
|
3
|
+
/** Copies the supplied bytes. */
|
|
3
4
|
static from(bytes: Uint8Array): ZLinkEncodedPayload;
|
|
5
|
+
/** Retains the supplied bytes without copying. Do not modify them afterward; mutation changes the payload. */
|
|
6
|
+
static fromOwned(bytes: Uint8Array): ZLinkEncodedPayload;
|
|
7
|
+
/** Returns a copy of the stored bytes. */
|
|
4
8
|
data(): Uint8Array;
|
|
9
|
+
/** Returns the stored bytes without copying. Do not modify this view or its backing buffer. */
|
|
10
|
+
view(): Readonly<Uint8Array>;
|
|
5
11
|
toBytes(): Uint8Array;
|
|
6
12
|
copy(): ZLinkEncodedPayload;
|
|
7
13
|
size(): number;
|
|
@@ -3,15 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZLinkEncodedPayload = void 0;
|
|
4
4
|
const encoded_payload_storage_1 = require("./encoded-payload-storage");
|
|
5
5
|
class ZLinkEncodedPayload {
|
|
6
|
-
constructor(bytes) {
|
|
7
|
-
(
|
|
6
|
+
constructor(bytes, owned) {
|
|
7
|
+
if (owned) {
|
|
8
|
+
(0, encoded_payload_storage_1.adoptEncodedPayload)(this, bytes);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
(0, encoded_payload_storage_1.storeEncodedPayload)(this, bytes);
|
|
12
|
+
}
|
|
8
13
|
}
|
|
14
|
+
/** Copies the supplied bytes. */
|
|
9
15
|
static from(bytes) {
|
|
10
|
-
return new ZLinkEncodedPayload(bytes);
|
|
16
|
+
return new ZLinkEncodedPayload(bytes, false);
|
|
11
17
|
}
|
|
18
|
+
/** Retains the supplied bytes without copying. Do not modify them afterward; mutation changes the payload. */
|
|
19
|
+
static fromOwned(bytes) {
|
|
20
|
+
return new ZLinkEncodedPayload(bytes, true);
|
|
21
|
+
}
|
|
22
|
+
/** Returns a copy of the stored bytes. */
|
|
12
23
|
data() {
|
|
13
24
|
return new Uint8Array(this.stored());
|
|
14
25
|
}
|
|
26
|
+
/** Returns the stored bytes without copying. Do not modify this view or its backing buffer. */
|
|
27
|
+
view() {
|
|
28
|
+
return this.stored();
|
|
29
|
+
}
|
|
15
30
|
toBytes() {
|
|
16
31
|
return this.data();
|
|
17
32
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare function storeEncodedPayload(owner: object, bytes: Uint8Array): Buffer;
|
|
2
|
-
export declare function adoptEncodedPayload(owner: object, bytes:
|
|
2
|
+
export declare function adoptEncodedPayload(owner: object, bytes: Uint8Array): Buffer;
|
|
3
3
|
export declare function borrowEncodedPayload(owner: object): Buffer | undefined;
|
|
@@ -10,8 +10,11 @@ function storeEncodedPayload(owner, bytes) {
|
|
|
10
10
|
return stored;
|
|
11
11
|
}
|
|
12
12
|
function adoptEncodedPayload(owner, bytes) {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const stored = Buffer.isBuffer(bytes)
|
|
14
|
+
? bytes
|
|
15
|
+
: Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
16
|
+
encodedPayloadStorage.set(owner, stored);
|
|
17
|
+
return stored;
|
|
15
18
|
}
|
|
16
19
|
function borrowEncodedPayload(owner) {
|
|
17
20
|
return encodedPayloadStorage.get(owner);
|
|
@@ -112,7 +112,7 @@ export interface ZLinkMeshObjectRoleBuilder {
|
|
|
112
112
|
export interface ZLinkMeshObjectClientBuilder {
|
|
113
113
|
}
|
|
114
114
|
export interface ZLinkMeshObjectServerBuilder {
|
|
115
|
-
addEntrySpot<TEntrySpot extends ZLinkEntrySpot>(entrySpotType: Type<TEntrySpot
|
|
115
|
+
addEntrySpot<TEntrySpot extends ZLinkEntrySpot>(entrySpotType: Type<TEntrySpot>, actorType: string): this;
|
|
116
116
|
addSpotFactory<TSpot extends ZLinkSpot>(spotType: string, implementation: Type<TSpot>, configure: (builder: ZLinkUserSpotFactoryBuilder<TSpot>) => void): this;
|
|
117
117
|
addInstanceSpotFactory<TSpot extends ZLinkInstanceSpot>(instanceSpotType: string, implementation: Type<TSpot>, configure: (builder: ZLinkInstanceSpotFactoryBuilder<TSpot>) => void): this;
|
|
118
118
|
addActorFactory<TActor extends ZLinkActor>(actorType: string, implementation: Type<ZLinkActorFactory<TActor>>, configure: (builder: ZLinkActorFactoryBuilder<TActor>) => void): this;
|
|
@@ -16,7 +16,8 @@ export declare function validateActorTransferTimeout(timeoutMs: number): number;
|
|
|
16
16
|
export declare function validateSessionReplacementCallbackTimeout(timeoutMs: number): number;
|
|
17
17
|
export declare function registerEntrySpot(options: {
|
|
18
18
|
entrySpotType?: Type<ZLinkEntrySpot>;
|
|
19
|
-
|
|
19
|
+
entrySpotActorType?: string;
|
|
20
|
+
}, entrySpotType: Type<ZLinkEntrySpot>, actorType: string): void;
|
|
20
21
|
export declare function registerSpotFactory(options: {
|
|
21
22
|
spotFactories?: Type<ZLinkSpot>[];
|
|
22
23
|
}, spotType: Type<ZLinkSpot>): void;
|
|
@@ -62,11 +62,15 @@ function validateSessionReplacementCallbackTimeout(timeoutMs) {
|
|
|
62
62
|
}
|
|
63
63
|
return timeoutMs;
|
|
64
64
|
}
|
|
65
|
-
function registerEntrySpot(options, entrySpotType) {
|
|
65
|
+
function registerEntrySpot(options, entrySpotType, actorType) {
|
|
66
66
|
if (options.entrySpotType !== undefined) {
|
|
67
67
|
throw new ConfigurationException_1.ZLinkConfigurationException('Duplicate Entry Spot registration on SpotNode.');
|
|
68
68
|
}
|
|
69
|
+
if (typeof actorType !== 'string' || actorType.length === 0) {
|
|
70
|
+
throw new ConfigurationException_1.ZLinkConfigurationException('Entry Spot Actor type must be a non-empty string.');
|
|
71
|
+
}
|
|
69
72
|
options.entrySpotType = entrySpotType;
|
|
73
|
+
options.entrySpotActorType = actorType;
|
|
70
74
|
}
|
|
71
75
|
function registerSpotFactory(options, spotType) {
|
|
72
76
|
options.spotFactories ??= [];
|
|
@@ -942,8 +942,8 @@ class DefaultMeshObjectServerBuilder {
|
|
|
942
942
|
this.meshName = meshName;
|
|
943
943
|
this.node = node;
|
|
944
944
|
}
|
|
945
|
-
addEntrySpot(entrySpotType) {
|
|
946
|
-
(0, RegistrationBuilderPolicy_1.registerEntrySpot)(this.node, entrySpotType);
|
|
945
|
+
addEntrySpot(entrySpotType, actorType) {
|
|
946
|
+
(0, RegistrationBuilderPolicy_1.registerEntrySpot)(this.node, entrySpotType, actorType);
|
|
947
947
|
return this;
|
|
948
948
|
}
|
|
949
949
|
addSpotFactory(spotType, implementation, configure) {
|
|
@@ -233,6 +233,7 @@ export interface ZLinkSpotNodeOptions {
|
|
|
233
233
|
readonly router?: ZLinkSpotRouterCapabilityOptions;
|
|
234
234
|
readonly pubSub?: ZLinkSpotPubSubCapabilityOptions;
|
|
235
235
|
readonly entrySpotType?: Type<ZLinkEntrySpot>;
|
|
236
|
+
readonly entrySpotActorType?: string;
|
|
236
237
|
readonly spotFactories?: readonly Type<ZLinkSpot>[];
|
|
237
238
|
readonly spotFactoryRegistrations?: Readonly<Record<string, ZLinkObjectFactoryRegistration<ZLinkSpot, ZLinkSpot, ZLinkUserSpotFactoryConfiguration>>>;
|
|
238
239
|
readonly instanceSpotFactories?: Readonly<Record<string, Type<ZLinkInstanceSpot>>>;
|
|
@@ -76,7 +76,7 @@ export interface ZLinkRuntimeMessageFlowEvent {
|
|
|
76
76
|
readonly commandId?: number;
|
|
77
77
|
readonly messageSize?: number;
|
|
78
78
|
readonly durationSeconds?: number;
|
|
79
|
-
readonly errorReason?: ZLinkDispatchErrorReason;
|
|
79
|
+
readonly errorReason?: ZLinkDispatchErrorReason | 'activation_timeout' | 'activation_rejected';
|
|
80
80
|
readonly errorAction?: ZLinkDispatchErrorAction;
|
|
81
81
|
readonly errorType?: string;
|
|
82
82
|
readonly errorMessage?: string;
|
|
@@ -162,7 +162,7 @@ export declare enum ZLinkDispatchMessageKind {
|
|
|
162
162
|
ActorRequest = "actorRequest",
|
|
163
163
|
ActorSend = "actorSend"
|
|
164
164
|
}
|
|
165
|
-
export type ZLinkDispatchErrorReason = 'no_handler' | 'decode_error' | 'handler_exception' | 'invalid_frame' | 'reply_path_missing' | 'unexpected_reply' | 'backpressure' | 'target_closed' | 'stale_target' | 'shutdown';
|
|
165
|
+
export type ZLinkDispatchErrorReason = 'no_handler' | 'decode_error' | 'handler_exception' | 'invalid_frame' | 'reply_path_missing' | 'unexpected_reply' | 'backpressure' | 'target_closed' | 'location_unavailable' | 'stale_target' | 'shutdown';
|
|
166
166
|
export type ZLinkDispatchErrorAction = 'reply_error' | 'fail_caller' | 'drop';
|
|
167
167
|
export declare enum ZLinkRuntimeDispatchErrorReason {
|
|
168
168
|
HandlerMissing = "no_handler",
|
|
@@ -22,6 +22,8 @@ export interface ZLinkObjectCapability {
|
|
|
22
22
|
readonly policy: ZLinkObjectMaintenancePolicyKind;
|
|
23
23
|
readonly hasSnapshotAdapter: boolean;
|
|
24
24
|
readonly limit: number;
|
|
25
|
+
/** True only for an Actor capability whose node registered an Entry Spot type accepting it. */
|
|
26
|
+
readonly entryAccepted: boolean;
|
|
25
27
|
}
|
|
26
28
|
export interface ZLinkPopulationCapacity {
|
|
27
29
|
readonly active: number;
|
|
@@ -9,11 +9,15 @@ export interface ZLinkActorHandlerRegistry {
|
|
|
9
9
|
addHandler<THandler>(handlerType: Type<THandler>, packetName?: string): this;
|
|
10
10
|
}
|
|
11
11
|
export interface ZLinkSpotHandlerRegistry extends ZLinkActorHandlerRegistry {
|
|
12
|
+
/** Declares a timer handler constructor for relocation without registering an endpoint. */
|
|
13
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkSpot>>(handlerType: Type<THandler>): this;
|
|
12
14
|
addPacket<THandler>(handlerType: Type<THandler>): this;
|
|
13
15
|
addSubscribe<THandler>(handlerType: Type<THandler>, channelName: string, topic: string): this;
|
|
14
16
|
}
|
|
15
17
|
export interface ZLinkInstanceSpotHandlerRegistry {
|
|
16
18
|
addPacket<THandler>(handlerType: Type<THandler>): this;
|
|
19
|
+
/** Declares a timer handler constructor for relocation without registering an endpoint. */
|
|
20
|
+
addTimerHandler<THandler extends ZLinkSpotTimerHandler<ZLinkInstanceSpot>>(handlerType: Type<THandler>): this;
|
|
17
21
|
}
|
|
18
22
|
export interface ZLinkWorkerCall<T> {
|
|
19
23
|
timeoutMs(durationMs: number): ZLinkWorkerCall<T>;
|
|
@@ -42,15 +42,15 @@ export interface ZLinkUserSpotActorLifecycle<TActor extends ZLinkActor = ZLinkAc
|
|
|
42
42
|
export interface ZLinkSpot<TActor extends ZLinkActor = ZLinkActor> extends ZLinkUserSpotActorLifecycle<TActor> {
|
|
43
43
|
readonly context: ZLinkSpotContext<TActor>;
|
|
44
44
|
configure?(): void;
|
|
45
|
-
onCreate?(request: ZLinkMessage): Promise<ZLinkSpotCreateResponse>;
|
|
46
|
-
onInitialize?(): Promise<void>;
|
|
45
|
+
onCreate?(request: ZLinkMessage, signal?: AbortSignal): Promise<ZLinkSpotCreateResponse>;
|
|
46
|
+
onInitialize?(signal?: AbortSignal): Promise<void>;
|
|
47
47
|
onClosing?(context: ZLinkSpotClosingContext, cleanupSignal: AbortSignal): Promise<void>;
|
|
48
48
|
onRelocationReadyCompleted?(completion: ZLinkSpotRelocationReadyCompletion): Promise<void>;
|
|
49
49
|
}
|
|
50
50
|
export interface ZLinkInstanceSpot {
|
|
51
51
|
readonly context: ZLinkInstanceSpotContext;
|
|
52
52
|
configure?(): void;
|
|
53
|
-
onInitialize?(): Promise<void>;
|
|
53
|
+
onInitialize?(signal?: AbortSignal): Promise<void>;
|
|
54
54
|
onClosing?(context: ZLinkSpotClosingContext, cleanupSignal: AbortSignal): Promise<void>;
|
|
55
55
|
}
|
|
56
56
|
export interface ZLinkEntrySpot<TActor extends ZLinkActor = ZLinkActor> extends ZLinkSpotActorMembershipLifecycle<TActor> {
|
package/dist/runtime/abort.d.ts
CHANGED
|
@@ -10,5 +10,10 @@ export declare function isAbortError(error: unknown): boolean;
|
|
|
10
10
|
export declare function createDeadlineExceededError(message?: string): ZLinkDeadlineExceededError;
|
|
11
11
|
export declare function isDeadlineExceededError(error: unknown): boolean;
|
|
12
12
|
export declare function throwIfAborted(signal: AbortSignal | undefined): void;
|
|
13
|
+
/**
|
|
14
|
+
* Whether a handler or dispatch result is a thenable the caller must wait
|
|
15
|
+
* for. Synchronous results, including null and undefined, are not.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isPromiseLike<T>(value: T | PromiseLike<T>): value is PromiseLike<T>;
|
|
13
18
|
export declare function macrotaskBoundary(): Promise<void>;
|
|
14
19
|
export declare function awaitWithAbort<T>(operation: Promise<T>, signal: AbortSignal | undefined, abortOperation?: () => void): Promise<T>;
|
package/dist/runtime/abort.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.isAbortError = isAbortError;
|
|
|
6
6
|
exports.createDeadlineExceededError = createDeadlineExceededError;
|
|
7
7
|
exports.isDeadlineExceededError = isDeadlineExceededError;
|
|
8
8
|
exports.throwIfAborted = throwIfAborted;
|
|
9
|
+
exports.isPromiseLike = isPromiseLike;
|
|
9
10
|
exports.macrotaskBoundary = macrotaskBoundary;
|
|
10
11
|
exports.awaitWithAbort = awaitWithAbort;
|
|
11
12
|
/** The typed cancellation error produced by Framework admission helpers. */
|
|
@@ -41,6 +42,15 @@ function throwIfAborted(signal) {
|
|
|
41
42
|
throw createAbortError();
|
|
42
43
|
}
|
|
43
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether a handler or dispatch result is a thenable the caller must wait
|
|
47
|
+
* for. Synchronous results, including null and undefined, are not.
|
|
48
|
+
*/
|
|
49
|
+
function isPromiseLike(value) {
|
|
50
|
+
return (value !== null &&
|
|
51
|
+
(typeof value === 'object' || typeof value === 'function') &&
|
|
52
|
+
typeof value.then === 'function');
|
|
53
|
+
}
|
|
44
54
|
function macrotaskBoundary() {
|
|
45
55
|
return new Promise((resolve) => setImmediate(resolve));
|
|
46
56
|
}
|
|
@@ -7,6 +7,7 @@ exports.decodeRelocatingActorAuthorityIdentity = decodeRelocatingActorAuthorityI
|
|
|
7
7
|
exports.rewriteActorAuthorityRoute = rewriteActorAuthorityRoute;
|
|
8
8
|
exports.rewriteActorAuthorityOwner = rewriteActorAuthorityOwner;
|
|
9
9
|
exports.isActorAuthorityPayload = isActorAuthorityPayload;
|
|
10
|
+
const routing_id_1 = require("../routing-id");
|
|
10
11
|
const node_crypto_1 = require("node:crypto");
|
|
11
12
|
const creation_operation_id_1 = require("../locations/creation-operation-id");
|
|
12
13
|
const actor_authority_payload_codec_1 = require("./actor-authority-payload-codec");
|
|
@@ -197,7 +198,7 @@ function requireActorAuthority(snapshot, expected) {
|
|
|
197
198
|
snapshot.allocation.objectKind !== 'actor' ||
|
|
198
199
|
snapshot.allocation.stableType !== expected.actorType ||
|
|
199
200
|
snapshot.allocation.descriptor.meshName !== expected.meshName ||
|
|
200
|
-
|
|
201
|
+
!(0, routing_id_1.routingIdsEqual)(snapshot.allocation.descriptor.rid, expected.actor.nodeRid) ||
|
|
201
202
|
snapshot.allocation.descriptorLifecycleGeneration !== expected.ownerNodeGeneration ||
|
|
202
203
|
snapshot.ownerId !== expected.owner.ownerId ||
|
|
203
204
|
snapshot.ownerLeaseGeneration !== expected.owner.leaseGeneration ||
|
|
@@ -205,7 +206,7 @@ function requireActorAuthority(snapshot, expected) {
|
|
|
205
206
|
actual.actorType !== expected.actorType ||
|
|
206
207
|
actual.actor.actorId !== expected.actor.actorId ||
|
|
207
208
|
actual.actor.objectGeneration !== expected.actor.objectGeneration ||
|
|
208
|
-
|
|
209
|
+
!(0, routing_id_1.routingIdsEqual)(actual.actor.nodeRid, expected.actor.nodeRid)) {
|
|
209
210
|
throw new Error(`Actor '${expected.actor.actorId}' authority fence does not match its ActorRef.`);
|
|
210
211
|
}
|
|
211
212
|
}
|
|
@@ -33,4 +33,3 @@ export declare class DefaultZLinkActorClient implements ZLinkActorClient {
|
|
|
33
33
|
private submitActorRequest;
|
|
34
34
|
private requireNode;
|
|
35
35
|
}
|
|
36
|
-
export declare function forwardEncodedActorPacket(node: ZLinkBackendMeshNode, completions: ZLinkMeshCompletionTable, actor: ActorRef, header: Buffer, payload: Buffer, returnResponse: boolean, timeoutMs: number | undefined, serializers?: ReadonlyMap<string, ZLinkMessageSerializer>): Promise<unknown>;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkActorClient = void 0;
|
|
4
|
-
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const channel_envelope_1 = require("../channels/channel-envelope");
|
|
6
|
+
const routing_id_1 = require("../routing-id");
|
|
5
7
|
const stream_wire_1 = require("@zlink-systems/stream-wire");
|
|
6
8
|
const request_result_1 = require("../messaging/request-result");
|
|
7
9
|
const contracts_1 = require("../../contracts");
|
|
@@ -57,7 +59,7 @@ class DefaultZLinkActorClient {
|
|
|
57
59
|
}
|
|
58
60
|
const node = this.requireNode(meshName);
|
|
59
61
|
if (this.options.routeTransport !== undefined &&
|
|
60
|
-
|
|
62
|
+
!(0, routing_id_1.routingIdsEqual)(node.status().routingId, actor.nodeRid)) {
|
|
61
63
|
await this.options.routeTransport.sendToSpot(remoteActorRouteTarget(route), (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
|
|
62
64
|
actorId,
|
|
63
65
|
header: parts[0].data(),
|
|
@@ -69,7 +71,7 @@ class DefaultZLinkActorClient {
|
|
|
69
71
|
}), { packetName: actor_packet_relay_wire_1.ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET });
|
|
70
72
|
return { status: submission_result_1.ZLinkSubmitStatus.Submitted };
|
|
71
73
|
}
|
|
72
|
-
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts);
|
|
74
|
+
return await this.submitActorSend(meshName, toBackendActorRef(actor), parts, route);
|
|
73
75
|
}
|
|
74
76
|
catch (error) {
|
|
75
77
|
if (isStaleActorError(error)) {
|
|
@@ -191,11 +193,12 @@ class DefaultZLinkActorClient {
|
|
|
191
193
|
throw error;
|
|
192
194
|
}
|
|
193
195
|
}
|
|
194
|
-
async submitActorSend(meshName, actor, parts) {
|
|
196
|
+
async submitActorSend(meshName, actor, parts, route) {
|
|
195
197
|
const node = this.requireNode(meshName);
|
|
196
198
|
try {
|
|
197
199
|
return (0, submission_result_1.classifySubmitResult)(await node.sendToActor(actor, toMessageLikeParts(parts), {
|
|
198
|
-
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE
|
|
200
|
+
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
|
|
201
|
+
routeFence: nativeActorRouteFence(route, actor)
|
|
199
202
|
}), 'Actor send');
|
|
200
203
|
}
|
|
201
204
|
catch (error) {
|
|
@@ -208,8 +211,7 @@ class DefaultZLinkActorClient {
|
|
|
208
211
|
async submitActorRequest(meshName, actor, parts, timeoutMs, signal, route, messageFollowContext, onAdmitted) {
|
|
209
212
|
const node = this.requireNode(meshName);
|
|
210
213
|
if (this.options.routeTransport !== undefined &&
|
|
211
|
-
|
|
212
|
-
route !== undefined) {
|
|
214
|
+
!(0, routing_id_1.routingIdsEqual)(node.status().routingId, actor.nodeRid)) {
|
|
213
215
|
const relay = (0, actor_packet_relay_wire_1.encodeRemoteActorPacketRelayPayload)({
|
|
214
216
|
actorId: actor.actorId,
|
|
215
217
|
header: parts[0].data(),
|
|
@@ -243,6 +245,7 @@ class DefaultZLinkActorClient {
|
|
|
243
245
|
}
|
|
244
246
|
const completion = await completions.submit(() => node.requestToActor(actor, toMessageLikeParts(parts), {
|
|
245
247
|
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
|
|
248
|
+
routeFence: nativeActorRouteFence(route, actor),
|
|
246
249
|
timeoutMs,
|
|
247
250
|
onAdmitted
|
|
248
251
|
}), signal);
|
|
@@ -261,6 +264,14 @@ class DefaultZLinkActorClient {
|
|
|
261
264
|
}
|
|
262
265
|
}
|
|
263
266
|
exports.DefaultZLinkActorClient = DefaultZLinkActorClient;
|
|
267
|
+
function nativeActorRouteFence(route, actor) {
|
|
268
|
+
return {
|
|
269
|
+
actor,
|
|
270
|
+
targetNodeGeneration: route.ownerNodeGeneration,
|
|
271
|
+
authorityOwnerGeneration: route.authorityOwnerGeneration,
|
|
272
|
+
ownerLeaseGeneration: route.ownerLeaseGeneration
|
|
273
|
+
};
|
|
274
|
+
}
|
|
264
275
|
function remoteActorRouteTarget(route) {
|
|
265
276
|
if (route.enclosingSpotRoute !== undefined) {
|
|
266
277
|
return route.enclosingSpotRoute;
|
|
@@ -304,27 +315,6 @@ function requireActorId(actorId) {
|
|
|
304
315
|
throw new configuration_1.ZLinkConfigurationException(`Actor ID must contain 1..${CoreTypes_1.ZLINK_MAX_ACTOR_ID_BYTES} UTF-8 bytes.`);
|
|
305
316
|
}
|
|
306
317
|
}
|
|
307
|
-
async function forwardEncodedActorPacket(node, completions, actor, header, payload, returnResponse, timeoutMs, serializers) {
|
|
308
|
-
const target = toBackendActorRef(actor);
|
|
309
|
-
const parts = [header, payload];
|
|
310
|
-
const packetName = (0, protocol_1.decodeStreamHeader)(header).name;
|
|
311
|
-
if (!returnResponse) {
|
|
312
|
-
if ((await node.sendToActor(target, parts, { flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE })) !==
|
|
313
|
-
runtime_values_1.SubmitResult.Ok) {
|
|
314
|
-
throw routeNotConnected('Actor handoff send submit was not accepted.');
|
|
315
|
-
}
|
|
316
|
-
return undefined;
|
|
317
|
-
}
|
|
318
|
-
const completion = await completions.submit(() => node.requestToActor(target, parts, {
|
|
319
|
-
flags: runtime_values_1.ZLINK_BACKEND_SEND_NONE,
|
|
320
|
-
timeoutMs
|
|
321
|
-
}));
|
|
322
|
-
if (completion.terminalResult !== runtime_values_1.RequestResult.Ok) {
|
|
323
|
-
(0, backend_1.closeMeshCompletion)(completion);
|
|
324
|
-
throw mapRequestResult(completion.terminalResult, completion.failureErrno, 'Actor handoff request');
|
|
325
|
-
}
|
|
326
|
-
return decodeActorReply(completion.parts, serializers, packetName);
|
|
327
|
-
}
|
|
328
318
|
function toBackendActorRef(actor) {
|
|
329
319
|
return {
|
|
330
320
|
nodeRid: actor.nodeRid,
|
|
@@ -414,7 +404,7 @@ class DefaultZLinkActorRequestCall {
|
|
|
414
404
|
this.rejectSelfActorRequest();
|
|
415
405
|
const turn = (0, execution_1.requireZLinkYieldTurn)(this.turn);
|
|
416
406
|
const pending = this.execute('yield', signal);
|
|
417
|
-
return turn.
|
|
407
|
+
return turn.yieldFrameworkPromise(pending);
|
|
418
408
|
}
|
|
419
409
|
execute(waitPolicy, signal, onAdmitted) {
|
|
420
410
|
ensureSingleSubmit(this.executed);
|
|
@@ -442,18 +432,14 @@ function decodeActorReply(reply, serializers, packetName) {
|
|
|
442
432
|
const header = (0, protocol_1.decodeStreamHeader)(frame.header);
|
|
443
433
|
const payload = runtime_message_1.ZLinkBufferMessage.from(frame.payload);
|
|
444
434
|
try {
|
|
445
|
-
return decodeActorReplyPayload(header.kind, payload, serializers, packetName);
|
|
435
|
+
return decodeActorReplyPayload(header.kind, header.codec, payload, serializers, packetName);
|
|
446
436
|
}
|
|
447
437
|
finally {
|
|
448
438
|
payload.close();
|
|
449
439
|
}
|
|
450
440
|
}
|
|
451
441
|
}
|
|
452
|
-
|
|
453
|
-
const header = (0, protocol_1.decodeStreamHeader)(reply[0].data());
|
|
454
|
-
return decodeActorReplyPayload(header.kind, reply[1], serializers, packetName);
|
|
455
|
-
}
|
|
456
|
-
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor request reply is empty.');
|
|
442
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor request reply must contain one valid STREAM frame.');
|
|
457
443
|
}
|
|
458
444
|
finally {
|
|
459
445
|
closeMessages(reply);
|
|
@@ -463,17 +449,24 @@ function closeMessages(parts) {
|
|
|
463
449
|
for (const part of parts)
|
|
464
450
|
part.close();
|
|
465
451
|
}
|
|
466
|
-
function decodeActorReplyPayload(kind, payload, serializers, packetName) {
|
|
452
|
+
function decodeActorReplyPayload(kind, codec, payload, serializers, packetName) {
|
|
467
453
|
if (kind === protocol_1.ZLinkStreamMessageKind.Error) {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
454
|
+
if (codec !== protocol_1.ZLinkStreamCodec.Json || !(0, node_buffer_1.isUtf8)(payload.data())) {
|
|
455
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor Error reply requires UTF-8 JSON.');
|
|
456
|
+
}
|
|
457
|
+
const error = (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload);
|
|
458
|
+
if (typeof error !== 'object' ||
|
|
459
|
+
error === null ||
|
|
460
|
+
typeof error.code !== 'string' ||
|
|
461
|
+
typeof error.message !== 'string') {
|
|
462
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, 'Actor Error reply requires code and message strings.');
|
|
463
|
+
}
|
|
464
|
+
const wire = error;
|
|
465
|
+
const kind = (0, channel_envelope_1.channelErrorKindFromCode)(wire.code);
|
|
466
|
+
if (kind === undefined) {
|
|
467
|
+
throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestProtocolError, `Actor Error reply uses an unknown error code '${wire.code}'.`);
|
|
468
|
+
}
|
|
469
|
+
throw new contracts_1.ZLinkFrameworkException(kind, wire.message);
|
|
477
470
|
}
|
|
478
471
|
return (0, payload_codec_1.decodeFrameworkPayloadMessage)(payload, serializers, undefined, stream_wire_1.ZlinkStreamContentType.Json, packetName, 'reply');
|
|
479
472
|
}
|
|
@@ -13,6 +13,8 @@ export declare class DefaultZLinkActorContext implements ZLinkActorContext {
|
|
|
13
13
|
constructor(state: ZLinkActorRuntimeState, joinCoordinator: ZLinkActorJoinCoordinator | undefined, boundSessionFactory: ZLinkActorBoundSessionFactory | undefined, messageSerializers: ReadonlyMap<string, ZLinkMessageSerializer> | undefined, meshNameProvider: ZLinkActorManagerOptions['actorMeshNameProvider']);
|
|
14
14
|
get meshName(): string;
|
|
15
15
|
get actorId(): string;
|
|
16
|
+
/** Actor-turn view of the single current Session binding (§7). */
|
|
17
|
+
get currentSessionBinding(): import("./actor-runtime-state").ZLinkRemoteBoundSessionTarget | undefined;
|
|
16
18
|
get objectGeneration(): bigint;
|
|
17
19
|
get spotId(): SpotId | undefined;
|
|
18
20
|
[ZLINK_ACTOR_LIFECYCLE_SNAPSHOT](): ZLinkActorLifecycleSnapshotSource;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultZLinkActorContext = exports.ZLINK_ACTOR_JOIN_ENTRY_SPOT_RUNTIME = void 0;
|
|
4
|
+
const routing_id_1 = require("../routing-id");
|
|
4
5
|
const contracts_1 = require("../../contracts");
|
|
5
6
|
const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
|
|
6
7
|
const runtime_message_1 = require("../backend/runtime-message");
|
|
@@ -53,6 +54,10 @@ class DefaultZLinkActorContext {
|
|
|
53
54
|
get actorId() {
|
|
54
55
|
return this.state.actorId;
|
|
55
56
|
}
|
|
57
|
+
/** Actor-turn view of the single current Session binding (§7). */
|
|
58
|
+
get currentSessionBinding() {
|
|
59
|
+
return this.state.boundSession;
|
|
60
|
+
}
|
|
56
61
|
get objectGeneration() {
|
|
57
62
|
return this.state.nativeActorRef?.generation ?? 1n;
|
|
58
63
|
}
|
|
@@ -200,10 +205,25 @@ class DefaultZLinkActorJoinSpotCall {
|
|
|
200
205
|
deadline.close();
|
|
201
206
|
requestMessage.close();
|
|
202
207
|
}
|
|
208
|
+
if (result.sourceCleanup !== undefined) {
|
|
209
|
+
// Infrastructure cleanup has its own terminal, outside the public Failed conversion.
|
|
210
|
+
try {
|
|
211
|
+
const cleanup = result.sourceCleanup();
|
|
212
|
+
await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop);
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
this.state.endDeferredJoin();
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
203
223
|
if (!result.accepted ||
|
|
204
224
|
sourceNodeRid === undefined ||
|
|
205
225
|
result.actor === undefined ||
|
|
206
|
-
|
|
226
|
+
(0, routing_id_1.routingIdsEqual)(sourceNodeRid, result.actor.nodeRid)) {
|
|
207
227
|
await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
|
|
208
228
|
}
|
|
209
229
|
else {
|
|
@@ -322,10 +342,25 @@ class DefaultZLinkActorJoinEntrySpotCall {
|
|
|
322
342
|
deadline.close();
|
|
323
343
|
requestMessage.close();
|
|
324
344
|
}
|
|
345
|
+
if (result.sourceCleanup !== undefined) {
|
|
346
|
+
// Infrastructure cleanup has its own terminal, outside the public Failed conversion.
|
|
347
|
+
try {
|
|
348
|
+
const cleanup = result.sourceCleanup();
|
|
349
|
+
await (this.turn === undefined ? cleanup : this.turn.yieldFrameworkPromise(cleanup));
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
traceJoinError(this.actor, error, this.coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop);
|
|
353
|
+
throw error;
|
|
354
|
+
}
|
|
355
|
+
finally {
|
|
356
|
+
this.state.endDeferredJoin();
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
325
360
|
if (!result.accepted ||
|
|
326
361
|
sourceNodeRid === undefined ||
|
|
327
362
|
result.actor === undefined ||
|
|
328
|
-
|
|
363
|
+
(0, routing_id_1.routingIdsEqual)(sourceNodeRid, result.actor.nodeRid)) {
|
|
329
364
|
await notifyJoinCompletion(this.actor, operationId, result, this.messageSerializers);
|
|
330
365
|
}
|
|
331
366
|
else {
|
|
@@ -430,10 +465,17 @@ async function notifyJoinCompletion(actor, operationId, result, _messageSerializ
|
|
|
430
465
|
await actor.onJoinCompleted?.(completion);
|
|
431
466
|
}
|
|
432
467
|
async function notifyJoinFailure(actor, operationId, error, coordinator) {
|
|
433
|
-
console.error(`actor join failure actor=${actor.context.actorId}`, error);
|
|
434
468
|
const frameworkError = error instanceof contracts_1.ZLinkFrameworkException
|
|
435
469
|
? error
|
|
436
470
|
: (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'Deferred actor join failed.', false, error);
|
|
471
|
+
traceJoinError(actor, error, coordinator, ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError);
|
|
472
|
+
await actor.onJoinCompleted?.({
|
|
473
|
+
status: 'failed',
|
|
474
|
+
operationId,
|
|
475
|
+
kind: frameworkError.kind
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
function traceJoinError(actor, error, coordinator, errorAction) {
|
|
437
479
|
// The completion carries only an error kind, so trace the cause on the
|
|
438
480
|
// message flow under the same flow id as the Join that produced it.
|
|
439
481
|
const tracePoint = coordinator?.messageFlow?.()?.begin(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Error);
|
|
@@ -445,13 +487,8 @@ async function notifyJoinFailure(actor, operationId, error, coordinator) {
|
|
|
445
487
|
packetName: 'JoinSpot',
|
|
446
488
|
actorId: actor.context.actorId,
|
|
447
489
|
errorReason: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException,
|
|
448
|
-
errorAction
|
|
490
|
+
errorAction,
|
|
449
491
|
errorType: errorDetails?.errorType,
|
|
450
492
|
errorMessage: errorDetails?.errorMessage
|
|
451
493
|
});
|
|
452
|
-
await actor.onJoinCompleted?.({
|
|
453
|
-
status: 'failed',
|
|
454
|
-
operationId,
|
|
455
|
-
kind: frameworkError.kind
|
|
456
|
-
});
|
|
457
494
|
}
|
|
@@ -8,6 +8,7 @@ import { type ZLinkActorMessageFollowContext, type ZLinkActorMessageFollowOwnerF
|
|
|
8
8
|
import type { ZLinkActorRoutedJoinTransport } from './actor-routed-join-transport';
|
|
9
9
|
import type { ZLinkRemoteBoundSessionTarget } from './actor-runtime-state';
|
|
10
10
|
export declare const DEFAULT_MESSAGE_FOLLOW_DURATION_MS: number;
|
|
11
|
+
export declare const RELOCATED_REQUEST_OWNED_BY_REQUESTER: unique symbol;
|
|
11
12
|
export interface ZLinkActorHandoffPacket {
|
|
12
13
|
readonly index: number;
|
|
13
14
|
readonly header: string;
|
|
@@ -36,6 +37,7 @@ export interface ZLinkActorHandoffRequestSource {
|
|
|
36
37
|
readonly ownerId: string;
|
|
37
38
|
readonly ownerLeaseGeneration: string;
|
|
38
39
|
readonly nodeRid: string;
|
|
40
|
+
readonly nodeRidHex?: string;
|
|
39
41
|
readonly nodeGeneration: string;
|
|
40
42
|
readonly replyRouteId: string;
|
|
41
43
|
}
|
|
@@ -63,6 +65,7 @@ export interface ZLinkActorHandoffPrefixAdmission {
|
|
|
63
65
|
readonly terminal: Promise<void>;
|
|
64
66
|
}
|
|
65
67
|
export interface ZLinkActorHandoffPrefixRecord {
|
|
68
|
+
readonly onWithdrawable?: (withdraw: () => boolean) => void;
|
|
66
69
|
readonly drain: (dispatch: ZLinkActorHandoffDispatch) => Promise<void>;
|
|
67
70
|
readonly preparation?: {
|
|
68
71
|
prepare(signal: AbortSignal): Promise<void>;
|
|
@@ -118,13 +121,15 @@ export declare class ZLinkActorHandoffCoordinator {
|
|
|
118
121
|
begin(actorId: string, oldGeneration: bigint): void;
|
|
119
122
|
beginProvisional(actorId: string, oldGeneration: bigint): void;
|
|
120
123
|
private startHandoff;
|
|
124
|
+
/** True while a hold owns this Actor's ingress, before its release to the Actor FIFO. */
|
|
121
125
|
isActive(actorId: string): boolean;
|
|
122
126
|
isProvisional(actorId: string): boolean;
|
|
123
|
-
promoteProvisional(actorId: string): void;
|
|
124
127
|
sealConnectionBoundIngress(actorId: string): void;
|
|
125
128
|
activeSourceOwner(actorId: string): ZLinkActorMessageFollowOwnerFence | undefined;
|
|
126
129
|
releaseDeferred(actorId: string, dispatch?: ZLinkActorHandoffDispatch, admission?: ZLinkActorHandoffReplayAdmission): Promise<void>;
|
|
127
130
|
releaseCanceled(actorId: string, dispatch: ZLinkActorHandoffDispatch, admission?: ZLinkActorHandoffReplayAdmission): Promise<void>;
|
|
131
|
+
/** Installs a restored target's payload in the same owner used by local handoffs. */
|
|
132
|
+
admitTransferredPrefix(actorId: string, objectGeneration: bigint, packets: readonly ZLinkActorHandoffPacket[], queue: ZLinkActorHandoffPrefixQueue, preparation: ZLinkActorHandoffReplayPreparation | undefined, start: Promise<void>, onResult: (packet: ZLinkActorHandoffPacket, result: ZLinkActorHandoffResult) => void): ZLinkActorHandoffPrefixAdmission;
|
|
128
133
|
private admitHandoffPrefix;
|
|
129
134
|
private admitPendingPrefix;
|
|
130
135
|
private createPrefixRecord;
|
|
@@ -144,7 +149,6 @@ export declare class ZLinkActorHandoffCoordinator {
|
|
|
144
149
|
cancel(actorId: string): void;
|
|
145
150
|
capture(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, deadlineUnixMs?: number, messageFollowOrigin?: ZLinkMessageFollowOrigin, provisionalReplay?: ZLinkActorHandoffDispatch, onAdmitted?: () => void): Promise<unknown> | undefined;
|
|
146
151
|
snapshot(actorId: string): readonly ZLinkActorHandoffPacket[];
|
|
147
|
-
snapshotCoreBacklog(actorId: string): readonly ZLinkActorHandoffPacket[];
|
|
148
152
|
/**
|
|
149
153
|
* Freezes the post-capture ingress segment immediately before the caller
|
|
150
154
|
* appends the one-way cutover on the same relocation lane. Records returned
|
|
@@ -152,7 +156,7 @@ export declare class ZLinkActorHandoffCoordinator {
|
|
|
152
156
|
* from the later Message Follow tail.
|
|
153
157
|
*/
|
|
154
158
|
takeRelocationRelay(actorId: string): readonly ZLinkActorHandoffPacket[];
|
|
155
|
-
complete(actorId: string, target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, results: readonly ZLinkActorHandoffResult[], targetOwnerFence: ZLinkActorMessageFollowOwnerFence): void;
|
|
159
|
+
complete(actorId: string, target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, results: readonly ZLinkActorHandoffResult[], targetOwnerFence: ZLinkActorMessageFollowOwnerFence | null): void;
|
|
156
160
|
messageFollowCount(actorId?: string): number;
|
|
157
161
|
pendingCount(actorId: string): number;
|
|
158
162
|
isKnownStale(actor: ActorRef): boolean;
|