@libp2p/webrtc 2.0.10 → 3.0.0-fdd80820

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.
Files changed (52) hide show
  1. package/README.md +7 -2
  2. package/dist/index.min.js +18 -18
  3. package/dist/src/error.d.ts +2 -2
  4. package/dist/src/error.d.ts.map +1 -1
  5. package/dist/src/error.js +1 -1
  6. package/dist/src/error.js.map +1 -1
  7. package/dist/src/index.d.ts +1 -1
  8. package/dist/src/maconn.d.ts +5 -4
  9. package/dist/src/maconn.d.ts.map +1 -1
  10. package/dist/src/maconn.js +8 -5
  11. package/dist/src/maconn.js.map +1 -1
  12. package/dist/src/muxer.d.ts +10 -5
  13. package/dist/src/muxer.d.ts.map +1 -1
  14. package/dist/src/muxer.js +6 -2
  15. package/dist/src/muxer.js.map +1 -1
  16. package/dist/src/private-to-private/handler.d.ts +3 -3
  17. package/dist/src/private-to-private/handler.d.ts.map +1 -1
  18. package/dist/src/private-to-private/handler.js +10 -7
  19. package/dist/src/private-to-private/handler.js.map +1 -1
  20. package/dist/src/private-to-private/listener.d.ts +4 -3
  21. package/dist/src/private-to-private/listener.d.ts.map +1 -1
  22. package/dist/src/private-to-private/listener.js +1 -1
  23. package/dist/src/private-to-private/listener.js.map +1 -1
  24. package/dist/src/private-to-private/transport.d.ts +6 -5
  25. package/dist/src/private-to-private/transport.d.ts.map +1 -1
  26. package/dist/src/private-to-private/transport.js +11 -6
  27. package/dist/src/private-to-private/transport.js.map +1 -1
  28. package/dist/src/private-to-public/options.d.ts +1 -1
  29. package/dist/src/private-to-public/sdp.js +1 -1
  30. package/dist/src/private-to-public/transport.d.ts +4 -4
  31. package/dist/src/private-to-public/transport.d.ts.map +1 -1
  32. package/dist/src/private-to-public/transport.js +1 -1
  33. package/dist/src/private-to-public/transport.js.map +1 -1
  34. package/dist/src/private-to-public/util.d.ts.map +1 -1
  35. package/dist/src/private-to-public/util.js.map +1 -1
  36. package/dist/src/stream.d.ts +34 -3
  37. package/dist/src/stream.d.ts.map +1 -1
  38. package/dist/src/stream.js +24 -14
  39. package/dist/src/stream.js.map +1 -1
  40. package/package.json +24 -121
  41. package/src/error.ts +2 -2
  42. package/src/index.ts +1 -1
  43. package/src/maconn.ts +13 -8
  44. package/src/muxer.ts +11 -5
  45. package/src/private-to-private/handler.ts +12 -9
  46. package/src/private-to-private/listener.ts +4 -3
  47. package/src/private-to-private/transport.ts +18 -12
  48. package/src/private-to-public/options.ts +1 -1
  49. package/src/private-to-public/sdp.ts +1 -1
  50. package/src/private-to-public/transport.ts +4 -4
  51. package/src/private-to-public/util.ts +0 -1
  52. package/src/stream.ts +29 -16
@@ -1,5 +1,5 @@
1
- import { AbstractStream } from '@libp2p/interface-stream-muxer/stream';
2
- import { CodeError } from '@libp2p/interfaces/errors';
1
+ import { CodeError } from '@libp2p/interface/errors';
2
+ import { AbstractStream } from '@libp2p/interface/stream-muxer/stream';
3
3
  import { logger } from '@libp2p/logger';
4
4
  import * as lengthPrefixed from 'it-length-prefixed';
5
5
  import { pushable } from 'it-pushable';
@@ -15,7 +15,7 @@ const MAX_BUFFERED_AMOUNT = 16 * 1024 * 1024;
15
15
  const BUFFERED_AMOUNT_LOW_TIMEOUT = 30 * 1000;
16
16
  // protobuf field definition overhead
17
17
  const PROTOBUF_OVERHEAD = 3;
