@zlink-systems/framework 0.29.1 → 0.30.1
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/ZLinkMessageMetadata.js +11 -5
- package/dist/contracts/Configuration/Builders.d.ts +1 -2
- package/dist/contracts/Configuration/Configs.d.ts +0 -5
- package/dist/contracts/Configuration/RegistrationBuilders.js +6 -4
- package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -6
- package/dist/contracts/Configuration/RegistrationValidators.js +4 -4
- package/dist/contracts/Configuration/index.d.ts +1 -1
- 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/Spots/Contracts.d.ts +2 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.js +3 -1
- package/dist/nest-integration.d.ts +1 -1
- package/dist/nest-integration.js +2 -1
- package/dist/runtime/actors/actor-client.d.ts +1 -1
- package/dist/runtime/actors/actor-client.js +14 -12
- package/dist/runtime/actors/actor-handoff.d.ts +3 -2
- package/dist/runtime/actors/actor-handoff.js +15 -7
- package/dist/runtime/actors/actor-join-relocation.d.ts +1 -0
- package/dist/runtime/actors/actor-local-native-join.js +9 -12
- package/dist/runtime/actors/actor-remote-wire.js +15 -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/index.d.ts +2 -1
- package/dist/runtime/actors/index.js +18 -6
- package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
- package/dist/runtime/admission.d.ts +1 -1
- package/dist/runtime/admission.js +15 -5
- package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +9 -9
- package/dist/runtime/application-jobs/application-ingress-record-owner.js +45 -23
- package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +5 -2
- package/dist/runtime/application-jobs/application-job-queue-scope.js +41 -21
- package/dist/runtime/application-jobs/contracts.d.ts +15 -2
- package/dist/runtime/backend/contracts/index.d.ts +27 -27
- package/dist/runtime/backend/mesh-completion-table.d.ts +15 -5
- package/dist/runtime/backend/mesh-completion-table.js +160 -50
- package/dist/runtime/backend/mesh-dispatch-pump.d.ts +3 -0
- package/dist/runtime/backend/mesh-dispatch-pump.js +53 -36
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +6 -1
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +33 -31
- 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-mesh-backend-adapter.d.ts +1 -9
- package/dist/runtime/backend/node/node-mesh-backend-adapter.js +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +50 -25
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +22 -16
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +133 -149
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +15 -10
- package/dist/runtime/backend/raw-binding-port.d.ts +10 -3
- 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 +1 -0
- package/dist/runtime/channels/channel-clients.js +58 -21
- package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +3 -2
- package/dist/runtime/channels/channel-dispatch-pipeline.js +20 -11
- 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 +1 -1
- package/dist/runtime/channels/channel-dispatchers.js +27 -26
- 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 +1 -0
- package/dist/runtime/channels/channel-envelope.js +83 -8
- 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-receive-loops.js +3 -3
- package/dist/runtime/channels/channel-runtime-lifecycle.js +2 -1
- package/dist/runtime/channels/channel-runtime-manager.d.ts +6 -6
- package/dist/runtime/channels/channel-runtime-manager.js +12 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +10 -3
- package/dist/runtime/channels/channel-socket-registry.js +59 -82
- package/dist/runtime/channels/channel-transports.d.ts +18 -15
- package/dist/runtime/channels/channel-transports.js +48 -31
- 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/message-flow.d.ts +1 -0
- package/dist/runtime/diagnostics/message-flow.js +3 -3
- package/dist/runtime/execution/serial-execution-queue.d.ts +1 -0
- package/dist/runtime/execution/serial-execution-queue.js +1 -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/raw-service-mesh-runtime.d.ts +37 -6
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +473 -220
- package/dist/runtime/foundation/service-liveness-registry.d.ts +20 -8
- package/dist/runtime/foundation/service-liveness-registry.js +57 -44
- package/dist/runtime/foundation/service-mailbox.d.ts +3 -0
- package/dist/runtime/foundation/service-mailbox.js +2 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +1 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +1 -0
- package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
- package/dist/runtime/foundation/service-relocation-runtime.js +13 -1
- package/dist/runtime/foundation/service-runtime-contracts.d.ts +2 -0
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +10 -9
- package/dist/runtime/foundation/service-stateful-runtime.js +78 -126
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +5 -7
- package/dist/runtime/foundation/service-stateful-wire-codec.js +43 -61
- package/dist/runtime/foundation/service-topology-registry.d.ts +16 -4
- package/dist/runtime/foundation/service-topology-registry.js +69 -30
- package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +3 -3
- package/dist/runtime/foundation/service-wire-m6a-codec.js +36 -38
- 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.js +7 -7
- package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
- package/dist/runtime/host/application-job-queue.d.ts +28 -9
- package/dist/runtime/host/application-job-queue.js +214 -50
- package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
- package/dist/runtime/host/entry-actor-runtime.js +4 -1
- package/dist/runtime/host/index.d.ts +7 -1
- package/dist/runtime/host/index.js +154 -126
- package/dist/runtime/host/instance-activation-authority.d.ts +2 -1
- package/dist/runtime/host/instance-activation-authority.js +89 -25
- package/dist/runtime/host/remote-bound-session-relay.js +2 -18
- package/dist/runtime/host/route-mesh-runtime.js +1 -1
- 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 +6 -8
- package/dist/runtime/host/service-relocation-host-runtime.js +215 -243
- package/dist/runtime/host/spot-address-transport.d.ts +1 -0
- package/dist/runtime/host/spot-address-transport.js +28 -14
- package/dist/runtime/host/spot-runtime-options-factory.js +3 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +1 -0
- package/dist/runtime/host/user-spot-creation-coordinator.js +1 -0
- 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/domain-store-contract.d.ts +2 -2
- package/dist/runtime/locations/in-memory-authority-store.d.ts +4 -2
- package/dist/runtime/locations/in-memory-authority-store.js +80 -8
- package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
- package/dist/runtime/locations/in-memory-location-store.js +19 -3
- package/dist/runtime/locations/internal-location-contracts.d.ts +3 -0
- 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 +3 -2
- package/dist/runtime/locations/location-store-repository.js +165 -22
- package/dist/runtime/locations/resolvers.d.ts +2 -1
- package/dist/runtime/locations/resolvers.js +10 -1
- package/dist/runtime/locations/runtime.d.ts +1 -1
- package/dist/runtime/locations/runtime.js +24 -23
- 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/request-result.d.ts +2 -0
- package/dist/runtime/messaging/request-result.js +54 -0
- package/dist/runtime/messaging/submission-result.d.ts +2 -1
- package/dist/runtime/messaging/submission-result.js +7 -4
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +15 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +144 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +9 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +14 -1
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +9 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +33 -19
- package/dist/runtime/spots/index.d.ts +7 -3
- package/dist/runtime/spots/index.js +23 -16
- package/dist/runtime/spots/spot-activation.d.ts +3 -1
- package/dist/runtime/spots/spot-activation.js +21 -12
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +2 -1
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +11 -10
- package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +4 -1
- package/dist/runtime/spots/spot-actor-packet-dispatch.js +7 -5
- package/dist/runtime/spots/spot-actor-packet-drain.js +2 -0
- package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -0
- package/dist/runtime/spots/spot-entry-activation.js +9 -3
- package/dist/runtime/spots/spot-handler-registry.d.ts +3 -1
- package/dist/runtime/spots/spot-handler-registry.js +18 -8
- package/dist/runtime/spots/spot-node-autoconnect.js +4 -3
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +2 -1
- package/dist/runtime/spots/spot-node-runtime-manager.js +4 -11
- package/dist/runtime/spots/spot-outbound.d.ts +3 -0
- package/dist/runtime/spots/spot-outbound.js +24 -15
- 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-routing-internal.d.ts +6 -0
- package/dist/runtime/spots/spot-runtime-ports.d.ts +3 -1
- package/dist/runtime/spots/spot-subscription-dispatch.js +0 -3
- package/dist/runtime/spots/spot-timer.js +1 -0
- package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
- package/dist/runtime/streams/stream-session-runtime.js +14 -28
- 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/ZLinkMessageMetadata.ts +13 -8
- package/src/contracts/Configuration/Builders.ts +1 -2
- package/src/contracts/Configuration/Configs.ts +0 -6
- package/src/contracts/Configuration/RegistrationBuilders.ts +8 -12
- package/src/contracts/Configuration/RegistrationTypes.ts +1 -6
- package/src/contracts/Configuration/RegistrationValidators.ts +9 -10
- package/src/contracts/Configuration/index.ts +1 -6
- package/src/contracts/Handlers/Attributes.ts +14 -21
- package/src/contracts/Handlers/JsonContract.ts +8 -216
- package/src/contracts/Spots/Contracts.ts +2 -1
- package/src/internal.ts +1 -0
- package/src/nest-integration.ts +1 -0
- package/src/runtime/actors/actor-client.ts +40 -16
- package/src/runtime/actors/actor-handoff.ts +22 -8
- package/src/runtime/actors/actor-join-relocation.ts +1 -0
- package/src/runtime/actors/actor-local-native-join.ts +17 -26
- package/src/runtime/actors/actor-remote-wire.ts +17 -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/index.ts +19 -5
- package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
- package/src/runtime/admission.ts +18 -5
- package/src/runtime/application-jobs/application-ingress-record-owner.ts +53 -27
- package/src/runtime/application-jobs/application-job-queue-scope.ts +56 -22
- package/src/runtime/application-jobs/contracts.ts +28 -2
- package/src/runtime/backend/contracts/index.ts +63 -32
- package/src/runtime/backend/mesh-completion-table.ts +175 -59
- package/src/runtime/backend/mesh-dispatch-pump.ts +59 -32
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +12 -5
- package/src/runtime/backend/node/node-backend-adapter-support.ts +42 -31
- package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
- package/src/runtime/backend/node/node-mesh-backend-adapter.ts +3 -10
- package/src/runtime/backend/node/node-raw-binding-port.ts +73 -37
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +209 -176
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +32 -13
- package/src/runtime/backend/raw-binding-port.ts +18 -3
- 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 +90 -41
- package/src/runtime/channels/channel-dispatch-pipeline.ts +69 -34
- package/src/runtime/channels/channel-dispatch-services.ts +69 -1
- package/src/runtime/channels/channel-dispatchers.ts +29 -27
- package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
- package/src/runtime/channels/channel-envelope.ts +133 -8
- package/src/runtime/channels/channel-outbound-operations.ts +22 -8
- package/src/runtime/channels/channel-receive-loops.ts +3 -3
- package/src/runtime/channels/channel-runtime-lifecycle.ts +7 -1
- package/src/runtime/channels/channel-runtime-manager.ts +29 -12
- package/src/runtime/channels/channel-socket-registry.ts +84 -130
- package/src/runtime/channels/channel-transports.ts +128 -60
- 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/message-flow.ts +1 -1
- package/src/runtime/execution/serial-execution-queue.ts +2 -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/raw-service-mesh-runtime.ts +642 -253
- package/src/runtime/foundation/service-liveness-registry.ts +68 -59
- package/src/runtime/foundation/service-mailbox.ts +7 -1
- package/src/runtime/foundation/service-relocation-object-owner.ts +2 -0
- package/src/runtime/foundation/service-relocation-runtime.ts +18 -1
- package/src/runtime/foundation/service-runtime-contracts.ts +7 -1
- package/src/runtime/foundation/service-stateful-runtime.ts +128 -160
- package/src/runtime/foundation/service-stateful-wire-codec.ts +55 -84
- package/src/runtime/foundation/service-topology-registry.ts +103 -42
- package/src/runtime/foundation/service-wire-m6a-codec.ts +57 -38
- package/src/runtime/handlers/handler-instance-scope.ts +67 -16
- package/src/runtime/host/actor-packet-relay.ts +7 -0
- package/src/runtime/host/actor-runtime-options-factory.ts +14 -2
- package/src/runtime/host/application-job-queue.ts +249 -48
- package/src/runtime/host/entry-actor-runtime.ts +5 -0
- package/src/runtime/host/index.ts +224 -160
- package/src/runtime/host/instance-activation-authority.ts +132 -27
- package/src/runtime/host/remote-bound-session-relay.ts +2 -23
- package/src/runtime/host/route-mesh-runtime.ts +1 -1
- package/src/runtime/host/service-relocation-control.ts +11 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +317 -291
- package/src/runtime/host/spot-address-transport.ts +49 -24
- package/src/runtime/host/spot-runtime-options-factory.ts +4 -0
- package/src/runtime/host/user-spot-creation-coordinator.ts +8 -0
- package/src/runtime/locations/actor-location-claims.ts +52 -30
- package/src/runtime/locations/domain-store-contract.ts +6 -2
- package/src/runtime/locations/in-memory-authority-store.ts +113 -9
- package/src/runtime/locations/in-memory-location-store.ts +25 -3
- package/src/runtime/locations/internal-location-contracts.ts +4 -0
- package/src/runtime/locations/lifecycle.ts +8 -26
- package/src/runtime/locations/location-store-repository.ts +220 -15
- package/src/runtime/locations/resolvers.ts +25 -2
- package/src/runtime/locations/runtime.ts +28 -24
- package/src/runtime/messaging/framework-json-v1.ts +5 -325
- package/src/runtime/messaging/packet-name.ts +5 -25
- package/src/runtime/messaging/request-result.ts +58 -0
- package/src/runtime/messaging/submission-result.ts +7 -3
- package/src/runtime/protocol/service_wire_codec.generated.ts +131 -1
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +45 -23
- package/src/runtime/spots/index.ts +30 -2
- package/src/runtime/spots/spot-activation.ts +33 -10
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +13 -0
- package/src/runtime/spots/spot-actor-packet-dispatch.ts +10 -0
- package/src/runtime/spots/spot-actor-packet-drain.ts +2 -0
- package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +1 -0
- package/src/runtime/spots/spot-entry-activation.ts +12 -2
- package/src/runtime/spots/spot-handler-registry.ts +41 -8
- package/src/runtime/spots/spot-node-autoconnect.ts +6 -2
- package/src/runtime/spots/spot-node-runtime-manager.ts +7 -12
- package/src/runtime/spots/spot-outbound.ts +36 -16
- package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
- package/src/runtime/spots/spot-routing-internal.ts +14 -0
- package/src/runtime/spots/spot-runtime-ports.ts +3 -0
- package/src/runtime/spots/spot-subscription-dispatch.ts +0 -3
- package/src/runtime/spots/spot-timer.ts +5 -1
- package/src/runtime/streams/stream-session-runtime.ts +13 -30
|
@@ -42,6 +42,7 @@ export interface ZLinkLocalSpotRouteDispatcher {
|
|
|
42
42
|
context: {
|
|
43
43
|
readonly channelName: string;
|
|
44
44
|
readonly signal?: AbortSignal;
|
|
45
|
+
readonly onAdmitted?: () => void;
|
|
45
46
|
readonly metadata?: ReadonlyMap<string, string>;
|
|
46
47
|
}
|
|
47
48
|
): Promise<TReply>;
|
|
@@ -163,7 +164,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
163
164
|
request: unknown,
|
|
164
165
|
timeoutMs: number | undefined,
|
|
165
166
|
signal?: AbortSignal,
|
|
166
|
-
metadata?: ReadonlyMap<string, string
|
|
167
|
+
metadata?: ReadonlyMap<string, string>,
|
|
168
|
+
onAdmitted?: () => void
|
|
167
169
|
): Promise<TReply> {
|
|
168
170
|
return runWithOutboundFlow(this.options.flowCreationEnabled?.() ?? true, () =>
|
|
169
171
|
this.routeRequestToSpotScoped<TReply>(
|
|
@@ -172,7 +174,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
172
174
|
request,
|
|
173
175
|
timeoutMs,
|
|
174
176
|
signal,
|
|
175
|
-
metadata
|
|
177
|
+
metadata,
|
|
178
|
+
onAdmitted
|
|
176
179
|
)
|
|
177
180
|
);
|
|
178
181
|
}
|
|
@@ -183,7 +186,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
183
186
|
request: unknown,
|
|
184
187
|
timeoutMs: number | undefined,
|
|
185
188
|
signal?: AbortSignal,
|
|
186
|
-
metadata?: ReadonlyMap<string, string
|
|
189
|
+
metadata?: ReadonlyMap<string, string>,
|
|
190
|
+
onAdmitted?: () => void
|
|
187
191
|
): Promise<TReply> {
|
|
188
192
|
throwIfAborted(signal);
|
|
189
193
|
const localSpotRouteNode = this.targets.localRouteNode(spotRouteTarget);
|
|
@@ -194,7 +198,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
194
198
|
packetName,
|
|
195
199
|
request,
|
|
196
200
|
timeoutMs,
|
|
197
|
-
signal
|
|
201
|
+
signal,
|
|
202
|
+
onAdmitted
|
|
198
203
|
);
|
|
199
204
|
}
|
|
200
205
|
const codecs = codecsForFrameworkPacket(packetName, this.options.codecs);
|
|
@@ -216,7 +221,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
216
221
|
parts,
|
|
217
222
|
codecs,
|
|
218
223
|
timeoutMs,
|
|
219
|
-
signal
|
|
224
|
+
signal,
|
|
225
|
+
onAdmitted
|
|
220
226
|
);
|
|
221
227
|
if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
|
|
222
228
|
}
|
|
@@ -226,7 +232,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
226
232
|
parts,
|
|
227
233
|
codecs,
|
|
228
234
|
timeoutMs,
|
|
229
|
-
signal
|
|
235
|
+
signal,
|
|
236
|
+
onAdmitted
|
|
230
237
|
);
|
|
231
238
|
}
|
|
232
239
|
if (this.targets.hasBoundRouteRouter(spotRouteTarget.routerChannelId)) {
|
|
@@ -236,7 +243,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
236
243
|
codecs,
|
|
237
244
|
ZLINK_SEND_DONT_WAIT,
|
|
238
245
|
timeoutMs,
|
|
239
|
-
signal
|
|
246
|
+
signal,
|
|
247
|
+
onAdmitted
|
|
240
248
|
);
|
|
241
249
|
}
|
|
242
250
|
const spotNodeRequest = this.spotNodeTransport.request<TReply>(
|
|
@@ -244,7 +252,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
244
252
|
parts,
|
|
245
253
|
codecs,
|
|
246
254
|
timeoutMs,
|
|
247
|
-
signal
|
|
255
|
+
signal,
|
|
256
|
+
onAdmitted
|
|
248
257
|
);
|
|
249
258
|
if (spotNodeRequest !== undefined) {
|
|
250
259
|
return spotNodeRequest;
|
|
@@ -255,7 +264,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
255
264
|
codecs,
|
|
256
265
|
0,
|
|
257
266
|
timeoutMs,
|
|
258
|
-
signal
|
|
267
|
+
signal,
|
|
268
|
+
onAdmitted
|
|
259
269
|
);
|
|
260
270
|
}
|
|
261
271
|
|
|
@@ -265,7 +275,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
265
275
|
packetName: string | undefined,
|
|
266
276
|
request: unknown,
|
|
267
277
|
timeoutMs: number | undefined,
|
|
268
|
-
signal?: AbortSignal
|
|
278
|
+
signal?: AbortSignal,
|
|
279
|
+
onAdmitted?: () => void
|
|
269
280
|
): Promise<TReply> {
|
|
270
281
|
return this.sourceSpotRouter.request<TReply>(
|
|
271
282
|
sourceSpot,
|
|
@@ -273,7 +284,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
273
284
|
packetName,
|
|
274
285
|
request,
|
|
275
286
|
timeoutMs,
|
|
276
|
-
signal
|
|
287
|
+
signal,
|
|
288
|
+
onAdmitted
|
|
277
289
|
);
|
|
278
290
|
}
|
|
279
291
|
|
|
@@ -292,14 +304,16 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
292
304
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
293
305
|
request: Message,
|
|
294
306
|
timeoutMs: number | undefined,
|
|
295
|
-
signal?: AbortSignal
|
|
307
|
+
signal?: AbortSignal,
|
|
308
|
+
onAdmitted?: () => void
|
|
296
309
|
): Promise<readonly Message[]> {
|
|
297
310
|
return this.sourceSpotRouter.requestRaw(
|
|
298
311
|
sourceSpot,
|
|
299
312
|
spotRouteTarget,
|
|
300
313
|
request,
|
|
301
314
|
timeoutMs,
|
|
302
|
-
signal
|
|
315
|
+
signal,
|
|
316
|
+
onAdmitted
|
|
303
317
|
);
|
|
304
318
|
}
|
|
305
319
|
|
|
@@ -307,7 +321,8 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
307
321
|
spotRouteTarget: ZLinkSpotRouteTarget,
|
|
308
322
|
request: Message,
|
|
309
323
|
timeoutMs: number | undefined,
|
|
310
|
-
signal?: AbortSignal
|
|
324
|
+
signal?: AbortSignal,
|
|
325
|
+
onAdmitted?: () => void
|
|
311
326
|
): Promise<readonly Message[]> {
|
|
312
327
|
throwIfAborted(signal);
|
|
313
328
|
if (this.targets.hasNamedSpotNode(spotRouteTarget.routerChannelId)) {
|
|
@@ -315,23 +330,37 @@ export class ZLinkSpotRouteDispatchStrategy {
|
|
|
315
330
|
spotRouteTarget,
|
|
316
331
|
request,
|
|
317
332
|
timeoutMs,
|
|
318
|
-
signal
|
|
333
|
+
signal,
|
|
334
|
+
onAdmitted
|
|
319
335
|
);
|
|
320
336
|
if (namedSpotNodeRequest !== undefined) return namedSpotNodeRequest;
|
|
321
337
|
}
|
|
322
338
|
if (this.bridgeTransport.has(spotRouteTarget.routerChannelId)) {
|
|
323
|
-
return this.bridgeTransport.requestRaw(
|
|
339
|
+
return this.bridgeTransport.requestRaw(
|
|
340
|
+
spotRouteTarget,
|
|
341
|
+
request,
|
|
342
|
+
timeoutMs,
|
|
343
|
+
signal,
|
|
344
|
+
onAdmitted
|
|
345
|
+
);
|
|
324
346
|
}
|
|
325
347
|
const spotNodeRequest = this.spotNodeTransport.requestRaw(
|
|
326
348
|
spotRouteTarget,
|
|
327
349
|
request,
|
|
328
350
|
timeoutMs,
|
|
329
|
-
signal
|
|
351
|
+
signal,
|
|
352
|
+
onAdmitted
|
|
330
353
|
);
|
|
331
354
|
if (spotNodeRequest !== undefined) {
|
|
332
355
|
return spotNodeRequest;
|
|
333
356
|
}
|
|
334
357
|
|
|
335
|
-
return this.routerSocketTransport.requestRaw(
|
|
358
|
+
return this.routerSocketTransport.requestRaw(
|
|
359
|
+
spotRouteTarget,
|
|
360
|
+
request,
|
|
361
|
+
timeoutMs,
|
|
362
|
+
signal,
|
|
363
|
+
onAdmitted
|
|
364
|
+
);
|
|
336
365
|
}
|
|
337
366
|
}
|
|
@@ -35,7 +35,7 @@ export const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions = {
|
|
|
35
35
|
includeMessageSizes: false
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
|
|
38
|
+
export const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
|
|
39
39
|
const telemetryTracer = openTelemetryTrace.getTracer('@zlink-systems/framework');
|
|
40
40
|
|
|
41
41
|
let diagnosticsGeneration = 0n;
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
export type ZLinkSerialWorkLane = 'application' | 'lifecycle';
|
|
10
10
|
|
|
11
11
|
export interface ZLinkSerialWorkOptions {
|
|
12
|
+
readonly onAdmitted?: () => void;
|
|
12
13
|
readonly lane?: ZLinkSerialWorkLane;
|
|
13
14
|
readonly payloadBytes?: number;
|
|
14
15
|
readonly metadataBytes?: number;
|
|
@@ -269,6 +270,7 @@ export class ZLinkSerialExecutionQueue {
|
|
|
269
270
|
release();
|
|
270
271
|
throw error;
|
|
271
272
|
}
|
|
273
|
+
options.onAdmitted?.();
|
|
272
274
|
this.scheduleDrain();
|
|
273
275
|
return result;
|
|
274
276
|
}
|
|
@@ -131,7 +131,7 @@ export function encodeCanonicalActorJoinRecoverySavedWork(
|
|
|
131
131
|
const replyContentType =
|
|
132
132
|
operationId === undefined
|
|
133
133
|
? null
|
|
134
|
-
:
|
|
134
|
+
: (nullableText(input.replyContentType ?? null, 'Actor Join reply content type') ?? null);
|
|
135
135
|
const metadata = encodeMetadataJson({
|
|
136
136
|
Request: {
|
|
137
137
|
ActorId: requireText(input.actorId, 'Actor id'),
|
|
@@ -288,7 +288,7 @@ export function decodeCanonicalActorJoinRecoverySavedWork(
|
|
|
288
288
|
const operationLow = integer(metadata.OperationIdLow, 'OperationIdLow');
|
|
289
289
|
const hasOperation = operationHigh !== 0n || operationLow !== 0n;
|
|
290
290
|
const replyContentType = nullableText(metadata.ReplyContentType, 'ReplyContentType');
|
|
291
|
-
if (hasOperation
|
|
291
|
+
if (!hasOperation && replyContentType !== undefined) {
|
|
292
292
|
throw new TypeError('Canonical Actor Join recovery reply identity is invalid.');
|
|
293
293
|
}
|
|
294
294
|
const targetNodeRid = base64(metadata.TargetNodeRid, 'TargetNodeRid');
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { awaitWithAbort } from '../abort';
|
|
2
|
+
import { RequestResult, SubmitResult, isZLinkBackendResultError } from '../backend/runtime-values';
|
|
3
|
+
import {
|
|
4
|
+
ZLinkFrameworkInternalErrorKind,
|
|
5
|
+
createInternalFrameworkException
|
|
6
|
+
} from '../framework-errors-internal';
|
|
7
|
+
|
|
8
|
+
export interface PeerRouteObservation {
|
|
9
|
+
readonly generation?: bigint;
|
|
10
|
+
readonly ready: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface DurableServiceRequestPort {
|
|
14
|
+
readonly requestStopSignal?: AbortSignal;
|
|
15
|
+
observePeerRoute(target: string): PeerRouteObservation;
|
|
16
|
+
observePeerRouteChanged(listener: (target: string) => void): () => void;
|
|
17
|
+
observePeerConnectionIntentRemoved(listener: (target: string) => void): () => void;
|
|
18
|
+
requestService(
|
|
19
|
+
target: string,
|
|
20
|
+
parts: readonly Uint8Array[],
|
|
21
|
+
timeoutMs: number,
|
|
22
|
+
onAdmitted?: () => void
|
|
23
|
+
): Promise<readonly Buffer[]>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Actor model §8.1: a ready edge or a typed transport failure owns replay. */
|
|
27
|
+
export async function requestDurableService(
|
|
28
|
+
port: DurableServiceRequestPort,
|
|
29
|
+
target: string,
|
|
30
|
+
parts: readonly Uint8Array[],
|
|
31
|
+
deadlineMs: number,
|
|
32
|
+
operationKind: string,
|
|
33
|
+
signal?: AbortSignal,
|
|
34
|
+
onSubmitted?: (signal: AbortSignal) => Promise<void>
|
|
35
|
+
): Promise<readonly Buffer[]> {
|
|
36
|
+
let wasAdmitted = false;
|
|
37
|
+
const stop = new AbortController();
|
|
38
|
+
const exhausted = (cause?: unknown) =>
|
|
39
|
+
createInternalFrameworkException(
|
|
40
|
+
wasAdmitted
|
|
41
|
+
? ZLinkFrameworkInternalErrorKind.DeadlineExceeded
|
|
42
|
+
: ZLinkFrameworkInternalErrorKind.RouteNotConnected,
|
|
43
|
+
`${operationKind} exhausted its end-to-end deadline.`,
|
|
44
|
+
true,
|
|
45
|
+
cause
|
|
46
|
+
);
|
|
47
|
+
const timer = setTimeout(
|
|
48
|
+
() => stop.abort(exhausted()),
|
|
49
|
+
Math.max(0, Math.ceil(deadlineMs - performance.now()))
|
|
50
|
+
);
|
|
51
|
+
const unobserveIntent = port.observePeerConnectionIntentRemoved((rid) => {
|
|
52
|
+
if (rid === target)
|
|
53
|
+
stop.abort(
|
|
54
|
+
createInternalFrameworkException(
|
|
55
|
+
ZLinkFrameworkInternalErrorKind.RouteNotConnected,
|
|
56
|
+
`${operationKind} target node lifecycle ended.`,
|
|
57
|
+
true
|
|
58
|
+
)
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
const cancellation = AbortSignal.any([
|
|
62
|
+
stop.signal,
|
|
63
|
+
...(signal === undefined ? [] : [signal]),
|
|
64
|
+
...(port.requestStopSignal === undefined ? [] : [port.requestStopSignal])
|
|
65
|
+
]);
|
|
66
|
+
try {
|
|
67
|
+
for (;;) {
|
|
68
|
+
cancellation.throwIfAborted();
|
|
69
|
+
const remainingMs = Math.ceil(deadlineMs - performance.now());
|
|
70
|
+
if (remainingMs <= 0) throw exhausted();
|
|
71
|
+
let changed!: () => void;
|
|
72
|
+
const transition = new Promise<void>((resolve) => {
|
|
73
|
+
changed = resolve;
|
|
74
|
+
});
|
|
75
|
+
let submittedGeneration: bigint | undefined;
|
|
76
|
+
const attemptStop = new AbortController();
|
|
77
|
+
const attemptSignal = AbortSignal.any([cancellation, attemptStop.signal]);
|
|
78
|
+
const unobserveRoute = port.observePeerRouteChanged((rid) => {
|
|
79
|
+
if (rid !== target) return;
|
|
80
|
+
const route = port.observePeerRoute(target);
|
|
81
|
+
if (
|
|
82
|
+
submittedGeneration === undefined
|
|
83
|
+
? route.ready
|
|
84
|
+
: route.generation !== undefined && route.generation !== submittedGeneration
|
|
85
|
+
) {
|
|
86
|
+
changed();
|
|
87
|
+
attemptStop.abort();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
const route = port.observePeerRoute(target);
|
|
92
|
+
if (!route.ready) {
|
|
93
|
+
await awaitWithAbort(transition, cancellation);
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
submittedGeneration = route.generation;
|
|
97
|
+
const reply = port.requestService(target, parts, remainingMs, () => {
|
|
98
|
+
wasAdmitted = true;
|
|
99
|
+
});
|
|
100
|
+
const request =
|
|
101
|
+
onSubmitted === undefined
|
|
102
|
+
? reply
|
|
103
|
+
: Promise.race([
|
|
104
|
+
reply,
|
|
105
|
+
Promise.resolve()
|
|
106
|
+
.then(() => onSubmitted(attemptSignal))
|
|
107
|
+
.then(() => reply)
|
|
108
|
+
]);
|
|
109
|
+
const result = await awaitWithAbort(
|
|
110
|
+
Promise.race([request.then((parts) => ({ parts })), transition.then(() => undefined)]),
|
|
111
|
+
cancellation
|
|
112
|
+
);
|
|
113
|
+
if (result !== undefined) return result.parts;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
cancellation.throwIfAborted();
|
|
116
|
+
if (!durableRequestCanReplay(error)) throw error;
|
|
117
|
+
if (isZLinkBackendResultError(error) && error.operation === 'request') wasAdmitted = true;
|
|
118
|
+
} finally {
|
|
119
|
+
attemptStop.abort();
|
|
120
|
+
unobserveRoute();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
} finally {
|
|
124
|
+
clearTimeout(timer);
|
|
125
|
+
unobserveIntent();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function durableRequestCanReplay(error: unknown): boolean {
|
|
130
|
+
if (!isZLinkBackendResultError(error)) return false;
|
|
131
|
+
return error.operation === 'request'
|
|
132
|
+
? error.result === RequestResult.NotConnected || error.result === RequestResult.TimedOut
|
|
133
|
+
: error.result === SubmitResult.NotConnected ||
|
|
134
|
+
error.result === SubmitResult.NotFound ||
|
|
135
|
+
error.result === SubmitResult.NotAdmitted ||
|
|
136
|
+
error.result === SubmitResult.Backpressured;
|
|
137
|
+
}
|
|
@@ -19,12 +19,16 @@ export type ZLinkOperationIdentityKey = string & {
|
|
|
19
19
|
export function operationIdentityKey(
|
|
20
20
|
operationId: ZLinkOperationIdentity128
|
|
21
21
|
): ZLinkOperationIdentityKey {
|
|
22
|
+
validateOperationIdentity(operationId);
|
|
23
|
+
return `${operationId.high.toString(16)}:${operationId.low.toString(16)}` as ZLinkOperationIdentityKey;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function validateOperationIdentity(operationId: ZLinkOperationIdentity128): void {
|
|
22
27
|
requireUnsigned64(operationId.high, 'operationId.high');
|
|
23
28
|
requireUnsigned64(operationId.low, 'operationId.low');
|
|
24
29
|
if (operationId.high === 0n && operationId.low === 0n) {
|
|
25
30
|
throw new RangeError('Operation identity must not be all zero.');
|
|
26
31
|
}
|
|
27
|
-
return `${operationId.high.toString(16)}:${operationId.low.toString(16)}` as ZLinkOperationIdentityKey;
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
export function createRandomOperationIdentity(
|