@libp2p/webrtc 5.0.26-d8f003e6e → 5.0.27-2e35b6055
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 +16 -21
- package/dist/index.min.js +31 -12
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +2 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +33 -21
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +16 -21
- package/dist/src/index.js.map +1 -1
- package/dist/src/maconn.d.ts +1 -0
- package/dist/src/maconn.d.ts.map +1 -1
- package/dist/src/maconn.js +4 -3
- package/dist/src/maconn.js.map +1 -1
- package/dist/src/muxer.d.ts +1 -0
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +2 -2
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts +1 -0
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js.map +1 -1
- package/dist/src/private-to-public/listener.browser.d.ts +17 -0
- package/dist/src/private-to-public/listener.browser.d.ts.map +1 -0
- package/dist/src/private-to-public/listener.browser.js +13 -0
- package/dist/src/private-to-public/listener.browser.js.map +1 -0
- package/dist/src/private-to-public/listener.d.ts +37 -0
- package/dist/src/private-to-public/listener.d.ts.map +1 -0
- package/dist/src/private-to-public/listener.js +175 -0
- package/dist/src/private-to-public/listener.js.map +1 -0
- package/dist/src/private-to-public/pb/message.d.ts.map +1 -0
- package/dist/src/private-to-public/pb/message.js.map +1 -0
- package/dist/src/private-to-public/transport.d.ts +10 -11
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +28 -155
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/private-to-public/utils/connect.d.ts +27 -0
- package/dist/src/private-to-public/utils/connect.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/connect.js +142 -0
- package/dist/src/private-to-public/utils/connect.js.map +1 -0
- package/dist/src/private-to-public/utils/generate-certificates.browser.d.ts +2 -0
- package/dist/src/private-to-public/utils/generate-certificates.browser.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/generate-certificates.browser.js +4 -0
- package/dist/src/private-to-public/utils/generate-certificates.browser.js.map +1 -0
- package/dist/src/private-to-public/utils/generate-certificates.d.ts +8 -0
- package/dist/src/private-to-public/utils/generate-certificates.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/generate-certificates.js +39 -0
- package/dist/src/private-to-public/utils/generate-certificates.js.map +1 -0
- package/dist/src/private-to-public/utils/generate-noise-prologue.d.ts +7 -0
- package/dist/src/private-to-public/utils/generate-noise-prologue.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/generate-noise-prologue.js +22 -0
- package/dist/src/private-to-public/utils/generate-noise-prologue.js.map +1 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.d.ts +2 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js +20 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js.map +1 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts +19 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.js +86 -0
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.js.map +1 -0
- package/dist/src/private-to-public/utils/sdp.d.ts +36 -0
- package/dist/src/private-to-public/utils/sdp.d.ts.map +1 -0
- package/dist/src/private-to-public/{sdp.js → utils/sdp.js} +72 -57
- package/dist/src/private-to-public/utils/sdp.js.map +1 -0
- package/dist/src/private-to-public/utils/stun-listener.d.ts +15 -0
- package/dist/src/private-to-public/utils/stun-listener.d.ts.map +1 -0
- package/dist/src/private-to-public/utils/stun-listener.js +79 -0
- package/dist/src/private-to-public/utils/stun-listener.js.map +1 -0
- package/dist/src/stream.d.ts +2 -0
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +56 -12
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.d.ts +4 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +7 -1
- package/dist/src/util.js.map +1 -1
- package/dist/src/webrtc/index.d.ts +2 -1
- package/dist/src/webrtc/index.d.ts.map +1 -1
- package/dist/src/webrtc/index.js +1 -1
- package/dist/src/webrtc/index.js.map +1 -1
- package/package.json +22 -11
- package/src/constants.ts +4 -0
- package/src/index.ts +35 -21
- package/src/maconn.ts +5 -3
- package/src/muxer.ts +3 -2
- package/src/private-to-private/util.ts +1 -0
- package/src/private-to-public/listener.browser.ts +28 -0
- package/src/private-to-public/listener.ts +233 -0
- package/src/private-to-public/transport.ts +39 -182
- package/src/private-to-public/utils/connect.ts +192 -0
- package/src/private-to-public/utils/generate-certificates.browser.ts +3 -0
- package/src/private-to-public/utils/generate-certificates.ts +51 -0
- package/src/private-to-public/utils/generate-noise-prologue.ts +26 -0
- package/src/private-to-public/utils/get-rtcpeerconnection.browser.ts +22 -0
- package/src/private-to-public/utils/get-rtcpeerconnection.ts +108 -0
- package/src/private-to-public/utils/sdp.ts +174 -0
- package/src/private-to-public/utils/stun-listener.ts +104 -0
- package/src/stream.ts +68 -15
- package/src/util.ts +11 -1
- package/src/webrtc/index.ts +2 -1
- package/dist/src/pb/message.d.ts.map +0 -1
- package/dist/src/pb/message.js.map +0 -1
- package/dist/src/private-to-public/options.d.ts +0 -6
- package/dist/src/private-to-public/options.d.ts.map +0 -1
- package/dist/src/private-to-public/options.js +0 -2
- package/dist/src/private-to-public/options.js.map +0 -1
- package/dist/src/private-to-public/sdp.d.ts +0 -31
- package/dist/src/private-to-public/sdp.d.ts.map +0 -1
- package/dist/src/private-to-public/sdp.js.map +0 -1
- package/dist/src/private-to-public/util.d.ts +0 -2
- package/dist/src/private-to-public/util.d.ts.map +0 -1
- package/dist/src/private-to-public/util.js +0 -3
- package/dist/src/private-to-public/util.js.map +0 -1
- package/src/private-to-public/options.ts +0 -4
- package/src/private-to-public/sdp.ts +0 -159
- package/src/private-to-public/util.ts +0 -2
- /package/dist/src/{pb → private-to-public/pb}/message.d.ts +0 -0
- /package/dist/src/{pb → private-to-public/pb}/message.js +0 -0
- /package/src/{pb → private-to-public/pb}/message.proto +0 -0
- /package/src/{pb → private-to-public/pb}/message.ts +0 -0
package/src/stream.ts
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
import { StreamStateError, TimeoutError } from '@libp2p/interface'
|
2
2
|
import { AbstractStream, type AbstractStreamInit } from '@libp2p/utils/abstract-stream'
|
3
|
+
import { anySignal } from 'any-signal'
|
3
4
|
import * as lengthPrefixed from 'it-length-prefixed'
|
4
5
|
import { type Pushable, pushable } from 'it-pushable'
|
5
6
|
import pDefer from 'p-defer'
|
6
|
-
import { pEvent } from 'p-event'
|
7
7
|
import pTimeout from 'p-timeout'
|
8
|
+
import { raceEvent } from 'race-event'
|
8
9
|
import { raceSignal } from 'race-signal'
|
9
10
|
import { encodingLength } from 'uint8-varint'
|
10
11
|
import { Uint8ArrayList } from 'uint8arraylist'
|
11
|
-
import { Message } from './pb/message.js'
|
12
|
+
import { Message } from './private-to-public/pb/message.js'
|
12
13
|
import type { DataChannelOptions } from './index.js'
|
14
|
+
import type { RTCDataChannel } from './webrtc/index.js'
|
13
15
|
import type { AbortOptions, ComponentLogger, Direction } from '@libp2p/interface'
|
14
16
|
import type { DeferredPromise } from 'p-defer'
|
15
17
|
|
@@ -111,6 +113,7 @@ export class WebRTCStream extends AbstractStream {
|
|
111
113
|
private readonly receiveFinAck: DeferredPromise<void>
|
112
114
|
private readonly finAckTimeout: number
|
113
115
|
private readonly openTimeout: number
|
116
|
+
private readonly closeController: AbortController
|
114
117
|
|
115
118
|
constructor (init: WebRTCStreamInit) {
|
116
119
|
// override onEnd to send/receive FIN_ACK before closing the stream
|
@@ -135,6 +138,7 @@ export class WebRTCStream extends AbstractStream {
|
|
135
138
|
.then(() => {
|
136
139
|
// stop processing incoming messages
|
137
140
|
this.incomingData.end()
|
141
|
+
this.channel.close()
|
138
142
|
|
139
143
|
// final cleanup
|
140
144
|
originalOnEnd?.(err)
|
@@ -155,6 +159,7 @@ export class WebRTCStream extends AbstractStream {
|
|
155
159
|
this.receiveFinAck = pDefer()
|
156
160
|
this.finAckTimeout = init.closeTimeout ?? FIN_ACK_TIMEOUT
|
157
161
|
this.openTimeout = init.openTimeout ?? OPEN_TIMEOUT
|
162
|
+
this.closeController = new AbortController()
|
158
163
|
|
159
164
|
// set up initial state
|
160
165
|
switch (this.channel.readyState) {
|
@@ -183,6 +188,11 @@ export class WebRTCStream extends AbstractStream {
|
|
183
188
|
}
|
184
189
|
|
185
190
|
this.channel.onclose = (_evt) => {
|
191
|
+
this.log.trace('received onclose event')
|
192
|
+
|
193
|
+
// stop any in-progress writes
|
194
|
+
this.closeController.abort()
|
195
|
+
|
186
196
|
// if the channel has closed we'll never receive a FIN_ACK so resolve the
|
187
197
|
// promise so we don't try to wait later
|
188
198
|
this.receiveFinAck.resolve()
|
@@ -193,6 +203,11 @@ export class WebRTCStream extends AbstractStream {
|
|
193
203
|
}
|
194
204
|
|
195
205
|
this.channel.onerror = (evt) => {
|
206
|
+
this.log.trace('received onerror event')
|
207
|
+
|
208
|
+
// stop any in-progress writes
|
209
|
+
this.closeController.abort()
|
210
|
+
|
196
211
|
const err = (evt as RTCErrorEvent).error
|
197
212
|
this.abort(err)
|
198
213
|
}
|
@@ -230,34 +245,59 @@ export class WebRTCStream extends AbstractStream {
|
|
230
245
|
}
|
231
246
|
|
232
247
|
async _sendMessage (data: Uint8ArrayList, checkBuffer: boolean = true): Promise<void> {
|
248
|
+
if (this.channel.readyState === 'closed' || this.channel.readyState === 'closing') {
|
249
|
+
throw new StreamStateError(`Invalid datachannel state - ${this.channel.readyState}`)
|
250
|
+
}
|
251
|
+
|
252
|
+
if (this.channel.readyState !== 'open') {
|
253
|
+
const timeout = AbortSignal.timeout(this.openTimeout)
|
254
|
+
const signal = anySignal([
|
255
|
+
this.closeController.signal,
|
256
|
+
timeout
|
257
|
+
])
|
258
|
+
|
259
|
+
try {
|
260
|
+
this.log('channel state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState)
|
261
|
+
await raceEvent(this.channel, 'open', signal)
|
262
|
+
} finally {
|
263
|
+
signal.clear()
|
264
|
+
}
|
265
|
+
|
266
|
+
this.log('channel state is now "%s", sending data', this.channel.readyState)
|
267
|
+
}
|
268
|
+
|
233
269
|
if (checkBuffer && this.channel.bufferedAmount > this.maxBufferedAmount) {
|
270
|
+
const timeout = AbortSignal.timeout(this.bufferedAmountLowEventTimeout)
|
271
|
+
const signal = anySignal([
|
272
|
+
this.closeController.signal,
|
273
|
+
timeout
|
274
|
+
])
|
275
|
+
|
234
276
|
try {
|
235
277
|
this.log('channel buffer is %d, wait for "bufferedamountlow" event', this.channel.bufferedAmount)
|
236
|
-
await
|
278
|
+
await raceEvent(this.channel, 'bufferedamountlow', signal)
|
237
279
|
} catch (err: any) {
|
238
|
-
if (
|
280
|
+
if (timeout.aborted) {
|
239
281
|
throw new TimeoutError(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`)
|
240
282
|
}
|
241
283
|
|
242
284
|
throw err
|
285
|
+
} finally {
|
286
|
+
signal.clear()
|
243
287
|
}
|
244
288
|
}
|
245
289
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
this.log('channel state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState)
|
252
|
-
await pEvent(this.channel, 'open', { timeout: this.openTimeout })
|
253
|
-
this.log('channel state is now "%s", sending data', this.channel.readyState)
|
290
|
+
try {
|
291
|
+
// send message without copying data
|
292
|
+
this.channel.send(data.subarray())
|
293
|
+
} catch (err: any) {
|
294
|
+
this.log.error('error while sending message', err)
|
254
295
|
}
|
255
|
-
|
256
|
-
// send message without copying data
|
257
|
-
this.channel.send(data.subarray())
|
258
296
|
}
|
259
297
|
|
260
298
|
async sendData (data: Uint8ArrayList): Promise<void> {
|
299
|
+
this.log.trace('-> will send %d bytes', data.byteLength)
|
300
|
+
|
261
301
|
// sending messages is an async operation so use a copy of the list as it
|
262
302
|
// may be changed beneath us
|
263
303
|
data = data.sublist()
|
@@ -267,10 +307,14 @@ export class WebRTCStream extends AbstractStream {
|
|
267
307
|
const buf = data.subarray(0, toSend)
|
268
308
|
const msgbuf = Message.encode({ message: buf })
|
269
309
|
const sendbuf = lengthPrefixed.encode.single(msgbuf)
|
310
|
+
this.log.trace('-> sending message %s', this.channel.readyState)
|
270
311
|
await this._sendMessage(sendbuf)
|
312
|
+
this.log.trace('-> sent message %s', this.channel.readyState)
|
271
313
|
|
272
314
|
data.consume(toSend)
|
273
315
|
}
|
316
|
+
|
317
|
+
this.log.trace('-> sent data %s', this.channel.readyState)
|
274
318
|
}
|
275
319
|
|
276
320
|
async sendReset (): Promise<void> {
|
@@ -282,6 +326,11 @@ export class WebRTCStream extends AbstractStream {
|
|
282
326
|
}
|
283
327
|
|
284
328
|
async sendCloseWrite (options: AbortOptions): Promise<void> {
|
329
|
+
if (this.channel.readyState !== 'open') {
|
330
|
+
this.receiveFinAck.resolve()
|
331
|
+
return
|
332
|
+
}
|
333
|
+
|
285
334
|
const sent = await this._sendFlag(Message.Flag.FIN)
|
286
335
|
|
287
336
|
if (sent) {
|
@@ -303,6 +352,10 @@ export class WebRTCStream extends AbstractStream {
|
|
303
352
|
}
|
304
353
|
|
305
354
|
async sendCloseRead (): Promise<void> {
|
355
|
+
if (this.channel.readyState !== 'open') {
|
356
|
+
return
|
357
|
+
}
|
358
|
+
|
306
359
|
await this._sendFlag(Message.Flag.STOP_SENDING)
|
307
360
|
}
|
308
361
|
|
package/src/util.ts
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
import { detect } from 'detect-browser'
|
2
2
|
import pDefer from 'p-defer'
|
3
3
|
import pTimeout from 'p-timeout'
|
4
|
-
import { DEFAULT_ICE_SERVERS } from './constants.js'
|
4
|
+
import { DEFAULT_ICE_SERVERS, UFRAG_ALPHABET, UFRAG_PREFIX } from './constants.js'
|
5
|
+
import type { RTCDataChannel } from './webrtc/index.js'
|
6
|
+
import type { PeerConnection } from '@ipshipyard/node-datachannel'
|
5
7
|
import type { LoggerOptions } from '@libp2p/interface'
|
6
8
|
|
7
9
|
const browser = detect()
|
@@ -66,6 +68,10 @@ export interface AbortPromiseOptions {
|
|
66
68
|
message?: string
|
67
69
|
}
|
68
70
|
|
71
|
+
export function isPeerConnection (obj: any): obj is PeerConnection {
|
72
|
+
return typeof obj.state === 'function'
|
73
|
+
}
|
74
|
+
|
69
75
|
export async function getRtcConfiguration (config?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>)): Promise<RTCConfiguration> {
|
70
76
|
config = config ?? {}
|
71
77
|
|
@@ -81,3 +87,7 @@ export async function getRtcConfiguration (config?: RTCConfiguration | (() => RT
|
|
81
87
|
|
82
88
|
return config
|
83
89
|
}
|
90
|
+
|
91
|
+
export const genUfrag = (len: number = 32): string => {
|
92
|
+
return UFRAG_PREFIX + [...Array(len)].map(() => UFRAG_ALPHABET.at(Math.floor(Math.random() * UFRAG_ALPHABET.length))).join('')
|
93
|
+
}
|
package/src/webrtc/index.ts
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
export { RTCSessionDescription, RTCIceCandidate, RTCPeerConnection } from 'node-datachannel/polyfill'
|
1
|
+
export { RTCSessionDescription, RTCIceCandidate, RTCPeerConnection } from '@ipshipyard/node-datachannel/polyfill'
|
2
|
+
export type { RTCDataChannel, RTCDataChannelEvent } from '@ipshipyard/node-datachannel/polyfill'
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAiB,KAAK,aAAa,EAAuC,MAAM,iBAAiB,CAAA;AACpH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,yBAAiB,OAAO,CAAC;IACvB,KAAY,IAAI;QACd,GAAG,QAAQ;QACX,YAAY,iBAAiB;QAC7B,KAAK,UAAU;QACf,OAAO,YAAY;KACpB;IASD,UAAiB,IAAI,CAAC;QACb,MAAM,KAAK,QAAO,MAAM,IAAI,CAElC,CAAA;KACF;IAIM,MAAM,KAAK,QAAO,MAAM,OAAO,CAiDrC,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,OAAO,CAAC,KAAG,UAE9C,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,SAAS,cAAc,OAAO,CAAC,KAAG,OAExF,CAAA;CACF"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +0,0 @@
|
|
1
|
-
import type { CreateListenerOptions, DialTransportOptions } from '@libp2p/interface';
|
2
|
-
export interface WebRTCListenerOptions extends CreateListenerOptions {
|
3
|
-
}
|
4
|
-
export interface WebRTCDialOptions extends DialTransportOptions {
|
5
|
-
}
|
6
|
-
//# sourceMappingURL=options.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAEpF,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;CAAG;AACvE,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;CAAG"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/private-to-public/options.ts"],"names":[],"mappings":""}
|
@@ -1,31 +0,0 @@
|
|
1
|
-
import { type Multiaddr } from '@multiformats/multiaddr';
|
2
|
-
import type { LoggerOptions } from '@libp2p/interface';
|
3
|
-
import type { MultihashDigest } from 'multiformats/hashes/interface';
|
4
|
-
/**
|
5
|
-
* Get base2 | identity decoders
|
6
|
-
*/
|
7
|
-
export declare const mbdecoder: any;
|
8
|
-
export declare function getLocalFingerprint(pc: RTCPeerConnection, options: LoggerOptions): string | undefined;
|
9
|
-
export declare function getFingerprintFromSdp(sdp: string): string | undefined;
|
10
|
-
export declare function certhash(ma: Multiaddr): string;
|
11
|
-
/**
|
12
|
-
* Convert a certhash into a multihash
|
13
|
-
*/
|
14
|
-
export declare function decodeCerthash(certhash: string): MultihashDigest;
|
15
|
-
/**
|
16
|
-
* Extract the fingerprint from a multiaddr
|
17
|
-
*/
|
18
|
-
export declare function ma2Fingerprint(ma: Multiaddr): string[];
|
19
|
-
/**
|
20
|
-
* Normalize the hash name from a given multihash has name
|
21
|
-
*/
|
22
|
-
export declare function toSupportedHashFunction(code: number): 'SHA-1' | 'SHA-256' | 'SHA-512';
|
23
|
-
/**
|
24
|
-
* Create an answer SDP from a multiaddr
|
25
|
-
*/
|
26
|
-
export declare function fromMultiAddr(ma: Multiaddr, ufrag: string): RTCSessionDescriptionInit;
|
27
|
-
/**
|
28
|
-
* Replace (munge) the ufrag and password values in a SDP
|
29
|
-
*/
|
30
|
-
export declare function munge(desc: RTCSessionDescriptionInit, ufrag: string): RTCSessionDescriptionInit;
|
31
|
-
//# sourceMappingURL=sdp.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"sdp.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/sdp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAKxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE;;GAEG;AAEH,eAAO,MAAM,SAAS,EAAE,GAAwE,CAAA;AAEhG,wBAAgB,mBAAmB,CAAE,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAwBtG;AAGD,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGtE;AAgBD,wBAAgB,QAAQ,CAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAS/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAEjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAE,EAAE,EAAE,SAAS,GAAG,MAAM,EAAE,CAWvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAWtF;AA2BD;;GAEG;AACH,wBAAgB,aAAa,CAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAKtF;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAShG"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"sdp.js","sourceRoot":"","sources":["../../../src/private-to-public/sdp.ts"],"names":[],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/util.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,QAAQ,QAAS,MAAM,KAAG,MAAoG,CAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-public/util.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;AAC9F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA"}
|
@@ -1,159 +0,0 @@
|
|
1
|
-
import { InvalidParametersError } from '@libp2p/interface'
|
2
|
-
import { type Multiaddr } from '@multiformats/multiaddr'
|
3
|
-
import { bases, digest } from 'multiformats/basics'
|
4
|
-
import { InvalidFingerprintError, UnsupportedHashAlgorithmError } from '../error.js'
|
5
|
-
import { MAX_MESSAGE_SIZE } from '../stream.js'
|
6
|
-
import { CERTHASH_CODE } from './transport.js'
|
7
|
-
import type { LoggerOptions } from '@libp2p/interface'
|
8
|
-
import type { MultihashDigest } from 'multiformats/hashes/interface'
|
9
|
-
|
10
|
-
/**
|
11
|
-
* Get base2 | identity decoders
|
12
|
-
*/
|
13
|
-
// @ts-expect-error - Not easy to combine these types.
|
14
|
-
export const mbdecoder: any = Object.values(bases).map(b => b.decoder).reduce((d, b) => d.or(b))
|
15
|
-
|
16
|
-
export function getLocalFingerprint (pc: RTCPeerConnection, options: LoggerOptions): string | undefined {
|
17
|
-
// try to fetch fingerprint from local certificate
|
18
|
-
const localCert = pc.getConfiguration().certificates?.at(0)
|
19
|
-
if (localCert?.getFingerprints == null) {
|
20
|
-
options.log.trace('fetching fingerprint from local SDP')
|
21
|
-
const localDescription = pc.localDescription
|
22
|
-
if (localDescription == null) {
|
23
|
-
return undefined
|
24
|
-
}
|
25
|
-
return getFingerprintFromSdp(localDescription.sdp)
|
26
|
-
}
|
27
|
-
|
28
|
-
options.log.trace('fetching fingerprint from local certificate')
|
29
|
-
|
30
|
-
if (localCert.getFingerprints().length === 0) {
|
31
|
-
return undefined
|
32
|
-
}
|
33
|
-
|
34
|
-
const fingerprint = localCert.getFingerprints()[0].value
|
35
|
-
if (fingerprint == null) {
|
36
|
-
throw new InvalidFingerprintError('', 'no fingerprint on local certificate')
|
37
|
-
}
|
38
|
-
|
39
|
-
return fingerprint
|
40
|
-
}
|
41
|
-
|
42
|
-
const fingerprintRegex = /^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m
|
43
|
-
export function getFingerprintFromSdp (sdp: string): string | undefined {
|
44
|
-
const searchResult = sdp.match(fingerprintRegex)
|
45
|
-
return searchResult?.groups?.fingerprint
|
46
|
-
}
|
47
|
-
|
48
|
-
/**
|
49
|
-
* Get base2 | identity decoders
|
50
|
-
*/
|
51
|
-
function ipv (ma: Multiaddr): string {
|
52
|
-
for (const proto of ma.protoNames()) {
|
53
|
-
if (proto.startsWith('ip')) {
|
54
|
-
return proto.toUpperCase()
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
58
|
-
return 'IP6'
|
59
|
-
}
|
60
|
-
|
61
|
-
// Extract the certhash from a multiaddr
|
62
|
-
export function certhash (ma: Multiaddr): string {
|
63
|
-
const tups = ma.stringTuples()
|
64
|
-
const certhash = tups.filter((tup) => tup[0] === CERTHASH_CODE).map((tup) => tup[1])[0]
|
65
|
-
|
66
|
-
if (certhash === undefined || certhash === '') {
|
67
|
-
throw new InvalidParametersError(`Couldn't find a certhash component of multiaddr: ${ma.toString()}`)
|
68
|
-
}
|
69
|
-
|
70
|
-
return certhash
|
71
|
-
}
|
72
|
-
|
73
|
-
/**
|
74
|
-
* Convert a certhash into a multihash
|
75
|
-
*/
|
76
|
-
export function decodeCerthash (certhash: string): MultihashDigest {
|
77
|
-
return digest.decode(mbdecoder.decode(certhash))
|
78
|
-
}
|
79
|
-
|
80
|
-
/**
|
81
|
-
* Extract the fingerprint from a multiaddr
|
82
|
-
*/
|
83
|
-
export function ma2Fingerprint (ma: Multiaddr): string[] {
|
84
|
-
const mhdecoded = decodeCerthash(certhash(ma))
|
85
|
-
const prefix = toSupportedHashFunction(mhdecoded.code)
|
86
|
-
const fingerprint = mhdecoded.digest.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '')
|
87
|
-
const sdp = fingerprint.match(/.{1,2}/g)
|
88
|
-
|
89
|
-
if (sdp == null) {
|
90
|
-
throw new InvalidFingerprintError(fingerprint, ma.toString())
|
91
|
-
}
|
92
|
-
|
93
|
-
return [`${prefix} ${sdp.join(':').toUpperCase()}`, fingerprint]
|
94
|
-
}
|
95
|
-
|
96
|
-
/**
|
97
|
-
* Normalize the hash name from a given multihash has name
|
98
|
-
*/
|
99
|
-
export function toSupportedHashFunction (code: number): 'SHA-1' | 'SHA-256' | 'SHA-512' {
|
100
|
-
switch (code) {
|
101
|
-
case 0x11:
|
102
|
-
return 'SHA-1'
|
103
|
-
case 0x12:
|
104
|
-
return 'SHA-256'
|
105
|
-
case 0x13:
|
106
|
-
return 'SHA-512'
|
107
|
-
default:
|
108
|
-
throw new UnsupportedHashAlgorithmError(code)
|
109
|
-
}
|
110
|
-
}
|
111
|
-
|
112
|
-
/**
|
113
|
-
* Convert a multiaddr into a SDP
|
114
|
-
*/
|
115
|
-
function ma2sdp (ma: Multiaddr, ufrag: string): string {
|
116
|
-
const { host, port } = ma.toOptions()
|
117
|
-
const ipVersion = ipv(ma)
|
118
|
-
const [CERTFP] = ma2Fingerprint(ma)
|
119
|
-
|
120
|
-
return `v=0
|
121
|
-
o=- 0 0 IN ${ipVersion} ${host}
|
122
|
-
s=-
|
123
|
-
c=IN ${ipVersion} ${host}
|
124
|
-
t=0 0
|
125
|
-
a=ice-lite
|
126
|
-
m=application ${port} UDP/DTLS/SCTP webrtc-datachannel
|
127
|
-
a=mid:0
|
128
|
-
a=setup:passive
|
129
|
-
a=ice-ufrag:${ufrag}
|
130
|
-
a=ice-pwd:${ufrag}
|
131
|
-
a=fingerprint:${CERTFP}
|
132
|
-
a=sctp-port:5000
|
133
|
-
a=max-message-size:${MAX_MESSAGE_SIZE}
|
134
|
-
a=candidate:1467250027 1 UDP 1467250027 ${host} ${port} typ host\r\n`
|
135
|
-
}
|
136
|
-
|
137
|
-
/**
|
138
|
-
* Create an answer SDP from a multiaddr
|
139
|
-
*/
|
140
|
-
export function fromMultiAddr (ma: Multiaddr, ufrag: string): RTCSessionDescriptionInit {
|
141
|
-
return {
|
142
|
-
type: 'answer',
|
143
|
-
sdp: ma2sdp(ma, ufrag)
|
144
|
-
}
|
145
|
-
}
|
146
|
-
|
147
|
-
/**
|
148
|
-
* Replace (munge) the ufrag and password values in a SDP
|
149
|
-
*/
|
150
|
-
export function munge (desc: RTCSessionDescriptionInit, ufrag: string): RTCSessionDescriptionInit {
|
151
|
-
if (desc.sdp === undefined) {
|
152
|
-
throw new InvalidParametersError("Can't munge a missing SDP")
|
153
|
-
}
|
154
|
-
|
155
|
-
desc.sdp = desc.sdp
|
156
|
-
.replace(/\na=ice-ufrag:[^\n]*\n/, '\na=ice-ufrag:' + ufrag + '\n')
|
157
|
-
.replace(/\na=ice-pwd:[^\n]*\n/, '\na=ice-pwd:' + ufrag + '\n')
|
158
|
-
return desc
|
159
|
-
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|