18
- class WebRTCStream extends AbstractStream {
18
+ export class WebRTCStream extends AbstractStream {
19
19
  /**
20
20
  * The data channel used to send and receive data
21
21
  */
@@ -30,6 +30,7 @@ class WebRTCStream extends AbstractStream {
30
30
  */
31
31
  incomingData;
32
32
  messageQueue;
33
+ maxDataSize;
33
34
  constructor(init) {
34
35
  super(init);
35
36
  this.channel = init.channel;
@@ -41,14 +42,15 @@ class WebRTCStream extends AbstractStream {
41
42
  maxBufferedAmount: init.dataChannelOptions?.maxBufferedAmount ?? MAX_BUFFERED_AMOUNT,
42
43
  maxMessageSize: init.dataChannelOptions?.maxMessageSize ?? MAX_MESSAGE_SIZE
43
44
  };
45
+ this.maxDataSize = init.maxDataSize;
44
46
  // set up initial state
45
47
  switch (this.channel.readyState) {
46
48
  case 'open':
47
49
  break;
48
50
  case 'closed':
49
51
  case 'closing':
50
- if (this.stat.timeline.close === undefined || this.stat.timeline.close === 0) {
51
- this.stat.timeline.close = Date.now();
52
+ if (this.timeline.close === undefined || this.timeline.close === 0) {
53
+ this.timeline.close = Date.now();
52
54
  }
53
55
  break;
54
56
  case 'connecting':
@@ -60,7 +62,7 @@ class WebRTCStream extends AbstractStream {
60
62
  }
61
63
  // handle RTCDataChannel events
62
64
  this.channel.onopen = (_evt) => {
63
- this.stat.timeline.open = new Date().getTime();
65
+ this.timeline.open = new Date().getTime();
64
66
  if (this.messageQueue != null) {
65
67
  // send any queued messages
66
68
  this._sendMessage(this.messageQueue)
@@ -71,7 +73,9 @@ class WebRTCStream extends AbstractStream {
71
73
  }
72
74
  };
73
75
  this.channel.onclose = (_evt) => {
74
- this.close();
76
+ void this.close().catch(err => {
77
+ log.error('error closing stream after channel closed', err);
78
+ });
75
79
  };
76
80
  this.channel.onerror = (evt) => {
77
81
  const err = evt.error;
@@ -109,7 +113,6 @@ class WebRTCStream extends AbstractStream {
109
113
  }
110
114
  catch (err) {
111
115
  if (err instanceof TimeoutError) {
112
- this.abort(err);
113
116
  throw new Error('Timed out waiting for DataChannel buffer to clear');
114
117
  }
115
118
  throw err;
@@ -137,9 +140,15 @@ class WebRTCStream extends AbstractStream {
137
140
  }
138
141
  }
139
142
  async sendData(data) {
140
- const msgbuf = Message.encode({ message: data.subarray() });
141
- const sendbuf = lengthPrefixed.encode.single(msgbuf);
142
- await this._sendMessage(sendbuf);
143
+ data = data.sublist();
144
+ while (data.byteLength > 0) {
145
+ const toSend = Math.min(data.byteLength, this.maxDataSize);
146
+ const buf = data.subarray(0, toSend);
147
+ const msgbuf = Message.encode({ message: buf });
148
+ const sendbuf = lengthPrefixed.encode.single(msgbuf);
149
+ await this._sendMessage(sendbuf);
150
+ data.consume(toSend);
151
+ }
143
152
  }
144
153
  async sendReset() {
145
154
  await this._sendFlag(Message.Flag.RESET);
@@ -159,7 +168,7 @@ class WebRTCStream extends AbstractStream {
159
168
  if (message.flag === Message.Flag.FIN) {
160
169
  // We should expect no more data from the remote, stop reading
161
170
  this.incomingData.end();
162
- this.closeRead();
171
+ this.remoteCloseWrite();
163
172
  }
164
173
  if (message.flag === Message.Flag.RESET) {
165
174
  // Stop reading and writing to the stream immediately
@@ -167,7 +176,7 @@ class WebRTCStream extends AbstractStream {
167
176
  }
168
177
  if (message.flag === Message.Flag.STOP_SENDING) {
169
178
  // The remote has stopped reading
170
- this.closeWrite();
179
+ this.remoteCloseRead();
171
180
  }
172
181
  }
173
182
  return message.message;
@@ -187,7 +196,8 @@ export function createStream(options) {
187
196
  maxDataSize: (dataChannelOptions?.maxMessageSize ?? MAX_MESSAGE_SIZE) - PROTOBUF_OVERHEAD,
188
197
  dataChannelOptions,
189
198
  onEnd,
190
- channel
199
+ channel,
200
+ log: logger(`libp2p:mplex:stream:${direction}:${channel.id}`)
191
201
  });
192
202
  }
193
203
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,20 +1,16 @@
1
1
  {
2
2
  "name": "@libp2p/webrtc",
3
- "version": "2.0.10",
3
+ "version": "3.0.0-fdd80820",
4
4
  "description": "A libp2p transport using WebRTC connections",
5
5
  "author": "",
6
6
  "license": "Apache-2.0 OR MIT",
7
- "homepage": "https://github.com/libp2p/js-libp2p-webrtc#readme",
7
+ "homepage": "https://github.com/libp2p/js-libp2p/tree/master/packages/transport-webrtc#readme",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "git+https://github.com/libp2p/js-libp2p-webrtc.git"
10
+ "url": "git+https://github.com/libp2p/js-libp2p.git"
11
11
  },
12
12
  "bugs": {
13
- "url": "https://github.com/libp2p/js-libp2p-webrtc/issues"
14
- },
15
- "engines": {
16
- "node": ">=18.0.0",
17
- "npm": ">=8.6.0"
13
+ "url": "https://github.com/libp2p/js-libp2p/issues"
18
14
  },
19
15
  "type": "module",
20
16
  "types": "./dist/src/index.d.ts",
@@ -22,8 +18,7 @@
22
18
  "src",
23
19
  "dist",
24
20
  "!dist/test",
25
- "!**/*.tsbuildinfo",
26
- "proto_ts"
21
+ "!**/*.tsbuildinfo"
27
22
  ],
28
23
  "exports": {
29
24
  ".": {
@@ -37,91 +32,6 @@
37
32
  "sourceType": "module"
38
33
  }
39
34
  },
40
- "release": {
41
- "branches": [
42
- "main"
43
- ],
44
- "plugins": [
45
- [
46
- "@semantic-release/commit-analyzer",
47
- {
48
- "preset": "conventionalcommits",
49
- "releaseRules": [
50
- {
51
- "breaking": true,
52
- "release": "major"
53
- },
54
- {
55
- "revert": true,
56
- "release": "patch"
57
- },
58
- {
59
- "type": "feat",
60
- "release": "minor"
61
- },
62
- {
63
- "type": "fix",
64
- "release": "patch"
65
- },
66
- {
67
- "type": "docs",
68
- "release": "patch"
69
- },
70
- {
71
- "type": "test",
72
- "release": "patch"
73
- },
74
- {
75
- "type": "deps",
76
- "release": "patch"
77
- },
78
- {
79
- "scope": "no-release",
80
- "release": false
81
- }
82
- ]
83
- }
84
- ],
85
- [
86
- "@semantic-release/release-notes-generator",
87
- {
88
- "preset": "conventionalcommits",
89
- "presetConfig": {
90
- "types": [
91
- {
92
- "type": "feat",
93
- "section": "Features"
94
- },
95
- {
96
- "type": "fix",
97
- "section": "Bug Fixes"
98
- },
99
- {
100
- "type": "chore",
101
- "section": "Trivial Changes"
102
- },
103
- {
104
- "type": "docs",
105
- "section": "Documentation"
106
- },
107
- {
108
- "type": "deps",
109
- "section": "Dependencies"
110
- },
111
- {
112
- "type": "test",
113
- "section": "Tests"
114
- }
115
- ]
116
- }
117
- }
118
- ],
119
- "@semantic-release/changelog",
120
- "@semantic-release/npm",
121
- "@semantic-release/github",
122
- "@semantic-release/git"
123
- ]
124
- },
125
35
  "scripts": {
126
36
  "generate": "protons src/private-to-private/pb/message.proto src/pb/message.proto",
127
37
  "build": "aegir build",
@@ -131,53 +41,46 @@
131
41
  "lint": "aegir lint",
132
42
  "lint:fix": "aegir lint --fix",
133
43
  "clean": "aegir clean",
134
- "dep-check": "aegir dep-check -i protons",
135
- "release": "aegir release"
44
+ "dep-check": "aegir dep-check"
136
45
  },
137
46
  "dependencies": {
138
47
  "@chainsafe/libp2p-noise": "^12.0.0",
139
- "@libp2p/interface-connection": "^5.0.2",
140
- "@libp2p/interface-metrics": "^4.0.8",
141
- "@libp2p/interface-peer-id": "^2.0.2",
142
- "@libp2p/interface-registrar": "^2.0.12",
143
- "@libp2p/interface-stream-muxer": "^4.1.2",
144
- "@libp2p/interface-transport": "^4.0.3",
145
- "@libp2p/interfaces": "^3.3.2",
146
- "@libp2p/logger": "^2.0.7",
147
- "@libp2p/peer-id": "^2.0.3",
48
+ "@libp2p/interface": "0.1.0-fdd80820",
49
+ "@libp2p/interface-internal": "0.1.0-fdd80820",
50
+ "@libp2p/logger": "3.0.0-fdd80820",
51
+ "@libp2p/peer-id": "3.0.0-fdd80820",
148
52
  "@multiformats/mafmt": "^12.1.2",
149
- "@multiformats/multiaddr": "^12.1.2",
53
+ "@multiformats/multiaddr": "^12.1.3",
150
54
  "abortable-iterator": "^5.0.1",
151
55
  "detect-browser": "^5.3.0",
152
56
  "it-length-prefixed": "^9.0.1",
153
- "it-pb-stream": "^4.0.1",
154
57
  "it-pipe": "^3.0.1",
155
- "it-pushable": "^3.1.3",
58
+ "it-protobuf-stream": "^1.0.0",
59
+ "it-pushable": "^3.2.0",
156
60
  "it-stream-types": "^2.0.1",
157
61
  "it-to-buffer": "^4.0.2",
158
- "multiformats": "^11.0.2",
62
+ "multiformats": "^12.0.1",
159
63
  "multihashes": "^4.0.3",
160
64
  "p-defer": "^4.0.0",
161
- "p-event": "^5.0.1",
65
+ "p-event": "^6.0.0",
162
66
  "protons-runtime": "^5.0.0",
163
67
  "uint8arraylist": "^2.4.3",
164
- "uint8arrays": "^4.0.3"
68
+ "uint8arrays": "^4.0.4"
165
69
  },
166
70
  "devDependencies": {
167
- "@chainsafe/libp2p-yamux": "^4.0.1",
168
- "@libp2p/interface-libp2p": "^3.1.0",
169
- "@libp2p/interface-mocks": "^12.0.1",
170
- "@libp2p/peer-id-factory": "^2.0.3",
171
- "@libp2p/websockets": "^6.0.1",
172
- "@types/sinon": "^10.0.14",
173
- "aegir": "^39.0.7",
71
+ "@chainsafe/libp2p-yamux": "^4.0.0",
72
+ "@libp2p/interface-compliance-tests": "4.0.0-fdd80820",
73
+ "@libp2p/peer-id-factory": "3.0.0-fdd80820",
74
+ "@libp2p/websockets": "7.0.0-fdd80820",
75
+ "@types/sinon": "^10.0.15",
76
+ "aegir": "^40.0.1",
174
77
  "delay": "^6.0.0",
175
78
  "it-length": "^3.0.2",
176
79
  "it-map": "^3.0.3",
177
80
  "it-pair": "^2.0.6",
178
- "libp2p": "^0.45.0",
81
+ "libp2p": "0.46.0-fdd80820",
179
82
  "protons": "^7.0.2",
180
- "sinon": "^15.0.4",
83
+ "sinon": "^15.1.2",
181
84
  "sinon-ts": "^1.0.0"
182
85
  }
183
86
  }
package/src/error.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { CodeError } from '@libp2p/interfaces/errors'
2
- import type { Direction } from '@libp2p/interface-connection'
1
+ import { CodeError } from '@libp2p/interface/errors'
2
+ import type { Direction } from '@libp2p/interface/connection'
3
3
 
4
4
  export enum codes {
5
5
  ERR_ALREADY_ABORTED = 'ERR_ALREADY_ABORTED',
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { WebRTCTransport } from './private-to-private/transport.js'
2
2
  import { WebRTCDirectTransport, type WebRTCTransportDirectInit, type WebRTCDirectTransportComponents } from './private-to-public/transport.js'
3
3
  import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js'
4
- import type { Transport } from '@libp2p/interface-transport'
4
+ import type { Transport } from '@libp2p/interface/transport'
5
5
 
6
6
  /**
7
7
  * @param {WebRTCTransportDirectInit} init - WebRTC direct transport configuration
package/src/maconn.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { logger } from '@libp2p/logger'
2
2
  import { nopSink, nopSource } from './util.js'
3
- import type { MultiaddrConnection, MultiaddrConnectionTimeline } from '@libp2p/interface-connection'
4
- import type { CounterGroup } from '@libp2p/interface-metrics'
5
- import type { Multiaddr } from '@multiformats/multiaddr'
3
+ import type { MultiaddrConnection, MultiaddrConnectionTimeline } from '@libp2p/interface/connection'
4
+ import type { CounterGroup } from '@libp2p/interface/metrics'
5
+ import type { AbortOptions, Multiaddr } from '@multiformats/multiaddr'
6
6
  import type { Source, Sink } from 'it-stream-types'
7
7
 
8
8
  const log = logger('libp2p:webrtc:connection')
@@ -72,14 +72,19 @@ export class WebRTCMultiaddrConnection implements MultiaddrConnection {
72
72
  }
73
73
  }
74
74
 
75
- async close (err?: Error | undefined): Promise<void> {
76
- if (err !== undefined) {
77
- log.error('error closing connection', err)
78
- }
75
+ async close (options?: AbortOptions): Promise<void> {
79
76
  log.trace('closing connection')
80
77
 
81
- this.timeline.close = Date.now()
82
78
  this.peerConnection.close()
79
+ this.timeline.close = Date.now()
83
80
  this.metrics?.increment({ close: true })
84
81
  }
82
+
83
+ abort (err: Error): void {
84
+ log.error('closing connection due to error', err)
85
+
86
+ this.peerConnection.close()
87
+ this.timeline.close = Date.now()
88
+ this.metrics?.increment({ abort: true })
89
+ }
85
90
  }
package/src/muxer.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { createStream } from './stream.js'
2
2
  import { nopSink, nopSource } from './util.js'
3
3
  import type { DataChannelOpts } from './stream.js'
4
- import type { Stream } from '@libp2p/interface-connection'
5
- import type { CounterGroup } from '@libp2p/interface-metrics'
6
- import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer'
4
+ import type { Stream } from '@libp2p/interface/connection'
5
+ import type { CounterGroup } from '@libp2p/interface/metrics'
6
+ import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface/stream-muxer'
7
+ import type { AbortOptions } from '@multiformats/multiaddr'
7
8
  import type { Source, Sink } from 'it-stream-types'
8
9
  import type { Uint8ArrayList } from 'uint8arraylist'
9
10
 
@@ -93,9 +94,14 @@ export class DataChannelMuxer implements StreamMuxer {
93
94
  private readonly metrics?: CounterGroup
94
95
 
95
96
  /**
96
- * Close or abort all tracked streams and stop the muxer
97
+ * Gracefully close all tracked streams and stop the muxer
97
98
  */
98
- close: (err?: Error | undefined) => void = () => { }
99
+ close: (options?: AbortOptions) => Promise<void> = async () => { }
100
+
101
+ /**
102
+ * Abort all tracked streams and stop the muxer
103
+ */
104
+ abort: (err: Error) => void = () => { }
99
105
 
100
106
  /**
101
107
  * The stream source, a no-op as the transport natively supports multiplexing
@@ -1,14 +1,14 @@
1
1
  import { logger } from '@libp2p/logger'
2
2
  import { abortableDuplex } from 'abortable-iterator'
3
- import { pbStream } from 'it-pb-stream'
3
+ import { pbStream } from 'it-protobuf-stream'
4
4
  import pDefer, { type DeferredPromise } from 'p-defer'
5
5
  import { DataChannelMuxerFactory } from '../muxer.js'
6
6
  import { Message } from './pb/message.js'
7
7
  import { readCandidatesUntilConnected, resolveOnConnected } from './util.js'
8
8
  import type { DataChannelOpts } from '../stream.js'
9
- import type { Stream } from '@libp2p/interface-connection'
10
- import type { IncomingStreamData } from '@libp2p/interface-registrar'
11
- import type { StreamMuxerFactory } from '@libp2p/interface-stream-muxer'
9
+ import type { Stream } from '@libp2p/interface/connection'
10
+ import type { StreamMuxerFactory } from '@libp2p/interface/stream-muxer'
11
+ import type { IncomingStreamData } from '@libp2p/interface-internal/registrar'
12
12
 
13
13
  const DEFAULT_TIMEOUT = 30 * 1000
14
14
 
@@ -28,8 +28,8 @@ export async function handleIncomingStream ({ rtcConfiguration, dataChannelOptio
28
28
  // candidate callbacks
29
29
  pc.onicecandidate = ({ candidate }) => {
30
30
  answerSentPromise.promise.then(
31
- () => {
32
- stream.write({
31
+ async () => {
32
+ await stream.write({
33
33
  type: Message.Type.ICE_CANDIDATE,
34
34
  data: (candidate != null) ? JSON.stringify(candidate.toJSON()) : ''
35
35
  })
@@ -64,7 +64,7 @@ export async function handleIncomingStream ({ rtcConfiguration, dataChannelOptio
64
64
  throw new Error('Failed to create answer')
65
65
  })
66
66
  // write the answer to the remote
67
- stream.write({ type: Message.Type.SDP_ANSWER, data: answer.sdp })
67
+ await stream.write({ type: Message.Type.SDP_ANSWER, data: answer.sdp })
68
68
 
69
69
  await pc.setLocalDescription(answer).catch(err => {
70
70
  log.error('could not execute setLocalDescription', err)
@@ -107,15 +107,18 @@ export async function initiateConnection ({ rtcConfiguration, dataChannelOptions
107
107
  // setup callback to write ICE candidates to the remote
108
108
  // peer
109
109
  pc.onicecandidate = ({ candidate }) => {
110
- stream.write({
110
+ void stream.write({
111
111
  type: Message.Type.ICE_CANDIDATE,
112
112
  data: (candidate != null) ? JSON.stringify(candidate.toJSON()) : ''
113
113
  })
114
+ .catch(err => {
115
+ log.error('error sending ICE candidate', err)
116
+ })
114
117
  }
115
118
  // create an offer
116
119
  const offerSdp = await pc.createOffer()
117
120
  // write the offer to the stream
118
- stream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp })
121
+ await stream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp })
119
122
  // set offer as local description
120
123
  await pc.setLocalDescription(offerSdp).catch(err => {
121
124
  log.error('could not execute setLocalDescription', err)
@@ -1,7 +1,8 @@
1
- import { EventEmitter } from '@libp2p/interfaces/events'
1
+ import { EventEmitter } from '@libp2p/interface/events'
2
2
  import { Circuit } from '@multiformats/mafmt'
3
- import type { PeerId } from '@libp2p/interface-peer-id'
4
- import type { ListenerEvents, Listener, TransportManager } from '@libp2p/interface-transport'
3
+ import type { PeerId } from '@libp2p/interface/peer-id'
4
+ import type { ListenerEvents, Listener } from '@libp2p/interface/transport'
5
+ import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
5
6
  import type { Multiaddr } from '@multiformats/multiaddr'
6
7
 
7
8
  export interface ListenerOptions {
@@ -1,5 +1,5 @@
1
- import { type CreateListenerOptions, type DialOptions, type Listener, symbol, type Transport, type Upgrader, type TransportManager } from '@libp2p/interface-transport'
2
- import { CodeError } from '@libp2p/interfaces/errors'
1
+ import { CodeError } from '@libp2p/interface/errors'
2
+ import { type CreateListenerOptions, type DialOptions, symbol, type Transport, type Listener, type Upgrader } from '@libp2p/interface/transport'
3
3
  import { logger } from '@libp2p/logger'
4
4
  import { peerIdFromString } from '@libp2p/peer-id'
5
5
  import { multiaddr, type Multiaddr, protocols } from '@multiformats/multiaddr'
@@ -8,10 +8,11 @@ import { WebRTCMultiaddrConnection } from '../maconn.js'
8
8
  import { initiateConnection, handleIncomingStream } from './handler.js'
9
9
  import { WebRTCPeerListener } from './listener.js'
10
10
  import type { DataChannelOpts } from '../stream.js'
11
- import type { Connection } from '@libp2p/interface-connection'
12
- import type { PeerId } from '@libp2p/interface-peer-id'
13
- import type { IncomingStreamData, Registrar } from '@libp2p/interface-registrar'
14
- import type { Startable } from '@libp2p/interfaces/startable'
11
+ import type { Connection } from '@libp2p/interface/connection'
12
+ import type { PeerId } from '@libp2p/interface/peer-id'
13
+ import type { Startable } from '@libp2p/interface/startable'
14
+ import type { IncomingStreamData, Registrar } from '@libp2p/interface-internal/registrar'
15
+ import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
15
16
 
16
17
  const log = logger('libp2p:webrtc:peer')
17
18
 
@@ -48,6 +49,8 @@ export class WebRTCTransport implements Transport, Startable {
48
49
  async start (): Promise<void> {
49
50
  await this.components.registrar.handle(SIGNALING_PROTO_ID, (data: IncomingStreamData) => {
50
51
  this._onProtocol(data).catch(err => { log.error('failed to handle incoming connect from %p', data.connection.remotePeer, err) })
52
+ }, {
53
+ runOnTransientConnection: true
51
54
  })
52
55
  this._started = true
53
56
  }
@@ -89,7 +92,10 @@ export class WebRTCTransport implements Transport, Startable {
89
92
  }
90
93
 
91
94
  const connection = await this.components.transportManager.dial(baseAddr, options)
92
- const signalingStream = await connection.newStream([SIGNALING_PROTO_ID], options)
95
+ const signalingStream = await connection.newStream(SIGNALING_PROTO_ID, {
96
+ ...options,
97
+ runOnTransientConnection: true
98
+ })
93
99
 
94
100
  try {
95
101
  const { pc, muxerFactory, remoteAddress } = await initiateConnection({
@@ -113,11 +119,11 @@ export class WebRTCTransport implements Transport, Startable {
113
119
  )
114
120
 
115
121
  // close the stream if SDP has been exchanged successfully
116
- signalingStream.close()
122
+ await signalingStream.close()
117
123
  return result
118
- } catch (err) {
124
+ } catch (err: any) {
119
125
  // reset the stream in case of any error
120
- signalingStream.reset()
126
+ signalingStream.abort(err)
121
127
  throw err
122
128
  } finally {
123
129
  // Close the signaling connection
@@ -143,8 +149,8 @@ export class WebRTCTransport implements Transport, Startable {
143
149
  skipProtection: true,
144
150
  muxerFactory
145
151
  })
146
- } catch (err) {
147
- stream.reset()
152
+ } catch (err: any) {
153
+ stream.abort(err)
148
154
  throw err
149
155
  } finally {
150
156
  // Close the signaling connection
@@ -1,4 +1,4 @@
1
- import type { CreateListenerOptions, DialOptions } from '@libp2p/interface-transport'
1
+ import type { CreateListenerOptions, DialOptions } from '@libp2p/interface/transport'
2
2
 
3
3
  export interface WebRTCListenerOptions extends CreateListenerOptions {}
4
4
  export interface WebRTCDialOptions extends DialOptions {}
@@ -133,7 +133,7 @@ a=ice-ufrag:${ufrag}
133
133
  a=ice-pwd:${ufrag}
134
134
  a=fingerprint:${CERTFP}
135
135
  a=sctp-port:5000
136
- a=max-message-size:100000
136
+ a=max-message-size:16384
137
137
  a=candidate:1467250027 1 UDP 1467250027 ${host} ${port} typ host\r\n`
138
138
  }
139
139
 
@@ -1,5 +1,5 @@
1
1
  import { noise as Noise } from '@chainsafe/libp2p-noise'
2
- import { type CreateListenerOptions, type Listener, symbol, type Transport } from '@libp2p/interface-transport'
2
+ import { type CreateListenerOptions, symbol, type Transport, type Listener } from '@libp2p/interface/transport'
3
3
  import { logger } from '@libp2p/logger'
4
4
  import * as p from '@libp2p/peer-id'
5
5
  import { protocols } from '@multiformats/multiaddr'
@@ -15,9 +15,9 @@ import * as sdp from './sdp.js'
15
15
  import { genUfrag } from './util.js'
16
16
  import type { WebRTCDialOptions } from './options.js'
17
17
  import type { DataChannelOpts } from '../stream.js'
18
- import type { Connection } from '@libp2p/interface-connection'
19
- import type { CounterGroup, Metrics } from '@libp2p/interface-metrics'
20
- import type { PeerId } from '@libp2p/interface-peer-id'
18
+ import type { Connection } from '@libp2p/interface/connection'
19
+ import type { CounterGroup, Metrics } from '@libp2p/interface/metrics'
20
+ import type { PeerId } from '@libp2p/interface/peer-id'
21
21
  import type { Multiaddr } from '@multiformats/multiaddr'
22
22
 
23
23
  const log = logger('libp2p:webrtc:transport')
@@ -1,3 +1,2 @@
1
-
2
1
  const charset = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')
3
2
  export const genUfrag = (len: number): string => [...Array(len)].map(() => charset.at(Math.floor(Math.random() * charset.length))).join('')