@zlink-systems/framework 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
- package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
- package/dist/internal.d.ts +1 -0
- package/dist/internal.js +1 -0
- package/dist/runtime/activation-admission.d.ts +29 -0
- package/dist/runtime/activation-admission.js +61 -0
- package/dist/runtime/actors/actor-context.js +6 -6
- package/dist/runtime/actors/actor-handoff.d.ts +9 -3
- package/dist/runtime/actors/actor-handoff.js +28 -17
- package/dist/runtime/actors/actor-local-native-join.js +2 -18
- package/dist/runtime/actors/actor-remote-joiner.d.ts +2 -2
- package/dist/runtime/actors/actor-remote-joiner.js +6 -8
- package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
- package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
- package/dist/runtime/actors/deferred-join-completion.d.ts +14 -0
- package/dist/runtime/actors/deferred-join-completion.js +20 -0
- package/dist/runtime/actors/index.d.ts +1 -1
- package/dist/runtime/actors/index.js +15 -5
- package/dist/runtime/admission.d.ts +5 -1
- package/dist/runtime/admission.js +4 -0
- package/dist/runtime/backend/contracts/index.d.ts +2 -10
- package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -9
- package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
- package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
- package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +6 -3
- package/dist/runtime/backend/node/node-backend-adapter-support.js +12 -28
- package/dist/runtime/backend/node/node-event-loop-poller.d.ts +1 -1
- package/dist/runtime/backend/node/node-event-loop-poller.js +8 -2
- package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
- package/dist/runtime/backend/node/node-raw-binding-port.js +11 -3
- package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +12 -9
- package/dist/runtime/backend/node/node-raw-mesh-backend.js +61 -29
- package/dist/runtime/backend/node/node-socket-backend-adapter.js +1 -1
- package/dist/runtime/backend/raw-binding-port.d.ts +12 -0
- package/dist/runtime/channels/channel-clients.d.ts +0 -1
- package/dist/runtime/channels/channel-clients.js +0 -8
- package/dist/runtime/channels/channel-outbound-operations.js +2 -10
- package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
- package/dist/runtime/channels/channel-runtime-manager.js +1 -12
- package/dist/runtime/channels/channel-socket-registry.d.ts +17 -4
- package/dist/runtime/channels/channel-socket-registry.js +49 -62
- package/dist/runtime/channels/channel-transports.d.ts +0 -3
- package/dist/runtime/channels/fanout-location-runtime.js +3 -9
- package/dist/runtime/execution/index.d.ts +18 -8
- package/dist/runtime/execution/index.js +55 -29
- package/dist/runtime/execution/serial-execution-queue.d.ts +5 -6
- package/dist/runtime/execution/serial-execution-queue.js +49 -15
- package/dist/runtime/foundation/listener-records.d.ts +11 -0
- package/dist/runtime/foundation/listener-records.js +20 -0
- package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +10 -21
- package/dist/runtime/foundation/raw-service-mesh-runtime.js +66 -392
- package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
- package/dist/runtime/foundation/service-authority-payload-codec.js +8 -0
- package/dist/runtime/foundation/service-maintenance-runtime.js +23 -2
- package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
- package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
- package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
- package/dist/runtime/foundation/service-relocation-object-owner.js +16 -4
- package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +6 -13
- package/dist/runtime/foundation/service-stateful-runtime.d.ts +10 -7
- package/dist/runtime/foundation/service-stateful-runtime.js +100 -60
- package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +9 -4
- package/dist/runtime/foundation/service-stateful-wire-codec.js +153 -90
- package/dist/runtime/foundation/service-topology-registry.d.ts +1 -2
- package/dist/runtime/foundation/service-topology-registry.js +6 -30
- package/dist/runtime/host/actor-transfer-runtime.d.ts +17 -15
- package/dist/runtime/host/actor-transfer-runtime.js +73 -86
- package/dist/runtime/host/index.d.ts +6 -2
- package/dist/runtime/host/index.js +63 -37
- package/dist/runtime/host/remote-bound-session-relay.js +4 -3
- package/dist/runtime/host/route-mesh-runtime.d.ts +2 -0
- package/dist/runtime/host/route-mesh-runtime.js +7 -5
- package/dist/runtime/host/service-relocation-host-runtime.d.ts +50 -8
- package/dist/runtime/host/service-relocation-host-runtime.js +343 -270
- package/dist/runtime/host/spot-runtime-options-factory.d.ts +7 -4
- package/dist/runtime/host/spot-runtime-options-factory.js +4 -8
- package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
- package/dist/runtime/host/user-spot-creation-coordinator.d.ts +11 -3
- package/dist/runtime/host/user-spot-creation-coordinator.js +85 -87
- package/dist/runtime/locations/in-memory-provider-location-store.js +8 -6
- package/dist/runtime/locations/lifecycle.d.ts +1 -1
- package/dist/runtime/locations/lifecycle.js +2 -2
- package/dist/runtime/locations/resolvers.js +7 -2
- package/dist/runtime/locations/spot-location-claims.d.ts +2 -2
- package/dist/runtime/locations/spot-location-claims.js +3 -27
- package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_codec.generated.js +5 -1
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
- package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
- package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
- package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
- package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +3 -3
- package/dist/runtime/spots/index.d.ts +25 -19
- package/dist/runtime/spots/index.js +207 -205
- package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
- package/dist/runtime/spots/spot-activation-registry.js +34 -31
- package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
- package/dist/runtime/spots/spot-activation-state.js +4 -17
- package/dist/runtime/spots/spot-activation.d.ts +8 -6
- package/dist/runtime/spots/spot-activation.js +54 -49
- package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -1
- package/dist/runtime/spots/spot-actor-admission-coordinator.js +1 -1
- package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +2 -2
- package/dist/runtime/spots/spot-actor-join-dispatch.js +3 -5
- package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
- package/dist/runtime/spots/spot-actor-membership.d.ts +4 -0
- package/dist/runtime/spots/spot-actor-membership.js +26 -12
- package/dist/runtime/spots/spot-entry-activation.d.ts +1 -2
- package/dist/runtime/spots/spot-entry-activation.js +0 -1
- package/dist/runtime/spots/spot-manager-public.js +1 -1
- package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +1 -1
- package/dist/runtime/spots/spot-native-actor-join-admission.js +2 -2
- package/dist/runtime/spots/spot-node-runtime-manager.d.ts +5 -5
- package/dist/runtime/spots/spot-node-runtime-manager.js +7 -11
- package/dist/runtime/spots/spot-outbound.js +1 -29
- package/dist/runtime/spots/spot-routed-actor-admission.d.ts +1 -0
- package/dist/runtime/spots/spot-routed-actor-admission.js +10 -0
- package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -6
- package/dist/runtime/spots/spot-routed-frame-dispatch.js +2 -70
- package/dist/runtime/spots/spot-runtime-ports.d.ts +3 -5
- package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
- package/dist/runtime/spots/spot-serial-executor.js +8 -1
- package/dist/runtime/spots/spot-serial-turn-executor.d.ts +3 -0
- package/dist/runtime/spots/spot-serial-turn-executor.js +8 -4
- package/dist/runtime/streams/actor-session-binding-registry.d.ts +13 -15
- package/dist/runtime/streams/actor-session-binding-registry.js +19 -171
- package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +3 -4
- package/dist/runtime/streams/bound-session-service.js +1 -18
- package/dist/runtime/streams/index.d.ts +2 -0
- package/dist/runtime/streams/index.js +19 -19
- package/dist/runtime/streams/session-serial-executor.js +2 -2
- package/package.json +3 -3
- package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
- package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
- package/src/internal.ts +1 -0
- package/src/runtime/activation-admission.ts +78 -0
- package/src/runtime/actors/actor-context.ts +6 -6
- package/src/runtime/actors/actor-handoff.ts +31 -23
- package/src/runtime/actors/actor-local-native-join.ts +3 -42
- package/src/runtime/actors/actor-remote-joiner.ts +6 -25
- package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
- package/src/runtime/actors/actor-source-transfer.ts +5 -18
- package/src/runtime/actors/deferred-join-completion.ts +40 -0
- package/src/runtime/actors/index.ts +22 -9
- package/src/runtime/admission.ts +5 -1
- package/src/runtime/backend/contracts/index.ts +2 -13
- package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -10
- package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
- package/src/runtime/backend/node/node-backend-adapter-support.ts +9 -29
- package/src/runtime/backend/node/node-event-loop-poller.ts +14 -2
- package/src/runtime/backend/node/node-raw-binding-port.ts +17 -3
- package/src/runtime/backend/node/node-raw-mesh-backend.ts +65 -32
- package/src/runtime/backend/node/node-socket-backend-adapter.ts +2 -2
- package/src/runtime/backend/raw-binding-port.ts +13 -0
- package/src/runtime/channels/channel-clients.ts +0 -11
- package/src/runtime/channels/channel-outbound-operations.ts +3 -11
- package/src/runtime/channels/channel-runtime-manager.ts +4 -15
- package/src/runtime/channels/channel-socket-registry.ts +69 -71
- package/src/runtime/channels/channel-transports.ts +0 -3
- package/src/runtime/channels/fanout-location-runtime.ts +4 -16
- package/src/runtime/execution/index.ts +68 -30
- package/src/runtime/execution/serial-execution-queue.ts +52 -20
- package/src/runtime/foundation/listener-records.ts +21 -0
- package/src/runtime/foundation/raw-service-mesh-runtime.ts +66 -466
- package/src/runtime/foundation/service-authority-payload-codec.ts +10 -0
- package/src/runtime/foundation/service-maintenance-runtime.ts +30 -9
- package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
- package/src/runtime/foundation/service-relocation-object-owner.ts +18 -5
- package/src/runtime/foundation/service-session-binding-ingress-port.ts +6 -14
- package/src/runtime/foundation/service-stateful-runtime.ts +151 -89
- package/src/runtime/foundation/service-stateful-wire-codec.ts +203 -121
- package/src/runtime/foundation/service-topology-registry.ts +8 -48
- package/src/runtime/host/actor-transfer-runtime.ts +94 -166
- package/src/runtime/host/index.ts +119 -54
- package/src/runtime/host/remote-bound-session-relay.ts +4 -3
- package/src/runtime/host/route-mesh-runtime.ts +9 -5
- package/src/runtime/host/service-relocation-host-runtime.ts +495 -376
- package/src/runtime/host/spot-runtime-options-factory.ts +24 -13
- package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
- package/src/runtime/host/user-spot-creation-coordinator.ts +147 -142
- package/src/runtime/locations/in-memory-provider-location-store.ts +11 -7
- package/src/runtime/locations/lifecycle.ts +3 -2
- package/src/runtime/locations/resolvers.ts +19 -13
- package/src/runtime/locations/spot-location-claims.ts +5 -34
- package/src/runtime/protocol/service_wire_codec.generated.ts +9 -2
- package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
- package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
- package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +3 -3
- package/src/runtime/spots/index.ts +341 -295
- package/src/runtime/spots/spot-activation-registry.ts +41 -31
- package/src/runtime/spots/spot-activation-state.ts +4 -16
- package/src/runtime/spots/spot-activation.ts +102 -80
- package/src/runtime/spots/spot-actor-admission-coordinator.ts +2 -2
- package/src/runtime/spots/spot-actor-join-dispatch.ts +6 -7
- package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
- package/src/runtime/spots/spot-actor-membership.ts +81 -17
- package/src/runtime/spots/spot-entry-activation.ts +0 -3
- package/src/runtime/spots/spot-manager-public.ts +8 -4
- package/src/runtime/spots/spot-native-actor-join-admission.ts +2 -2
- package/src/runtime/spots/spot-node-runtime-manager.ts +12 -18
- package/src/runtime/spots/spot-outbound.ts +4 -47
- package/src/runtime/spots/spot-routed-actor-admission.ts +20 -0
- package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -76
- package/src/runtime/spots/spot-runtime-ports.ts +6 -17
- package/src/runtime/spots/spot-serial-executor.ts +9 -1
- package/src/runtime/spots/spot-serial-turn-executor.ts +10 -4
- package/src/runtime/streams/actor-session-binding-registry.ts +20 -308
- package/src/runtime/streams/actor-session-binding-runtime-owner.ts +2 -12
- package/src/runtime/streams/bound-session-service.ts +2 -36
- package/src/runtime/streams/index.ts +29 -27
- package/src/runtime/streams/session-serial-executor.ts +2 -2
- package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
- package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
- package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
|
@@ -42,6 +42,7 @@ const framework_errors_internal_1 = require("../framework-errors-internal");
|
|
|
42
42
|
const routing_id_1 = require("../routing-id");
|
|
43
43
|
const service_wire_constants_generated_1 = require("./service-wire-constants.generated");
|
|
44
44
|
const service_wire_binary_primitives_1 = require("./service-wire-binary-primitives");
|
|
45
|
+
const service_wire_codec_generated_1 = require("../protocol/service_wire_codec.generated");
|
|
45
46
|
const service_wire_pilot_codec_generated_1 = require("../protocol/service_wire_pilot_codec.generated");
|
|
46
47
|
const PREFIX_SIZE = 5;
|
|
47
48
|
const MAGIC_0 = service_wire_constants_generated_1.SERVICE_WIRE_MAGIC[0];
|
|
@@ -491,20 +492,85 @@ function fromGeneratedReplyRelay(value) {
|
|
|
491
492
|
})
|
|
492
493
|
};
|
|
493
494
|
}
|
|
494
|
-
|
|
495
|
-
|
|
495
|
+
const STATEFUL_MESSAGE_CONTEXT = {
|
|
496
|
+
effectiveCompleteMessageBytesMinusActualEnvelopeOverhead: 0xffff_fdf6,
|
|
497
|
+
effectiveCompleteMessageBytes: 0xffff_ffff
|
|
498
|
+
};
|
|
499
|
+
const STATEFUL_HEADER_PAYLOAD = {
|
|
500
|
+
packetName: 'wire',
|
|
501
|
+
contentType: 'application/json',
|
|
502
|
+
payload: Buffer.from('{}')
|
|
503
|
+
};
|
|
504
|
+
function generatedSpotFence(target) {
|
|
505
|
+
return {
|
|
506
|
+
spot: { spotId: target.spot.spotId, objectGeneration: target.spot.generation },
|
|
507
|
+
targetNodeRid: toGeneratedRoutingId(target.targetNodeRid, 'targetNodeRid'),
|
|
508
|
+
targetNodeGeneration: target.targetNodeGeneration,
|
|
509
|
+
expectedAuthorityOwnerGeneration: target.authorityOwnerGeneration,
|
|
510
|
+
expectedOwnerLeaseGeneration: target.ownerLeaseGeneration
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
function generatedActorFence(target) {
|
|
514
|
+
return {
|
|
515
|
+
actor: { actorId: target.actor.actorId, objectGeneration: target.actor.generation },
|
|
516
|
+
targetNodeRid: toGeneratedRoutingId(target.actor.nodeRid, 'targetNodeRid'),
|
|
517
|
+
targetNodeGeneration: target.targetNodeGeneration,
|
|
518
|
+
expectedAuthorityOwnerGeneration: target.authorityOwnerGeneration,
|
|
519
|
+
expectedOwnerLeaseGeneration: target.ownerLeaseGeneration
|
|
520
|
+
};
|
|
496
521
|
}
|
|
497
|
-
function
|
|
522
|
+
function encodeSpotHeader(kind, sourceSpotId, target, correlation, operation = { high: 0n, low: 1n }, messageFollowHopCount = 0, metadataFrame) {
|
|
523
|
+
const common = {
|
|
524
|
+
flags: metadataFrame === undefined ? 0 : exports.M6bServiceWireFlag.metadata,
|
|
525
|
+
operation,
|
|
526
|
+
messageFollowHopCount,
|
|
527
|
+
sourceSpotId,
|
|
528
|
+
targetSpot: generatedSpotFence(target),
|
|
529
|
+
payload: STATEFUL_HEADER_PAYLOAD,
|
|
530
|
+
...(metadataFrame === undefined
|
|
531
|
+
? {}
|
|
532
|
+
: { metadata: (0, service_wire_codec_generated_1.decodeMetadataFrame)(metadataFrame, STATEFUL_MESSAGE_CONTEXT) })
|
|
533
|
+
};
|
|
534
|
+
const frames = kind === 'spotSend'
|
|
535
|
+
? (0, service_wire_codec_generated_1.encodeSpotSendCommand)({ command: kind, ...common }, STATEFUL_MESSAGE_CONTEXT)
|
|
536
|
+
: (0, service_wire_codec_generated_1.encodeSpotRequestCommand)({
|
|
537
|
+
command: kind,
|
|
538
|
+
...common,
|
|
539
|
+
correlation: requirePositive(correlation, 'correlation')
|
|
540
|
+
}, STATEFUL_MESSAGE_CONTEXT);
|
|
541
|
+
return Buffer.from(frames[0]);
|
|
542
|
+
}
|
|
543
|
+
function encodeActorHeader(kind, target, correlation, sourceActor, boundSession, operation = { high: 0n, low: 1n }, messageFollowHopCount = 0) {
|
|
498
544
|
const flags = boundSession === undefined
|
|
499
545
|
? 0
|
|
500
546
|
: exports.M6bServiceWireFlag.boundSession | exports.M6bServiceWireFlag.sourceSpotId;
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
547
|
+
const common = {
|
|
548
|
+
flags,
|
|
549
|
+
operation,
|
|
550
|
+
messageFollowHopCount,
|
|
551
|
+
sourceActor: sourceActor === undefined
|
|
552
|
+
? { actorId: null }
|
|
553
|
+
: { actorId: sourceActor.actorId, generation: sourceActor.generation },
|
|
554
|
+
targetActor: generatedActorFence(target),
|
|
555
|
+
...(boundSession === undefined
|
|
556
|
+
? {}
|
|
557
|
+
: {
|
|
558
|
+
boundSessionTail: {
|
|
559
|
+
sourceSessionRid: toGeneratedRoutingId(boundSession.sessionRid, 'sourceSessionRid'),
|
|
560
|
+
sourceBindingGeneration: boundSession.bindingGeneration,
|
|
561
|
+
sourceSessionSequence: boundSession.sequence
|
|
562
|
+
}
|
|
563
|
+
}),
|
|
564
|
+
payload: STATEFUL_HEADER_PAYLOAD
|
|
565
|
+
};
|
|
566
|
+
const frames = kind === 'actorSend'
|
|
567
|
+
? (0, service_wire_codec_generated_1.encodeActorSendCommand)({ command: kind, ...common }, STATEFUL_MESSAGE_CONTEXT)
|
|
568
|
+
: (0, service_wire_codec_generated_1.encodeActorRequestCommand)({
|
|
569
|
+
command: kind,
|
|
570
|
+
...common,
|
|
571
|
+
correlation: requirePositive(correlation, 'correlation')
|
|
572
|
+
}, STATEFUL_MESSAGE_CONTEXT);
|
|
573
|
+
return Buffer.from(frames[0]);
|
|
508
574
|
}
|
|
509
575
|
function encodeLogicalMulticastHeader(channelName, topic, sourceSpotId) {
|
|
510
576
|
return concat(prefix(exports.M6bServiceWireCommand.logicalMulticast), text8(channelName, 'channelName'), text8(topic, 'topic'), rid(sourceSpotId, 'sourceSpotId'));
|
|
@@ -590,7 +656,7 @@ function encodeMessageFollowHeader(record) {
|
|
|
590
656
|
}
|
|
591
657
|
return concat(prefix(exports.M6bServiceWireCommand.messageFollow), Buffer.of(1), u32(body.byteLength, 'messageFollow.length'), body);
|
|
592
658
|
}
|
|
593
|
-
function decodeStatefulHeader(frame) {
|
|
659
|
+
function decodeStatefulHeader(frame, payloadFrame, metadataFrame) {
|
|
594
660
|
switch (frame[3]) {
|
|
595
661
|
case exports.M6bServiceWireCommand.userSpotCreate:
|
|
596
662
|
return fromGeneratedUserSpotCreate((0, service_wire_pilot_codec_generated_1.decodeUserSpotCreate47)(frame));
|
|
@@ -598,49 +664,87 @@ function decodeStatefulHeader(frame) {
|
|
|
598
664
|
return fromGeneratedUserSpotClose((0, service_wire_pilot_codec_generated_1.decodeUserSpotClose48)(frame));
|
|
599
665
|
case exports.M6bServiceWireCommand.actorCreate:
|
|
600
666
|
return fromGeneratedActorCreate((0, service_wire_pilot_codec_generated_1.decodeActorCreate49)(frame));
|
|
601
|
-
}
|
|
602
|
-
const reader = new Reader(frame);
|
|
603
|
-
const command = reader.prefix();
|
|
604
|
-
switch (command.command) {
|
|
605
667
|
case exports.M6bServiceWireCommand.spotSend:
|
|
606
|
-
case exports.M6bServiceWireCommand.spotRequest:
|
|
607
|
-
requireFlags(command.flags, 0);
|
|
608
|
-
const request = command.command === exports.M6bServiceWireCommand.spotRequest;
|
|
609
|
-
const correlation = request ? reader.nonZeroU64('correlation') : undefined;
|
|
610
|
-
const sourceSpotId = reader.rid('sourceSpotId');
|
|
611
|
-
const target = reader.directSpotFence();
|
|
612
|
-
reader.end();
|
|
613
|
-
return {
|
|
614
|
-
kind: request ? 'spotRequest' : 'spotSend',
|
|
615
|
-
...(correlation === undefined ? {} : { correlation }),
|
|
616
|
-
sourceSpotId,
|
|
617
|
-
target
|
|
618
|
-
};
|
|
619
|
-
}
|
|
668
|
+
case exports.M6bServiceWireCommand.spotRequest:
|
|
620
669
|
case exports.M6bServiceWireCommand.actorSend:
|
|
621
670
|
case exports.M6bServiceWireCommand.actorRequest: {
|
|
622
|
-
const
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
671
|
+
const frames = [
|
|
672
|
+
frame,
|
|
673
|
+
...(metadataFrame === undefined ? [] : [metadataFrame]),
|
|
674
|
+
payloadFrame ??
|
|
675
|
+
(0, service_wire_codec_generated_1.encodeApplicationPayloadEnvelopeV1)(STATEFUL_HEADER_PAYLOAD, STATEFUL_MESSAGE_CONTEXT)
|
|
676
|
+
];
|
|
677
|
+
try {
|
|
678
|
+
if (frame[3] === exports.M6bServiceWireCommand.spotSend ||
|
|
679
|
+
frame[3] === exports.M6bServiceWireCommand.spotRequest) {
|
|
680
|
+
const decoded = frame[3] === exports.M6bServiceWireCommand.spotSend
|
|
681
|
+
? (0, service_wire_codec_generated_1.decodeSpotSendCommand)(frames, STATEFUL_MESSAGE_CONTEXT)
|
|
682
|
+
: (0, service_wire_codec_generated_1.decodeSpotRequestCommand)(frames, STATEFUL_MESSAGE_CONTEXT);
|
|
683
|
+
return {
|
|
684
|
+
kind: decoded.command,
|
|
685
|
+
...(decoded.command === 'spotRequest' ? { correlation: decoded.correlation } : {}),
|
|
686
|
+
operation: decoded.operation,
|
|
687
|
+
messageFollowHopCount: decoded.messageFollowHopCount,
|
|
688
|
+
sourceSpotId: decoded.sourceSpotId,
|
|
689
|
+
target: {
|
|
690
|
+
spot: {
|
|
691
|
+
spotId: decoded.targetSpot.spot.spotId,
|
|
692
|
+
generation: decoded.targetSpot.spot.objectGeneration
|
|
693
|
+
},
|
|
694
|
+
targetNodeRid: fromGeneratedRoutingId(decoded.targetSpot.targetNodeRid, 'targetNodeRid'),
|
|
695
|
+
targetNodeGeneration: decoded.targetSpot.targetNodeGeneration,
|
|
696
|
+
authorityOwnerGeneration: decoded.targetSpot.expectedAuthorityOwnerGeneration,
|
|
697
|
+
ownerLeaseGeneration: decoded.targetSpot.expectedOwnerLeaseGeneration
|
|
698
|
+
}
|
|
699
|
+
};
|
|
633
700
|
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
701
|
+
const decoded = frame[3] === exports.M6bServiceWireCommand.actorSend
|
|
702
|
+
? (0, service_wire_codec_generated_1.decodeActorSendCommand)(frames, STATEFUL_MESSAGE_CONTEXT)
|
|
703
|
+
: (0, service_wire_codec_generated_1.decodeActorRequestCommand)(frames, STATEFUL_MESSAGE_CONTEXT);
|
|
704
|
+
const source = decoded.sourceActor;
|
|
705
|
+
return {
|
|
706
|
+
kind: decoded.command,
|
|
707
|
+
...(decoded.command === 'actorRequest' ? { correlation: decoded.correlation } : {}),
|
|
708
|
+
operation: decoded.operation,
|
|
709
|
+
messageFollowHopCount: decoded.messageFollowHopCount,
|
|
710
|
+
...(source.actorId === null
|
|
711
|
+
? {}
|
|
712
|
+
: {
|
|
713
|
+
sourceActor: {
|
|
714
|
+
nodeRid: '',
|
|
715
|
+
actorId: source.actorId,
|
|
716
|
+
generation: source.generation
|
|
717
|
+
}
|
|
718
|
+
}),
|
|
719
|
+
target: {
|
|
720
|
+
actor: {
|
|
721
|
+
nodeRid: fromGeneratedRoutingId(decoded.targetActor.targetNodeRid, 'targetNodeRid'),
|
|
722
|
+
actorId: decoded.targetActor.actor.actorId,
|
|
723
|
+
generation: decoded.targetActor.actor.objectGeneration
|
|
724
|
+
},
|
|
725
|
+
targetNodeGeneration: decoded.targetActor.targetNodeGeneration,
|
|
726
|
+
authorityOwnerGeneration: decoded.targetActor.expectedAuthorityOwnerGeneration,
|
|
727
|
+
ownerLeaseGeneration: decoded.targetActor.expectedOwnerLeaseGeneration
|
|
728
|
+
},
|
|
729
|
+
...(decoded.boundSessionTail === undefined
|
|
730
|
+
? {}
|
|
731
|
+
: {
|
|
732
|
+
boundSession: {
|
|
733
|
+
sessionRid: fromGeneratedRoutingId(decoded.boundSessionTail.sourceSessionRid, 'sourceSessionRid'),
|
|
734
|
+
bindingGeneration: decoded.boundSessionTail.sourceBindingGeneration,
|
|
735
|
+
sequence: decoded.boundSessionTail.sourceSessionSequence
|
|
736
|
+
}
|
|
737
|
+
})
|
|
738
|
+
};
|
|
739
|
+
}
|
|
740
|
+
catch (error) {
|
|
741
|
+
throw new service_wire_m6a_codec_1.ServiceWireProtocolError(error instanceof Error ? error.message : 'Invalid stateful message.');
|
|
742
|
+
}
|
|
643
743
|
}
|
|
744
|
+
}
|
|
745
|
+
const reader = new Reader(frame);
|
|
746
|
+
const command = reader.prefix();
|
|
747
|
+
switch (command.command) {
|
|
644
748
|
case exports.M6bServiceWireCommand.logicalMulticast: {
|
|
645
749
|
requireFlags(command.flags, 0);
|
|
646
750
|
const result = {
|
|
@@ -1182,12 +1286,6 @@ function actorFence(value) {
|
|
|
1182
1286
|
function actorAuthorityFence(value) {
|
|
1183
1287
|
return concat(actorRef(value.actor), rid(value.actor.nodeRid, 'targetNodeRid'), u64(value.targetNodeGeneration), u64(value.authorityOwnerGeneration), u64(value.ownerLeaseGeneration));
|
|
1184
1288
|
}
|
|
1185
|
-
function spotFence(value) {
|
|
1186
|
-
return concat(spotRef(value.spot), rid(value.targetNodeRid, 'targetNodeRid'), u64(value.targetNodeGeneration), u64(value.authorityOwnerGeneration), u64(value.ownerLeaseGeneration));
|
|
1187
|
-
}
|
|
1188
|
-
function directSpotFence(value) {
|
|
1189
|
-
return concat(spotFence(value), text16(value.storeVersion, 'storeVersion'));
|
|
1190
|
-
}
|
|
1191
1289
|
function messageFollowRoute(value) {
|
|
1192
1290
|
const body = value.kind === 'actor'
|
|
1193
1291
|
? concat(actorRef(value.actor), rid(value.targetNodeRid, 'targetNodeRid'), u64(value.targetNodeGeneration), u64(value.authorityOwnerGeneration), u64(value.ownerLeaseGeneration))
|
|
@@ -1232,11 +1330,6 @@ function validateMessageFollowRecord(value, invalid = (message) => {
|
|
|
1232
1330
|
function actorRef(value) {
|
|
1233
1331
|
return concat(text8(value.actorId, 'actorId'), u64(value.generation));
|
|
1234
1332
|
}
|
|
1235
|
-
function optionalActor(value) {
|
|
1236
|
-
return value === undefined
|
|
1237
|
-
? Buffer.of(0)
|
|
1238
|
-
: concat(text8(value.actorId, 'sourceActorId'), u64(value.generation));
|
|
1239
|
-
}
|
|
1240
1333
|
function spotRef(value) {
|
|
1241
1334
|
return concat(rid(value.spotId, 'spotId'), u64(value.generation));
|
|
1242
1335
|
}
|
|
@@ -1408,20 +1501,6 @@ class Reader {
|
|
|
1408
1501
|
generation: this.nonZeroU64(`${name}.generation`)
|
|
1409
1502
|
};
|
|
1410
1503
|
}
|
|
1411
|
-
optionalActor() {
|
|
1412
|
-
const length = this.u8('sourceActorId.length');
|
|
1413
|
-
if (length === 0)
|
|
1414
|
-
return undefined;
|
|
1415
|
-
this.need(length, 'sourceActorId');
|
|
1416
|
-
const bytes = this.bytes.subarray(this.offset, this.offset + length);
|
|
1417
|
-
this.offset += length;
|
|
1418
|
-
const actorId = (0, service_wire_binary_primitives_1.decodeCanonicalServiceWireText)(bytes, 'sourceActorId', fail);
|
|
1419
|
-
return {
|
|
1420
|
-
nodeRid: '',
|
|
1421
|
-
actorId,
|
|
1422
|
-
generation: this.nonZeroU64('sourceActorGeneration')
|
|
1423
|
-
};
|
|
1424
|
-
}
|
|
1425
1504
|
spotRef() {
|
|
1426
1505
|
return {
|
|
1427
1506
|
spotId: this.rid('spotId'),
|
|
@@ -1438,22 +1517,6 @@ class Reader {
|
|
|
1438
1517
|
ownerLeaseGeneration: this.nonZeroU64('ownerLeaseGeneration')
|
|
1439
1518
|
};
|
|
1440
1519
|
}
|
|
1441
|
-
spotFence() {
|
|
1442
|
-
const spot = this.spotRef();
|
|
1443
|
-
return {
|
|
1444
|
-
spot,
|
|
1445
|
-
targetNodeRid: this.rid('targetNodeRid'),
|
|
1446
|
-
targetNodeGeneration: this.nonZeroU64('targetNodeGeneration'),
|
|
1447
|
-
authorityOwnerGeneration: this.nonZeroU64('authorityOwnerGeneration'),
|
|
1448
|
-
ownerLeaseGeneration: this.nonZeroU64('ownerLeaseGeneration')
|
|
1449
|
-
};
|
|
1450
|
-
}
|
|
1451
|
-
directSpotFence() {
|
|
1452
|
-
return {
|
|
1453
|
-
...this.spotFence(),
|
|
1454
|
-
storeVersion: this.text16('storeVersion')
|
|
1455
|
-
};
|
|
1456
|
-
}
|
|
1457
1520
|
messageFollowRoute(name) {
|
|
1458
1521
|
const kind = this.u8(`${name}.objectKind`);
|
|
1459
1522
|
const length = this.u16(`${name}.length`);
|
|
@@ -26,7 +26,6 @@ export interface ServiceNodeDescriptor {
|
|
|
26
26
|
export interface AdmittedServicePeer {
|
|
27
27
|
readonly descriptor: ServiceNodeDescriptor;
|
|
28
28
|
readonly connectionId: string;
|
|
29
|
-
readonly connectionDiscriminator: string;
|
|
30
29
|
}
|
|
31
30
|
export interface ServicePeerAdmissionExpectation {
|
|
32
31
|
readonly endpoint?: string;
|
|
@@ -45,7 +44,7 @@ export declare class ServiceTopologyRegistry {
|
|
|
45
44
|
constructor(local: ServiceNodeDescriptor);
|
|
46
45
|
localDescriptor(): ServiceNodeDescriptor;
|
|
47
46
|
publishLocal(descriptor: ServiceNodeDescriptor): void;
|
|
48
|
-
admit(descriptor: ServiceNodeDescriptor, connectionId: string, expected?: ServicePeerAdmissionExpectation
|
|
47
|
+
admit(descriptor: ServiceNodeDescriptor, connectionId: string, expected?: ServicePeerAdmissionExpectation): PeerAdmissionResult;
|
|
49
48
|
disconnect(nodeRoutingId: string, connectionId: string): boolean;
|
|
50
49
|
peer(nodeRoutingId: string): AdmittedServicePeer | undefined;
|
|
51
50
|
peers(): readonly AdmittedServicePeer[];
|
|
@@ -41,11 +41,10 @@ class ServiceTopologyRegistry {
|
|
|
41
41
|
}
|
|
42
42
|
this.rebuildSelections();
|
|
43
43
|
}
|
|
44
|
-
admit(descriptor, connectionId, expected
|
|
44
|
+
admit(descriptor, connectionId, expected) {
|
|
45
45
|
try {
|
|
46
46
|
validateDescriptor(descriptor);
|
|
47
47
|
requireText(connectionId, 'connectionId');
|
|
48
|
-
requireText(connectionDiscriminator, 'connectionDiscriminator');
|
|
49
48
|
}
|
|
50
49
|
catch (error) {
|
|
51
50
|
return 'invalidDescriptor';
|
|
@@ -83,25 +82,11 @@ class ServiceTopologyRegistry {
|
|
|
83
82
|
!sameServiceNodeDescriptor(current.descriptor, descriptor)))) {
|
|
84
83
|
return 'staleDescriptor';
|
|
85
84
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
current.descriptor.descriptorRevision === descriptor.descriptorRevision &&
|
|
89
|
-
sameServiceNodeDescriptor(current.descriptor, descriptor) &&
|
|
90
|
-
current.connectionId !== connectionId &&
|
|
91
|
-
// A fallback candidate is only a logical placeholder. Once the
|
|
92
|
-
// monitor reports the physical connection, its evidence supersedes
|
|
93
|
-
// candidate ordering so the request path uses the native route.
|
|
94
|
-
!(isUnmonitoredConnectionId(current.connectionId) && !isUnmonitoredConnectionId(connectionId)) &&
|
|
95
|
-
compareConnectionCandidate(current.connectionDiscriminator, current.connectionId, connectionDiscriminator, connectionId) <= 0) {
|
|
96
|
-
// Both manual directions can reach admission. The same comparison on
|
|
97
|
-
// every retry keeps one physical candidate instead of replacing it in
|
|
98
|
-
// arrival order.
|
|
99
|
-
return 'staleDescriptor';
|
|
100
|
-
}
|
|
85
|
+
// Core selects the one route per RID (Core ROUTER §10.1); an admission on
|
|
86
|
+
// that route replaces the admission of a route it replaced.
|
|
101
87
|
this.peersByRid.set(descriptor.nodeRoutingId, {
|
|
102
88
|
descriptor: cloneDescriptor(descriptor),
|
|
103
|
-
connectionId
|
|
104
|
-
connectionDiscriminator
|
|
89
|
+
connectionId
|
|
105
90
|
});
|
|
106
91
|
this.remember(descriptor);
|
|
107
92
|
this.rebuildSelections();
|
|
@@ -188,8 +173,7 @@ class ServiceTopologyRegistry {
|
|
|
188
173
|
return this.selectWeightedCycle(`channel:${channelName}`, () => {
|
|
189
174
|
const local = {
|
|
190
175
|
descriptor: cloneDescriptor(this.local),
|
|
191
|
-
connectionId: 'local'
|
|
192
|
-
connectionDiscriminator: 'local'
|
|
176
|
+
connectionId: 'local'
|
|
193
177
|
};
|
|
194
178
|
return [local, ...this.peersByRid.values()]
|
|
195
179
|
.map((peer) => ({
|
|
@@ -361,8 +345,7 @@ function cloneDescriptor(descriptor) {
|
|
|
361
345
|
function clonePeer(peer) {
|
|
362
346
|
return {
|
|
363
347
|
descriptor: cloneDescriptor(peer.descriptor),
|
|
364
|
-
connectionId: peer.connectionId
|
|
365
|
-
connectionDiscriminator: peer.connectionDiscriminator
|
|
348
|
+
connectionId: peer.connectionId
|
|
366
349
|
};
|
|
367
350
|
}
|
|
368
351
|
function sameServiceNodeDescriptor(left, right) {
|
|
@@ -382,13 +365,6 @@ function sameImmutableDescriptor(left, right) {
|
|
|
382
365
|
function arraysEqual(left, right) {
|
|
383
366
|
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
384
367
|
}
|
|
385
|
-
function isUnmonitoredConnectionId(connectionId) {
|
|
386
|
-
return connectionId.startsWith('unmonitored:');
|
|
387
|
-
}
|
|
388
|
-
function compareConnectionCandidate(leftDiscriminator, leftId, rightDiscriminator, rightId) {
|
|
389
|
-
const discriminator = compareOrdinal(leftDiscriminator, rightDiscriminator);
|
|
390
|
-
return discriminator === 0 ? compareOrdinal(leftId, rightId) : discriminator;
|
|
391
|
-
}
|
|
392
368
|
function compareOrdinal(left, right) {
|
|
393
369
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
394
370
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { ActorRef, RoutingId, ZLinkActor, ZLinkActorJoinOperationId,
|
|
1
|
+
import type { ActorRef, RoutingId, ZLinkActor, ZLinkActorJoinOperationId, ZLinkMessageSerializer, ZLinkSpot } from '../../contracts';
|
|
2
|
+
import { ZLinkMessage } from '../../contracts';
|
|
2
3
|
import type { ZLinkAuthoritySnapshot, ZLinkLocationOwnerToken } from '../locations/internal-location-contracts';
|
|
3
4
|
import type { ZLinkAuthorityStore, ZLinkObjectCreationStore, ZLinkOwnerLeaseStore } from '../locations/internal-store-contracts';
|
|
4
5
|
import type { Message } from '../../contracts/Common/Message';
|
|
5
6
|
import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend';
|
|
6
|
-
import { type ZLinkActorHandoffCoordinator, type ZLinkActorHandoffReplayPreparation, type ZLinkActorRoutedJoinTransport, type ZLinkActorTransferRegistry, type
|
|
7
|
+
import { type ZLinkActorHandoffCoordinator, type ZLinkActorHandoffReplayPreparation, type ZLinkActorRoutedJoinTransport, type ZLinkActorTransferRegistry, type ZLinkDeferredJoinCompletion, type ZLinkRemoteBoundSessionTarget } from '../actors';
|
|
7
8
|
import type { ZLinkActorRuntimeState } from '../actors/actor-runtime-state';
|
|
8
9
|
import type { ZLinkLocationLifecycle } from '../locations';
|
|
9
10
|
import type { DefaultZLinkSpotManager } from '../spots';
|
|
@@ -50,7 +51,6 @@ export interface ZLinkActorTransferRuntimeOptions {
|
|
|
50
51
|
readonly actorTransferRegistry: ZLinkActorTransferRegistry;
|
|
51
52
|
readonly authorityStore: () => (ZLinkAuthorityStore & ZLinkObjectCreationStore & ZLinkOwnerLeaseStore) | undefined;
|
|
52
53
|
readonly currentOwner: () => ZLinkLocationOwnerToken | undefined;
|
|
53
|
-
readonly relocationStore: () => ZLinkRelocationStore | undefined;
|
|
54
54
|
/** Live admitted peers of a mesh; used to stop retries against a gone session owner. */
|
|
55
55
|
readonly liveDescriptors?: (meshName: string, signal?: AbortSignal) => Promise<readonly import('../../contracts').ZLinkMeshNodeDescriptor[]>;
|
|
56
56
|
/** Service-wire command 42/43/44 bridge, installed after the host runtime is assembled. */
|
|
@@ -70,17 +70,18 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
70
70
|
private readonly activeDeferredJoinTerminals;
|
|
71
71
|
private readonly deferredJoinTerminals;
|
|
72
72
|
constructor(options: ZLinkActorTransferRuntimeOptions);
|
|
73
|
-
beginDeferredActorHandoff(actor: ZLinkActor, state: ZLinkActorRuntimeState
|
|
74
|
-
promoteDeferredActorHandoff(actor: ZLinkActor, _state: ZLinkActorRuntimeState
|
|
75
|
-
completeDeferredActorHandoff(actor: ZLinkActor, target: ZLinkSpotRouteTarget, _targetActorRef: ActorRef
|
|
76
|
-
cancelDeferredActorHandoff(actor: ZLinkActor,
|
|
77
|
-
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
73
|
+
beginDeferredActorHandoff(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
|
|
74
|
+
promoteDeferredActorHandoff(actor: ZLinkActor, _state: ZLinkActorRuntimeState): void;
|
|
75
|
+
completeDeferredActorHandoff(actor: ZLinkActor, target: ZLinkSpotRouteTarget, _targetActorRef: ActorRef): Promise<void>;
|
|
76
|
+
cancelDeferredActorHandoff(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void>;
|
|
77
|
+
prepareDeferredJoinAccepted(actorId: string, operationId: ZLinkActorJoinOperationId, actorRef: ActorRef, rawReply: Uint8Array, replyContentType?: string): ZLinkDeferredJoinCompletion;
|
|
78
|
+
/**
|
|
79
|
+
* Runs the Accepted completion callback once in the target Actor mailbox.
|
|
80
|
+
* A repeated delivery of the same OperationId in this process observes the
|
|
81
|
+
* first terminal (completion idempotency only).
|
|
82
|
+
*/
|
|
83
|
+
deliverDeferredJoinAccepted(completion: ZLinkDeferredJoinCompletion, actor: ZLinkActor, actorRef: ActorRef, submitMailbox: <T>(operation: () => Promise<T>) => Promise<T>, signal?: AbortSignal): Promise<void>;
|
|
84
|
+
private deliverDeferredJoinAcceptedCore;
|
|
84
85
|
private prepareSourceActorLeave;
|
|
85
86
|
private restoreSourceActor;
|
|
86
87
|
private beginSourceActorMove;
|
|
@@ -89,7 +90,7 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
89
90
|
private admitDeferredSourcePrefix;
|
|
90
91
|
private observeHandoffReplay;
|
|
91
92
|
private sourceHandoffPrefixQueue;
|
|
92
|
-
prepareSource(actor: ZLinkActor, state: ZLinkActorRuntimeState, signal?: AbortSignal, lifecycleAuthority?: 'framework' | 'core',
|
|
93
|
+
prepareSource(actor: ZLinkActor, state: ZLinkActorRuntimeState, signal?: AbortSignal, lifecycleAuthority?: 'framework' | 'core', deferredJoin?: boolean, relocation?: ServiceWireOperationId): Promise<{
|
|
93
94
|
handoffBacklog: readonly ZLinkActorHandoffPacket[];
|
|
94
95
|
sourceLeaveCompletion: Promise<void> | undefined;
|
|
95
96
|
sourceLeaveSubmitted: Promise<void> | undefined;
|
|
@@ -107,6 +108,7 @@ export declare class ZLinkActorTransferRuntime {
|
|
|
107
108
|
setReplayResults(results: readonly import('../actors').ZLinkActorHandoffResult[]): void;
|
|
108
109
|
commit(target: ZLinkSpotRouteTarget, targetActorRef: ActorRef, targetOwnerFence: ZLinkActorMessageFollowOwnerFence): Promise<void>;
|
|
109
110
|
rollback(): Promise<void>;
|
|
111
|
+
discard(reason: unknown): void;
|
|
110
112
|
}>;
|
|
111
113
|
notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
|
|
112
114
|
completeRelocationSourceLeave(actor: ZLinkActor, sourceSpotId: RoutingId | undefined, signal?: AbortSignal): Promise<void>;
|