@serfab/cadre-core 1.7.0 → 1.9.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/README.md +8 -6
- package/dist/cadre-node.d.ts +527 -206
- package/dist/cadre-node.js +1084 -528
- package/dist/cadre-node.js.map +1 -1
- package/dist/control-authorization.d.ts +2 -2
- package/dist/control-authorization.js +1 -0
- package/dist/control-authorization.js.map +1 -1
- package/dist/control-cohort.d.ts +6 -0
- package/dist/control-cohort.js +6 -0
- package/dist/control-cohort.js.map +1 -1
- package/dist/control-database.d.ts +46 -8
- package/dist/control-database.js +97 -18
- package/dist/control-database.js.map +1 -1
- package/dist/control-formation-recorder.d.ts +37 -14
- package/dist/control-formation-recorder.js +60 -10
- package/dist/control-formation-recorder.js.map +1 -1
- package/dist/control-read-retry.d.ts +13 -12
- package/dist/control-read-retry.js +14 -12
- package/dist/control-read-retry.js.map +1 -1
- package/dist/control-schema.d.ts +1 -1
- package/dist/control-schema.js +67 -5
- package/dist/control-schema.js.map +1 -1
- package/dist/control-stream.d.ts +9 -1
- package/dist/control-stream.js +24 -1
- package/dist/control-stream.js.map +1 -1
- package/dist/control-write-retry.d.ts +12 -2
- package/dist/control-write-retry.js +13 -2
- package/dist/control-write-retry.js.map +1 -1
- package/dist/delegate-admission.d.ts +11 -8
- package/dist/delegate-admission.js +19 -11
- package/dist/delegate-admission.js.map +1 -1
- package/dist/diagnostics/connection-path.d.ts +0 -7
- package/dist/diagnostics/connection-path.js +0 -7
- package/dist/diagnostics/connection-path.js.map +1 -1
- package/dist/formation-approval.d.ts +7 -0
- package/dist/formation-approval.js +9 -3
- package/dist/formation-approval.js.map +1 -1
- package/dist/fs-atomic.d.ts +11 -2
- package/dist/fs-atomic.js +13 -3
- package/dist/fs-atomic.js.map +1 -1
- package/dist/hibernation-manager.d.ts +111 -8
- package/dist/hibernation-manager.js +234 -49
- package/dist/hibernation-manager.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +25 -20
- package/dist/index.js.map +1 -1
- package/dist/joined-strand-store.d.ts +90 -25
- package/dist/joined-strand-store.js +223 -55
- package/dist/joined-strand-store.js.map +1 -1
- package/dist/key-store-file.js +14 -5
- package/dist/key-store-file.js.map +1 -1
- package/dist/link-budget.d.ts +367 -69
- package/dist/link-budget.js +375 -72
- package/dist/link-budget.js.map +1 -1
- package/dist/membership-connection-gater.d.ts +30 -43
- package/dist/membership-connection-gater.js +31 -42
- package/dist/membership-connection-gater.js.map +1 -1
- package/dist/node-local-snapshot.d.ts +6 -4
- package/dist/node-local-snapshot.js +7 -3
- package/dist/node-local-snapshot.js.map +1 -1
- package/dist/peer-dial.d.ts +24 -4
- package/dist/peer-dial.js +74 -5
- package/dist/peer-dial.js.map +1 -1
- package/dist/peer-join-backfill.d.ts +2 -10
- package/dist/peer-join-backfill.js +8 -8
- package/dist/peer-join-backfill.js.map +1 -1
- package/dist/push-fanout.d.ts +6 -0
- package/dist/push-fanout.js +6 -0
- package/dist/push-fanout.js.map +1 -1
- package/dist/relay-reservation.d.ts +3 -1
- package/dist/relay-reservation.js +3 -1
- package/dist/relay-reservation.js.map +1 -1
- package/dist/relay-server.d.ts +79 -0
- package/dist/relay-server.js +74 -0
- package/dist/relay-server.js.map +1 -0
- package/dist/seed-bootstrap.d.ts +57 -4
- package/dist/seed-bootstrap.js +107 -83
- package/dist/seed-bootstrap.js.map +1 -1
- package/dist/storage-scope.d.ts +33 -17
- package/dist/storage-scope.js +44 -23
- package/dist/storage-scope.js.map +1 -1
- package/dist/strand-addr-protocol.d.ts +58 -21
- package/dist/strand-addr-protocol.js +133 -85
- package/dist/strand-addr-protocol.js.map +1 -1
- package/dist/strand-database.d.ts +20 -2
- package/dist/strand-database.js +42 -5
- package/dist/strand-database.js.map +1 -1
- package/dist/strand-first-sync-gate.d.ts +59 -21
- package/dist/strand-first-sync-gate.js +58 -19
- package/dist/strand-first-sync-gate.js.map +1 -1
- package/dist/strand-formation-deadlines.d.ts +151 -0
- package/dist/strand-formation-deadlines.js +171 -0
- package/dist/strand-formation-deadlines.js.map +1 -0
- package/dist/strand-formation-manager.d.ts +63 -30
- package/dist/strand-formation-manager.js +67 -41
- package/dist/strand-formation-manager.js.map +1 -1
- package/dist/strand-formation-protocol.d.ts +45 -46
- package/dist/strand-formation-protocol.js +62 -126
- package/dist/strand-formation-protocol.js.map +1 -1
- package/dist/strand-fret-addrs.d.ts +54 -0
- package/dist/strand-fret-addrs.js +108 -0
- package/dist/strand-fret-addrs.js.map +1 -0
- package/dist/strand-instance-manager.d.ts +122 -44
- package/dist/strand-instance-manager.js +270 -114
- package/dist/strand-instance-manager.js.map +1 -1
- package/dist/strand-membership-writer.d.ts +6 -0
- package/dist/strand-membership-writer.js +11 -0
- package/dist/strand-membership-writer.js.map +1 -1
- package/dist/strand-network-state-file.d.ts +12 -0
- package/dist/strand-network-state-file.js +38 -0
- package/dist/strand-network-state-file.js.map +1 -0
- package/dist/strand-network-state.d.ts +111 -0
- package/dist/strand-network-state.js +191 -0
- package/dist/strand-network-state.js.map +1 -0
- package/dist/strand-revocation-enforcer.js +2 -1
- package/dist/strand-revocation-enforcer.js.map +1 -1
- package/dist/strand-solicitation.d.ts +36 -20
- package/dist/strand-solicitation.js +4 -4
- package/dist/strand-solicitation.js.map +1 -1
- package/dist/strand-wake-protocol.d.ts +80 -23
- package/dist/strand-wake-protocol.js +89 -64
- package/dist/strand-wake-protocol.js.map +1 -1
- package/dist/types.d.ts +148 -61
- package/dist/types.js +4 -3
- package/dist/types.js.map +1 -1
- package/package.json +11 -10
- package/src/cadre-node.ts +8400 -7776
- package/src/control-authorization.ts +2 -1
- package/src/control-cohort.ts +6 -0
- package/src/control-database.ts +122 -18
- package/src/control-formation-recorder.ts +354 -305
- package/src/control-read-retry.ts +14 -12
- package/src/control-schema.ts +67 -5
- package/src/control-stream.ts +25 -1
- package/src/control-write-retry.ts +13 -2
- package/src/delegate-admission.ts +23 -13
- package/src/diagnostics/connection-path.ts +0 -7
- package/src/formation-approval.ts +610 -604
- package/src/fs-atomic.ts +14 -4
- package/src/hibernation-manager.ts +638 -437
- package/src/index.ts +43 -65
- package/src/joined-strand-store.ts +247 -57
- package/src/key-store-file.ts +14 -5
- package/src/link-budget.ts +393 -74
- package/src/membership-connection-gater.ts +31 -45
- package/src/node-local-snapshot.ts +12 -7
- package/src/peer-dial.ts +81 -7
- package/src/peer-join-backfill.ts +10 -9
- package/src/push-fanout.ts +6 -0
- package/src/relay-reservation.ts +3 -1
- package/src/relay-server.ts +98 -0
- package/src/seed-bootstrap.ts +133 -91
- package/src/storage-scope.ts +44 -23
- package/src/strand-addr-protocol.ts +547 -458
- package/src/strand-database.ts +287 -242
- package/src/strand-first-sync-gate.ts +58 -19
- package/src/strand-formation-deadlines.ts +227 -0
- package/src/strand-formation-manager.ts +700 -647
- package/src/strand-formation-protocol.ts +106 -154
- package/src/strand-fret-addrs.ts +145 -0
- package/src/strand-instance-manager.ts +307 -140
- package/src/strand-membership-writer.ts +12 -0
- package/src/strand-network-state-file.ts +40 -0
- package/src/strand-network-state.ts +243 -0
- package/src/strand-revocation-enforcer.ts +2 -1
- package/src/strand-solicitation.ts +519 -500
- package/src/strand-wake-protocol.ts +401 -355
- package/src/types.ts +150 -61
- package/dist/strand-peer-book-file.d.ts +0 -12
- package/dist/strand-peer-book-file.js +0 -37
- package/dist/strand-peer-book-file.js.map +0 -1
- package/dist/strand-peer-book-protocol.d.ts +0 -159
- package/dist/strand-peer-book-protocol.js +0 -360
- package/dist/strand-peer-book-protocol.js.map +0 -1
- package/dist/strand-peer-book-swap.d.ts +0 -104
- package/dist/strand-peer-book-swap.js +0 -284
- package/dist/strand-peer-book-swap.js.map +0 -1
- package/dist/strand-peer-book.d.ts +0 -159
- package/dist/strand-peer-book.js +0 -354
- package/dist/strand-peer-book.js.map +0 -1
- package/dist/strand-peer-observer.d.ts +0 -88
- package/dist/strand-peer-observer.js +0 -180
- package/dist/strand-peer-observer.js.map +0 -1
- package/src/strand-peer-book-file.ts +0 -39
- package/src/strand-peer-book-protocol.ts +0 -463
- package/src/strand-peer-book-swap.ts +0 -338
- package/src/strand-peer-book.ts +0 -468
- package/src/strand-peer-observer.ts +0 -235
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strand-network-state.js","sourceRoot":"","sources":["../src/strand-network-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,7 +115,8 @@
|
|
|
115
115
|
* path.
|
|
116
116
|
*/
|
|
117
117
|
import debug from 'debug';
|
|
118
|
-
import {
|
|
118
|
+
import { decideWithinDeadline } from './membership-connection-gater.js';
|
|
119
|
+
import { ADMISSION_DECISION_TIMEOUT_MS } from './link-budget.js';
|
|
119
120
|
const log = debug('sereus:cadre:strand-revocation');
|
|
120
121
|
/**
|
|
121
122
|
* Default cadence of the deny-set refresh. Bounded staleness is the accepted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strand-revocation-enforcer.js","sourceRoot":"","sources":["../src/strand-revocation-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmHG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"strand-revocation-enforcer.js","sourceRoot":"","sources":["../src/strand-revocation-enforcer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Libp2p } from '@libp2p/interface';
|
|
2
|
-
import type { OpenInvitation, FormStrandResult, StrandFormationDisclosure
|
|
3
|
-
import { type StrandFormationManagerConfig } from './strand-formation-manager.js';
|
|
2
|
+
import type { OpenInvitation, FormStrandResult, StrandFormationDisclosure } from './types.js';
|
|
3
|
+
import { type MembershipInviteIssuer, type StrandFormationManagerConfig } from './strand-formation-manager.js';
|
|
4
4
|
import { type FormationResultMessage } from './strand-formation-protocol.js';
|
|
5
5
|
/**
|
|
6
6
|
* Interface for validating formation disclosures
|
|
@@ -43,27 +43,43 @@ export type ResolvedHostStrand = {
|
|
|
43
43
|
kind: 'missing';
|
|
44
44
|
strandId: string;
|
|
45
45
|
};
|
|
46
|
+
/** One redemption of an invite against an already-existing host strand (the record-only consent write). */
|
|
47
|
+
export interface FormationUsageParams {
|
|
48
|
+
token: string;
|
|
49
|
+
/** The joining peer's own ed25519 public key — written to `FormationUsage.PeerKey` and inside BOTH signed digests. */
|
|
50
|
+
peerKey: string;
|
|
51
|
+
/** The joiner's signature over the `'consent'` digest — written to `FormationUsage.PeerSig`. */
|
|
52
|
+
peerSignature: string;
|
|
53
|
+
/** Joiner-minted single-use nonce; both signed digests cover it. */
|
|
54
|
+
usageStampId: string;
|
|
55
|
+
strandId: string;
|
|
56
|
+
/** Exact text to write to `FormationUsage.Disclosure`; joiner and approver both sign these bytes. */
|
|
57
|
+
disclosure: string;
|
|
58
|
+
/** Aborted when the caller has given up; observed BEFORE any write so the invite stays unspent. */
|
|
59
|
+
signal?: AbortSignal;
|
|
60
|
+
}
|
|
61
|
+
/** A redemption the recorder has authorized (approval obtained, a seat still free) but not yet written. */
|
|
62
|
+
export interface AuthorizedFormationUsage {
|
|
63
|
+
/** Write the consent row. Abort and seat budget are re-checked inside the write lock. */
|
|
64
|
+
record(): Promise<void>;
|
|
65
|
+
}
|
|
46
66
|
/**
|
|
47
67
|
* Interface for recording formation usage
|
|
48
68
|
*/
|
|
49
69
|
export interface FormationUsageRecorder {
|
|
50
70
|
/**
|
|
51
|
-
* Record that a formation invite was used
|
|
71
|
+
* Record that a formation invite was used. Where {@link authorizeUsage} is implemented, this
|
|
72
|
+
* is the same as authorizing and then calling `record()` straight away.
|
|
52
73
|
*/
|
|
53
|
-
recordUsage(params:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
/** Exact text to write to `FormationUsage.Disclosure`; joiner and approver both sign these bytes. */
|
|
63
|
-
disclosure: string;
|
|
64
|
-
/** Aborted when the caller has given up; observed BEFORE any write so the invite stays unspent. */
|
|
65
|
-
signal?: AbortSignal;
|
|
66
|
-
}): Promise<void>;
|
|
74
|
+
recordUsage(params: FormationUsageParams): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Everything {@link recordUsage} does short of the write: obtain the outside approval (when
|
|
77
|
+
* the invite demands one) and pre-check the seat budget, returning a handle whose `record()`
|
|
78
|
+
* writes the consent row with exactly the fields that were approved. Lets the manager ask
|
|
79
|
+
* before it writes anything into the host strand, and write consent only after.
|
|
80
|
+
* Optional: a recorder without it is treated as having nothing to ask up front.
|
|
81
|
+
*/
|
|
82
|
+
authorizeUsage?(params: FormationUsageParams): Promise<AuthorizedFormationUsage>;
|
|
67
83
|
/**
|
|
68
84
|
* Check if a token has already been used (for single-use invites)
|
|
69
85
|
*/
|
|
@@ -177,7 +193,7 @@ export interface StrandSolicitationServiceOptions {
|
|
|
177
193
|
* (null = open strand, throw = reject the redemption retryably, unwired = mock/test
|
|
178
194
|
* posture: approve with no invitation).
|
|
179
195
|
*/
|
|
180
|
-
issueMembershipInvite?:
|
|
196
|
+
issueMembershipInvite?: MembershipInviteIssuer;
|
|
181
197
|
/** Configuration for the formation manager */
|
|
182
198
|
formationConfig?: StrandFormationManagerConfig;
|
|
183
199
|
}
|
|
@@ -227,11 +243,11 @@ export declare class StrandSolicitationService {
|
|
|
227
243
|
* Register as a responder on a libp2p node.
|
|
228
244
|
* This enables the node to handle incoming strand formation requests.
|
|
229
245
|
*/
|
|
230
|
-
registerResponder(node: Libp2p): void
|
|
246
|
+
registerResponder(node: Libp2p): Promise<void>;
|
|
231
247
|
/**
|
|
232
248
|
* Unregister as a responder from a libp2p node.
|
|
233
249
|
*/
|
|
234
|
-
unregisterResponder(node: Libp2p): void
|
|
250
|
+
unregisterResponder(node: Libp2p): Promise<void>;
|
|
235
251
|
/**
|
|
236
252
|
* Form a strand with a responder via an open invitation.
|
|
237
253
|
*
|
|
@@ -88,15 +88,15 @@ export class StrandSolicitationService {
|
|
|
88
88
|
* Register as a responder on a libp2p node.
|
|
89
89
|
* This enables the node to handle incoming strand formation requests.
|
|
90
90
|
*/
|
|
91
|
-
registerResponder(node) {
|
|
92
|
-
this.getFormationManager().registerResponder(node);
|
|
91
|
+
async registerResponder(node) {
|
|
92
|
+
await this.getFormationManager().registerResponder(node);
|
|
93
93
|
log('Registered as responder');
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
96
|
* Unregister as a responder from a libp2p node.
|
|
97
97
|
*/
|
|
98
|
-
unregisterResponder(node) {
|
|
99
|
-
this.getFormationManager().unregisterResponder(node);
|
|
98
|
+
async unregisterResponder(node) {
|
|
99
|
+
await this.getFormationManager().unregisterResponder(node);
|
|
100
100
|
log('Unregistered as responder');
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strand-solicitation.js","sourceRoot":"","sources":["../src/strand-solicitation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"strand-solicitation.js","sourceRoot":"","sources":["../src/strand-solicitation.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,32 +30,54 @@ import type { StrandInstance, WakeRequest, WakeAck } from './types.js';
|
|
|
30
30
|
/** Protocol id for control-network push-wake (parallel to `/sereus/seed/1.0.0`). */
|
|
31
31
|
export declare const WAKE_PROTOCOL = "/sereus/strand-wake/1.0.0";
|
|
32
32
|
/**
|
|
33
|
-
* Default
|
|
34
|
-
*
|
|
33
|
+
* Default deadline for ONE wake attempt — dial, request, ack — at the default declared link
|
|
34
|
+
* (ms): `relayedRequestBudgetMs` in `link-budget.ts`, because the target may be reachable
|
|
35
|
+
* only through a relay and the attempt has to open that connection before the exchange.
|
|
36
|
+
* {@link dialWake} derives it from {@link DialWakeOptions.linkRoundTripMs} instead when given.
|
|
37
|
+
*
|
|
38
|
+
* It holds only link work because the receiver acks as soon as it has DECIDED, before the
|
|
39
|
+
* wake itself runs ({@link StrandWakeService.processWakeRequest}).
|
|
40
|
+
*
|
|
41
|
+
* NOTE: the receiver's membership check (two live control reads) runs inside this deadline and
|
|
42
|
+
* is not counted. In steady state those reads touch only held blocks and do not consult the
|
|
43
|
+
* cohort. If a wake or address request is seen timing out while the receiver's membership read
|
|
44
|
+
* is consulting, count one membership decision in this deadline or answer the check from the
|
|
45
|
+
* materialized authorized-peer snapshot. See docs/cadre-consistency.md → "Deadlines Over
|
|
46
|
+
* Optimystic's Reads and Commits".
|
|
47
|
+
*/
|
|
48
|
+
export declare const DEFAULT_WAKE_TIMEOUT_MS: number;
|
|
49
|
+
/**
|
|
50
|
+
* Whole attempts one {@link dialWake} call budgets for: a stale signaling address, then the
|
|
51
|
+
* direct address that works.
|
|
52
|
+
*/
|
|
53
|
+
export declare const WAKE_DIAL_ATTEMPTS = 2;
|
|
54
|
+
/**
|
|
55
|
+
* Default budget for a WHOLE {@link dialWake} call at the default declared link, in ms —
|
|
56
|
+
* every candidate address together, not each one: {@link WAKE_DIAL_ATTEMPTS} attempt
|
|
57
|
+
* deadlines.
|
|
35
58
|
*
|
|
36
59
|
* Without it the cost of a wake is (candidate count × {@link
|
|
37
60
|
* DEFAULT_WAKE_TIMEOUT_MS}), a number nothing chooses or bounds. That is not
|
|
38
61
|
* hypothetical: an address behind a dropped NAT mapping, or any host that
|
|
39
62
|
* blackholes rather than sending a RST, burns its full attempt timeout instead
|
|
40
|
-
* of failing in milliseconds, so a
|
|
41
|
-
* five-address one costs 50 s.
|
|
63
|
+
* of failing in milliseconds, so a five-address peer would cost five attempts.
|
|
42
64
|
*
|
|
43
65
|
* This makes the TARGET PEER the unit rather than the address — the same
|
|
44
66
|
* decision, for the same reason, as
|
|
45
67
|
* `DEFAULT_CONTROL_COHORT_DIAL_TIMEOUT_MS` in `peer-dial.ts`, though not the same
|
|
46
|
-
*
|
|
68
|
+
* count: that one is sized to fit several dead addresses ahead of a working one,
|
|
47
69
|
* while a wake target is expected to be awake and reachable on its first or second
|
|
48
|
-
* address.
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
70
|
+
* address. Two whole attempts so a reachable peer whose signaling address is stale
|
|
71
|
+
* still gets a genuine try at its direct one; a peer needing longer than that is
|
|
72
|
+
* not "asleep and reachable", which is the only case a wake is for. The last
|
|
73
|
+
* attempt inside the budget gets whatever remains of it, so the call returns at
|
|
74
|
+
* the budget, not past it.
|
|
53
75
|
*
|
|
54
76
|
* Override per call with {@link DialWakeOptions.budgetMs} — tests that drive
|
|
55
77
|
* dead addresses on purpose set it low so a dial's duration is a chosen number
|
|
56
78
|
* rather than a transitive libp2p default stretched by machine load.
|
|
57
79
|
*/
|
|
58
|
-
export declare const DEFAULT_WAKE_DIAL_BUDGET_MS
|
|
80
|
+
export declare const DEFAULT_WAKE_DIAL_BUDGET_MS: number;
|
|
59
81
|
/**
|
|
60
82
|
* Dependencies the {@link StrandWakeService} receiver needs from its host
|
|
61
83
|
* (`CadreNode`), injected so the service is testable without a full node.
|
|
@@ -67,8 +89,12 @@ export interface StrandWakeServiceOptions {
|
|
|
67
89
|
getStrand(strandId: string): StrandInstance | undefined;
|
|
68
90
|
/**
|
|
69
91
|
* Trigger the local wake path for a hibernating/idle strand. Wired to
|
|
70
|
-
* `CadreNode.wakeStrand` (→ `HibernationManager` → `resumeStrand`)
|
|
71
|
-
* resume
|
|
92
|
+
* `CadreNode.wakeStrand` (→ `HibernationManager` → `resumeStrand`); `resumeStrand`
|
|
93
|
+
* joins any resume already in flight, so a push-wake racing a check-in shares its
|
|
94
|
+
* runtime build.
|
|
95
|
+
*
|
|
96
|
+
* Started, not awaited: the ack goes back before the strand is up, and a wake
|
|
97
|
+
* that fails afterwards is logged here rather than reported to the sender.
|
|
72
98
|
*/
|
|
73
99
|
wake(strandId: string): Promise<void>;
|
|
74
100
|
/**
|
|
@@ -81,14 +107,19 @@ export interface StrandWakeServiceOptions {
|
|
|
81
107
|
* Cap on concurrent inbound wake streams (defaults to
|
|
82
108
|
* {@link DEFAULT_MAX_CONCURRENT_WAKES}). Over the cap, a non-accepting ack is
|
|
83
109
|
* returned without invoking the wake path.
|
|
110
|
+
*
|
|
111
|
+
* It counts streams, not wakes: a wake started after its ack is no longer
|
|
112
|
+
* counted. Those are bounded by the strands this node participates in instead,
|
|
113
|
+
* since an unknown strand is refused before any wake starts and the wake path
|
|
114
|
+
* coalesces per strand.
|
|
84
115
|
*/
|
|
85
116
|
maxConcurrent?: number;
|
|
86
117
|
}
|
|
87
118
|
/**
|
|
88
119
|
* Receiver side of the push-wake protocol. Registers a `WAKE_PROTOCOL` handler
|
|
89
120
|
* on the control node and, for each inbound {@link WakeRequest}, gates on cadre
|
|
90
|
-
* membership,
|
|
91
|
-
*
|
|
121
|
+
* membership, replies with a {@link WakeAck}, and starts resuming the named
|
|
122
|
+
* strand if it is hibernating/idle and we participate in it.
|
|
92
123
|
*/
|
|
93
124
|
export declare class StrandWakeService {
|
|
94
125
|
private readonly options;
|
|
@@ -100,12 +131,16 @@ export declare class StrandWakeService {
|
|
|
100
131
|
constructor(options: StrandWakeServiceOptions);
|
|
101
132
|
/** Number of in-flight inbound wake streams. */
|
|
102
133
|
get activeCount(): number;
|
|
103
|
-
/**
|
|
104
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Register the wake protocol handler on the control node. Rejects when libp2p
|
|
136
|
+
* refuses the registration; the node reference is kept only once the handler
|
|
137
|
+
* is in place.
|
|
138
|
+
*/
|
|
139
|
+
initialize(node: Libp2p): Promise<void>;
|
|
105
140
|
/** Unregister the handler and release the node reference. */
|
|
106
141
|
shutdown(): Promise<void>;
|
|
107
142
|
/**
|
|
108
|
-
* Read the inbound request, decide
|
|
143
|
+
* Read the inbound request, decide the wake, and write the ack.
|
|
109
144
|
*
|
|
110
145
|
* Three hardening layers, all reported as a non-accepting ack rather than a
|
|
111
146
|
* dropped/hung stream: a concurrency cap (over {@link maxConcurrent}, reply
|
|
@@ -114,24 +149,41 @@ export declare class StrandWakeService {
|
|
|
114
149
|
* existing malformed/oversized-frame guard.
|
|
115
150
|
*/
|
|
116
151
|
private handleStream;
|
|
152
|
+
/** Read and decide one inbound request; any failure becomes a non-accepting ack. */
|
|
153
|
+
private answerStream;
|
|
117
154
|
/**
|
|
118
|
-
* Decide
|
|
155
|
+
* Decide the wake for a decoded request and start it. Exposed (not private) so
|
|
119
156
|
* the decision matrix can be unit-tested directly.
|
|
120
157
|
*
|
|
121
158
|
* - Non-member sender → rejected (`accepted: false`).
|
|
122
159
|
* - Unknown / not-participated strand → rejected.
|
|
123
|
-
* - Hibernating or idle strand →
|
|
160
|
+
* - Hibernating or idle strand → `accepted` with that status, and a wake started.
|
|
124
161
|
* - Already-live strand → no-op, `accepted` with current status.
|
|
162
|
+
*
|
|
163
|
+
* The wake is not awaited, so the ack means "a wake was started", not "the
|
|
164
|
+
* strand is up". Awaiting it would put the whole resume — a sibling address
|
|
165
|
+
* collection, a strand node build, a relay reservation drive — inside the
|
|
166
|
+
* sender's attempt deadline, coupling that deadline to this node's own budgets.
|
|
125
167
|
*/
|
|
126
168
|
processWakeRequest(request: WakeRequest, remotePeerId: string): Promise<WakeAck>;
|
|
169
|
+
/**
|
|
170
|
+
* Start a wake without awaiting it — the same fire-and-forget an activity-driven
|
|
171
|
+
* local wake uses (`HibernationManager`), which also coalesces the two.
|
|
172
|
+
*/
|
|
173
|
+
private startWake;
|
|
127
174
|
}
|
|
128
175
|
/** Options for {@link dialWake}. */
|
|
129
176
|
export interface DialWakeOptions {
|
|
130
|
-
/**
|
|
177
|
+
/**
|
|
178
|
+
* The sender's declared link round trip (`NetworkConfig.linkRoundTripMs`), from which
|
|
179
|
+
* both deadlines below are derived when not given. Unset means the declared default.
|
|
180
|
+
*/
|
|
181
|
+
linkRoundTripMs?: number;
|
|
182
|
+
/** Per-ATTEMPT timeout in ms (default: derived as {@link DEFAULT_WAKE_TIMEOUT_MS} is). */
|
|
131
183
|
timeoutMs?: number;
|
|
132
184
|
/**
|
|
133
|
-
* Budget for the whole call — every candidate together (default
|
|
134
|
-
* {@link DEFAULT_WAKE_DIAL_BUDGET_MS}).
|
|
185
|
+
* Budget for the whole call — every candidate together (default:
|
|
186
|
+
* {@link WAKE_DIAL_ATTEMPTS} × the per-attempt timeout, as {@link DEFAULT_WAKE_DIAL_BUDGET_MS}).
|
|
135
187
|
*/
|
|
136
188
|
budgetMs?: number;
|
|
137
189
|
/** Override the protocol id (defaults to {@link WAKE_PROTOCOL}). */
|
|
@@ -161,5 +213,10 @@ export interface DialWakeOptions {
|
|
|
161
213
|
* exactly the signaling address this ordering puts first — silently inverting
|
|
162
214
|
* it, with no per-dial sorter override to opt out of. For the same reason this
|
|
163
215
|
* does not use `dialPeerAddrs`, which puts relayed addresses last.
|
|
216
|
+
*
|
|
217
|
+
* NOTE: unlike `dialPeerAddrs`, this does not drop addresses that relay through this node, so a
|
|
218
|
+
* relay waking a peer that holds a reservation on it tries that address and gets `Can not dial
|
|
219
|
+
* self` (fast, then the next candidate). If wakes are ever sent from a relay to its own
|
|
220
|
+
* reservation holders routinely, share `dialPeerAddrs`'s filter here.
|
|
164
221
|
*/
|
|
165
222
|
export declare function dialWake(node: Libp2p, addrs: Multiaddr[], request: WakeRequest, options?: DialWakeOptions): Promise<WakeAck>;
|