@cello-protocol/daemon 0.0.3 → 0.0.5
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/agent-loader.d.ts +41 -0
- package/dist/agent-loader.d.ts.map +1 -0
- package/dist/agent-loader.js +94 -0
- package/dist/agent-loader.js.map +1 -0
- package/dist/bin/cello-daemon.d.ts +13 -0
- package/dist/bin/cello-daemon.d.ts.map +1 -0
- package/dist/bin/cello-daemon.js +170 -0
- package/dist/bin/cello-daemon.js.map +1 -0
- package/dist/cello-node-transport-dialer.d.ts +59 -0
- package/dist/cello-node-transport-dialer.d.ts.map +1 -0
- package/dist/cello-node-transport-dialer.js +108 -0
- package/dist/cello-node-transport-dialer.js.map +1 -0
- package/dist/challenge-verifier.d.ts +12 -0
- package/dist/challenge-verifier.d.ts.map +1 -0
- package/dist/challenge-verifier.js +11 -0
- package/dist/challenge-verifier.js.map +1 -0
- package/dist/connect-or-start.d.ts +25 -0
- package/dist/connect-or-start.d.ts.map +1 -0
- package/dist/connect-or-start.js +117 -0
- package/dist/connect-or-start.js.map +1 -0
- package/dist/content-park-client.d.ts +49 -0
- package/dist/content-park-client.d.ts.map +1 -0
- package/dist/content-park-client.js +196 -0
- package/dist/content-park-client.js.map +1 -0
- package/dist/daemon.d.ts +65 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +3202 -0
- package/dist/daemon.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +55 -0
- package/dist/directory-bootstrap.d.ts.map +1 -0
- package/dist/directory-bootstrap.js +102 -0
- package/dist/directory-bootstrap.js.map +1 -0
- package/dist/file-manifest-provider.d.ts +18 -0
- package/dist/file-manifest-provider.d.ts.map +1 -0
- package/dist/file-manifest-provider.js +72 -0
- package/dist/file-manifest-provider.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc-client.d.ts +31 -0
- package/dist/ipc-client.d.ts.map +1 -0
- package/dist/ipc-client.js +112 -0
- package/dist/ipc-client.js.map +1 -0
- package/dist/ipc-server.d.ts +49 -0
- package/dist/ipc-server.d.ts.map +1 -0
- package/dist/ipc-server.js +268 -0
- package/dist/ipc-server.js.map +1 -0
- package/dist/lock-file.d.ts +27 -0
- package/dist/lock-file.d.ts.map +1 -0
- package/dist/lock-file.js +84 -0
- package/dist/lock-file.js.map +1 -0
- package/dist/manifest-loader.d.ts +33 -0
- package/dist/manifest-loader.d.ts.map +1 -0
- package/dist/manifest-loader.js +70 -0
- package/dist/manifest-loader.js.map +1 -0
- package/dist/manifest-poll-scheduler.d.ts +31 -0
- package/dist/manifest-poll-scheduler.d.ts.map +1 -0
- package/dist/manifest-poll-scheduler.js +59 -0
- package/dist/manifest-poll-scheduler.js.map +1 -0
- package/dist/manifest-version-store-file.d.ts +18 -0
- package/dist/manifest-version-store-file.d.ts.map +1 -0
- package/dist/manifest-version-store-file.js +40 -0
- package/dist/manifest-version-store-file.js.map +1 -0
- package/dist/manifest-version-store.d.ts +14 -0
- package/dist/manifest-version-store.d.ts.map +1 -0
- package/dist/manifest-version-store.js +13 -0
- package/dist/manifest-version-store.js.map +1 -0
- package/dist/network-directory-node.d.ts +94 -0
- package/dist/network-directory-node.d.ts.map +1 -0
- package/dist/network-directory-node.js +626 -0
- package/dist/network-directory-node.js.map +1 -0
- package/dist/nonce-dedup.d.ts +68 -0
- package/dist/nonce-dedup.d.ts.map +1 -0
- package/dist/nonce-dedup.js +204 -0
- package/dist/nonce-dedup.js.map +1 -0
- package/dist/notification-dispatcher.d.ts +65 -0
- package/dist/notification-dispatcher.d.ts.map +1 -0
- package/dist/notification-dispatcher.js +138 -0
- package/dist/notification-dispatcher.js.map +1 -0
- package/dist/registration-context.d.ts +69 -0
- package/dist/registration-context.d.ts.map +1 -0
- package/dist/registration-context.js +118 -0
- package/dist/registration-context.js.map +1 -0
- package/dist/registration-manager.d.ts +72 -0
- package/dist/registration-manager.d.ts.map +1 -0
- package/dist/registration-manager.js +267 -0
- package/dist/registration-manager.js.map +1 -0
- package/dist/registration-persistence.d.ts +131 -0
- package/dist/registration-persistence.d.ts.map +1 -0
- package/dist/registration-persistence.js +233 -0
- package/dist/registration-persistence.js.map +1 -0
- package/dist/retry-queue.d.ts +144 -0
- package/dist/retry-queue.d.ts.map +1 -0
- package/dist/retry-queue.js +444 -0
- package/dist/retry-queue.js.map +1 -0
- package/dist/seal-frontier-verify.d.ts +58 -0
- package/dist/seal-frontier-verify.d.ts.map +1 -0
- package/dist/seal-frontier-verify.js +87 -0
- package/dist/seal-frontier-verify.js.map +1 -0
- package/dist/seal-legibility-tbs.d.ts +25 -0
- package/dist/seal-legibility-tbs.d.ts.map +1 -0
- package/dist/seal-legibility-tbs.js +78 -0
- package/dist/seal-legibility-tbs.js.map +1 -0
- package/dist/seal-upgrade.d.ts +90 -0
- package/dist/seal-upgrade.d.ts.map +1 -0
- package/dist/seal-upgrade.js +178 -0
- package/dist/seal-upgrade.js.map +1 -0
- package/dist/session-assignment-parser.d.ts +22 -0
- package/dist/session-assignment-parser.d.ts.map +1 -0
- package/dist/session-assignment-parser.js +139 -0
- package/dist/session-assignment-parser.js.map +1 -0
- package/dist/session-ceremony.d.ts +156 -0
- package/dist/session-ceremony.d.ts.map +1 -0
- package/dist/session-ceremony.js +447 -0
- package/dist/session-ceremony.js.map +1 -0
- package/dist/session-connection-gater.d.ts +91 -0
- package/dist/session-connection-gater.d.ts.map +1 -0
- package/dist/session-connection-gater.js +146 -0
- package/dist/session-connection-gater.js.map +1 -0
- package/dist/session-node-manager.d.ts +585 -0
- package/dist/session-node-manager.d.ts.map +1 -0
- package/dist/session-node-manager.js +2609 -0
- package/dist/session-node-manager.js.map +1 -0
- package/dist/session-relay-client.d.ts +101 -0
- package/dist/session-relay-client.d.ts.map +1 -0
- package/dist/session-relay-client.js +520 -0
- package/dist/session-relay-client.js.map +1 -0
- package/dist/session-tree.d.ts +80 -0
- package/dist/session-tree.d.ts.map +1 -0
- package/dist/session-tree.js +123 -0
- package/dist/session-tree.js.map +1 -0
- package/dist/signaling-connect.d.ts +83 -0
- package/dist/signaling-connect.d.ts.map +1 -0
- package/dist/signaling-connect.js +266 -0
- package/dist/signaling-connect.js.map +1 -0
- package/dist/transcript-cipher.d.ts +31 -0
- package/dist/transcript-cipher.d.ts.map +1 -0
- package/dist/transcript-cipher.js +74 -0
- package/dist/transcript-cipher.js.map +1 -0
- package/dist/transport-composition.d.ts +31 -0
- package/dist/transport-composition.d.ts.map +1 -0
- package/dist/transport-composition.js +55 -0
- package/dist/transport-composition.js.map +1 -0
- package/dist/transport-selector.d.ts +189 -0
- package/dist/transport-selector.d.ts.map +1 -0
- package/dist/transport-selector.js +195 -0
- package/dist/transport-selector.js.map +1 -0
- package/dist/types.d.ts +265 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — SessionConnectionGater
|
|
3
|
+
*
|
|
4
|
+
* Implements the libp2p ConnectionGater interface to enforce per-session
|
|
5
|
+
* peer allowlists on ephemeral session nodes.
|
|
6
|
+
*
|
|
7
|
+
* Two modes:
|
|
8
|
+
* 1. Session node gater: allows exactly one counterparty Peer ID.
|
|
9
|
+
* Created with the counterparty's Peer ID at session node creation.
|
|
10
|
+
* 2. Standing receiver gater: starts OPEN (all peers allowed) because
|
|
11
|
+
* the counterparty is unknown at creation time. Call setAllowedPeer()
|
|
12
|
+
* before handing the node's multiaddr to the directory (AC-015).
|
|
13
|
+
* 3. Directory node gater: delegates to DirectoryPeerIdProvider.
|
|
14
|
+
* Allows only known directory Peer IDs (MANIFEST-002 fills the real set).
|
|
15
|
+
*
|
|
16
|
+
* The gater uses denyInboundConnection (before Noise handshake) to reject
|
|
17
|
+
* unexpected peers as early as possible. Since PeerId is not yet known at
|
|
18
|
+
* that point, we use denyInboundEncryptedConnection (after Noise, before muxer)
|
|
19
|
+
* which has the PeerId and still occurs before any streams are opened.
|
|
20
|
+
*
|
|
21
|
+
* Observability: session.node.connection.rejected (WARN) is logged with
|
|
22
|
+
* sessionId, attemptedPeerId, and expectedPeerId.
|
|
23
|
+
*/
|
|
24
|
+
import type { ConnectionGater, MultiaddrConnection } from "@libp2p/interface";
|
|
25
|
+
import type { PeerId } from "@libp2p/interface";
|
|
26
|
+
import type { Logger } from "./types.js";
|
|
27
|
+
/**
|
|
28
|
+
* Interface for providing directory Peer IDs to the directory-facing node gater.
|
|
29
|
+
* Stub for DAEMON-002: MANIFEST-002 replaces with manifest-backed implementation.
|
|
30
|
+
*/
|
|
31
|
+
export interface DirectoryPeerIdProvider {
|
|
32
|
+
isDirectoryPeer(peerId: string): boolean;
|
|
33
|
+
}
|
|
34
|
+
/** Permissive stub: allows all peers. Used for directory node in DAEMON-002. */
|
|
35
|
+
export declare class PermissiveDirectoryPeerIdProvider implements DirectoryPeerIdProvider {
|
|
36
|
+
isDirectoryPeer(_peerId: string): boolean;
|
|
37
|
+
}
|
|
38
|
+
/** Restrictive stub: denies all peers. Used in unit tests (AC-016). */
|
|
39
|
+
export declare class EmptyDirectoryPeerIdProvider implements DirectoryPeerIdProvider {
|
|
40
|
+
isDirectoryPeer(_peerId: string): boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* SessionConnectionGater — enforces a single allowed Peer ID on a session node.
|
|
44
|
+
*
|
|
45
|
+
* Initially open (allowedPeerId = null) for the standing receiver. Close the
|
|
46
|
+
* window by calling setAllowedPeer(initiatorPeerId) before returning the
|
|
47
|
+
* node's multiaddr to the caller (AC-015).
|
|
48
|
+
*/
|
|
49
|
+
export declare class SessionConnectionGater implements ConnectionGater {
|
|
50
|
+
#private;
|
|
51
|
+
constructor(opts: {
|
|
52
|
+
sessionId: string;
|
|
53
|
+
allowedPeerId: string | null;
|
|
54
|
+
logger: Logger;
|
|
55
|
+
});
|
|
56
|
+
/** Update the allowed Peer ID (called when standing receiver is claimed). */
|
|
57
|
+
setAllowedPeer(peerId: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* M7 DOD-SPINE-6: permit an OUTBOUND connection to the relay witness (a third peer,
|
|
60
|
+
* authorized by the FROST-signed assignment). Does NOT widen the inbound allowlist.
|
|
61
|
+
*/
|
|
62
|
+
setAllowedOutboundPeer(peerId: string): void;
|
|
63
|
+
getSessionId(): string;
|
|
64
|
+
getAllowedPeerId(): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* denyInboundEncryptedConnection — called after Noise handshake, before muxer.
|
|
67
|
+
* This is the enforcement point for inbound connections: PeerId is known here.
|
|
68
|
+
* Return true to DENY the connection.
|
|
69
|
+
*/
|
|
70
|
+
denyInboundEncryptedConnection(peerId: PeerId, _maConn: MultiaddrConnection): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* denyOutboundEncryptedConnection — symmetric gate for outbound connections.
|
|
73
|
+
* Session nodes should only connect to the designated counterparty.
|
|
74
|
+
* Return true to DENY the connection.
|
|
75
|
+
*/
|
|
76
|
+
denyOutboundEncryptedConnection(peerId: PeerId, _maConn: MultiaddrConnection): boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* DirectoryConnectionGater — enforces directory-only connections on the
|
|
80
|
+
* directory-facing node. Delegates to DirectoryPeerIdProvider.
|
|
81
|
+
*
|
|
82
|
+
* Logs session.node.connection.rejected (using sessionId='directory') when
|
|
83
|
+
* a non-directory peer is denied.
|
|
84
|
+
*/
|
|
85
|
+
export declare class DirectoryConnectionGater implements ConnectionGater {
|
|
86
|
+
#private;
|
|
87
|
+
constructor(provider: DirectoryPeerIdProvider, logger: Logger);
|
|
88
|
+
denyInboundEncryptedConnection(peerId: PeerId, _maConn: MultiaddrConnection): boolean;
|
|
89
|
+
denyOutboundEncryptedConnection(peerId: PeerId, _maConn: MultiaddrConnection): boolean;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=session-connection-gater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-connection-gater.d.ts","sourceRoot":"","sources":["../src/session-connection-gater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED,gFAAgF;AAChF,qBAAa,iCAAkC,YAAW,uBAAuB;IAC/E,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAG1C;AAED,uEAAuE;AACvE,qBAAa,4BAA6B,YAAW,uBAAuB;IAC1E,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAG1C;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,eAAe;;gBAYhD,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;KAChB;IAMD,6EAA6E;IAC7E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC;;;OAGG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5C,YAAY,IAAI,MAAM;IAItB,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAIrF;;;;OAIG;IACH,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO;CAwBvF;AAED;;;;;;GAMG;AACH,qBAAa,wBAAyB,YAAW,eAAe;;gBAIlD,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM;IAK7D,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAIrF,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO;CAgBvF"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CELLO Daemon — SessionConnectionGater
|
|
3
|
+
*
|
|
4
|
+
* Implements the libp2p ConnectionGater interface to enforce per-session
|
|
5
|
+
* peer allowlists on ephemeral session nodes.
|
|
6
|
+
*
|
|
7
|
+
* Two modes:
|
|
8
|
+
* 1. Session node gater: allows exactly one counterparty Peer ID.
|
|
9
|
+
* Created with the counterparty's Peer ID at session node creation.
|
|
10
|
+
* 2. Standing receiver gater: starts OPEN (all peers allowed) because
|
|
11
|
+
* the counterparty is unknown at creation time. Call setAllowedPeer()
|
|
12
|
+
* before handing the node's multiaddr to the directory (AC-015).
|
|
13
|
+
* 3. Directory node gater: delegates to DirectoryPeerIdProvider.
|
|
14
|
+
* Allows only known directory Peer IDs (MANIFEST-002 fills the real set).
|
|
15
|
+
*
|
|
16
|
+
* The gater uses denyInboundConnection (before Noise handshake) to reject
|
|
17
|
+
* unexpected peers as early as possible. Since PeerId is not yet known at
|
|
18
|
+
* that point, we use denyInboundEncryptedConnection (after Noise, before muxer)
|
|
19
|
+
* which has the PeerId and still occurs before any streams are opened.
|
|
20
|
+
*
|
|
21
|
+
* Observability: session.node.connection.rejected (WARN) is logged with
|
|
22
|
+
* sessionId, attemptedPeerId, and expectedPeerId.
|
|
23
|
+
*/
|
|
24
|
+
/** Permissive stub: allows all peers. Used for directory node in DAEMON-002. */
|
|
25
|
+
export class PermissiveDirectoryPeerIdProvider {
|
|
26
|
+
isDirectoryPeer(_peerId) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Restrictive stub: denies all peers. Used in unit tests (AC-016). */
|
|
31
|
+
export class EmptyDirectoryPeerIdProvider {
|
|
32
|
+
isDirectoryPeer(_peerId) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* SessionConnectionGater — enforces a single allowed Peer ID on a session node.
|
|
38
|
+
*
|
|
39
|
+
* Initially open (allowedPeerId = null) for the standing receiver. Close the
|
|
40
|
+
* window by calling setAllowedPeer(initiatorPeerId) before returning the
|
|
41
|
+
* node's multiaddr to the caller (AC-015).
|
|
42
|
+
*/
|
|
43
|
+
export class SessionConnectionGater {
|
|
44
|
+
#allowedPeerId;
|
|
45
|
+
/**
|
|
46
|
+
* M7 DOD-SPINE-6: an additional peer the session node may connect to OUTBOUND only —
|
|
47
|
+
* the relay witness. The session node dials the relay (Structure-2 hash submit); the
|
|
48
|
+
* relay never dials back. Kept OUTBOUND-only so the INBOUND counterparty-only invariant
|
|
49
|
+
* (INV-5 — a session node admits exactly one counterparty) is fully preserved.
|
|
50
|
+
*/
|
|
51
|
+
#allowedOutboundPeerId = null;
|
|
52
|
+
#sessionId;
|
|
53
|
+
#logger;
|
|
54
|
+
constructor(opts) {
|
|
55
|
+
this.#sessionId = opts.sessionId;
|
|
56
|
+
this.#allowedPeerId = opts.allowedPeerId;
|
|
57
|
+
this.#logger = opts.logger;
|
|
58
|
+
}
|
|
59
|
+
/** Update the allowed Peer ID (called when standing receiver is claimed). */
|
|
60
|
+
setAllowedPeer(peerId) {
|
|
61
|
+
this.#allowedPeerId = peerId;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* M7 DOD-SPINE-6: permit an OUTBOUND connection to the relay witness (a third peer,
|
|
65
|
+
* authorized by the FROST-signed assignment). Does NOT widen the inbound allowlist.
|
|
66
|
+
*/
|
|
67
|
+
setAllowedOutboundPeer(peerId) {
|
|
68
|
+
this.#allowedOutboundPeerId = peerId;
|
|
69
|
+
}
|
|
70
|
+
getSessionId() {
|
|
71
|
+
return this.#sessionId;
|
|
72
|
+
}
|
|
73
|
+
getAllowedPeerId() {
|
|
74
|
+
return this.#allowedPeerId;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* denyInboundEncryptedConnection — called after Noise handshake, before muxer.
|
|
78
|
+
* This is the enforcement point for inbound connections: PeerId is known here.
|
|
79
|
+
* Return true to DENY the connection.
|
|
80
|
+
*/
|
|
81
|
+
denyInboundEncryptedConnection(peerId, _maConn) {
|
|
82
|
+
return this.#denyIfNotAllowed(peerId);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* denyOutboundEncryptedConnection — symmetric gate for outbound connections.
|
|
86
|
+
* Session nodes should only connect to the designated counterparty.
|
|
87
|
+
* Return true to DENY the connection.
|
|
88
|
+
*/
|
|
89
|
+
denyOutboundEncryptedConnection(peerId, _maConn) {
|
|
90
|
+
// The relay witness is an OUTBOUND-only allowance (the session node dials it).
|
|
91
|
+
if (this.#allowedOutboundPeerId !== null && peerId.toString() === this.#allowedOutboundPeerId) {
|
|
92
|
+
return false; // allow
|
|
93
|
+
}
|
|
94
|
+
return this.#denyIfNotAllowed(peerId);
|
|
95
|
+
}
|
|
96
|
+
#denyIfNotAllowed(peerId) {
|
|
97
|
+
// If no allowed peer set (fully open gater), allow all.
|
|
98
|
+
if (this.#allowedPeerId === null) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const attemptedPeerId = peerId.toString();
|
|
102
|
+
if (attemptedPeerId === this.#allowedPeerId) {
|
|
103
|
+
return false; // allow
|
|
104
|
+
}
|
|
105
|
+
this.#logger.warn("session.node.connection.rejected", {
|
|
106
|
+
sessionId: this.#sessionId,
|
|
107
|
+
attemptedPeerId,
|
|
108
|
+
expectedPeerId: this.#allowedPeerId,
|
|
109
|
+
});
|
|
110
|
+
return true; // deny
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* DirectoryConnectionGater — enforces directory-only connections on the
|
|
115
|
+
* directory-facing node. Delegates to DirectoryPeerIdProvider.
|
|
116
|
+
*
|
|
117
|
+
* Logs session.node.connection.rejected (using sessionId='directory') when
|
|
118
|
+
* a non-directory peer is denied.
|
|
119
|
+
*/
|
|
120
|
+
export class DirectoryConnectionGater {
|
|
121
|
+
#provider;
|
|
122
|
+
#logger;
|
|
123
|
+
constructor(provider, logger) {
|
|
124
|
+
this.#provider = provider;
|
|
125
|
+
this.#logger = logger;
|
|
126
|
+
}
|
|
127
|
+
denyInboundEncryptedConnection(peerId, _maConn) {
|
|
128
|
+
return this.#denyIfNotDirectory(peerId);
|
|
129
|
+
}
|
|
130
|
+
denyOutboundEncryptedConnection(peerId, _maConn) {
|
|
131
|
+
return this.#denyIfNotDirectory(peerId);
|
|
132
|
+
}
|
|
133
|
+
#denyIfNotDirectory(peerId) {
|
|
134
|
+
const peerIdStr = peerId.toString();
|
|
135
|
+
if (this.#provider.isDirectoryPeer(peerIdStr)) {
|
|
136
|
+
return false; // allow
|
|
137
|
+
}
|
|
138
|
+
this.#logger.warn("session.node.connection.rejected", {
|
|
139
|
+
sessionId: "__directory_facing__",
|
|
140
|
+
attemptedPeerId: peerIdStr,
|
|
141
|
+
expectedPeerId: "known_directory_peer",
|
|
142
|
+
});
|
|
143
|
+
return true; // deny
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=session-connection-gater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-connection-gater.js","sourceRoot":"","sources":["../src/session-connection-gater.ts"],"names":[],"mappings":"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"}
|