@libp2p/daemon-client 2.0.4 → 3.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.
@@ -5,10 +5,14 @@ import { PeerId } from '@libp2p/interface-peer-id';
5
5
  import type { Duplex } from 'it-stream-types';
6
6
  import type { CID } from 'multiformats/cid';
7
7
  import type { PeerInfo } from '@libp2p/interface-peer-info';
8
+ import type { Uint8ArrayList } from 'uint8arraylist';
8
9
  export interface IdentifyResult {
9
10
  peerId: PeerId;
10
11
  addrs: Multiaddr[];
11
12
  }
13
+ export interface StreamHandlerFunction {
14
+ (stream: Duplex<Uint8ArrayList, Uint8Array>): Promise<void>;
15
+ }
12
16
  export interface DHTClient {
13
17
  put: (key: Uint8Array, value: Uint8Array) => Promise<void>;
14
18
  get: (key: Uint8Array) => Promise<Uint8Array>;
@@ -29,7 +33,8 @@ export interface DaemonClient {
29
33
  dht: DHTClient;
30
34
  pubsub: PubSubClient;
31
35
  send: (request: Request) => Promise<StreamHandler>;
32
- openStream: (peerId: PeerId, protocol: string) => Promise<Duplex<Uint8Array>>;
36
+ openStream: (peerId: PeerId, protocol: string) => Promise<Duplex<Uint8ArrayList, Uint8Array>>;
37
+ registerStreamHandler: (protocol: string, handler: StreamHandlerFunction) => Promise<void>;
33
38
  }
34
39
  export declare function createClient(multiaddr: Multiaddr): DaemonClient;
35
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAY,MAAM,yBAAyB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnD,OAAO,EAAY,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAG5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAwM3D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAA;IACpE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,eAAe,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC,SAAS,CAAC,CAAA;IACtD,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;IACvC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAClC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IAEpB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAClD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;CAC9E;AAED,wBAAgB,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAEhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAwB,MAAM,yBAAyB,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnD,OAAO,EAAY,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAG5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AA+OpD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5D;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAA;IACpE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,eAAe,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC,SAAS,CAAC,CAAA;IACtD,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;IACvC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAClC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IAEpB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAClD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAA;IAC7F,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3F;AAED,wBAAgB,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAEhE"}
package/dist/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import errcode from 'err-code';
2
2
  import { TCP } from '@libp2p/tcp';
3
- import { Request, Response } from '@libp2p/daemon-protocol';
3
+ import { Request, Response, StreamInfo } from '@libp2p/daemon-protocol';
4
4
  import { StreamHandler } from '@libp2p/daemon-protocol/stream-handler';
5
5
  import { Multiaddr } from '@multiformats/multiaddr';
6
6
  import { DHT } from './dht.js';
@@ -8,6 +8,8 @@ import { Pubsub } from './pubsub.js';
8
8
  import { isPeerId } from '@libp2p/interface-peer-id';
9
9
  import { passThroughUpgrader } from '@libp2p/daemon-protocol/upgrader';
10
10
  import { peerIdFromBytes } from '@libp2p/peer-id';
11
+ import { logger } from '@libp2p/logger';
12
+ const log = logger('libp2p:daemon-client');
11
13
  class Client {
12
14
  constructor(addr) {
13
15
  this.multiaddr = addr;
@@ -140,18 +142,51 @@ class Client {
140
142
  /**
141
143
  * Register a handler for inbound streams on a given protocol
142
144
  */
143
- async registerStreamHandler(addr, protocol) {
144
- if (!Multiaddr.isMultiaddr(addr)) {
145
- throw errcode(new Error('invalid multiaddr received'), 'ERR_INVALID_MULTIADDR');
146
- }
145
+ async registerStreamHandler(protocol, handler) {
147
146
  if (typeof protocol !== 'string') {
148
147
  throw errcode(new Error('invalid protocol received'), 'ERR_INVALID_PROTOCOL');
149
148
  }
149
+ // open a tcp port, pipe any data from it to the handler function
150
+ const listener = this.tcp.createListener({
151
+ upgrader: passThroughUpgrader,
152
+ handler: (connection) => {
153
+ Promise.resolve()
154
+ .then(async () => {
155
+ const sh = new StreamHandler({
156
+ // @ts-expect-error because we are using a passthrough upgrader, this is a MultiaddrConnection
157
+ stream: connection
158
+ });
159
+ const message = await sh.read();
160
+ if (message == null) {
161
+ throw errcode(new Error('Could not read open stream response'), 'ERR_OPEN_STREAM_FAILED');
162
+ }
163
+ const response = StreamInfo.decode(message);
164
+ if (response.proto !== protocol) {
165
+ throw errcode(new Error('Incorrect protocol'), 'ERR_OPEN_STREAM_FAILED');
166
+ }
167
+ await handler(sh.rest());
168
+ })
169
+ .finally(() => {
170
+ connection.close()
171
+ .catch(err => {
172
+ log.error(err);
173
+ });
174
+ listener.close()
175
+ .catch(err => {
176
+ log.error(err);
177
+ });
178
+ });
179
+ }
180
+ });
181
+ await listener.listen(new Multiaddr('/ip4/127.0.0.1/tcp/0'));
182
+ const address = listener.getAddrs()[0];
183
+ if (address == null) {
184
+ throw errcode(new Error('Could not listen on port'), 'ERR_REGISTER_STREAM_HANDLER_FAILED');
185
+ }
150
186
  const sh = await this.send({
151
187
  type: Request.Type.STREAM_HANDLER,
152
- streamOpen: undefined,
153
188
  streamHandler: {
154
- addr: addr.bytes,
189
+ addr: address.bytes,
155
190
  proto: [protocol]
156
191
  }
157
192
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAa,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAU,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAMjD,MAAM,MAAM;IAMV,YAAa,IAAe;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QAEpB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa;QACjB,0DAA0D;QAC1D,8DAA8D;QAC9D,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACzC,QAAQ,EAAE,mBAAmB;SAC9B,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAE,OAAgB;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAEzC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3D,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5C,OAAO,aAAa,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAE,MAAc,EAAE,KAAkB;QAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,qBAAqB,CAAC,CAAA;SAC5E;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,EAAE,wBAAwB,CAAC,CAAA;SACzF;QAED,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAChC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,EAAE,2BAA2B,CAAC,CAAA;aACrG;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACjC;SACF,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAC/B,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC,CAAA;SAC9D;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACzC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;YACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,CAAA;YAC5D,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,aAAa,CAAC,EAAE,oBAAoB,CAAC,CAAA;SACjF;QAED,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;IAED;;;;OAIG;IAEH;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;SAC5B,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEzC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;YACtC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAA;SAC1F;QAED,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,EAAE;YAChE,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,CAAA;SACpE;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QAElE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;QAEhB,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU;SAC9B,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEzC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;YACtC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,mBAAmB,CAAC,EAAE,uBAAuB,CAAC,CAAA;SAC9F;QAED,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;QAEhB,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAE,MAAc,EAAE,QAAgB;QAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,qBAAqB,CAAC,CAAA;SAC5E;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,sBAAsB,CAAC,CAAA;SAC9E;QAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YAC9B,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,KAAK,EAAE,CAAC,QAAQ,CAAC;aAClB;SACF,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEzC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;YACtC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;YAChB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,oBAAoB,CAAC,EAAE,wBAAwB,CAAC,CAAA;SAChG;QAED,OAAO,EAAE,CAAC,IAAI,EAAE,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAE,IAAe,EAAE,QAAgB;QAC5D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAChC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE,uBAAuB,CAAC,CAAA;SAChF;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,sBAAsB,CAAC,CAAA;SAC9E;QAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc;YACjC,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE;gBACb,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,KAAK,EAAE,CAAC,QAAQ,CAAC;aAClB;SACF,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEzC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;QAEhB,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;YACtC,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,gCAAgC,CAAC,EAAE,oCAAoC,CAAC,CAAA;SACxH;IACH,CAAC;CACF;AAiCD,MAAM,UAAU,YAAY,CAAE,SAAoB;IAChD,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/daemon-client",
3
- "version": "2.0.4",
3
+ "version": "3.0.0",
4
4
  "description": "libp2p-daemon client implementation",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p-daemon/tree/master/packages/libp2p-daemon-client#readme",
@@ -134,7 +134,7 @@
134
134
  "release": "aegir release"
135
135
  },
136
136
  "dependencies": {
137
- "@libp2p/daemon-protocol": "^2.0.0",
137
+ "@libp2p/daemon-protocol": "^3.0.0",
138
138
  "@libp2p/interface-peer-id": "^1.0.2",
139
139
  "@libp2p/interface-peer-info": "^1.0.1",
140
140
  "@libp2p/logger": "^2.0.0",
@@ -143,11 +143,12 @@
143
143
  "@multiformats/multiaddr": "^10.1.8",
144
144
  "err-code": "^3.0.1",
145
145
  "it-stream-types": "^1.0.4",
146
- "multiformats": "^9.6.4"
146
+ "multiformats": "^9.6.4",
147
+ "uint8arraylist": "^2.3.2"
147
148
  },
148
149
  "devDependencies": {
149
150
  "@libp2p/components": "^2.0.0",
150
- "@libp2p/daemon-server": "^2.0.0",
151
+ "@libp2p/daemon-server": "^3.0.0",
151
152
  "@libp2p/interface-compliance-tests": "^3.0.1",
152
153
  "@libp2p/interface-dht": "^1.0.0",
153
154
  "@libp2p/interface-mocks": "^4.0.1",
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import errcode from 'err-code'
2
2
  import { TCP } from '@libp2p/tcp'
3
- import { PSMessage, Request, Response } from '@libp2p/daemon-protocol'
3
+ import { PSMessage, Request, Response, StreamInfo } from '@libp2p/daemon-protocol'
4
4
  import { StreamHandler } from '@libp2p/daemon-protocol/stream-handler'
5
5
  import { Multiaddr } from '@multiformats/multiaddr'
6
6
  import { DHT } from './dht.js'
@@ -12,6 +12,10 @@ import type { Duplex } from 'it-stream-types'
12
12
  import type { CID } from 'multiformats/cid'
13
13
  import type { PeerInfo } from '@libp2p/interface-peer-info'
14
14
  import type { MultiaddrConnection } from '@libp2p/interface-connection'
15
+ import type { Uint8ArrayList } from 'uint8arraylist'
16
+ import { logger } from '@libp2p/logger'
17
+
18
+ const log = logger('libp2p:daemon-client')
15
19
 
16
20
  class Client implements DaemonClient {
17
21
  private readonly multiaddr: Multiaddr
@@ -22,7 +26,6 @@ class Client implements DaemonClient {
22
26
  constructor (addr: Multiaddr) {
23
27
  this.multiaddr = addr
24
28
  this.tcp = new TCP()
25
-
26
29
  this.dht = new DHT(this)
27
30
  this.pubsub = new Pubsub(this)
28
31
  }
@@ -150,7 +153,7 @@ class Client implements DaemonClient {
150
153
  /**
151
154
  * Initiate an outbound stream to a peer on one of a set of protocols.
152
155
  */
153
- async openStream (peerId: PeerId, protocol: string): Promise<Duplex<Uint8Array>> {
156
+ async openStream (peerId: PeerId, protocol: string): Promise<Duplex<Uint8ArrayList, Uint8Array>> {
154
157
  if (!isPeerId(peerId)) {
155
158
  throw errcode(new Error('invalid peer id received'), 'ERR_INVALID_PEER_ID')
156
159
  }
@@ -181,20 +184,58 @@ class Client implements DaemonClient {
181
184
  /**
182
185
  * Register a handler for inbound streams on a given protocol
183
186
  */
184
- async registerStreamHandler (addr: Multiaddr, protocol: string) {
185
- if (!Multiaddr.isMultiaddr(addr)) {
186
- throw errcode(new Error('invalid multiaddr received'), 'ERR_INVALID_MULTIADDR')
187
- }
188
-
187
+ async registerStreamHandler (protocol: string, handler: StreamHandlerFunction): Promise<void> {
189
188
  if (typeof protocol !== 'string') {
190
189
  throw errcode(new Error('invalid protocol received'), 'ERR_INVALID_PROTOCOL')
191
190
  }
192
191
 
192
+ // open a tcp port, pipe any data from it to the handler function
193
+ const listener = this.tcp.createListener({
194
+ upgrader: passThroughUpgrader,
195
+ handler: (connection) => {
196
+ Promise.resolve()
197
+ .then(async () => {
198
+ const sh = new StreamHandler({
199
+ // @ts-expect-error because we are using a passthrough upgrader, this is a MultiaddrConnection
200
+ stream: connection
201
+ })
202
+ const message = await sh.read()
203
+
204
+ if (message == null) {
205
+ throw errcode(new Error('Could not read open stream response'), 'ERR_OPEN_STREAM_FAILED')
206
+ }
207
+
208
+ const response = StreamInfo.decode(message)
209
+
210
+ if (response.proto !== protocol) {
211
+ throw errcode(new Error('Incorrect protocol'), 'ERR_OPEN_STREAM_FAILED')
212
+ }
213
+
214
+ await handler(sh.rest())
215
+ })
216
+ .finally(() => {
217
+ connection.close()
218
+ .catch(err => {
219
+ log.error(err)
220
+ })
221
+ listener.close()
222
+ .catch(err => {
223
+ log.error(err)
224
+ })
225
+ })
226
+ }
227
+ })
228
+ await listener.listen(new Multiaddr('/ip4/127.0.0.1/tcp/0'))
229
+ const address = listener.getAddrs()[0]
230
+
231
+ if (address == null) {
232
+ throw errcode(new Error('Could not listen on port'), 'ERR_REGISTER_STREAM_HANDLER_FAILED')
233
+ }
234
+
193
235
  const sh = await this.send({
194
236
  type: Request.Type.STREAM_HANDLER,
195
- streamOpen: undefined,
196
237
  streamHandler: {
197
- addr: addr.bytes,
238
+ addr: address.bytes,
198
239
  proto: [protocol]
199
240
  }
200
241
  })
@@ -215,6 +256,10 @@ export interface IdentifyResult {
215
256
  addrs: Multiaddr[]
216
257
  }
217
258
 
259
+ export interface StreamHandlerFunction {
260
+ (stream: Duplex<Uint8ArrayList, Uint8Array>): Promise<void>
261
+ }
262
+
218
263
  export interface DHTClient {
219
264
  put: (key: Uint8Array, value: Uint8Array) => Promise<void>
220
265
  get: (key: Uint8Array) => Promise<Uint8Array>
@@ -238,7 +283,8 @@ export interface DaemonClient {
238
283
  pubsub: PubSubClient
239
284
 
240
285
  send: (request: Request) => Promise<StreamHandler>
241
- openStream: (peerId: PeerId, protocol: string) => Promise<Duplex<Uint8Array>>
286
+ openStream: (peerId: PeerId, protocol: string) => Promise<Duplex<Uint8ArrayList, Uint8Array>>
287
+ registerStreamHandler: (protocol: string, handler: StreamHandlerFunction) => Promise<void>
242
288
  }
243
289
 
244
290
  export function createClient (multiaddr: Multiaddr): DaemonClient {