@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.
- package/dist/src/index.d.ts +6 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +42 -7
- package/dist/src/index.js.map +1 -1
- package/package.json +5 -4
- package/src/index.ts +57 -11
package/dist/src/index.d.ts
CHANGED
|
@@ -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
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,OAAO,
|
|
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(
|
|
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:
|
|
189
|
+
addr: address.bytes,
|
|
155
190
|
proto: [protocol]
|
|
156
191
|
}
|
|
157
192
|
});
|
package/dist/src/index.js.map
CHANGED
|
@@ -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;
|
|
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": "
|
|
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": "^
|
|
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": "^
|
|
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 (
|
|
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:
|
|
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 {
|