@libp2p/daemon-client 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.
package/LICENSE ADDED
@@ -0,0 +1,4 @@
1
+ This project is dual licensed under MIT and Apache-2.0.
2
+
3
+ MIT: https://www.opensource.org/licenses/mit
4
+ Apache-2.0: https://www.apache.org/licenses/license-2.0
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ libp2p-daemon client JavaScript implementation
2
+ ======
3
+
4
+ [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai/)
5
+ [![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)
6
+ [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p)
7
+ [![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io)
8
+
9
+ > A Javascript client to interact with a standalone deployment of a libp2p host, running in its own OS process. Essentially, this client allows to communicate with other peers, interact with the DHT, participate in pubsub, etc. no matter the language they are implemented with.
10
+
11
+ ## Lead Maintainer
12
+
13
+ [Vasco Santos](https://github.com/vasco-santos)
14
+
15
+ ## Table of Contents
16
+
17
+ * [Specs](#specs)
18
+ * [Install](#install)
19
+ * [Usage](#usage)
20
+ * [API](#api)
21
+ * [Contribute](#contribute)
22
+ * [License](#license)
23
+
24
+ ## Specs
25
+
26
+ The specs for the daemon are currently housed in the go implementation. You can read them at [libp2p/go-libp2p-daemon](https://github.com/libp2p/go-libp2p-daemon/blob/master/specs/README.md)
27
+
28
+ ## Install
29
+
30
+ `npm install libp2p-daemon-client`
31
+
32
+ ## Usage
33
+
34
+ ### Run a daemon process
35
+
36
+ There are currently two implementations of the `libp2p-daemon`:
37
+
38
+ - [js-libp2p-daemon](https://github.com/libp2p/js-libp2p-daemon)
39
+ - [go-libp2p-daemon](https://github.com/libp2p/go-libp2p-daemon)
40
+
41
+ ### Interact with the daemon process using the client
42
+
43
+ ```js
44
+ const Client = require('libp2p-daemon-client')
45
+
46
+ const defaultSock = '/tmp/p2pd.sock'
47
+ const client = new Client(defaultSock)
48
+
49
+ // interact with the daemon
50
+ let identify
51
+ try {
52
+ identify = await client.identify()
53
+ } catch (err) {
54
+ // ...
55
+ }
56
+
57
+ // close the socket
58
+ await client.close()
59
+ ```
60
+
61
+ ## API
62
+
63
+ * [Getting started](API.md#getting-started)
64
+ * [`close`](API.md#close)
65
+ * [`connect`](API.md#connect)
66
+ * [`identify`](API.md#identify)
67
+ * [`listPeers`](API.md#listPeers)
68
+ * [`openStream`](API.md#openStream)
69
+ * [`registerStream`](API.md#registerStream)
70
+ * [`dht.put`](API.md#dht.put)
71
+ * [`dht.get`](API.md#dht.get)
72
+ * [`dht.findPeer`](API.md#dht.findPeer)
73
+ * [`dht.provide`](API.md#dht.provide)
74
+ * [`dht.findProviders`](API.md#dht.findProviders)
75
+ * [`dht.getClosestPeers`](API.md#dht.getClosestPeers)
76
+ * [`dht.getPublicKey`](API.md#dht.getPublicKey)
77
+
78
+ ## Contribute
79
+
80
+ This module is actively under development. Please check out the issues and submit PRs!
81
+
82
+ ## License
83
+
84
+ MIT © Protocol Labs
@@ -0,0 +1,40 @@
1
+ import { CID } from 'multiformats/cid';
2
+ import type { DaemonClient } from './index.js';
3
+ import { PeerId } from '@libp2p/interfaces/peer-id';
4
+ import type { PeerData } from '@libp2p/interfaces/peer-data';
5
+ export declare class DHT {
6
+ private client;
7
+ constructor(client: DaemonClient);
8
+ /**
9
+ * Write a value to a key in the DHT
10
+ */
11
+ put(key: Uint8Array, value: Uint8Array): Promise<void>;
12
+ /**
13
+ * Query the DHT for a value stored at a key in the DHT
14
+ */
15
+ get(key: Uint8Array): Promise<Uint8Array>;
16
+ /**
17
+ * Query the DHT for a given peer's known addresses.
18
+ *
19
+ * @param {PeerId} peerId
20
+ * @returns {PeerInfo}
21
+ */
22
+ findPeer(peerId: PeerId): Promise<PeerData>;
23
+ /**
24
+ * Announce to the network that the peer have data addressed by the provided CID
25
+ */
26
+ provide(cid: CID): Promise<void>;
27
+ /**
28
+ * Query the DHT for peers that have a piece of content, identified by a CID
29
+ */
30
+ findProviders(cid: CID, count?: number): AsyncIterator<PeerData>;
31
+ /**
32
+ * Query the DHT routing table for peers that are closest to a provided key.
33
+ */
34
+ getClosestPeers(key: Uint8Array): AsyncIterable<PeerData>;
35
+ /**
36
+ * Query the DHT routing table for a given peer's public key.
37
+ */
38
+ getPublicKey(peerId: PeerId): Promise<Uint8Array | null | undefined>;
39
+ }
40
+ //# sourceMappingURL=dht.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dht.d.ts","sourceRoot":"","sources":["../../src/dht.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAStC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAY,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAG5D,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAc;gBAEf,MAAM,EAAE,YAAY;IAIjC;;OAEG;IACG,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7D;;OAEG;IACG,GAAG,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA6BhD;;;;;OAKG;IACG,QAAQ,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiClD;;OAEG;IACG,OAAO,CAAE,GAAG,EAAE,GAAG;IAuBvB;;OAEG;IACK,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,KAAK,GAAE,MAAU,GAAG,aAAa,CAAC,QAAQ,CAAC;IAiD5E;;OAEG;IACK,eAAe,CAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC;IAiDlE;;OAEG;IACG,YAAY,CAAE,MAAM,EAAE,MAAM;CA4BnC"}
@@ -0,0 +1,230 @@
1
+ import { CID } from 'multiformats/cid';
2
+ import { Multiaddr } from '@multiformats/multiaddr';
3
+ import errcode from 'err-code';
4
+ import { Request, Response, DHTRequest, DHTResponse } from '@libp2p/daemon-protocol';
5
+ import { isPeerId } from '@libp2p/interfaces/peer-id';
6
+ import { peerIdFromBytes } from '@libp2p/peer-id';
7
+ export class DHT {
8
+ constructor(client) {
9
+ this.client = client;
10
+ }
11
+ /**
12
+ * Write a value to a key in the DHT
13
+ */
14
+ async put(key, value) {
15
+ if (!(key instanceof Uint8Array)) {
16
+ throw errcode(new Error('invalid key received'), 'ERR_INVALID_KEY');
17
+ }
18
+ if (!(value instanceof Uint8Array)) {
19
+ throw errcode(new Error('value received is not a Uint8Array'), 'ERR_INVALID_VALUE');
20
+ }
21
+ const sh = await this.client.send({
22
+ type: Request.Type.DHT,
23
+ dht: {
24
+ type: DHTRequest.Type.PUT_VALUE,
25
+ key,
26
+ value
27
+ }
28
+ });
29
+ const message = await sh.read();
30
+ const response = Response.decode(message);
31
+ await sh.close();
32
+ if (response.type !== Response.Type.OK) {
33
+ throw errcode(new Error(response.error?.msg ?? 'DHT put failed'), 'ERR_DHT_PUT_FAILED');
34
+ }
35
+ }
36
+ /**
37
+ * Query the DHT for a value stored at a key in the DHT
38
+ */
39
+ async get(key) {
40
+ if (!(key instanceof Uint8Array)) {
41
+ throw errcode(new Error('invalid key received'), 'ERR_INVALID_KEY');
42
+ }
43
+ const sh = await this.client.send({
44
+ type: Request.Type.DHT,
45
+ dht: {
46
+ type: DHTRequest.Type.GET_VALUE,
47
+ key
48
+ }
49
+ });
50
+ const message = await sh.read();
51
+ const response = Response.decode(message);
52
+ await sh.close();
53
+ if (response.type !== Response.Type.OK) {
54
+ throw errcode(new Error(response.error?.msg ?? 'DHT get failed'), 'ERR_DHT_GET_FAILED');
55
+ }
56
+ if (response.dht == null || response.dht.value == null) {
57
+ throw errcode(new Error('Invalid DHT get response'), 'ERR_DHT_GET_FAILED');
58
+ }
59
+ return response.dht.value;
60
+ }
61
+ /**
62
+ * Query the DHT for a given peer's known addresses.
63
+ *
64
+ * @param {PeerId} peerId
65
+ * @returns {PeerInfo}
66
+ */
67
+ async findPeer(peerId) {
68
+ if (!isPeerId(peerId)) {
69
+ throw errcode(new Error('invalid peer id received'), 'ERR_INVALID_PEER_ID');
70
+ }
71
+ const sh = await this.client.send({
72
+ type: Request.Type.DHT,
73
+ dht: {
74
+ type: DHTRequest.Type.FIND_PEER,
75
+ peer: peerId.toBytes()
76
+ }
77
+ });
78
+ const message = await sh.read();
79
+ const response = Response.decode(message);
80
+ await sh.close();
81
+ if (response.type !== Response.Type.OK) {
82
+ throw errcode(new Error(response.error?.msg ?? 'DHT find peer failed'), 'ERR_DHT_FIND_PEER_FAILED');
83
+ }
84
+ if (response.dht == null || response.dht.peer == null || response.dht.peer.addrs == null) {
85
+ throw errcode(new Error('Invalid response'), 'ERR_DHT_FIND_PEER_FAILED');
86
+ }
87
+ return {
88
+ id: peerIdFromBytes(response.dht.peer.id),
89
+ multiaddrs: response.dht.peer.addrs.map((a) => new Multiaddr(a)),
90
+ protocols: []
91
+ };
92
+ }
93
+ /**
94
+ * Announce to the network that the peer have data addressed by the provided CID
95
+ */
96
+ async provide(cid) {
97
+ if (cid == null || CID.asCID(cid) == null) {
98
+ throw errcode(new Error('invalid cid received'), 'ERR_INVALID_CID');
99
+ }
100
+ const sh = await this.client.send({
101
+ type: Request.Type.DHT,
102
+ dht: {
103
+ type: DHTRequest.Type.PROVIDE,
104
+ cid: cid.bytes
105
+ }
106
+ });
107
+ const message = await sh.read();
108
+ const response = Response.decode(message);
109
+ await sh.close();
110
+ if (response.type !== Response.Type.OK) {
111
+ throw errcode(new Error(response.error?.msg ?? 'DHT provide failed'), 'ERR_DHT_PROVIDE_FAILED');
112
+ }
113
+ }
114
+ /**
115
+ * Query the DHT for peers that have a piece of content, identified by a CID
116
+ */
117
+ async *findProviders(cid, count = 1) {
118
+ if (cid == null || CID.asCID(cid) == null) {
119
+ throw errcode(new Error('invalid cid received'), 'ERR_INVALID_CID');
120
+ }
121
+ const sh = await this.client.send({
122
+ type: Request.Type.DHT,
123
+ dht: {
124
+ type: DHTRequest.Type.FIND_PROVIDERS,
125
+ cid: cid.bytes,
126
+ count
127
+ }
128
+ });
129
+ let message = await sh.read();
130
+ // stream begin message
131
+ let response = Response.decode(message);
132
+ if (response.type !== Response.Type.OK) {
133
+ await sh.close();
134
+ throw errcode(new Error(response.error?.msg || 'DHT find providers failed'), 'ERR_DHT_FIND_PROVIDERS_FAILED');
135
+ }
136
+ while (true) {
137
+ message = await sh.read();
138
+ const response = DHTResponse.decode(message);
139
+ // Stream end
140
+ if (response.type === DHTResponse.Type.END) {
141
+ await sh.close();
142
+ return;
143
+ }
144
+ // Stream values
145
+ if (response.type === DHTResponse.Type.VALUE && response.peer != null && response.peer?.addrs != null) {
146
+ yield {
147
+ id: peerIdFromBytes(response.peer.id),
148
+ multiaddrs: response.peer.addrs.map((a) => new Multiaddr(a)),
149
+ protocols: []
150
+ };
151
+ }
152
+ else {
153
+ // Unexpected message received
154
+ await sh.close();
155
+ throw errcode(new Error('unexpected message received'), 'ERR_UNEXPECTED_MESSAGE_RECEIVED');
156
+ }
157
+ }
158
+ }
159
+ /**
160
+ * Query the DHT routing table for peers that are closest to a provided key.
161
+ */
162
+ async *getClosestPeers(key) {
163
+ if (!(key instanceof Uint8Array)) {
164
+ throw errcode(new Error('invalid key received'), 'ERR_INVALID_KEY');
165
+ }
166
+ const sh = await this.client.send({
167
+ type: Request.Type.DHT,
168
+ dht: {
169
+ type: DHTRequest.Type.GET_CLOSEST_PEERS,
170
+ key
171
+ }
172
+ });
173
+ // stream begin message
174
+ let message = await sh.read();
175
+ let response = Response.decode(message);
176
+ if (response.type !== Response.Type.OK) {
177
+ await sh.close();
178
+ throw errcode(new Error(response.error?.msg ?? 'DHT find providers failed'), 'ERR_DHT_FIND_PROVIDERS_FAILED');
179
+ }
180
+ while (true) {
181
+ message = await sh.read();
182
+ const response = DHTResponse.decode(message);
183
+ // Stream end
184
+ if (response.type === DHTResponse.Type.END) {
185
+ await sh.close();
186
+ return;
187
+ }
188
+ // Stream values
189
+ if (response.type === DHTResponse.Type.VALUE && response.value != null) {
190
+ const peerId = peerIdFromBytes(response.value);
191
+ yield {
192
+ id: peerId,
193
+ multiaddrs: [],
194
+ protocols: []
195
+ };
196
+ }
197
+ else {
198
+ // Unexpected message received
199
+ await sh.close();
200
+ throw errcode(new Error('unexpected message received'), 'ERR_UNEXPECTED_MESSAGE_RECEIVED');
201
+ }
202
+ }
203
+ }
204
+ /**
205
+ * Query the DHT routing table for a given peer's public key.
206
+ */
207
+ async getPublicKey(peerId) {
208
+ if (!isPeerId(peerId)) {
209
+ throw errcode(new Error('invalid peer id received'), 'ERR_INVALID_PEER_ID');
210
+ }
211
+ const sh = await this.client.send({
212
+ type: Request.Type.DHT,
213
+ dht: {
214
+ type: DHTRequest.Type.GET_PUBLIC_KEY,
215
+ peer: peerId.toBytes()
216
+ }
217
+ });
218
+ const message = await sh.read();
219
+ const response = Response.decode(message);
220
+ await sh.close();
221
+ if (response.type !== Response.Type.OK) {
222
+ throw errcode(new Error(response.error?.msg ?? 'DHT get public key failed'), 'ERR_DHT_GET_PUBLIC_KEY_FAILED');
223
+ }
224
+ if (response.dht == null) {
225
+ throw errcode(new Error('Invalid response'), 'ERR_DHT_GET_PUBLIC_KEY_FAILED');
226
+ }
227
+ return response.dht.value;
228
+ }
229
+ }
230
+ //# sourceMappingURL=dht.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dht.js","sourceRoot":"","sources":["../../src/dht.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { IRequest } from '@libp2p/daemon-protocol';
2
+ import { StreamHandler } from './stream-handler.js';
3
+ import { Multiaddr } from '@multiformats/multiaddr';
4
+ import { PeerId } from '@libp2p/interfaces/peer-id';
5
+ export interface IdentifyResult {
6
+ peerId: PeerId;
7
+ addrs: Multiaddr[];
8
+ }
9
+ export interface DHTClient {
10
+ put: (key: Uint8Array, value: Uint8Array) => Promise<void>;
11
+ get: (key: Uint8Array) => Promise<Uint8Array>;
12
+ }
13
+ export interface DaemonClient {
14
+ identify: () => Promise<IdentifyResult>;
15
+ listPeers: () => Promise<PeerId[]>;
16
+ connect: (peerId: PeerId, addrs: Multiaddr[]) => Promise<void>;
17
+ dht: DHTClient;
18
+ send: (request: IRequest) => Promise<StreamHandler>;
19
+ }
20
+ export declare function createClient(multiaddr: Multiaddr): DaemonClient;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAqB,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnD,OAAO,EAAY,MAAM,EAAE,MAAM,4BAA4B,CAAA;AA0O7D,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;CAC9C;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;IAEd,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;CACpD;AAED,wBAAgB,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAEhE"}
@@ -0,0 +1,195 @@
1
+ import errcode from 'err-code';
2
+ import { TCP } from '@libp2p/tcp';
3
+ import { Request, Response } from '@libp2p/daemon-protocol';
4
+ import { StreamHandler } from './stream-handler.js';
5
+ import { Multiaddr } from '@multiformats/multiaddr';
6
+ import { DHT } from './dht.js';
7
+ import { Pubsub } from './pubsub.js';
8
+ import { isPeerId } from '@libp2p/interfaces/peer-id';
9
+ import { passThroughUpgrader } from './util/index.js';
10
+ import { peerIdFromBytes } from '@libp2p/peer-id';
11
+ class Client {
12
+ constructor(addr) {
13
+ this.multiaddr = addr;
14
+ this.tcp = new TCP();
15
+ this.dht = new DHT(this);
16
+ this.pubsub = new Pubsub(this);
17
+ }
18
+ /**
19
+ * Connects to a daemon at the unix socket path the daemon
20
+ * was created with
21
+ *
22
+ * @async
23
+ * @returns {MultiaddrConnection}
24
+ */
25
+ connectDaemon() {
26
+ return this.tcp.dial(this.multiaddr, {
27
+ upgrader: passThroughUpgrader
28
+ });
29
+ }
30
+ /**
31
+ * Starts a server listening at `socketPath`. New connections
32
+ * will be sent to the `connectionHandler`.
33
+ *
34
+ * @param {Multiaddr} addr
35
+ * @param {function(Stream)} connectionHandler
36
+ * @returns {Promise}
37
+ */
38
+ async start(addr, connectionHandler) {
39
+ if (this.listener) {
40
+ await this.close();
41
+ }
42
+ this.listener = this.tcp.createListener({
43
+ handler: maConn => connectionHandler(maConn),
44
+ upgrader: passThroughUpgrader
45
+ });
46
+ await this.listener.listen(addr);
47
+ }
48
+ /**
49
+ * Sends the request to the daemon and returns a stream. This
50
+ * should only be used when sending daemon requests.
51
+ */
52
+ async send(request) {
53
+ const maConn = await this.connectDaemon();
54
+ const streamHandler = new StreamHandler({ stream: maConn });
55
+ streamHandler.write(Request.encode(request).finish());
56
+ return streamHandler;
57
+ }
58
+ /**
59
+ * Closes the socket
60
+ */
61
+ async close() {
62
+ this.listener && await this.listener.close();
63
+ this.listener = undefined;
64
+ }
65
+ /**
66
+ * Connect requests a connection to a known peer on a given set of addresses
67
+ *
68
+ * @param {PeerId} peerId
69
+ * @param {Array.<multiaddr>} addrs
70
+ */
71
+ async connect(peerId, addrs) {
72
+ if (!isPeerId(peerId)) {
73
+ throw errcode(new Error('invalid peer id received'), 'ERR_INVALID_PEER_ID');
74
+ }
75
+ if (!Array.isArray(addrs)) {
76
+ throw errcode(new Error('addrs received are not in an array'), 'ERR_INVALID_ADDRS_TYPE');
77
+ }
78
+ addrs.forEach((addr) => {
79
+ if (!Multiaddr.isMultiaddr(addr)) {
80
+ throw errcode(new Error('received an address that is not a multiaddr'), 'ERR_NO_MULTIADDR_RECEIVED');
81
+ }
82
+ });
83
+ const sh = await this.send({
84
+ type: Request.Type.CONNECT,
85
+ connect: {
86
+ peer: peerId.toBytes(),
87
+ addrs: addrs.map((a) => a.bytes)
88
+ }
89
+ });
90
+ const message = await sh.read();
91
+ if (!message) {
92
+ throw errcode(new Error('unspecified'), 'ERR_CONNECT_FAILED');
93
+ }
94
+ const response = Response.decode(message);
95
+ if (response.type !== Response.Type.OK) {
96
+ const errResponse = response.error ?? { msg: 'unspecified' };
97
+ throw errcode(new Error(errResponse.msg ?? 'unspecified'), 'ERR_CONNECT_FAILED');
98
+ }
99
+ await sh.close();
100
+ }
101
+ /**
102
+ * @typedef {Object} IdentifyResponse
103
+ * @property {PeerId} peerId
104
+ * @property {Array.<multiaddr>} addrs
105
+ */
106
+ /**
107
+ * Identify queries the daemon for its peer ID and listen addresses.
108
+ */
109
+ async identify() {
110
+ const sh = await this.send({
111
+ type: Request.Type.IDENTIFY
112
+ });
113
+ const message = await sh.read();
114
+ const response = Response.decode(message);
115
+ if (response.type !== Response.Type.OK) {
116
+ throw errcode(new Error(response.error?.msg ?? 'Identify failed'), 'ERR_IDENTIFY_FAILED');
117
+ }
118
+ if (response.identify == null || response.identify.addrs == null) {
119
+ throw errcode(new Error('Invalid response'), 'ERR_IDENTIFY_FAILED');
120
+ }
121
+ const peerId = peerIdFromBytes(response.identify?.id);
122
+ const addrs = response.identify.addrs.map((a) => new Multiaddr(a));
123
+ await sh.close();
124
+ return ({ peerId, addrs });
125
+ }
126
+ /**
127
+ * Get a list of IDs of peers the node is connected to
128
+ */
129
+ async listPeers() {
130
+ const sh = await this.send({
131
+ type: Request.Type.LIST_PEERS
132
+ });
133
+ const message = await sh.read();
134
+ const response = Response.decode(message);
135
+ if (response.type !== Response.Type.OK) {
136
+ throw errcode(new Error(response.error?.msg ?? 'List peers failed'), 'ERR_LIST_PEERS_FAILED');
137
+ }
138
+ await sh.close();
139
+ return response.peers.map((peer) => peerIdFromBytes(peer.id));
140
+ }
141
+ /**
142
+ * Initiate an outbound stream to a peer on one of a set of protocols.
143
+ */
144
+ async openStream(peerId, protocol) {
145
+ if (!isPeerId(peerId)) {
146
+ throw errcode(new Error('invalid peer id received'), 'ERR_INVALID_PEER_ID');
147
+ }
148
+ if (typeof protocol !== 'string') {
149
+ throw errcode(new Error('invalid protocol received'), 'ERR_INVALID_PROTOCOL');
150
+ }
151
+ const sh = await this.send({
152
+ type: Request.Type.STREAM_OPEN,
153
+ streamOpen: {
154
+ peer: peerId.toBytes(),
155
+ proto: [protocol]
156
+ }
157
+ });
158
+ const message = await sh.read();
159
+ const response = Response.decode(message);
160
+ if (response.type !== Response.Type.OK) {
161
+ await sh.close();
162
+ throw errcode(new Error(response.error?.msg ?? 'Open stream failed'), 'ERR_OPEN_STREAM_FAILED');
163
+ }
164
+ return sh.rest();
165
+ }
166
+ /**
167
+ * Register a handler for inbound streams on a given protocol
168
+ */
169
+ async registerStreamHandler(addr, protocol) {
170
+ if (!Multiaddr.isMultiaddr(addr)) {
171
+ throw errcode(new Error('invalid multiaddr received'), 'ERR_INVALID_MULTIADDR');
172
+ }
173
+ if (typeof protocol !== 'string') {
174
+ throw errcode(new Error('invalid protocol received'), 'ERR_INVALID_PROTOCOL');
175
+ }
176
+ const sh = await this.send({
177
+ type: Request.Type.STREAM_HANDLER,
178
+ streamOpen: null,
179
+ streamHandler: {
180
+ addr: addr.bytes,
181
+ proto: [protocol]
182
+ }
183
+ });
184
+ const message = await sh.read();
185
+ const response = Response.decode(message);
186
+ await sh.close();
187
+ if (response.type !== Response.Type.OK) {
188
+ throw errcode(new Error(response.error?.msg ?? 'Register stream handler failed'), 'ERR_REGISTER_STREAM_HANDLER_FAILED');
189
+ }
190
+ }
191
+ }
192
+ export function createClient(multiaddr) {
193
+ return new Client(multiaddr);
194
+ }
195
+ //# 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,21 @@
1
+ import { PSMessage } from '@libp2p/daemon-protocol';
2
+ import type { DaemonClient } from './index.js';
3
+ export declare class Pubsub {
4
+ private client;
5
+ constructor(client: DaemonClient);
6
+ /**
7
+ * Get a list of topics the node is subscribed to.
8
+ *
9
+ * @returns {Array<string>} topics
10
+ */
11
+ getTopics(): Promise<string[]>;
12
+ /**
13
+ * Publish data under a topic
14
+ */
15
+ publish(topic: string, data: Uint8Array): Promise<void>;
16
+ /**
17
+ * Request to subscribe a certain topic
18
+ */
19
+ subscribe(topic: string): AsyncGenerator<PSMessage, void, unknown>;
20
+ }
21
+ //# sourceMappingURL=pubsub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,SAAS,EACV,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAc;gBAEf,MAAM,EAAE,YAAY;IAIjC;;;;OAIG;IACG,SAAS,IAAK,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBrC;;OAEG;IACG,OAAO,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IA4B9C;;OAEG;IACK,SAAS,CAAE,KAAK,EAAE,MAAM;CA0BjC"}