@peerbit/libp2p-test-utils 2.2.0-bbf27fa → 2.2.0-c485a73

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.
@@ -0,0 +1,245 @@
1
+ import { type AbortOptions, type Connection, type Libp2pEvents, type PeerId, type PrivateKey, type Stream, type TypedEventTarget } from "@libp2p/interface";
2
+ import { type Multiaddr } from "@multiformats/multiaddr";
3
+ type ProtocolHandler = (stream: Stream, connection: Connection) => Promise<void>;
4
+ type Topology = {
5
+ onConnect: (peerId: PeerId, connection: Connection) => Promise<void> | void;
6
+ onDisconnect: (peerId: PeerId, connection: Connection) => Promise<void> | void;
7
+ notifyOnLimitedConnection?: boolean;
8
+ };
9
+ export type InMemoryNetworkMetrics = {
10
+ dials: number;
11
+ connectionsOpened: number;
12
+ connectionsClosed: number;
13
+ streamsOpened: number;
14
+ framesSent: number;
15
+ bytesSent: number;
16
+ dataFramesSent: number;
17
+ ackFramesSent: number;
18
+ goodbyeFramesSent: number;
19
+ otherFramesSent: number;
20
+ framesDropped: number;
21
+ bytesDropped: number;
22
+ dataFramesDropped: number;
23
+ };
24
+ export type InMemoryNetworkPeerMetrics = {
25
+ framesSent: number;
26
+ bytesSent: number;
27
+ dataFramesSent: number;
28
+ ackFramesSent: number;
29
+ goodbyeFramesSent: number;
30
+ otherFramesSent: number;
31
+ framesDropped: number;
32
+ bytesDropped: number;
33
+ dataFramesDropped: number;
34
+ maxBytesPerSecond: number;
35
+ };
36
+ type InMemoryNetworkPeerWindow = InMemoryNetworkPeerMetrics & {
37
+ _currentSecond: number;
38
+ _bytesThisSecond: number;
39
+ };
40
+ export declare class InMemoryRegistrar {
41
+ private handlers;
42
+ private topologies;
43
+ private topologySeq;
44
+ handle(protocol: string, handler: ProtocolHandler, _opts?: unknown): Promise<void>;
45
+ unhandle(protocol: string): Promise<void>;
46
+ register(protocol: string, topology: Topology): Promise<string>;
47
+ unregister(id: string): Promise<void>;
48
+ getHandler(protocol: string): ProtocolHandler | undefined;
49
+ getTopologies(): Iterable<{
50
+ protocol: string;
51
+ topology: Topology;
52
+ }>;
53
+ }
54
+ declare class InMemoryConnection {
55
+ readonly id: string;
56
+ readonly remotePeer: PeerId;
57
+ readonly remoteAddr?: Multiaddr;
58
+ readonly streams: Stream[];
59
+ status: "open" | "closed";
60
+ limits: any;
61
+ timeline: any;
62
+ private readonly getLocalRegistrar;
63
+ private readonly getRemoteRegistrar;
64
+ private readonly getRemoteConnection;
65
+ private readonly recordSend;
66
+ private readonly shouldDrop;
67
+ private readonly recordDrop;
68
+ private readonly recordStreamOpen;
69
+ private readonly streamHighWaterMarkBytes;
70
+ private readonly streamRxDelayMs;
71
+ private streamSeq;
72
+ private pair?;
73
+ constructor(opts: {
74
+ id: string;
75
+ remotePeer: PeerId;
76
+ remoteAddr: Multiaddr;
77
+ getLocalRegistrar: () => InMemoryRegistrar;
78
+ getRemoteRegistrar: () => InMemoryRegistrar;
79
+ getRemoteConnection: () => InMemoryConnection;
80
+ recordSend: (encodedFrame: Uint8Array) => void;
81
+ shouldDrop: (encodedFrame: Uint8Array) => boolean;
82
+ recordDrop: (encodedFrame: Uint8Array) => void;
83
+ recordStreamOpen: () => void;
84
+ streamHighWaterMarkBytes: number;
85
+ streamRxDelayMs: number;
86
+ });
87
+ _setPair(pair: InMemoryConnectionPair): void;
88
+ newStream(protocols: string | string[], opts?: {
89
+ signal?: AbortSignal;
90
+ negotiateFully?: boolean;
91
+ }): Promise<Stream>;
92
+ _closeLocal(): Promise<void>;
93
+ close(_opts?: AbortOptions): Promise<void>;
94
+ }
95
+ declare class InMemoryConnectionPair {
96
+ private readonly opts;
97
+ private closePromise?;
98
+ constructor(opts: {
99
+ network: InMemoryNetwork;
100
+ aOwner: PeerRuntime;
101
+ bOwner: PeerRuntime;
102
+ aManager: InMemoryConnectionManager;
103
+ bManager: InMemoryConnectionManager;
104
+ aConn: InMemoryConnection;
105
+ bConn: InMemoryConnection;
106
+ });
107
+ close(_initiator: InMemoryConnection): Promise<void>;
108
+ }
109
+ export declare class InMemoryAddressManager {
110
+ private readonly addr;
111
+ constructor(addr: Multiaddr);
112
+ getAddresses(): Multiaddr[];
113
+ }
114
+ export declare class InMemoryPeerStore {
115
+ private readonly getAddressesForPeerId;
116
+ constructor(getAddressesForPeerId: (peerId: PeerId) => Multiaddr[]);
117
+ get(peerId: PeerId): Promise<{
118
+ addresses: Array<{
119
+ multiaddr: Multiaddr;
120
+ }>;
121
+ }>;
122
+ delete(_peerId: PeerId): Promise<void>;
123
+ }
124
+ type PeerRuntime = {
125
+ peerId: PeerId;
126
+ privateKey: PrivateKey;
127
+ registrar: InMemoryRegistrar;
128
+ addressManager: InMemoryAddressManager;
129
+ peerStore: InMemoryPeerStore;
130
+ events: TypedEventTarget<Libp2pEvents>;
131
+ connectionManager: InMemoryConnectionManager;
132
+ };
133
+ export declare class InMemoryConnectionManager {
134
+ private readonly network;
135
+ readonly owner: PeerRuntime;
136
+ private readonly connectionsByRemote;
137
+ private readonly dialQueue;
138
+ private readonly connSeqBase;
139
+ constructor(network: InMemoryNetwork, owner: PeerRuntime, opts?: {
140
+ connSeqBase?: string;
141
+ });
142
+ getConnections(peerId?: PeerId): Connection[];
143
+ getConnectionsMap(): {
144
+ get(peer: PeerId): Connection[] | undefined;
145
+ };
146
+ getDialQueue(): Array<{
147
+ peerId?: PeerId;
148
+ }>;
149
+ isDialable(addr: Multiaddr | Multiaddr[]): Promise<boolean>;
150
+ openConnection(peer: PeerId | Multiaddr | Multiaddr[]): Promise<Connection>;
151
+ closeConnections(peer: PeerId, _options?: AbortOptions): Promise<void>;
152
+ _removeConnectionInstance(remoteId: string, conn: InMemoryConnection): void;
153
+ _connectTo(remote: PeerRuntime): Connection;
154
+ }
155
+ export declare class InMemoryNetwork {
156
+ private peersById;
157
+ private peersByPort;
158
+ private offlineUntilByPeerId;
159
+ readonly metrics: InMemoryNetworkMetrics;
160
+ readonly peerMetricsByHash: Map<string, InMemoryNetworkPeerWindow>;
161
+ readonly streamHighWaterMarkBytes: number;
162
+ readonly streamRxDelayMs: number;
163
+ readonly dialDelayMs: number;
164
+ readonly dropDataFrameRate: number;
165
+ private readonly dropRng;
166
+ constructor(opts?: {
167
+ streamHighWaterMarkBytes?: number;
168
+ streamRxDelayMs?: number;
169
+ dialDelayMs?: number;
170
+ dropDataFrameRate?: number;
171
+ dropSeed?: number;
172
+ });
173
+ isPeerOffline(peer: PeerId | string, now?: number): boolean;
174
+ setPeerOffline(peer: PeerId | string, downMs: number, now?: number): void;
175
+ setPeerOnline(peer: PeerId | string): void;
176
+ disconnectPeer(peer: PeerId | string): Promise<void>;
177
+ registerPeer(peer: PeerRuntime, port: number): void;
178
+ getPeerById(id: string): PeerRuntime | undefined;
179
+ getPeerByPort(port: number): PeerRuntime | undefined;
180
+ shouldDrop(encodedFrame: Uint8Array): boolean;
181
+ recordDrop(fromPeerId: PeerId, encodedFrame: Uint8Array): void;
182
+ recordSend(fromPeerId: PeerId, encodedFrame: Uint8Array): void;
183
+ notifyConnect(owner: PeerRuntime, peerId: PeerId, connection: Connection): void;
184
+ notifyDisconnect(owner: PeerRuntime, peerId: PeerId, connections: InMemoryConnection[]): void;
185
+ static createPeer(opts: {
186
+ index: number;
187
+ port: number;
188
+ network?: InMemoryNetwork;
189
+ mockKeyBytes?: {
190
+ publicKey: Uint8Array;
191
+ privateKey: Uint8Array;
192
+ };
193
+ }): {
194
+ runtime: PeerRuntime;
195
+ port: number;
196
+ };
197
+ }
198
+ export declare const publicKeyHash: (peerId: PeerId) => string;
199
+ export type InMemoryServiceFactories<T extends Record<string, unknown>> = {
200
+ [K in keyof T]: (components: any) => T[K];
201
+ };
202
+ export declare class InMemoryLibp2p<TServices extends Record<string, unknown> = {}> {
203
+ readonly runtime: PeerRuntime;
204
+ status: "started" | "stopped";
205
+ readonly peerId: PeerId;
206
+ readonly services: TServices;
207
+ readonly components: {
208
+ peerId: PeerId;
209
+ privateKey: PrivateKey;
210
+ addressManager: InMemoryAddressManager;
211
+ registrar: InMemoryRegistrar;
212
+ connectionManager: InMemoryConnectionManager;
213
+ peerStore: InMemoryPeerStore;
214
+ events: TypedEventTarget<Libp2pEvents>;
215
+ };
216
+ constructor(runtime: PeerRuntime, services?: InMemoryServiceFactories<TServices>);
217
+ getMultiaddrs(): Multiaddr[];
218
+ dial(addresses: Multiaddr | Multiaddr[]): Promise<Connection>;
219
+ hangUp(peerId: PeerId, options?: AbortOptions): Promise<void>;
220
+ getConnections(peerId?: PeerId): Connection[];
221
+ start(): Promise<void>;
222
+ stop(): Promise<void>;
223
+ }
224
+ export declare class InMemorySession<TServices extends Record<string, unknown> = {}> {
225
+ readonly peers: Array<InMemoryLibp2p<TServices>>;
226
+ readonly network: InMemoryNetwork;
227
+ constructor(opts: {
228
+ peers: Array<InMemoryLibp2p<TServices>>;
229
+ network: InMemoryNetwork;
230
+ });
231
+ static disconnected<TServices extends Record<string, unknown>>(n: number, opts?: {
232
+ basePort?: number;
233
+ start?: boolean;
234
+ network?: InMemoryNetwork;
235
+ networkOpts?: ConstructorParameters<typeof InMemoryNetwork>[0];
236
+ services?: InMemoryServiceFactories<TServices>;
237
+ }): Promise<InMemorySession<TServices>>;
238
+ connectFully(groups?: Array<Array<{
239
+ getMultiaddrs(): Multiaddr[];
240
+ dial(addresses: Multiaddr[]): Promise<any>;
241
+ }>>): Promise<this>;
242
+ stop(): Promise<void>;
243
+ }
244
+ export {};
245
+ //# sourceMappingURL=inmemory-libp2p.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inmemory-libp2p.d.ts","sourceRoot":"","sources":["../../src/inmemory-libp2p.ts"],"names":[],"mappings":"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"}