@libp2p/daemon-server 0.0.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.
@@ -0,0 +1,395 @@
1
+ /* eslint max-depth: ["error", 6] */
2
+ import { TCP } from '@libp2p/tcp';
3
+ import { Multiaddr } from '@multiformats/multiaddr';
4
+ import { CID } from 'multiformats/cid';
5
+ import * as lp from 'it-length-prefixed';
6
+ import { pipe } from 'it-pipe';
7
+ import { StreamHandler } from './stream-handler.js';
8
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
9
+ import { passThroughUpgrader } from './util/index.js';
10
+ import { Request, DHTRequest, PeerstoreRequest, PSRequest, StreamInfo } from '@libp2p/daemon-protocol';
11
+ import { ErrorResponse, OkResponse } from './responses.js';
12
+ import { DHTOperations } from './dht.js';
13
+ import { peerIdFromBytes, peerIdFromString } from '@libp2p/peer-id';
14
+ import { PubSubOperations } from './pubsub.js';
15
+ import { logger } from '@libp2p/logger';
16
+ const LIMIT = 1 << 22; // 4MB
17
+ const log = logger('libp2p:daemon');
18
+ export class Server {
19
+ constructor(init) {
20
+ const { multiaddr, libp2pNode } = init;
21
+ this.multiaddr = multiaddr;
22
+ this.libp2p = libp2pNode;
23
+ this.tcp = new TCP();
24
+ this.listener = this.tcp.createListener({
25
+ handler: this.handleConnection.bind(this),
26
+ upgrader: passThroughUpgrader
27
+ });
28
+ this.streamHandlers = {};
29
+ this._onExit = this._onExit.bind(this);
30
+ if (libp2pNode.dht != null) {
31
+ this.dhtOperations = new DHTOperations({ dht: libp2pNode.dht });
32
+ }
33
+ if (libp2pNode.pubsub != null) {
34
+ this.pubsubOperations = new PubSubOperations({ pubsub: libp2pNode.pubsub });
35
+ }
36
+ }
37
+ /**
38
+ * Connects the daemons libp2p node to the peer provided
39
+ */
40
+ async connect(request) {
41
+ if (request.connect == null || request.connect.addrs == null) {
42
+ throw new Error('Invalid request');
43
+ }
44
+ const peer = request.connect.peer;
45
+ const addrs = request.connect.addrs.map((a) => new Multiaddr(a));
46
+ const peerId = peerIdFromBytes(peer);
47
+ await this.libp2p.peerStore.addressBook.set(peerId, addrs);
48
+ return this.libp2p.dial(peerId);
49
+ }
50
+ /**
51
+ * Opens a stream on one of the given protocols to the given peer
52
+ */
53
+ async openStream(request) {
54
+ if (request.streamOpen == null || request.streamOpen.proto == null) {
55
+ throw new Error('Invalid request');
56
+ }
57
+ const { peer, proto } = request.streamOpen;
58
+ const peerId = peerIdFromString(uint8ArrayToString(peer, 'base58btc'));
59
+ const connection = await this.libp2p.dial(peerId);
60
+ const { stream, protocol } = await connection.newStream(proto);
61
+ return {
62
+ streamInfo: {
63
+ peer: peerId.toBytes(),
64
+ addr: connection.remoteAddr.bytes,
65
+ proto: protocol
66
+ },
67
+ connection: stream
68
+ };
69
+ }
70
+ /**
71
+ * Sends inbound requests for the given protocol
72
+ * to the unix socket path provided. If an existing handler
73
+ * is registered at the path, it will be overridden.
74
+ *
75
+ * @param {StreamHandlerRequest} request
76
+ * @returns {Promise<void>}
77
+ */
78
+ async registerStreamHandler(request) {
79
+ if (request.streamHandler == null || request.streamHandler.proto == null) {
80
+ throw new Error('Invalid request');
81
+ }
82
+ const protocols = request.streamHandler.proto;
83
+ const addr = new Multiaddr(request.streamHandler.addr);
84
+ const addrString = addr.toString();
85
+ // If we have a handler, end it
86
+ if (this.streamHandlers[addrString]) {
87
+ this.streamHandlers[addrString].close();
88
+ delete this.streamHandlers[addrString];
89
+ }
90
+ protocols.forEach((proto) => {
91
+ // Connect the client socket with the libp2p connection
92
+ this.libp2p.handle(proto, ({ connection, stream, protocol }) => {
93
+ const message = StreamInfo.encode({
94
+ peer: connection.remotePeer.toBytes(),
95
+ addr: connection.remoteAddr.bytes,
96
+ proto: protocol
97
+ }).finish();
98
+ const encodedMessage = lp.encode.single(message);
99
+ // Tell the client about the new connection
100
+ // And then begin piping the client and peer connection
101
+ pipe([encodedMessage, stream.source], clientConnection, stream.sink);
102
+ });
103
+ });
104
+ const clientConnection = await this.tcp.dial(addr, {
105
+ upgrader: passThroughUpgrader
106
+ });
107
+ }
108
+ /**
109
+ * Listens for process exit to handle cleanup
110
+ *
111
+ * @private
112
+ * @returns {void}
113
+ */
114
+ _listen() {
115
+ // listen for graceful termination
116
+ process.on('SIGTERM', this._onExit);
117
+ process.on('SIGINT', this._onExit);
118
+ process.on('SIGHUP', this._onExit);
119
+ }
120
+ _onExit() {
121
+ this.stop({ exit: true });
122
+ }
123
+ /**
124
+ * Starts the daemon
125
+ */
126
+ async start() {
127
+ this._listen();
128
+ await this.libp2p.start();
129
+ await this.listener.listen(this.multiaddr);
130
+ }
131
+ getMultiaddrs() {
132
+ return this.listener.getAddrs();
133
+ }
134
+ /**
135
+ * Stops the daemon
136
+ *
137
+ * @param {object} options
138
+ * @param {boolean} options.exit - If the daemon process should exit
139
+ * @returns {Promise<void>}
140
+ */
141
+ async stop(options = { exit: false }) {
142
+ await this.libp2p.stop();
143
+ await this.listener.close();
144
+ if (options.exit) {
145
+ log('server closed, exiting');
146
+ }
147
+ process.removeListener('SIGTERM', this._onExit);
148
+ process.removeListener('SIGINT', this._onExit);
149
+ process.removeListener('SIGHUP', this._onExit);
150
+ }
151
+ async *handlePeerStoreRequest(request) {
152
+ try {
153
+ switch (request.type) {
154
+ case PeerstoreRequest.Type.GET_PROTOCOLS:
155
+ if (request.id == null) {
156
+ throw new Error('Invalid request');
157
+ }
158
+ const peerId = peerIdFromBytes(request.id);
159
+ const peer = await this.libp2p.peerStore.get(peerId);
160
+ const protos = peer.protocols;
161
+ yield OkResponse({ peerStore: { protos } });
162
+ return;
163
+ case PeerstoreRequest.Type.GET_PEER_INFO:
164
+ throw new Error('ERR_NOT_IMPLEMENTED');
165
+ default:
166
+ throw new Error('ERR_INVALID_REQUEST_TYPE');
167
+ }
168
+ }
169
+ catch (err) {
170
+ yield ErrorResponse(err);
171
+ }
172
+ }
173
+ /**
174
+ * Parses and responds to PSRequests
175
+ */
176
+ async *handlePubsubRequest(request) {
177
+ try {
178
+ if (this.libp2p.pubsub == null || !this.pubsubOperations) {
179
+ throw new Error('PubSub not configured');
180
+ }
181
+ switch (request.type) {
182
+ case PSRequest.Type.GET_TOPICS:
183
+ yield* this.pubsubOperations.getTopics();
184
+ return;
185
+ case PSRequest.Type.SUBSCRIBE:
186
+ if (request.topic == null) {
187
+ throw new Error('Invalid request');
188
+ }
189
+ yield* this.pubsubOperations.subscribe(request.topic);
190
+ return;
191
+ case PSRequest.Type.PUBLISH:
192
+ if (request.topic == null || request.data == null) {
193
+ throw new Error('Invalid request');
194
+ }
195
+ yield* this.pubsubOperations.publish(request.topic, request.data);
196
+ return;
197
+ default:
198
+ throw new Error('ERR_INVALID_REQUEST_TYPE');
199
+ }
200
+ }
201
+ catch (err) {
202
+ yield ErrorResponse(err);
203
+ }
204
+ }
205
+ /**
206
+ * Parses and responds to DHTRequests
207
+ */
208
+ async *handleDHTRequest(request) {
209
+ try {
210
+ if (this.libp2p.dht == null || !this.dhtOperations) {
211
+ throw new Error('DHT not configured');
212
+ }
213
+ switch (request.type) {
214
+ case DHTRequest.Type.FIND_PEER:
215
+ if (request.peer == null) {
216
+ throw new Error('Invalid request');
217
+ }
218
+ yield* this.dhtOperations.findPeer(peerIdFromBytes(request.peer));
219
+ return;
220
+ case DHTRequest.Type.FIND_PROVIDERS:
221
+ if (request.cid == null) {
222
+ throw new Error('Invalid request');
223
+ }
224
+ yield* this.dhtOperations.findProviders(CID.decode(request.cid), request.count ?? 20);
225
+ return;
226
+ case DHTRequest.Type.PROVIDE:
227
+ if (request.cid == null) {
228
+ throw new Error('Invalid request');
229
+ }
230
+ yield* this.dhtOperations.provide(CID.decode(request.cid));
231
+ return;
232
+ case DHTRequest.Type.GET_CLOSEST_PEERS:
233
+ if (request.key == null) {
234
+ throw new Error('Invalid request');
235
+ }
236
+ yield* this.dhtOperations.getClosestPeers(request.key);
237
+ return;
238
+ case DHTRequest.Type.GET_PUBLIC_KEY:
239
+ if (request.peer == null) {
240
+ throw new Error('Invalid request');
241
+ }
242
+ yield* this.dhtOperations.getPublicKey(peerIdFromBytes(request.peer));
243
+ return;
244
+ case DHTRequest.Type.GET_VALUE:
245
+ if (request.key == null) {
246
+ throw new Error('Invalid request');
247
+ }
248
+ yield* this.dhtOperations.getValue(request.key);
249
+ return;
250
+ case DHTRequest.Type.PUT_VALUE:
251
+ if (request.key == null || request.value == null) {
252
+ throw new Error('Invalid request');
253
+ }
254
+ yield* this.dhtOperations.putValue(request.key, request.value);
255
+ return;
256
+ default:
257
+ throw new Error('ERR_INVALID_REQUEST_TYPE');
258
+ }
259
+ }
260
+ catch (err) {
261
+ yield ErrorResponse(err);
262
+ }
263
+ }
264
+ /**
265
+ * Handles requests for the given connection
266
+ */
267
+ async handleConnection(connection) {
268
+ const daemon = this;
269
+ // @ts-expect-error connection may actually be a maconn?
270
+ const streamHandler = new StreamHandler({ stream: connection, maxLength: LIMIT });
271
+ await pipe(streamHandler.decoder, source => (async function* () {
272
+ let request;
273
+ for await (let buf of source) {
274
+ try {
275
+ request = Request.decode(buf);
276
+ }
277
+ catch (err) {
278
+ yield ErrorResponse(new Error('ERR_INVALID_MESSAGE'));
279
+ continue;
280
+ }
281
+ switch (request.type) {
282
+ // Connect to another peer
283
+ case Request.Type.CONNECT: {
284
+ try {
285
+ await daemon.connect(request);
286
+ }
287
+ catch (err) {
288
+ yield ErrorResponse(err);
289
+ break;
290
+ }
291
+ yield OkResponse();
292
+ break;
293
+ }
294
+ // Get the daemon peer id and addresses
295
+ case Request.Type.IDENTIFY: {
296
+ yield OkResponse({
297
+ identify: {
298
+ id: daemon.libp2p.peerId.toBytes(),
299
+ addrs: daemon.libp2p.getMultiaddrs().map(m => m.bytes)
300
+ }
301
+ });
302
+ break;
303
+ }
304
+ // Get a list of our current peers
305
+ case Request.Type.LIST_PEERS: {
306
+ const peers = [];
307
+ for (const peerId of daemon.libp2p.getPeers()) {
308
+ const conn = daemon.libp2p.getConnections(peerId)[0];
309
+ peers.push({
310
+ id: peerId.toBytes(),
311
+ addrs: [conn.remoteAddr.bytes]
312
+ });
313
+ }
314
+ yield OkResponse({ peers });
315
+ break;
316
+ }
317
+ case Request.Type.STREAM_OPEN: {
318
+ let response;
319
+ try {
320
+ response = await daemon.openStream(request);
321
+ }
322
+ catch (err) {
323
+ yield ErrorResponse(err.message);
324
+ break;
325
+ }
326
+ // write the response
327
+ yield OkResponse({
328
+ streamInfo: response.streamInfo
329
+ });
330
+ const stream = streamHandler.rest();
331
+ // then pipe the connection to the client
332
+ await pipe(stream, response.connection, stream);
333
+ // Exit the iterator, no more requests can come through
334
+ return;
335
+ }
336
+ case Request.Type.STREAM_HANDLER: {
337
+ try {
338
+ await daemon.registerStreamHandler(request);
339
+ }
340
+ catch (err) {
341
+ yield ErrorResponse(err);
342
+ break;
343
+ }
344
+ // write the response
345
+ yield OkResponse();
346
+ break;
347
+ }
348
+ case Request.Type.PEERSTORE: {
349
+ if (request.peerStore == null) {
350
+ yield ErrorResponse(new Error('ERR_INVALID_REQUEST'));
351
+ break;
352
+ }
353
+ yield* daemon.handlePeerStoreRequest(request.peerStore);
354
+ break;
355
+ }
356
+ case Request.Type.PUBSUB: {
357
+ if (request.pubsub == null) {
358
+ yield ErrorResponse(new Error('ERR_INVALID_REQUEST'));
359
+ break;
360
+ }
361
+ yield* daemon.handlePubsubRequest(request.pubsub);
362
+ break;
363
+ }
364
+ case Request.Type.DHT: {
365
+ if (request.dht == null) {
366
+ yield ErrorResponse(new Error('ERR_INVALID_REQUEST'));
367
+ break;
368
+ }
369
+ yield* daemon.handleDHTRequest(request.dht);
370
+ break;
371
+ }
372
+ // Not yet supported or doesn't exist
373
+ default:
374
+ yield ErrorResponse(new Error('ERR_INVALID_REQUEST_TYPE'));
375
+ break;
376
+ }
377
+ }
378
+ })(), async function (source) {
379
+ for await (const result of source) {
380
+ streamHandler.write(result);
381
+ }
382
+ });
383
+ }
384
+ }
385
+ /**
386
+ * Creates a daemon from the provided Daemon Options
387
+ */
388
+ export const createServer = async (multiaddr, libp2pNode) => {
389
+ const daemon = new Server({
390
+ multiaddr,
391
+ libp2pNode
392
+ });
393
+ return daemon;
394
+ };
395
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PubSub } from '@libp2p/interfaces/pubsub';
2
+ export interface PubSubOperationsInit {
3
+ pubsub: PubSub;
4
+ }
5
+ export declare class PubSubOperations {
6
+ private pubsub;
7
+ constructor(init: PubSubOperationsInit);
8
+ getTopics(): AsyncGenerator<Uint8Array, void, unknown>;
9
+ subscribe(topic: string): AsyncGenerator<Uint8Array, void, undefined>;
10
+ publish(topic: string, data: Uint8Array): AsyncGenerator<Uint8Array, void, unknown>;
11
+ }
12
+ //# sourceMappingURL=pubsub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/pubsub.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIvD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAQ;gBAET,IAAI,EAAE,oBAAoB;IAM/B,SAAS;IAQT,SAAS,CAAE,KAAK,EAAE,MAAM;IAoBxB,OAAO,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;CAKjD"}
@@ -0,0 +1,39 @@
1
+ /* eslint max-depth: ["error", 6] */
2
+ import { PSMessage } from '@libp2p/daemon-protocol';
3
+ import { OkResponse } from './responses.js';
4
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
5
+ import { pushable } from 'it-pushable';
6
+ export class PubSubOperations {
7
+ constructor(init) {
8
+ const { pubsub } = init;
9
+ this.pubsub = pubsub;
10
+ }
11
+ async *getTopics() {
12
+ yield OkResponse({
13
+ pubsub: {
14
+ topics: this.pubsub.getTopics()
15
+ }
16
+ });
17
+ }
18
+ async *subscribe(topic) {
19
+ const onMessage = pushable();
20
+ await this.pubsub.addEventListener(topic, (evt) => {
21
+ const msg = evt.detail;
22
+ onMessage.push(PSMessage.encode({
23
+ from: msg.from.toBytes(),
24
+ data: msg.data,
25
+ seqno: msg.sequenceNumber == null ? undefined : uint8ArrayFromString(msg.sequenceNumber.toString(16).padStart(16, '0'), 'base16'),
26
+ topicIDs: [msg.topic],
27
+ signature: msg.signature,
28
+ key: msg.key
29
+ }).finish());
30
+ });
31
+ yield OkResponse();
32
+ yield* onMessage;
33
+ }
34
+ async *publish(topic, data) {
35
+ this.pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }));
36
+ yield OkResponse();
37
+ }
38
+ }
39
+ //# sourceMappingURL=pubsub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/pubsub.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EACL,SAAS,EACV,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAMtC,MAAM,OAAO,gBAAgB;IAG3B,YAAa,IAA0B;QACrC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,CAAE,SAAS;QACf,MAAM,UAAU,CAAC;YACf,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;aAChC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,CAAE,SAAS,CAAE,KAAa;QAC9B,MAAM,SAAS,GAAG,QAAQ,EAAc,CAAA;QAExC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;YAEtB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC9B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;gBACjI,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;gBACrB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,GAAG,EAAE,GAAG,CAAC,GAAG;aACb,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACd,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,EAAE,CAAA;QAClB,KAAM,CAAC,CAAC,SAAS,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,CAAE,OAAO,CAAE,KAAa,EAAE,IAAgB;QAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACnE,MAAM,UAAU,EAAE,CAAA;IACpB,CAAC;CAEF"}
@@ -0,0 +1,10 @@
1
+ import { IResponse } from '@libp2p/daemon-protocol';
2
+ /**
3
+ * Creates and encodes an OK response
4
+ */
5
+ export declare function OkResponse(data?: Partial<IResponse>): Uint8Array;
6
+ /**
7
+ * Creates and encodes an ErrorResponse
8
+ */
9
+ export declare function ErrorResponse(err: Error): Uint8Array;
10
+ //# sourceMappingURL=responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,yBAAyB,CAAA;AAE7D;;GAEG;AACF,wBAAgB,UAAU,CAAE,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,UAAU,CAKlE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,KAAK,GAAG,UAAU,CAOrD"}
@@ -0,0 +1,22 @@
1
+ import { Response } from '@libp2p/daemon-protocol';
2
+ /**
3
+ * Creates and encodes an OK response
4
+ */
5
+ export function OkResponse(data) {
6
+ return Response.encode({
7
+ type: Response.Type.OK,
8
+ ...data
9
+ }).finish();
10
+ }
11
+ /**
12
+ * Creates and encodes an ErrorResponse
13
+ */
14
+ export function ErrorResponse(err) {
15
+ return Response.encode({
16
+ type: Response.Type.ERROR,
17
+ error: {
18
+ msg: err.message
19
+ }
20
+ }).finish();
21
+ }
22
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE7D;;GAEG;AACF,MAAM,UAAU,UAAU,CAAE,IAAyB;IACpD,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;QACtB,GAAG,IAAI;KACR,CAAC,CAAC,MAAM,EAAE,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,GAAU;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;QACzB,KAAK,EAAE;YACL,GAAG,EAAE,GAAG,CAAC,OAAO;SACjB;KACF,CAAC,CAAC,MAAM,EAAE,CAAA;AACb,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { Duplex, Source } from 'it-stream-types';
2
+ export interface StreamHandlerOptions {
3
+ stream: Duplex<Uint8Array>;
4
+ maxLength?: number;
5
+ }
6
+ export declare class StreamHandler {
7
+ private stream;
8
+ private shake;
9
+ decoder: Source<Uint8Array>;
10
+ /**
11
+ * Create a stream handler for connection
12
+ */
13
+ constructor(opts: StreamHandlerOptions);
14
+ /**
15
+ * Read and decode message
16
+ */
17
+ read(): Promise<any>;
18
+ write(msg: Uint8Array): void;
19
+ /**
20
+ * Return the handshake rest stream and invalidate handler
21
+ */
22
+ rest(): Duplex<Uint8Array, Uint8Array, Promise<void>>;
23
+ /**
24
+ * Close the stream
25
+ */
26
+ close(): void;
27
+ }
28
+ //# sourceMappingURL=stream-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-handler.d.ts","sourceRoot":"","sources":["../../src/stream-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAKrD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAW;IACjB,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAClC;;OAEG;gBACU,IAAI,EAAE,oBAAoB;IAQvC;;OAEG;IACG,IAAI;IAWV,KAAK,CAAE,GAAG,EAAE,UAAU;IAOtB;;OAEG;IACH,IAAI;IAKJ;;OAEG;IACH,KAAK;CAIN"}
@@ -0,0 +1,47 @@
1
+ import * as lp from 'it-length-prefixed';
2
+ import { handshake } from 'it-handshake';
3
+ import { logger } from '@libp2p/logger';
4
+ const log = logger('libp2p:daemon-client:stream-handler');
5
+ export class StreamHandler {
6
+ /**
7
+ * Create a stream handler for connection
8
+ */
9
+ constructor(opts) {
10
+ const { stream, maxLength } = opts;
11
+ this.stream = stream;
12
+ this.shake = handshake(this.stream);
13
+ this.decoder = lp.decode.fromReader(this.shake.reader, { maxDataLength: maxLength ?? 4096 });
14
+ }
15
+ /**
16
+ * Read and decode message
17
+ */
18
+ async read() {
19
+ // @ts-expect-error decoder is really a generator
20
+ const msg = await this.decoder.next();
21
+ if (msg.value) {
22
+ return msg.value.slice();
23
+ }
24
+ log('read received no value, closing stream');
25
+ // End the stream, we didn't get data
26
+ this.close();
27
+ }
28
+ write(msg) {
29
+ log('write message');
30
+ this.shake.write(lp.encode.single(msg).slice());
31
+ }
32
+ /**
33
+ * Return the handshake rest stream and invalidate handler
34
+ */
35
+ rest() {
36
+ this.shake.rest();
37
+ return this.shake.stream;
38
+ }
39
+ /**
40
+ * Close the stream
41
+ */
42
+ close() {
43
+ log('closing the stream');
44
+ this.rest().sink([]);
45
+ }
46
+ }
47
+ //# sourceMappingURL=stream-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-handler.js","sourceRoot":"","sources":["../../src/stream-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAIvC,MAAM,GAAG,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAA;AAOzD,MAAM,OAAO,aAAa;IAIxB;;OAEG;IACH,YAAa,IAA0B;QACrC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAElC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,CAAA;IAC9F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,iDAAiD;QACjD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACrC,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;SACzB;QACD,GAAG,CAAC,wCAAwC,CAAC,CAAA;QAC7C,qCAAqC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAE,GAAe;QACpB,GAAG,CAAC,eAAe,CAAC,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAC9B,CAAA;IACH,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { Upgrader } from '@libp2p/interfaces/transport';
2
+ import type { Multiaddr } from '@multiformats/multiaddr';
3
+ export declare const passThroughUpgrader: Upgrader;
4
+ /**
5
+ * Converts the multiaddr to a nodejs NET compliant option
6
+ * for .connect or .listen
7
+ *
8
+ * @param {Multiaddr} addr
9
+ * @returns {string|object} A nodejs NET compliant option
10
+ */
11
+ export declare function multiaddrToNetConfig(addr: Multiaddr): string | import("@multiformats/multiaddr").NodeAddress;
12
+ export declare const isWindows: boolean;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAIxD,eAAO,MAAM,mBAAmB,EAAE,QAKjC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAE,IAAI,EAAE,SAAS,0DAQpD;AAED,eAAO,MAAM,SAAS,SAA4B,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { resolve } from 'path';
2
+ import os from 'os';
3
+ export const passThroughUpgrader = {
4
+ // @ts-expect-error
5
+ upgradeInbound: async (maConn) => maConn,
6
+ // @ts-expect-error
7
+ upgradeOutbound: async (maConn) => maConn
8
+ };
9
+ /**
10
+ * Converts the multiaddr to a nodejs NET compliant option
11
+ * for .connect or .listen
12
+ *
13
+ * @param {Multiaddr} addr
14
+ * @returns {string|object} A nodejs NET compliant option
15
+ */
16
+ export function multiaddrToNetConfig(addr) {
17
+ const listenPath = addr.getPath();
18
+ // unix socket listening
19
+ if (listenPath) {
20
+ return resolve(listenPath);
21
+ }
22
+ // tcp listening
23
+ return addr.nodeAddress();
24
+ }
25
+ export const isWindows = os.platform() === 'win32';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,mBAAmB;IACnB,cAAc,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE,CAAC,MAAM;IACtC,mBAAmB;IACnB,eAAe,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE,CAAC,MAAM;CACxC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAE,IAAe;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;IACjC,wBAAwB;IACxB,IAAI,UAAU,EAAE;QACd,OAAO,OAAO,CAAC,UAAU,CAAC,CAAA;KAC3B;IACD,gBAAgB;IAChB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAA"}