@serfab/cadre-core 0.7.1 → 0.8.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/README.md +9 -8
- package/dist/authority-key.d.ts +41 -0
- package/dist/authority-key.js +52 -0
- package/dist/authority-key.js.map +1 -0
- package/dist/cadre-node.d.ts +770 -11
- package/dist/cadre-node.js +1900 -88
- package/dist/cadre-node.js.map +1 -1
- package/dist/canonical-datetime.d.ts +33 -0
- package/dist/canonical-datetime.js +38 -0
- package/dist/canonical-datetime.js.map +1 -0
- package/dist/canonical-json.d.ts +12 -0
- package/dist/canonical-json.js +33 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/control-cohort.d.ts +63 -0
- package/dist/control-cohort.js +80 -0
- package/dist/control-cohort.js.map +1 -0
- package/dist/control-database.d.ts +259 -5
- package/dist/control-database.js +541 -128
- package/dist/control-database.js.map +1 -1
- package/dist/control-formation-recorder.d.ts +89 -0
- package/dist/control-formation-recorder.js +139 -0
- package/dist/control-formation-recorder.js.map +1 -0
- package/dist/control-schema.d.ts +12 -0
- package/dist/control-schema.js +199 -0
- package/dist/control-schema.js.map +1 -0
- package/dist/control-stream.d.ts +54 -0
- package/dist/control-stream.js +104 -0
- package/dist/control-stream.js.map +1 -0
- package/dist/device-token.d.ts +50 -0
- package/dist/device-token.js +66 -0
- package/dist/device-token.js.map +1 -0
- package/dist/diagnostics/connection-path.d.ts +118 -0
- package/dist/diagnostics/connection-path.js +204 -0
- package/dist/diagnostics/connection-path.js.map +1 -0
- package/dist/diagnostics/webrtc-turn-tracker.d.ts +50 -0
- package/dist/diagnostics/webrtc-turn-tracker.js +196 -0
- package/dist/diagnostics/webrtc-turn-tracker.js.map +1 -0
- package/dist/hibernation-manager.d.ts +79 -0
- package/dist/hibernation-manager.js +173 -23
- package/dist/hibernation-manager.js.map +1 -1
- package/dist/index.d.ts +25 -4
- package/dist/index.js +59 -4
- package/dist/index.js.map +1 -1
- package/dist/key-store-file.d.ts +52 -0
- package/dist/key-store-file.js +194 -0
- package/dist/key-store-file.js.map +1 -0
- package/dist/key-store.d.ts +75 -0
- package/dist/key-store.js +66 -0
- package/dist/key-store.js.map +1 -0
- package/dist/peer-authorization.d.ts +26 -0
- package/dist/peer-authorization.js +40 -0
- package/dist/peer-authorization.js.map +1 -0
- package/dist/peer-record.d.ts +89 -0
- package/dist/peer-record.js +117 -0
- package/dist/peer-record.js.map +1 -0
- package/dist/push-credentials.d.ts +34 -0
- package/dist/push-credentials.js +81 -0
- package/dist/push-credentials.js.map +1 -0
- package/dist/push-fanout.d.ts +137 -0
- package/dist/push-fanout.js +197 -0
- package/dist/push-fanout.js.map +1 -0
- package/dist/push-notifier-apns.d.ts +53 -0
- package/dist/push-notifier-apns.js +195 -0
- package/dist/push-notifier-apns.js.map +1 -0
- package/dist/push-notifier-fcm.d.ts +38 -0
- package/dist/push-notifier-fcm.js +183 -0
- package/dist/push-notifier-fcm.js.map +1 -0
- package/dist/push-notifier-shared.d.ts +18 -0
- package/dist/push-notifier-shared.js +25 -0
- package/dist/push-notifier-shared.js.map +1 -0
- package/dist/push-notifier.d.ts +71 -0
- package/dist/push-notifier.js +50 -0
- package/dist/push-notifier.js.map +1 -0
- package/dist/schema-verification.d.ts +11 -2
- package/dist/schema-verification.js +15 -4
- package/dist/schema-verification.js.map +1 -1
- package/dist/seed-bootstrap.d.ts +197 -9
- package/dist/seed-bootstrap.js +396 -137
- package/dist/seed-bootstrap.js.map +1 -1
- package/dist/seed-trust-policy.d.ts +63 -0
- package/dist/seed-trust-policy.js +56 -0
- package/dist/seed-trust-policy.js.map +1 -0
- package/dist/strand-addr-protocol.d.ts +132 -0
- package/dist/strand-addr-protocol.js +313 -0
- package/dist/strand-addr-protocol.js.map +1 -0
- package/dist/strand-cohort.d.ts +54 -0
- package/dist/strand-cohort.js +38 -0
- package/dist/strand-cohort.js.map +1 -0
- package/dist/strand-database.d.ts +54 -6
- package/dist/strand-database.js +88 -100
- package/dist/strand-database.js.map +1 -1
- package/dist/strand-formation-manager.d.ts +79 -19
- package/dist/strand-formation-manager.js +196 -104
- package/dist/strand-formation-manager.js.map +1 -1
- package/dist/strand-formation-protocol.d.ts +162 -0
- package/dist/strand-formation-protocol.js +279 -0
- package/dist/strand-formation-protocol.js.map +1 -0
- package/dist/strand-instance-manager.d.ts +73 -4
- package/dist/strand-instance-manager.js +167 -41
- package/dist/strand-instance-manager.js.map +1 -1
- package/dist/strand-member-key.d.ts +29 -0
- package/dist/strand-member-key.js +38 -0
- package/dist/strand-member-key.js.map +1 -0
- package/dist/strand-member-registry.d.ts +98 -0
- package/dist/strand-member-registry.js +129 -0
- package/dist/strand-member-registry.js.map +1 -0
- package/dist/strand-membership-writer.d.ts +361 -0
- package/dist/strand-membership-writer.js +449 -0
- package/dist/strand-membership-writer.js.map +1 -0
- package/dist/strand-solicitation.d.ts +77 -2
- package/dist/strand-solicitation.js +25 -4
- package/dist/strand-solicitation.js.map +1 -1
- package/dist/strand-wake-payload.d.ts +30 -0
- package/dist/strand-wake-payload.js +20 -0
- package/dist/strand-wake-payload.js.map +1 -0
- package/dist/strand-wake-protocol.d.ts +114 -0
- package/dist/strand-wake-protocol.js +257 -0
- package/dist/strand-wake-protocol.js.map +1 -0
- package/dist/strand-watcher.d.ts +6 -2
- package/dist/strand-watcher.js +57 -17
- package/dist/strand-watcher.js.map +1 -1
- package/dist/types.d.ts +406 -23
- package/dist/types.js +22 -5
- package/dist/types.js.map +1 -1
- package/package.json +14 -8
- package/src/authority-key.ts +68 -0
- package/src/cadre-node.ts +2937 -948
- package/src/canonical-datetime.ts +39 -0
- package/src/canonical-json.ts +30 -0
- package/src/control-cohort.ts +103 -0
- package/src/control-database.ts +931 -383
- package/src/control-formation-recorder.ts +151 -0
- package/src/control-schema.ts +198 -0
- package/src/control-stream.ts +128 -0
- package/src/device-token.ts +89 -0
- package/src/diagnostics/connection-path.ts +277 -0
- package/src/diagnostics/webrtc-turn-tracker.ts +222 -0
- package/src/hibernation-manager.ts +197 -28
- package/src/index.ts +273 -79
- package/src/key-store-file.ts +203 -0
- package/src/key-store.ts +99 -0
- package/src/peer-authorization.ts +53 -0
- package/src/peer-record.ts +146 -0
- package/src/push-credentials.ts +84 -0
- package/src/push-fanout.ts +272 -0
- package/src/push-notifier-apns.ts +243 -0
- package/src/push-notifier-fcm.ts +221 -0
- package/src/push-notifier-shared.ts +28 -0
- package/src/push-notifier.ts +93 -0
- package/src/schema-verification.ts +18 -4
- package/src/seed-bootstrap.ts +464 -188
- package/src/seed-trust-policy.ts +107 -0
- package/src/strand-addr-protocol.ts +410 -0
- package/src/strand-cohort.ts +77 -0
- package/src/strand-database.ts +113 -141
- package/src/strand-formation-manager.ts +233 -142
- package/src/strand-formation-protocol.ts +391 -0
- package/src/strand-instance-manager.ts +207 -56
- package/src/strand-member-key.ts +39 -0
- package/src/strand-member-registry.ts +177 -0
- package/src/strand-membership-writer.ts +640 -0
- package/src/strand-solicitation.ts +93 -4
- package/src/strand-wake-payload.ts +32 -0
- package/src/strand-wake-protocol.ts +331 -0
- package/src/strand-watcher.ts +61 -17
- package/src/types.ts +1012 -582
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-bootstrap.js","sourceRoot":"","sources":["../src/seed-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seed-bootstrap.js","sourceRoot":"","sources":["../src/seed-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trust-anchor policy for control-network seeds.
|
|
3
|
+
*
|
|
4
|
+
* A seed carries an ed25519 signature over its body and the `signerKey` that
|
|
5
|
+
* produced it. Verifying that signature only proves the seed is internally
|
|
6
|
+
* consistent — it does NOT prove the signer is an authority, because both the
|
|
7
|
+
* signer key and the seed's own `isAuthority` peer flags are attacker-supplied.
|
|
8
|
+
* The trust decision must therefore rest on an anchor that does not come from
|
|
9
|
+
* the seed body:
|
|
10
|
+
*
|
|
11
|
+
* 1. DB-anchored — keys already in the receiver's `CadreControl.AuthorityKey`
|
|
12
|
+
* table (steady state: the node is enrolled / has synced control state).
|
|
13
|
+
* 2. Pinned out-of-band — keys handed to the node from outside the seed
|
|
14
|
+
* (carried by a `CadreInvite.authorityKeys`, or pinned by an operator).
|
|
15
|
+
* 3. TOFU (opt-in) — an explicit confirmation callback invoked on first sight
|
|
16
|
+
* of an unknown signer key. Interactive hosts only; off by default.
|
|
17
|
+
*
|
|
18
|
+
* Secure default (`dbAnchoredTrustPolicy`): a cold-start node with an empty
|
|
19
|
+
* `AuthorityKey` table and no pinned keys rejects the seed — a seed can no
|
|
20
|
+
* longer vouch for its own signer.
|
|
21
|
+
*/
|
|
22
|
+
export interface SeedTrustContext {
|
|
23
|
+
/** Party the seed claims to belong to. */
|
|
24
|
+
partyId: string;
|
|
25
|
+
/** ed25519 base64url signer key — already signature-verified by `applySeed`. */
|
|
26
|
+
signerKey: string;
|
|
27
|
+
/**
|
|
28
|
+
* The receiver's known authority keys, sourced from its `AuthorityKey`
|
|
29
|
+
* table — NOT from the seed. Empty for a cold-start node.
|
|
30
|
+
*/
|
|
31
|
+
knownAuthorityKeys: ReadonlySet<string>;
|
|
32
|
+
}
|
|
33
|
+
export interface SeedTrustDecision {
|
|
34
|
+
/** Whether the signer key is trusted. */
|
|
35
|
+
trusted: boolean;
|
|
36
|
+
/** Human-readable reason, surfaced as the seed-apply error when not trusted. */
|
|
37
|
+
reason?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Decides whether a signature-verified seed's signer key should be trusted.
|
|
41
|
+
* May be synchronous (DB/pinned anchors) or asynchronous (TOFU confirmation).
|
|
42
|
+
*/
|
|
43
|
+
export interface SeedTrustPolicy {
|
|
44
|
+
evaluate(ctx: SeedTrustContext): Promise<SeedTrustDecision> | SeedTrustDecision;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Default policy: trust only keys already present in the receiver's
|
|
48
|
+
* `AuthorityKey` table. A cold-start node (empty table) rejects every seed.
|
|
49
|
+
*/
|
|
50
|
+
export declare function dbAnchoredTrustPolicy(): SeedTrustPolicy;
|
|
51
|
+
/**
|
|
52
|
+
* Cold-start policy: trust keys in the receiver's `AuthorityKey` table plus a
|
|
53
|
+
* set pinned out-of-band (typically `CadreInvite.authorityKeys` or operator
|
|
54
|
+
* config). Lets an unenrolled invitee accept its first seed without the seed
|
|
55
|
+
* vouching for itself.
|
|
56
|
+
*/
|
|
57
|
+
export declare function pinnedKeyTrustPolicy(pinned: Iterable<string>): SeedTrustPolicy;
|
|
58
|
+
/**
|
|
59
|
+
* Opt-in interactive policy: trust keys already in the `AuthorityKey` table,
|
|
60
|
+
* and on an unknown key invoke `confirm` (e.g. a trust-circle UI prompt). The
|
|
61
|
+
* key is trusted iff `confirm` resolves true. Not enabled by default.
|
|
62
|
+
*/
|
|
63
|
+
export declare function tofuTrustPolicy(confirm: (ctx: SeedTrustContext) => Promise<boolean>): SeedTrustPolicy;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default policy: trust only keys already present in the receiver's
|
|
3
|
+
* `AuthorityKey` table. A cold-start node (empty table) rejects every seed.
|
|
4
|
+
*/
|
|
5
|
+
export function dbAnchoredTrustPolicy() {
|
|
6
|
+
return {
|
|
7
|
+
evaluate({ signerKey, knownAuthorityKeys }) {
|
|
8
|
+
if (knownAuthorityKeys.has(signerKey)) {
|
|
9
|
+
return { trusted: true };
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
trusted: false,
|
|
13
|
+
reason: 'Signer key is not a known authority (DB-anchored trust policy)',
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Cold-start policy: trust keys in the receiver's `AuthorityKey` table plus a
|
|
20
|
+
* set pinned out-of-band (typically `CadreInvite.authorityKeys` or operator
|
|
21
|
+
* config). Lets an unenrolled invitee accept its first seed without the seed
|
|
22
|
+
* vouching for itself.
|
|
23
|
+
*/
|
|
24
|
+
export function pinnedKeyTrustPolicy(pinned) {
|
|
25
|
+
const pinnedSet = new Set(pinned);
|
|
26
|
+
return {
|
|
27
|
+
evaluate({ signerKey, knownAuthorityKeys }) {
|
|
28
|
+
if (knownAuthorityKeys.has(signerKey) || pinnedSet.has(signerKey)) {
|
|
29
|
+
return { trusted: true };
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
trusted: false,
|
|
33
|
+
reason: 'Signer key is neither a known nor a pinned authority (pinned-key trust policy)',
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Opt-in interactive policy: trust keys already in the `AuthorityKey` table,
|
|
40
|
+
* and on an unknown key invoke `confirm` (e.g. a trust-circle UI prompt). The
|
|
41
|
+
* key is trusted iff `confirm` resolves true. Not enabled by default.
|
|
42
|
+
*/
|
|
43
|
+
export function tofuTrustPolicy(confirm) {
|
|
44
|
+
return {
|
|
45
|
+
async evaluate(ctx) {
|
|
46
|
+
if (ctx.knownAuthorityKeys.has(ctx.signerKey)) {
|
|
47
|
+
return { trusted: true };
|
|
48
|
+
}
|
|
49
|
+
const accepted = await confirm(ctx);
|
|
50
|
+
return accepted
|
|
51
|
+
? { trusted: true }
|
|
52
|
+
: { trusted: false, reason: 'TOFU confirmation declined for unknown signer key' };
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=seed-trust-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-trust-policy.js","sourceRoot":"","sources":["../src/seed-trust-policy.ts"],"names":[],"mappings":"AAgDA;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,QAAQ,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACxC,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,gEAAgE;aACzE,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO;QACL,QAAQ,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACxC,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,gFAAgF;aACzF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAoD;IAEpD,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,GAAG;YAChB,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,QAAQ;gBACb,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;gBACnB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC;QACtF,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control-network strand-address RPC.
|
|
3
|
+
*
|
|
4
|
+
* A strand runs as its own libp2p node (`strand-<id>`, random port), separate
|
|
5
|
+
* from the control node (`control-<partyId>`) even though both share the same
|
|
6
|
+
* peerId. To seed a strand's mesh, a node needs a sibling's **strand-network**
|
|
7
|
+
* address — but `CadrePeer.Multiaddr` only stores the **control** node's
|
|
8
|
+
* addresses. This protocol resolves the strand address on demand: a node asks
|
|
9
|
+
* its connected co-cadre siblings "what are your live strand-`X` multiaddrs?" and
|
|
10
|
+
* uses the union of their answers as the seed.
|
|
11
|
+
*
|
|
12
|
+
* Modeled directly on `strand-wake-protocol.ts`: a dedicated libp2p protocol id,
|
|
13
|
+
* 4-byte big-endian length-prefixed JSON frames, `node.handle` for the receiver,
|
|
14
|
+
* `node.dialProtocol` for the client, and the shared `ControlStream` primitives
|
|
15
|
+
* from `control-stream.ts`. The exchange is a single request → single response on
|
|
16
|
+
* one stream, so each side reads to EOF (under a read timeout) and decodes one
|
|
17
|
+
* frame via the shared {@link decodeLengthPrefixedFrame} guard.
|
|
18
|
+
*
|
|
19
|
+
* **Authorization (v1):** the control network is single-party — only this party's
|
|
20
|
+
* cadre peers connect (schema-gated `CadrePeer`). Like wake, the receiver gates
|
|
21
|
+
* on cadre membership (via the injected `isMember`) and requires no further
|
|
22
|
+
* signature; a non-member is refused with an empty address list. This is
|
|
23
|
+
* defense-in-depth (the control mesh already restricts membership) kept for
|
|
24
|
+
* parity with wake. Cross-party strand bootstrap is a different mechanism
|
|
25
|
+
* (strand formation / `MemberPeer`) and is out of scope here.
|
|
26
|
+
*/
|
|
27
|
+
import type { Libp2p } from '@libp2p/interface';
|
|
28
|
+
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
29
|
+
import type { StrandAddrRequest, StrandAddrResponse } from './types.js';
|
|
30
|
+
/** Protocol id for the control-network strand-address RPC (parallel to `/sereus/strand-wake/1.0.0`). */
|
|
31
|
+
export declare const STRAND_ADDR_PROTOCOL = "/sereus/strand-addr/1.0.0";
|
|
32
|
+
/**
|
|
33
|
+
* Dependencies the {@link StrandAddrService} receiver needs from its host
|
|
34
|
+
* (`CadreNode`), injected so the service is testable without a full node.
|
|
35
|
+
*/
|
|
36
|
+
export interface StrandAddrServiceOptions {
|
|
37
|
+
/** Membership gate: is the remote peer a `CadrePeer` member of this cadre? */
|
|
38
|
+
isMember(remotePeerId: string): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* The local strand instance's dialable strand-network multiaddrs, ordered
|
|
41
|
+
* signaling-first. Returns `[]` when the strand is not running / has no live
|
|
42
|
+
* node (hibernating, quiescing, or never participated). Kept injectable so the
|
|
43
|
+
* decision logic is unit-testable without a full node.
|
|
44
|
+
*/
|
|
45
|
+
getStrandMultiaddrs(strandId: string): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Time to wait for the inbound request frame before aborting the read (ms).
|
|
48
|
+
* Defaults to {@link DEFAULT_ADDR_READ_TIMEOUT_MS}. Bounds a buggy/compromised
|
|
49
|
+
* own-cadre node that opens a stream and never half-closes its write end.
|
|
50
|
+
*/
|
|
51
|
+
readTimeoutMs?: number;
|
|
52
|
+
/**
|
|
53
|
+
* Cap on concurrent inbound strand-addr streams (defaults to
|
|
54
|
+
* {@link DEFAULT_MAX_CONCURRENT_ADDRS}). Over the cap, an empty response is
|
|
55
|
+
* returned without looking up any strand address.
|
|
56
|
+
*/
|
|
57
|
+
maxConcurrent?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Receiver side of the strand-address RPC. Registers a `STRAND_ADDR_PROTOCOL`
|
|
61
|
+
* handler on the control node and, for each inbound {@link StrandAddrRequest},
|
|
62
|
+
* gates on cadre membership, then replies with the local strand instance's live
|
|
63
|
+
* multiaddrs (or an empty list when not a member / not running).
|
|
64
|
+
*/
|
|
65
|
+
export declare class StrandAddrService {
|
|
66
|
+
private readonly options;
|
|
67
|
+
private readonly readTimeoutMs;
|
|
68
|
+
private readonly maxConcurrent;
|
|
69
|
+
private node;
|
|
70
|
+
/** In-flight inbound strand-addr streams, used to enforce {@link maxConcurrent}. */
|
|
71
|
+
private activeStreams;
|
|
72
|
+
constructor(options: StrandAddrServiceOptions);
|
|
73
|
+
/** Number of in-flight inbound strand-addr streams. */
|
|
74
|
+
get activeCount(): number;
|
|
75
|
+
/** Register the strand-addr protocol handler on the control node. */
|
|
76
|
+
initialize(node: Libp2p): void;
|
|
77
|
+
/** Unregister the handler and release the node reference. */
|
|
78
|
+
shutdown(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Read the inbound request, decide the response, and write it back.
|
|
81
|
+
*
|
|
82
|
+
* Three hardening layers, all reported as an empty {@link StrandAddrResponse}
|
|
83
|
+
* rather than a dropped/hung stream: a concurrency cap (over
|
|
84
|
+
* {@link maxConcurrent}, reply without looking up any address), a read timeout
|
|
85
|
+
* (a peer that never half-closes is aborted inside {@link readFrame}/
|
|
86
|
+
* `readStreamToEnd`), and the existing malformed/oversized-frame guard.
|
|
87
|
+
*/
|
|
88
|
+
private handleStream;
|
|
89
|
+
/**
|
|
90
|
+
* Decide the response for a decoded request. Exposed (not private) so the
|
|
91
|
+
* decision matrix can be unit-tested directly (mirrors wake's
|
|
92
|
+
* `processWakeRequest`).
|
|
93
|
+
*
|
|
94
|
+
* - Non-member sender → empty `multiaddrs` (refused).
|
|
95
|
+
* - Strand not running locally → empty `multiaddrs` (`getStrandMultiaddrs` → `[]`).
|
|
96
|
+
* - Member + running strand → the strand's live, signaling-first multiaddrs.
|
|
97
|
+
*/
|
|
98
|
+
processAddrRequest(request: StrandAddrRequest, remotePeerId: string): Promise<StrandAddrResponse>;
|
|
99
|
+
}
|
|
100
|
+
/** A sibling to ask for its strand address. */
|
|
101
|
+
export interface StrandAddrPeer {
|
|
102
|
+
/** The sibling's control-network peer id (also its strand-node peer id). */
|
|
103
|
+
peerId: string;
|
|
104
|
+
/**
|
|
105
|
+
* Pre-resolved control-network multiaddrs, used as a fallback when no control
|
|
106
|
+
* connection is already open. Dialing by {@link peerId} is preferred (it
|
|
107
|
+
* reuses an existing connection); these are tried only if that fails.
|
|
108
|
+
*/
|
|
109
|
+
addrs?: Multiaddr[];
|
|
110
|
+
}
|
|
111
|
+
/** Options for {@link collectStrandAddrs}. */
|
|
112
|
+
export interface CollectStrandAddrsOptions {
|
|
113
|
+
/** Per-dial timeout in ms (default {@link DEFAULT_ADDR_TIMEOUT_MS}). */
|
|
114
|
+
timeoutMs?: number;
|
|
115
|
+
/** Override the protocol id (defaults to {@link STRAND_ADDR_PROTOCOL}). */
|
|
116
|
+
protocolId?: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Client side: ask each candidate sibling for its live strand-`strandId`
|
|
120
|
+
* multiaddrs and return the **deduplicated union** of every answer, ordered
|
|
121
|
+
* signaling-first.
|
|
122
|
+
*
|
|
123
|
+
* Best-effort per peer: a failed/timed-out/empty sibling is logged and skipped,
|
|
124
|
+
* never fatal — an empty union (no sibling online or running the strand) returns
|
|
125
|
+
* `[]`, which the caller treats as an acceptable seed that self-heals on the next
|
|
126
|
+
* resume/reconcile pass. The local node (`node.peerId`) is excluded so we never
|
|
127
|
+
* RPC ourselves or seed with our own strand address.
|
|
128
|
+
*
|
|
129
|
+
* Dials run concurrently but the union preserves candidate order, so the result
|
|
130
|
+
* is deterministic regardless of which sibling answers first.
|
|
131
|
+
*/
|
|
132
|
+
export declare function collectStrandAddrs(node: Libp2p, peers: StrandAddrPeer[], strandId: string, options?: CollectStrandAddrsOptions): Promise<string[]>;
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control-network strand-address RPC.
|
|
3
|
+
*
|
|
4
|
+
* A strand runs as its own libp2p node (`strand-<id>`, random port), separate
|
|
5
|
+
* from the control node (`control-<partyId>`) even though both share the same
|
|
6
|
+
* peerId. To seed a strand's mesh, a node needs a sibling's **strand-network**
|
|
7
|
+
* address — but `CadrePeer.Multiaddr` only stores the **control** node's
|
|
8
|
+
* addresses. This protocol resolves the strand address on demand: a node asks
|
|
9
|
+
* its connected co-cadre siblings "what are your live strand-`X` multiaddrs?" and
|
|
10
|
+
* uses the union of their answers as the seed.
|
|
11
|
+
*
|
|
12
|
+
* Modeled directly on `strand-wake-protocol.ts`: a dedicated libp2p protocol id,
|
|
13
|
+
* 4-byte big-endian length-prefixed JSON frames, `node.handle` for the receiver,
|
|
14
|
+
* `node.dialProtocol` for the client, and the shared `ControlStream` primitives
|
|
15
|
+
* from `control-stream.ts`. The exchange is a single request → single response on
|
|
16
|
+
* one stream, so each side reads to EOF (under a read timeout) and decodes one
|
|
17
|
+
* frame via the shared {@link decodeLengthPrefixedFrame} guard.
|
|
18
|
+
*
|
|
19
|
+
* **Authorization (v1):** the control network is single-party — only this party's
|
|
20
|
+
* cadre peers connect (schema-gated `CadrePeer`). Like wake, the receiver gates
|
|
21
|
+
* on cadre membership (via the injected `isMember`) and requires no further
|
|
22
|
+
* signature; a non-member is refused with an empty address list. This is
|
|
23
|
+
* defense-in-depth (the control mesh already restricts membership) kept for
|
|
24
|
+
* parity with wake. Cross-party strand bootstrap is a different mechanism
|
|
25
|
+
* (strand formation / `MemberPeer`) and is out of scope here.
|
|
26
|
+
*/
|
|
27
|
+
import debug from 'debug';
|
|
28
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
29
|
+
import { decodeLengthPrefixedFrame } from './seed-bootstrap.js';
|
|
30
|
+
import { orderSignalingFirst } from './peer-record.js';
|
|
31
|
+
import { writeFrame, withTimeout, readStreamToEnd } from './control-stream.js';
|
|
32
|
+
const log = debug('sereus:cadre:strand-addr');
|
|
33
|
+
/** Protocol id for the control-network strand-address RPC (parallel to `/sereus/strand-wake/1.0.0`). */
|
|
34
|
+
export const STRAND_ADDR_PROTOCOL = '/sereus/strand-addr/1.0.0';
|
|
35
|
+
/**
|
|
36
|
+
* Maximum strand-addr frame size. Responses are tiny (a strand id + a few
|
|
37
|
+
* multiaddrs), so this is a defensive cap — far below the 1MB seed ceiling —
|
|
38
|
+
* that bounds the bytes a peer can make the receiver buffer per stream.
|
|
39
|
+
*/
|
|
40
|
+
const MAX_ADDR_SIZE = 64 * 1024;
|
|
41
|
+
/** Default time to wait for the response before abandoning a strand-addr dial (ms). */
|
|
42
|
+
const DEFAULT_ADDR_TIMEOUT_MS = 10000;
|
|
43
|
+
/** Default time the receiver waits for an inbound request frame before aborting (ms). */
|
|
44
|
+
const DEFAULT_ADDR_READ_TIMEOUT_MS = 10000;
|
|
45
|
+
/** Default cap on concurrent inbound strand-addr streams a single peer can pin open. */
|
|
46
|
+
const DEFAULT_MAX_CONCURRENT_ADDRS = 100;
|
|
47
|
+
/**
|
|
48
|
+
* Read a libp2p stream to EOF and decode the single length-prefixed JSON frame
|
|
49
|
+
* it carries. Bounded by `timeoutMs` (a never-half-closing peer is aborted, not
|
|
50
|
+
* awaited forever) and capped at {@link MAX_ADDR_SIZE}, reusing the shared
|
|
51
|
+
* {@link decodeLengthPrefixedFrame} guard for the prefix/length checks.
|
|
52
|
+
*/
|
|
53
|
+
async function readFrame(stream, timeoutMs) {
|
|
54
|
+
const data = await readStreamToEnd(stream, { maxBytes: MAX_ADDR_SIZE, timeoutMs, label: 'Strand-addr' });
|
|
55
|
+
const body = decodeLengthPrefixedFrame(data, MAX_ADDR_SIZE);
|
|
56
|
+
return JSON.parse(new TextDecoder().decode(body));
|
|
57
|
+
}
|
|
58
|
+
/** Empty response used on every reject/error path (cap, malformed frame, non-member). */
|
|
59
|
+
function emptyResponse(strandId) {
|
|
60
|
+
return { strandId, multiaddrs: [] };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Receiver side of the strand-address RPC. Registers a `STRAND_ADDR_PROTOCOL`
|
|
64
|
+
* handler on the control node and, for each inbound {@link StrandAddrRequest},
|
|
65
|
+
* gates on cadre membership, then replies with the local strand instance's live
|
|
66
|
+
* multiaddrs (or an empty list when not a member / not running).
|
|
67
|
+
*/
|
|
68
|
+
export class StrandAddrService {
|
|
69
|
+
constructor(options) {
|
|
70
|
+
this.node = null;
|
|
71
|
+
/** In-flight inbound strand-addr streams, used to enforce {@link maxConcurrent}. */
|
|
72
|
+
this.activeStreams = 0;
|
|
73
|
+
this.options = options;
|
|
74
|
+
this.readTimeoutMs = options.readTimeoutMs ?? DEFAULT_ADDR_READ_TIMEOUT_MS;
|
|
75
|
+
this.maxConcurrent = options.maxConcurrent ?? DEFAULT_MAX_CONCURRENT_ADDRS;
|
|
76
|
+
}
|
|
77
|
+
/** Number of in-flight inbound strand-addr streams. */
|
|
78
|
+
get activeCount() {
|
|
79
|
+
return this.activeStreams;
|
|
80
|
+
}
|
|
81
|
+
/** Register the strand-addr protocol handler on the control node. */
|
|
82
|
+
initialize(node) {
|
|
83
|
+
this.node = node;
|
|
84
|
+
// `runOnLimitedConnection: true` is REQUIRED for the relay path: a NAT'd
|
|
85
|
+
// sibling is reached over a circuit-relay connection, which libp2p marks
|
|
86
|
+
// "limited" (the relay caps its data/duration). Without this the receiver
|
|
87
|
+
// would refuse the inbound stream on exactly the connection the protocol is
|
|
88
|
+
// designed to use (same reasoning as wake; see the relay note on
|
|
89
|
+
// `collectStrandAddrs`).
|
|
90
|
+
void node.handle(STRAND_ADDR_PROTOCOL, async (rawStream, rawConnection) => {
|
|
91
|
+
const remotePeerId = rawConnection.remotePeer.toString();
|
|
92
|
+
await this.handleStream(rawStream, remotePeerId);
|
|
93
|
+
}, { runOnLimitedConnection: true });
|
|
94
|
+
log('StrandAddrService registered handler: %s', STRAND_ADDR_PROTOCOL);
|
|
95
|
+
}
|
|
96
|
+
/** Unregister the handler and release the node reference. */
|
|
97
|
+
async shutdown() {
|
|
98
|
+
if (this.node) {
|
|
99
|
+
await this.node.unhandle(STRAND_ADDR_PROTOCOL);
|
|
100
|
+
this.node = null;
|
|
101
|
+
log('StrandAddrService shutdown');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Read the inbound request, decide the response, and write it back.
|
|
106
|
+
*
|
|
107
|
+
* Three hardening layers, all reported as an empty {@link StrandAddrResponse}
|
|
108
|
+
* rather than a dropped/hung stream: a concurrency cap (over
|
|
109
|
+
* {@link maxConcurrent}, reply without looking up any address), a read timeout
|
|
110
|
+
* (a peer that never half-closes is aborted inside {@link readFrame}/
|
|
111
|
+
* `readStreamToEnd`), and the existing malformed/oversized-frame guard.
|
|
112
|
+
*/
|
|
113
|
+
async handleStream(stream, remotePeerId) {
|
|
114
|
+
log('Incoming strand-addr request from: %s', remotePeerId);
|
|
115
|
+
if (this.activeStreams >= this.maxConcurrent) {
|
|
116
|
+
log('Rejecting strand-addr from %s: %d concurrent streams at cap %d', remotePeerId, this.activeStreams, this.maxConcurrent);
|
|
117
|
+
// The request frame is unread here, so the strand id is unknown — reply
|
|
118
|
+
// with an empty list under an empty strand id; the client treats any empty
|
|
119
|
+
// response as "no addrs" and skips this sibling.
|
|
120
|
+
try {
|
|
121
|
+
writeFrame(stream, emptyResponse(''));
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Ignore send errors on the reject path.
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
await stream.close();
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Ignore close errors.
|
|
131
|
+
}
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.activeStreams++;
|
|
135
|
+
try {
|
|
136
|
+
const request = await readFrame(stream, this.readTimeoutMs);
|
|
137
|
+
const response = await this.processAddrRequest(request, remotePeerId);
|
|
138
|
+
writeFrame(stream, response);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
log('Error handling strand-addr request from %s: %o', remotePeerId, err);
|
|
142
|
+
// Malformed/oversized/timed-out request: strand id is unknown, so reply
|
|
143
|
+
// with an empty list under an empty strand id rather than hanging.
|
|
144
|
+
try {
|
|
145
|
+
writeFrame(stream, emptyResponse(''));
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Ignore send errors on the error path.
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
this.activeStreams--;
|
|
153
|
+
try {
|
|
154
|
+
await stream.close();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Ignore close errors.
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Decide the response for a decoded request. Exposed (not private) so the
|
|
163
|
+
* decision matrix can be unit-tested directly (mirrors wake's
|
|
164
|
+
* `processWakeRequest`).
|
|
165
|
+
*
|
|
166
|
+
* - Non-member sender → empty `multiaddrs` (refused).
|
|
167
|
+
* - Strand not running locally → empty `multiaddrs` (`getStrandMultiaddrs` → `[]`).
|
|
168
|
+
* - Member + running strand → the strand's live, signaling-first multiaddrs.
|
|
169
|
+
*/
|
|
170
|
+
async processAddrRequest(request, remotePeerId) {
|
|
171
|
+
// Control-network membership is the v1 authorization: only this party's
|
|
172
|
+
// cadre peers may ask us for a strand address.
|
|
173
|
+
if (!(await this.options.isMember(remotePeerId))) {
|
|
174
|
+
log('Refusing strand-addr from non-member %s', remotePeerId);
|
|
175
|
+
return emptyResponse(request.strandId);
|
|
176
|
+
}
|
|
177
|
+
const multiaddrs = this.options.getStrandMultiaddrs(request.strandId);
|
|
178
|
+
log('Strand-addr for %s → %d addr(s)', request.strandId, multiaddrs.length);
|
|
179
|
+
return { strandId: request.strandId, multiaddrs };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Client side: ask each candidate sibling for its live strand-`strandId`
|
|
184
|
+
* multiaddrs and return the **deduplicated union** of every answer, ordered
|
|
185
|
+
* signaling-first.
|
|
186
|
+
*
|
|
187
|
+
* Best-effort per peer: a failed/timed-out/empty sibling is logged and skipped,
|
|
188
|
+
* never fatal — an empty union (no sibling online or running the strand) returns
|
|
189
|
+
* `[]`, which the caller treats as an acceptable seed that self-heals on the next
|
|
190
|
+
* resume/reconcile pass. The local node (`node.peerId`) is excluded so we never
|
|
191
|
+
* RPC ourselves or seed with our own strand address.
|
|
192
|
+
*
|
|
193
|
+
* Dials run concurrently but the union preserves candidate order, so the result
|
|
194
|
+
* is deterministic regardless of which sibling answers first.
|
|
195
|
+
*/
|
|
196
|
+
export async function collectStrandAddrs(node, peers, strandId, options = {}) {
|
|
197
|
+
const selfId = node.peerId.toString();
|
|
198
|
+
const request = { strandId };
|
|
199
|
+
const candidates = peers.filter(p => p.peerId !== selfId);
|
|
200
|
+
// Concurrent dials; `dialOneSibling` swallows per-peer failure into `[]`, so
|
|
201
|
+
// `Promise.all` never rejects and the result array stays in candidate order.
|
|
202
|
+
const perPeer = await Promise.all(candidates.map(peer => dialOneSibling(node, peer, request, options)));
|
|
203
|
+
// Deduplicated union in candidate order, then signaling-first for a usable
|
|
204
|
+
// dial sequence (relay/`p2p-circuit` ahead of direct addrs).
|
|
205
|
+
const seen = new Set();
|
|
206
|
+
const union = [];
|
|
207
|
+
for (const addrs of perPeer) {
|
|
208
|
+
for (const addr of addrs) {
|
|
209
|
+
if (!seen.has(addr)) {
|
|
210
|
+
seen.add(addr);
|
|
211
|
+
union.push(addr);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return orderSignalingFirst(union);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Ask one sibling for its strand address, returning its multiaddrs or `[]` on any
|
|
219
|
+
* failure. Tries each dial target in order (peerId first to reuse an open control
|
|
220
|
+
* connection, then explicit addrs) until one answers; a total failure is logged
|
|
221
|
+
* and folded to `[]` so a single dead sibling never aborts the collection.
|
|
222
|
+
*/
|
|
223
|
+
async function dialOneSibling(node, peer, request, options) {
|
|
224
|
+
const protocolId = options.protocolId ?? STRAND_ADDR_PROTOCOL;
|
|
225
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_ADDR_TIMEOUT_MS;
|
|
226
|
+
const targets = dialTargets(peer);
|
|
227
|
+
if (targets.length === 0) {
|
|
228
|
+
log('No dial target for sibling %s', peer.peerId);
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
for (const target of targets) {
|
|
232
|
+
// One controller per attempt: on timeout, `withTimeout`'s `onTimeout` aborts
|
|
233
|
+
// it, which aborts the in-flight dialProtocol (via the dial `signal`) and the
|
|
234
|
+
// live stream — so neither the connect nor the unbounded response-read leaks.
|
|
235
|
+
const controller = new AbortController();
|
|
236
|
+
try {
|
|
237
|
+
const response = await withTimeout(timeoutMs, `Strand-addr dial ${peer.peerId}`, () => sendStrandAddr(node, target, protocolId, request, timeoutMs, controller.signal), () => controller.abort());
|
|
238
|
+
return response.multiaddrs;
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
log('Strand-addr dial to %s via %s failed: %o', peer.peerId, describeTarget(target), err);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return [];
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Dial targets for a sibling, peerId first. Dialing by peerId lets libp2p reuse
|
|
248
|
+
* an already-open control connection (the common case — the wiring ticket passes
|
|
249
|
+
* connected siblings); the explicit control addrs are a fallback for when no
|
|
250
|
+
* connection is open. An unparsable peerId is skipped (rely on addrs).
|
|
251
|
+
*/
|
|
252
|
+
function dialTargets(peer) {
|
|
253
|
+
const targets = [];
|
|
254
|
+
try {
|
|
255
|
+
targets.push(peerIdFromString(peer.peerId));
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
log('Unparsable peer id %s, falling back to addrs: %o', peer.peerId, err);
|
|
259
|
+
}
|
|
260
|
+
if (peer.addrs) {
|
|
261
|
+
targets.push(...peer.addrs);
|
|
262
|
+
}
|
|
263
|
+
return targets;
|
|
264
|
+
}
|
|
265
|
+
/** Short label for a dial target (peerId or multiaddr) for logging. */
|
|
266
|
+
function describeTarget(target) {
|
|
267
|
+
return target.toString();
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Open one stream to a target, send the request, half-close, and read the
|
|
271
|
+
* response.
|
|
272
|
+
*
|
|
273
|
+
* `signal` is the per-attempt abort signal from {@link dialOneSibling}: it is
|
|
274
|
+
* passed to `dialProtocol` so a timeout during connect aborts the dial, and once
|
|
275
|
+
* the stream is open an abort listener resets the live stream — releasing the
|
|
276
|
+
* otherwise unbounded response-read. `readFrame` still applies `timeoutMs` as a
|
|
277
|
+
* backstop for the case where an abort does not propagate (e.g. a stream double
|
|
278
|
+
* whose `abort()` is a no-op).
|
|
279
|
+
*/
|
|
280
|
+
async function sendStrandAddr(node, target, protocolId, request, timeoutMs, signal) {
|
|
281
|
+
// `runOnLimitedConnection: true`: the sibling may be reachable only over a
|
|
282
|
+
// circuit-relay connection (the signaling-first addr), which libp2p marks
|
|
283
|
+
// "limited". The exchange is a single tiny request→response well within the
|
|
284
|
+
// relay's data/duration cap, so opening it on the limited connection is safe
|
|
285
|
+
// and is the whole point of dialing over the relay.
|
|
286
|
+
const rawStream = await node.dialProtocol(target, protocolId, { runOnLimitedConnection: true, signal });
|
|
287
|
+
const stream = rawStream;
|
|
288
|
+
const abortErr = new Error('Strand-addr dial aborted by timeout');
|
|
289
|
+
const onAbort = () => stream.abort(abortErr);
|
|
290
|
+
// If the timeout already fired during connect, release the freshly-opened stream now.
|
|
291
|
+
if (signal.aborted) {
|
|
292
|
+
onAbort();
|
|
293
|
+
throw abortErr;
|
|
294
|
+
}
|
|
295
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
296
|
+
try {
|
|
297
|
+
writeFrame(stream, request);
|
|
298
|
+
// close() half-closes the write end (EOF) while the read end stays open for
|
|
299
|
+
// the response — the same libp2p 3.x pattern as wake/seed delivery.
|
|
300
|
+
await stream.close();
|
|
301
|
+
const response = await readFrame(stream, timeoutMs);
|
|
302
|
+
log('Strand-addr response: %d addr(s) for %s', response.multiaddrs.length, response.strandId);
|
|
303
|
+
return response;
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
stream.abort(err instanceof Error ? err : new Error(String(err)));
|
|
307
|
+
throw err;
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
signal.removeEventListener('abort', onAbort);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=strand-addr-protocol.js.map
|