@libp2p/webrtc 5.2.9-fc5122110 → 5.2.10
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/README.md +54 -0
- package/dist/index.min.js +153 -18
- package/dist/src/constants.d.ts +20 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +20 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +54 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +54 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/private-to-public/listener.d.ts +9 -4
- package/dist/src/private-to-public/listener.d.ts.map +1 -1
- package/dist/src/private-to-public/listener.js +7 -18
- package/dist/src/private-to-public/listener.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +67 -5
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +181 -2
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/private-to-public/utils/pem.d.ts +6 -0
- package/dist/src/private-to-public/utils/pem.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/pem.js +15 -0
- package/dist/src/private-to-public/utils/pem.js.map +1 -0
- package/dist/typedoc-urls.json +14 -0
- package/package.json +11 -8
- package/src/constants.ts +25 -0
- package/src/index.ts +54 -0
- package/src/private-to-public/listener.ts +17 -26
- package/src/private-to-public/transport.ts +281 -7
- package/src/private-to-public/utils/pem.ts +18 -0
package/dist/src/constants.d.ts
CHANGED
@@ -69,4 +69,24 @@ export declare const MUXER_PROTOCOL = "/webrtc";
|
|
69
69
|
* The protocol used for the signalling stream protocol
|
70
70
|
*/
|
71
71
|
export declare const SIGNALING_PROTOCOL = "/webrtc-signaling/0.0.1";
|
72
|
+
/**
|
73
|
+
* Used to store generated certificates in the datastore
|
74
|
+
*/
|
75
|
+
export declare const DEFAULT_CERTIFICATE_DATASTORE_KEY = "/libp2p/webrtc-direct/certificate";
|
76
|
+
/**
|
77
|
+
* Used to store the certificate private key in the keychain
|
78
|
+
*/
|
79
|
+
export declare const DEFAULT_CERTIFICATE_PRIVATE_KEY_NAME = "webrtc-direct-certificate-private-key";
|
80
|
+
/**
|
81
|
+
* The default type of certificate private key
|
82
|
+
*/
|
83
|
+
export declare const DEFAULT_CERTIFICATE_PRIVATE_KEY_TYPE = "ECDSA";
|
84
|
+
/**
|
85
|
+
* How long the certificate is valid for
|
86
|
+
*/
|
87
|
+
export declare const DEFAULT_CERTIFICATE_LIFESPAN = 1209600000;
|
88
|
+
/**
|
89
|
+
* Renew the certificate this long before it expires
|
90
|
+
*/
|
91
|
+
export declare const DEFAULT_CERTIFICATE_RENEWAL_THRESHOLD = 86400000;
|
72
92
|
//# sourceMappingURL=constants.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,UAK/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAA+E,CAAA;AAE1G;;GAEG;AACH,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,mBAAmB,MAAS,CAAA;AAEzC;;GAEG;AACH,eAAO,MAAM,cAAc,MAAS,CAAA;AAEpC;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAkB,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAY,CAAA;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAsBzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA8B,CAAA;AAE5D;;;;GAIG;AACH,eAAO,MAAM,eAAe,OAAQ,CAAA;AAEpC;;;GAGG;AACH,eAAO,MAAM,YAAY,OAAQ,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,cAAc,YAAY,CAAA;AAEvC;;GAEG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAA"}
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,UAK/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAA+E,CAAA;AAE1G;;GAEG;AACH,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,mBAAmB,MAAS,CAAA;AAEzC;;GAEG;AACH,eAAO,MAAM,cAAc,MAAS,CAAA;AAEpC;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAkB,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAY,CAAA;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAsBzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA8B,CAAA;AAE5D;;;;GAIG;AACH,eAAO,MAAM,eAAe,OAAQ,CAAA;AAEpC;;;GAGG;AACH,eAAO,MAAM,YAAY,OAAQ,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,cAAc,YAAY,CAAA;AAEvC;;GAEG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAA;AAE3D;;GAEG;AACH,eAAO,MAAM,iCAAiC,sCAAsC,CAAA;AAEpF;;GAEG;AACH,eAAO,MAAM,oCAAoC,0CAA0C,CAAA;AAE3F;;GAEG;AACH,eAAO,MAAM,oCAAoC,UAAU,CAAA;AAE3D;;GAEG;AACH,eAAO,MAAM,4BAA4B,aAAgB,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,qCAAqC,WAAa,CAAA"}
|
package/dist/src/constants.js
CHANGED
@@ -93,4 +93,24 @@ export const MUXER_PROTOCOL = '/webrtc';
|
|
93
93
|
* The protocol used for the signalling stream protocol
|
94
94
|
*/
|
95
95
|
export const SIGNALING_PROTOCOL = '/webrtc-signaling/0.0.1';
|
96
|
+
/**
|
97
|
+
* Used to store generated certificates in the datastore
|
98
|
+
*/
|
99
|
+
export const DEFAULT_CERTIFICATE_DATASTORE_KEY = '/libp2p/webrtc-direct/certificate';
|
100
|
+
/**
|
101
|
+
* Used to store the certificate private key in the keychain
|
102
|
+
*/
|
103
|
+
export const DEFAULT_CERTIFICATE_PRIVATE_KEY_NAME = 'webrtc-direct-certificate-private-key';
|
104
|
+
/**
|
105
|
+
* The default type of certificate private key
|
106
|
+
*/
|
107
|
+
export const DEFAULT_CERTIFICATE_PRIVATE_KEY_TYPE = 'ECDSA';
|
108
|
+
/**
|
109
|
+
* How long the certificate is valid for
|
110
|
+
*/
|
111
|
+
export const DEFAULT_CERTIFICATE_LIFESPAN = 1_209_600_000;
|
112
|
+
/**
|
113
|
+
* Renew the certificate this long before it expires
|
114
|
+
*/
|
115
|
+
export const DEFAULT_CERTIFICATE_RENEWAL_THRESHOLD = 86_400_000;
|
96
116
|
//# sourceMappingURL=constants.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,8BAA8B;IAC9B,kCAAkC;IAClC,+BAA+B;IAC/B,qCAAqC;CACtC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;AAE1G;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzC;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAE,cAAc,GAAG,gBAAgB;IACnE,0BAA0B;IAC1B,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC,CAAA;IACrF,MAAM,SAAS,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,gBAAgB;IAC3F,MAAM,kBAAkB,GAAG,CAAC,CAAA,CAAC,UAAU;IACvC,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,kBAAkB,CAAA;IAEjF,+DAA+D;IAC/D,MAAM,wBAAwB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IAE1D,OAAO,aAAa,GAAG,SAAS,GAAG,kBAAkB,GAAG,wBAAwB,CAAA;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAA;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAA;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAA;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAA;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAA"}
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,8BAA8B;IAC9B,kCAAkC;IAClC,+BAA+B;IAC/B,qCAAqC;CACtC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;AAE1G;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzC;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAE,cAAc,GAAG,gBAAgB;IACnE,0BAA0B;IAC1B,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC,CAAA;IACrF,MAAM,SAAS,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,gBAAgB;IAC3F,MAAM,kBAAkB,GAAG,CAAC,CAAA,CAAC,UAAU;IACvC,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,kBAAkB,CAAA;IAEjF,+DAA+D;IAC/D,MAAM,wBAAwB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IAE1D,OAAO,aAAa,GAAG,SAAS,GAAG,kBAAkB,GAAG,wBAAwB,CAAA;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAA;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAA;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAA;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAA;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,mCAAmC,CAAA;AAEpF;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,uCAAuC,CAAA;AAE3F;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,OAAO,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,aAAa,CAAA;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,UAAU,CAAA"}
|
package/dist/src/index.d.ts
CHANGED
@@ -206,6 +206,60 @@
|
|
206
206
|
* }
|
207
207
|
* )
|
208
208
|
* ```
|
209
|
+
*
|
210
|
+
* ## WebRTC Direct certificate hashes
|
211
|
+
*
|
212
|
+
* WebRTC Direct listeners publish the hash of their TLS certificate as part of
|
213
|
+
* the listening multiaddr.
|
214
|
+
*
|
215
|
+
* By default these certificates are generated at start up using an ephemeral
|
216
|
+
* keypair that only exists while the node is running.
|
217
|
+
*
|
218
|
+
* This means that the certificate hashes change when the node is restarted,
|
219
|
+
* which can be undesirable if multiaddrs are intended to be long lived (e.g.
|
220
|
+
* if the node is used as a network bootstrapper).
|
221
|
+
*
|
222
|
+
* To reuse the same certificate and keypair, configure a persistent datastore
|
223
|
+
* and the [@libp2p/keychain](https://www.npmjs.com/package/@libp2p/keychain)
|
224
|
+
* service as part of your service map:
|
225
|
+
*
|
226
|
+
* @example Reuse TLS certificates after restart
|
227
|
+
*
|
228
|
+
* ```ts
|
229
|
+
* import { LevelDatastore } from 'datastore-level'
|
230
|
+
* import { webRTCDirect } from '@libp2p/webrtc'
|
231
|
+
* import { keychain } from '@libp2p/keychain'
|
232
|
+
* import { createLibp2p } from 'libp2p'
|
233
|
+
*
|
234
|
+
* // store data on disk between restarts
|
235
|
+
* const datastore = new LevelDatastore('/path/to/store')
|
236
|
+
*
|
237
|
+
* const listener = await createLibp2p({
|
238
|
+
* addresses: {
|
239
|
+
* listen: [
|
240
|
+
* '/ip4/0.0.0.0/udp/0/webrtc-direct'
|
241
|
+
* ]
|
242
|
+
* },
|
243
|
+
* datastore,
|
244
|
+
* transports: [
|
245
|
+
* webRTCDirect()
|
246
|
+
* ],
|
247
|
+
* services: {
|
248
|
+
* keychain: keychain()
|
249
|
+
* }
|
250
|
+
* })
|
251
|
+
*
|
252
|
+
* await listener.start()
|
253
|
+
*
|
254
|
+
* console.info(listener.getMultiaddrs())
|
255
|
+
* // /ip4/...../udp/../webrtc-direct/certhash/foo
|
256
|
+
*
|
257
|
+
* await listener.stop()
|
258
|
+
* await listener.start()
|
259
|
+
*
|
260
|
+
* console.info(listener.getMultiaddrs())
|
261
|
+
* // /ip4/...../udp/../webrtc-direct/certhash/foo
|
262
|
+
* ```
|
209
263
|
*/
|
210
264
|
import { type WebRTCTransportDirectInit, type WebRTCDirectTransportComponents } from './private-to-public/transport.js';
|
211
265
|
import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js';
|
package/dist/src/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsQG;AAGH,OAAO,EAAyB,KAAK,yBAAyB,EAAE,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;;;OAMG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAA;IAEtC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,YAAY,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,CAAA;AAE1E,iBAAS,YAAY,CAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnH;AAED,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,CAAA;AAE9D,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/src/index.js
CHANGED
@@ -206,6 +206,60 @@
|
|
206
206
|
* }
|
207
207
|
* )
|
208
208
|
* ```
|
209
|
+
*
|
210
|
+
* ## WebRTC Direct certificate hashes
|
211
|
+
*
|
212
|
+
* WebRTC Direct listeners publish the hash of their TLS certificate as part of
|
213
|
+
* the listening multiaddr.
|
214
|
+
*
|
215
|
+
* By default these certificates are generated at start up using an ephemeral
|
216
|
+
* keypair that only exists while the node is running.
|
217
|
+
*
|
218
|
+
* This means that the certificate hashes change when the node is restarted,
|
219
|
+
* which can be undesirable if multiaddrs are intended to be long lived (e.g.
|
220
|
+
* if the node is used as a network bootstrapper).
|
221
|
+
*
|
222
|
+
* To reuse the same certificate and keypair, configure a persistent datastore
|
223
|
+
* and the [@libp2p/keychain](https://www.npmjs.com/package/@libp2p/keychain)
|
224
|
+
* service as part of your service map:
|
225
|
+
*
|
226
|
+
* @example Reuse TLS certificates after restart
|
227
|
+
*
|
228
|
+
* ```ts
|
229
|
+
* import { LevelDatastore } from 'datastore-level'
|
230
|
+
* import { webRTCDirect } from '@libp2p/webrtc'
|
231
|
+
* import { keychain } from '@libp2p/keychain'
|
232
|
+
* import { createLibp2p } from 'libp2p'
|
233
|
+
*
|
234
|
+
* // store data on disk between restarts
|
235
|
+
* const datastore = new LevelDatastore('/path/to/store')
|
236
|
+
*
|
237
|
+
* const listener = await createLibp2p({
|
238
|
+
* addresses: {
|
239
|
+
* listen: [
|
240
|
+
* '/ip4/0.0.0.0/udp/0/webrtc-direct'
|
241
|
+
* ]
|
242
|
+
* },
|
243
|
+
* datastore,
|
244
|
+
* transports: [
|
245
|
+
* webRTCDirect()
|
246
|
+
* ],
|
247
|
+
* services: {
|
248
|
+
* keychain: keychain()
|
249
|
+
* }
|
250
|
+
* })
|
251
|
+
*
|
252
|
+
* await listener.start()
|
253
|
+
*
|
254
|
+
* console.info(listener.getMultiaddrs())
|
255
|
+
* // /ip4/...../udp/../webrtc-direct/certhash/foo
|
256
|
+
*
|
257
|
+
* await listener.stop()
|
258
|
+
* await listener.start()
|
259
|
+
*
|
260
|
+
* console.info(listener.getMultiaddrs())
|
261
|
+
* // /ip4/...../udp/../webrtc-direct/certhash/foo
|
262
|
+
* ```
|
209
263
|
*/
|
210
264
|
import { WebRTCTransport } from './private-to-private/transport.js';
|
211
265
|
import { WebRTCDirectTransport } from './private-to-public/transport.js';
|
package/dist/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAwE,MAAM,kCAAkC,CAAA;AA8E9I,SAAS,YAAY,CAAE,IAAgC;IACrD,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrG,CAAC;AAID,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
@@ -1,28 +1,33 @@
|
|
1
1
|
import { TypedEventEmitter } from '@libp2p/interface';
|
2
2
|
import type { DataChannelOptions, TransportCertificate } from '../index.js';
|
3
|
-
import type {
|
3
|
+
import type { WebRTCDirectTransportCertificateEvents } from './transport.js';
|
4
|
+
import type { PeerId, ListenerEvents, Listener, Upgrader, ComponentLogger, CounterGroup, Metrics, PrivateKey, TypedEventTarget } from '@libp2p/interface';
|
5
|
+
import type { Keychain } from '@libp2p/keychain';
|
4
6
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
7
|
+
import type { Datastore } from 'interface-datastore';
|
5
8
|
export interface WebRTCDirectListenerComponents {
|
6
9
|
peerId: PeerId;
|
7
10
|
privateKey: PrivateKey;
|
8
11
|
logger: ComponentLogger;
|
9
12
|
upgrader: Upgrader;
|
13
|
+
keychain?: Keychain;
|
14
|
+
datastore: Datastore;
|
10
15
|
metrics?: Metrics;
|
11
16
|
}
|
12
17
|
export interface WebRTCDirectListenerInit {
|
13
18
|
upgrader: Upgrader;
|
14
|
-
|
19
|
+
certificate: TransportCertificate;
|
15
20
|
maxInboundStreams?: number;
|
16
21
|
dataChannel?: DataChannelOptions;
|
17
22
|
rtcConfiguration?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>);
|
18
|
-
|
23
|
+
emitter: TypedEventTarget<WebRTCDirectTransportCertificateEvents>;
|
19
24
|
}
|
20
25
|
export interface WebRTCListenerMetrics {
|
21
26
|
listenerEvents: CounterGroup;
|
22
27
|
}
|
23
28
|
export declare class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> implements Listener {
|
24
29
|
private listeningMultiaddr?;
|
25
|
-
private certificate
|
30
|
+
private certificate;
|
26
31
|
private stunServer?;
|
27
32
|
private readonly connections;
|
28
33
|
private readonly log;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAU7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,gBAAgB,CAAA;AAG5E,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAU,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACjK,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,oBAAoB,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC1F,OAAO,EAAE,gBAAgB,CAAC,sCAAsC,CAAC,CAAA;CAClE;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,YAAY,CAAA;CAC7B;AAaD,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,cAAc,CAAE,YAAW,QAAQ;IAC7F,OAAO,CAAC,kBAAkB,CAAC,CAAW;IACtC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAEvC,UAAU,EAAE,8BAA8B,EAAE,IAAI,EAAE,wBAAwB;IA2BjF,MAAM,CAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC3C,OAAO,CAAC,iBAAiB;YA+BX,kBAAkB;IAmDhC,QAAQ,IAAK,SAAS,EAAE;IAYxB,mBAAmB,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IA4B7C,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CA8B9B"}
|
@@ -3,15 +3,12 @@ import { InvalidParametersError, TypedEventEmitter } from '@libp2p/interface';
|
|
3
3
|
import { getThinWaistAddresses } from '@libp2p/utils/get-thin-waist-addresses';
|
4
4
|
import { multiaddr, fromStringTuples } from '@multiformats/multiaddr';
|
5
5
|
import { WebRTCDirect } from '@multiformats/multiaddr-matcher';
|
6
|
-
import { Crypto } from '@peculiar/webcrypto';
|
7
6
|
import getPort from 'get-port';
|
8
7
|
import pWaitFor from 'p-wait-for';
|
9
8
|
import { CODEC_CERTHASH, CODEC_WEBRTC_DIRECT } from '../constants.js';
|
10
9
|
import { connect } from './utils/connect.js';
|
11
|
-
import { generateTransportCertificate } from './utils/generate-certificates.js';
|
12
10
|
import { createDialerRTCPeerConnection } from './utils/get-rtcpeerconnection.js';
|
13
11
|
import { stunListener } from './utils/stun-listener.js';
|
14
|
-
const crypto = new Crypto();
|
15
12
|
let UDP_MUX_LISTENERS = [];
|
16
13
|
export class WebRTCDirectListener extends TypedEventEmitter {
|
17
14
|
listeningMultiaddr;
|
@@ -29,8 +26,8 @@ export class WebRTCDirectListener extends TypedEventEmitter {
|
|
29
26
|
this.components = components;
|
30
27
|
this.connections = new Map();
|
31
28
|
this.log = components.logger.forComponent('libp2p:webrtc-direct:listener');
|
32
|
-
this.certificate = init.certificates?.[0];
|
33
29
|
this.shutdownController = new AbortController();
|
30
|
+
this.certificate = init.certificate;
|
34
31
|
if (components.metrics != null) {
|
35
32
|
this.metrics = {
|
36
33
|
listenerEvents: components.metrics.registerCounterGroup('libp2p_webrtc-direct_listener_events_total', {
|
@@ -39,6 +36,12 @@ export class WebRTCDirectListener extends TypedEventEmitter {
|
|
39
36
|
})
|
40
37
|
};
|
41
38
|
}
|
39
|
+
// inform the transport manager our addresses have changed
|
40
|
+
init.emitter.addEventListener('certificate:renew', evt => {
|
41
|
+
this.log('received new TLS certificate', evt.detail.certhash);
|
42
|
+
this.certificate = evt.detail;
|
43
|
+
this.safeDispatchEvent('listening');
|
44
|
+
});
|
42
45
|
}
|
43
46
|
async listen(ma) {
|
44
47
|
const { host, port, family } = ma.toOptions();
|
@@ -83,20 +86,6 @@ export class WebRTCDirectListener extends TypedEventEmitter {
|
|
83
86
|
isIPv6: family === 6,
|
84
87
|
server: Promise.resolve()
|
85
88
|
.then(async () => {
|
86
|
-
// ensure we have a certificate
|
87
|
-
if (this.certificate == null) {
|
88
|
-
this.log.trace('creating TLS certificate');
|
89
|
-
const keyPair = await crypto.subtle.generateKey({
|
90
|
-
name: 'ECDSA',
|
91
|
-
namedCurve: 'P-256'
|
92
|
-
}, true, ['sign', 'verify']);
|
93
|
-
const certificate = await generateTransportCertificate(keyPair, {
|
94
|
-
days: 365 * 10
|
95
|
-
});
|
96
|
-
if (this.certificate == null) {
|
97
|
-
this.certificate = certificate;
|
98
|
-
}
|
99
|
-
}
|
100
89
|
if (port === 0) {
|
101
90
|
// libjuice doesn't map 0 to a random free port so we have to do it
|
102
91
|
// ourselves
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AA0CvD,IAAI,iBAAiB,GAAmB,EAAE,CAAA;AAE1C,MAAM,OAAO,oBAAqB,SAAQ,iBAAiC;IACjE,kBAAkB,CAAY;IAC9B,WAAW,CAAsB;IACjC,UAAU,CAAa;IACd,WAAW,CAAsC;IACjD,GAAG,CAAQ;IACX,IAAI,CAA0B;IAC9B,UAAU,CAAgC;IAC1C,OAAO,CAAwB;IAC/B,kBAAkB,CAAiB;IAEpD,YAAa,UAA0C,EAAE,IAA8B;QACrF,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAA;QAC1E,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAA;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAEnC,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG;gBACb,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,4CAA4C,EAAE;oBACpG,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,oDAAoD;iBAC3D,CAAC;aACH,CAAA;QACH,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE;YACvD,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC7D,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAA;YAC7B,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,EAAa;QACzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAA;QAE7C,IAAI,YAAsC,CAAA;QAE1C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,yEAAyE;YACzE,wEAAwE;YACxE,qEAAqE;YACrE,WAAW;YACX,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;YAE3D,kDAAkD;YAClD,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7G,MAAM,IAAI,sBAAsB,CAAC,mCAAmC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;YACrF,CAAC;YAED,mCAAmC;YACnC,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChF,MAAM,IAAI,sBAAsB,CAAC,iDAAiD,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;YACnG,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACxD,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;YACzD,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,YAAY,CAAC,MAAM,GAAG,IAAI,CAAA;QAC5B,CAAC;aAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,YAAY,CAAC,MAAM,GAAG,IAAI,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAA;QAC3C,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACrC,CAAC;IAEO,iBAAiB,CAAE,IAAY,EAAE,IAAY,EAAE,MAAa;QAClE,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAC9B,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,MAAM,EAAE,MAAM,KAAK,CAAC;YACpB,MAAM,EAAE,MAAM,KAAK,CAAC;YACpB,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE;iBACtB,IAAI,CAAC,KAAK,IAAyB,EAAE;gBACpC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,mEAAmE;oBACnE,YAAY;oBACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;oBACzC,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;gBACxB,CAAC;gBAED,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;oBAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;oBAEhG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC;yBAC3D,KAAK,CAAC,GAAG,CAAC,EAAE;wBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAA;oBAC/D,CAAC,CAAC;yBACD,OAAO,CAAC,GAAG,EAAE;wBACZ,MAAM,CAAC,KAAK,EAAE,CAAA;oBAChB,CAAC,CAAC,CAAA;gBACN,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC;SACL,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAE,KAAa,EAAE,UAAkB,EAAE,UAAkB,EAAE,MAAmB;QAC1G,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,UAAU,IAAI,KAAK,EAAE,CAAA;QAClD,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE9C,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;QAE9C,4EAA4E;QAC5E,MAAM,CAAC,cAAc,EAAE,CAAA;QAEvB,+FAA+F;QAC/F,cAAc,GAAG,MAAM,6BAA6B,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAEzC,cAAc,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC5D,QAAQ,cAAc,CAAC,eAAe,EAAE,CAAC;gBACvC,KAAK,QAAQ,CAAC;gBACd,KAAK,cAAc,CAAC;gBACpB,KAAK,QAAQ;oBACX,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;oBAC5B,MAAK;gBACP;oBACE,MAAK;YACT,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE;gBACnC,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC9B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;gBAChC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc;gBACpC,MAAM;gBACN,UAAU,EAAE,SAAS,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,QAAQ,UAAU,EAAE,CAAC;gBACzF,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;gBAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAC5B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;aACvC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,EAAE,CAAA;YACtB,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;QAEzC,OAAO,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC3E,OAAO,EAAE,CAAC,WAAW,CAAC,2BAA2B,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,mBAAmB,CAAE,UAAuB;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YAEtB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjC,SAAQ;YACV,CAAC;YAED,oCAAoC;YACpC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,EAAE,CAAA;YAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,mBAAmB,EAAE,CAAC;oBACzC,SAAQ;gBACV,CAAC;gBAED,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,CAAA;gBAE3B,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;oBACjF,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAA;oBAE7E,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;oBAC7B,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,6BAA6B;QAC7B,MAAM,OAAO,CAAC,GAAG,CACf,iBAAiB;aACd,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;aAC3C,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAA;YACpC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACtB,CAAC,CAAC,CACL,CAAA;QAED,uCAAuC;QACvC,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;QAEjF,6BAA6B;QAC7B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,UAAU,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;QAE/B,yEAAyE;QACzE,8DAA8D;QAC9D,MAAM,QAAQ,CAAC,GAAG,EAAE;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;CACF"}
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import { serviceCapabilities, transportSymbol } from '@libp2p/interface';
|
2
|
+
import { X509Certificate } from '@peculiar/x509';
|
3
|
+
import { Key } from 'interface-datastore';
|
2
4
|
import type { DataChannelOptions, TransportCertificate } from '../index.js';
|
3
5
|
import type { WebRTCDialEvents } from '../private-to-private/transport.js';
|
4
|
-
import type { CreateListenerOptions, Transport, Listener, ComponentLogger, Connection, CounterGroup, Metrics, PeerId, DialTransportOptions, PrivateKey, Upgrader } from '@libp2p/interface';
|
6
|
+
import type { CreateListenerOptions, Transport, Listener, ComponentLogger, Connection, CounterGroup, Metrics, PeerId, DialTransportOptions, PrivateKey, Upgrader, Startable } from '@libp2p/interface';
|
5
7
|
import type { TransportManager } from '@libp2p/interface-internal';
|
8
|
+
import type { Keychain } from '@libp2p/keychain';
|
6
9
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
7
|
-
|
8
|
-
* The peer for this transport
|
9
|
-
*/
|
10
|
+
import type { Datastore } from 'interface-datastore';
|
10
11
|
export interface WebRTCDirectTransportComponents {
|
11
12
|
peerId: PeerId;
|
12
13
|
privateKey: PrivateKey;
|
@@ -14,28 +15,83 @@ export interface WebRTCDirectTransportComponents {
|
|
14
15
|
logger: ComponentLogger;
|
15
16
|
transportManager: TransportManager;
|
16
17
|
upgrader: Upgrader;
|
18
|
+
keychain?: Keychain;
|
19
|
+
datastore: Datastore;
|
17
20
|
}
|
18
21
|
export interface WebRTCMetrics {
|
19
22
|
dialerEvents: CounterGroup;
|
20
23
|
}
|
21
24
|
export interface WebRTCTransportDirectInit {
|
25
|
+
/**
|
26
|
+
* The default configuration used by all created RTCPeerConnections
|
27
|
+
*/
|
22
28
|
rtcConfiguration?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>);
|
29
|
+
/**
|
30
|
+
* The default configuration used by all created RTCDataChannels
|
31
|
+
*/
|
23
32
|
dataChannel?: DataChannelOptions;
|
33
|
+
/**
|
34
|
+
* @deprecated use `certificate` instead - this option will be removed in a future release
|
35
|
+
*/
|
24
36
|
certificates?: TransportCertificate[];
|
37
|
+
/**
|
38
|
+
* Use an existing TLS certificate to secure incoming connections or supply
|
39
|
+
* settings to generate one.
|
40
|
+
*
|
41
|
+
* This must be an ECDSA certificate using the P-256 curve.
|
42
|
+
*
|
43
|
+
* From our testing we find that P-256 elliptic curve is supported by Pion,
|
44
|
+
* webrtc-rs, as well as Chromium (P-228 and P-384 was not supported in
|
45
|
+
* Chromium).
|
46
|
+
*/
|
47
|
+
certificate?: TransportCertificate;
|
25
48
|
/**
|
26
49
|
* @deprecated this setting is ignored and will be removed in a future release
|
27
50
|
*/
|
28
51
|
useLibjuice?: boolean;
|
52
|
+
/**
|
53
|
+
* The key the certificate is stored in the datastore under
|
54
|
+
*
|
55
|
+
* @default '/libp2p/webrtc-direct/certificate'
|
56
|
+
*/
|
57
|
+
certificateDatastoreKey?: string;
|
58
|
+
/**
|
59
|
+
* The name the certificate private key is stored in the keychain with
|
60
|
+
*
|
61
|
+
* @default 'webrtc-direct-certificate-private-key'
|
62
|
+
*/
|
63
|
+
certificateKeychainName?: string;
|
64
|
+
/**
|
65
|
+
* Number of ms a certificate should be valid for (defaults to 14 days)
|
66
|
+
*
|
67
|
+
* @default 2_592_000_000
|
68
|
+
*/
|
69
|
+
certificateLifespan?: number;
|
70
|
+
/**
|
71
|
+
* Certificates will be renewed this many ms before expiry (defaults to 1 day)
|
72
|
+
*
|
73
|
+
* @default 86_400_000
|
74
|
+
*/
|
75
|
+
certificateRenewalThreshold?: number;
|
76
|
+
}
|
77
|
+
export interface WebRTCDirectTransportCertificateEvents {
|
78
|
+
'certificate:renew': CustomEvent<TransportCertificate>;
|
29
79
|
}
|
30
|
-
export declare class WebRTCDirectTransport implements Transport {
|
80
|
+
export declare class WebRTCDirectTransport implements Transport, Startable {
|
31
81
|
private readonly log;
|
32
82
|
private readonly metrics?;
|
33
83
|
private readonly components;
|
34
84
|
private readonly init;
|
85
|
+
private certificate?;
|
86
|
+
private privateKey?;
|
87
|
+
private readonly emitter;
|
88
|
+
private renewCertificateTask?;
|
35
89
|
constructor(components: WebRTCDirectTransportComponents, init?: WebRTCTransportDirectInit);
|
36
90
|
readonly [transportSymbol] = true;
|
37
91
|
readonly [Symbol.toStringTag] = "@libp2p/webrtc-direct";
|
38
92
|
readonly [serviceCapabilities]: string[];
|
93
|
+
start(): Promise<void>;
|
94
|
+
stop(): Promise<void>;
|
39
95
|
/**
|
40
96
|
* Dial a given multiaddr
|
41
97
|
*/
|
@@ -56,5 +112,11 @@ export declare class WebRTCDirectTransport implements Transport {
|
|
56
112
|
* Connect to a peer using a multiaddr
|
57
113
|
*/
|
58
114
|
_connect(ma: Multiaddr, options: DialTransportOptions<WebRTCDialEvents>): Promise<Connection>;
|
115
|
+
private getCertificate;
|
116
|
+
private loadOrCreatePrivateKey;
|
117
|
+
private loadOrCreateCertificate;
|
118
|
+
loadCertificate(dsKey: Key, keyPair: CryptoKeyPair): Promise<X509Certificate>;
|
119
|
+
createCertificate(dsKey: Key, keyPair: CryptoKeyPair): Promise<X509Certificate>;
|
120
|
+
private getKeychain;
|
59
121
|
}
|
60
122
|
//# sourceMappingURL=transport.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"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"}
|