libp2p 0.37.2 → 0.37.3-2836acc

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 (151) hide show
  1. package/README.md +1 -0
  2. package/dist/src/address-manager/index.d.ts +2 -2
  3. package/dist/src/address-manager/index.d.ts.map +1 -1
  4. package/dist/src/circuit/auto-relay.d.ts +4 -4
  5. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  6. package/dist/src/circuit/circuit/hop.d.ts +2 -2
  7. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  8. package/dist/src/circuit/circuit/hop.js +2 -2
  9. package/dist/src/circuit/circuit/hop.js.map +1 -1
  10. package/dist/src/circuit/circuit/stop.d.ts +1 -1
  11. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  12. package/dist/src/circuit/circuit/stop.js +1 -1
  13. package/dist/src/circuit/circuit/stop.js.map +1 -1
  14. package/dist/src/circuit/circuit/stream-handler.d.ts +1 -1
  15. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  16. package/dist/src/circuit/index.d.ts +2 -2
  17. package/dist/src/circuit/index.d.ts.map +1 -1
  18. package/dist/src/circuit/listener.d.ts +3 -3
  19. package/dist/src/circuit/listener.d.ts.map +1 -1
  20. package/dist/src/circuit/transport.d.ts +5 -5
  21. package/dist/src/circuit/transport.d.ts.map +1 -1
  22. package/dist/src/circuit/transport.js +2 -2
  23. package/dist/src/circuit/transport.js.map +1 -1
  24. package/dist/src/config.d.ts.map +1 -1
  25. package/dist/src/config.js +11 -3
  26. package/dist/src/config.js.map +1 -1
  27. package/dist/src/connection-manager/auto-dialler.d.ts +1 -1
  28. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  29. package/dist/src/connection-manager/dialer/auto-dialer.d.ts +2 -2
  30. package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -1
  31. package/dist/src/connection-manager/dialer/dial-request.d.ts +1 -1
  32. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
  33. package/dist/src/connection-manager/dialer/index.d.ts +5 -5
  34. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  35. package/dist/src/connection-manager/dialer/index.js +1 -1
  36. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  37. package/dist/src/connection-manager/index.d.ts +16 -19
  38. package/dist/src/connection-manager/index.d.ts.map +1 -1
  39. package/dist/src/connection-manager/index.js +95 -59
  40. package/dist/src/connection-manager/index.js.map +1 -1
  41. package/dist/src/content-routing/index.d.ts +4 -4
  42. package/dist/src/content-routing/index.d.ts.map +1 -1
  43. package/dist/src/content-routing/utils.d.ts +2 -2
  44. package/dist/src/content-routing/utils.d.ts.map +1 -1
  45. package/dist/src/dht/dht-content-routing.d.ts +3 -3
  46. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  47. package/dist/src/dht/dht-peer-routing.d.ts +5 -5
  48. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  49. package/dist/src/dht/dummy-dht.d.ts +3 -3
  50. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  51. package/dist/src/dht/dummy-dht.js +1 -1
  52. package/dist/src/dht/dummy-dht.js.map +1 -1
  53. package/dist/src/errors.d.ts +4 -1
  54. package/dist/src/errors.d.ts.map +1 -1
  55. package/dist/src/errors.js +3 -0
  56. package/dist/src/errors.js.map +1 -1
  57. package/dist/src/fetch/index.d.ts +7 -4
  58. package/dist/src/fetch/index.d.ts.map +1 -1
  59. package/dist/src/fetch/index.js +61 -39
  60. package/dist/src/fetch/index.js.map +1 -1
  61. package/dist/src/get-peer.d.ts +2 -2
  62. package/dist/src/get-peer.d.ts.map +1 -1
  63. package/dist/src/get-peer.js +1 -1
  64. package/dist/src/get-peer.js.map +1 -1
  65. package/dist/src/identify/index.d.ts +7 -7
  66. package/dist/src/identify/index.d.ts.map +1 -1
  67. package/dist/src/identify/index.js +15 -23
  68. package/dist/src/identify/index.js.map +1 -1
  69. package/dist/src/index.d.ts +17 -17
  70. package/dist/src/index.d.ts.map +1 -1
  71. package/dist/src/insecure/index.d.ts +2 -2
  72. package/dist/src/insecure/index.d.ts.map +1 -1
  73. package/dist/src/insecure/index.js +1 -1
  74. package/dist/src/insecure/index.js.map +1 -1
  75. package/dist/src/keychain/index.d.ts +2 -2
  76. package/dist/src/keychain/index.d.ts.map +1 -1
  77. package/dist/src/libp2p.d.ts +14 -14
  78. package/dist/src/libp2p.d.ts.map +1 -1
  79. package/dist/src/libp2p.js +14 -15
  80. package/dist/src/libp2p.js.map +1 -1
  81. package/dist/src/metrics/index.d.ts +2 -2
  82. package/dist/src/metrics/index.d.ts.map +1 -1
  83. package/dist/src/metrics/moving-average.d.ts +1 -1
  84. package/dist/src/metrics/moving-average.d.ts.map +1 -1
  85. package/dist/src/metrics/stats.d.ts +1 -1
  86. package/dist/src/metrics/stats.d.ts.map +1 -1
  87. package/dist/src/nat-manager.d.ts +1 -1
  88. package/dist/src/nat-manager.d.ts.map +1 -1
  89. package/dist/src/peer-record-updater.d.ts +1 -1
  90. package/dist/src/peer-record-updater.d.ts.map +1 -1
  91. package/dist/src/peer-routing.d.ts +4 -4
  92. package/dist/src/peer-routing.d.ts.map +1 -1
  93. package/dist/src/ping/index.d.ts +6 -3
  94. package/dist/src/ping/index.d.ts.map +1 -1
  95. package/dist/src/ping/index.js +6 -2
  96. package/dist/src/ping/index.js.map +1 -1
  97. package/dist/src/pnet/index.d.ts +1 -2
  98. package/dist/src/pnet/index.d.ts.map +1 -1
  99. package/dist/src/pnet/index.js.map +1 -1
  100. package/dist/src/pubsub/dummy-pubsub.d.ts +2 -2
  101. package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -1
  102. package/dist/src/registrar.d.ts +10 -8
  103. package/dist/src/registrar.d.ts.map +1 -1
  104. package/dist/src/registrar.js +63 -44
  105. package/dist/src/registrar.js.map +1 -1
  106. package/dist/src/transport-manager.d.ts +3 -3
  107. package/dist/src/transport-manager.d.ts.map +1 -1
  108. package/dist/src/upgrader.d.ts +6 -6
  109. package/dist/src/upgrader.d.ts.map +1 -1
  110. package/dist/src/upgrader.js +69 -8
  111. package/dist/src/upgrader.js.map +1 -1
  112. package/package.json +53 -30
  113. package/src/address-manager/index.ts +2 -2
  114. package/src/circuit/auto-relay.ts +4 -4
  115. package/src/circuit/circuit/hop.ts +4 -4
  116. package/src/circuit/circuit/stop.ts +2 -2
  117. package/src/circuit/circuit/stream-handler.ts +1 -1
  118. package/src/circuit/index.ts +2 -2
  119. package/src/circuit/listener.ts +3 -3
  120. package/src/circuit/transport.ts +5 -5
  121. package/src/config.ts +11 -3
  122. package/src/connection-manager/auto-dialler.ts +1 -1
  123. package/src/connection-manager/dialer/auto-dialer.ts +2 -2
  124. package/src/connection-manager/dialer/dial-request.ts +1 -1
  125. package/src/connection-manager/dialer/index.ts +5 -5
  126. package/src/connection-manager/index.ts +126 -71
  127. package/src/content-routing/index.ts +2 -2
  128. package/src/content-routing/utils.ts +2 -2
  129. package/src/dht/dht-content-routing.ts +2 -2
  130. package/src/dht/dht-peer-routing.ts +3 -3
  131. package/src/dht/dummy-dht.ts +3 -3
  132. package/src/errors.ts +4 -1
  133. package/src/fetch/index.ts +91 -50
  134. package/src/get-peer.ts +3 -3
  135. package/src/identify/index.ts +24 -29
  136. package/src/index.ts +17 -17
  137. package/src/insecure/index.ts +3 -3
  138. package/src/keychain/index.ts +2 -2
  139. package/src/libp2p.ts +31 -27
  140. package/src/metrics/index.ts +2 -2
  141. package/src/metrics/moving-average.ts +1 -1
  142. package/src/metrics/stats.ts +1 -1
  143. package/src/nat-manager.ts +1 -1
  144. package/src/peer-record-updater.ts +1 -1
  145. package/src/peer-routing.ts +4 -4
  146. package/src/ping/index.ts +12 -5
  147. package/src/pnet/index.ts +1 -2
  148. package/src/pubsub/dummy-pubsub.ts +2 -2
  149. package/src/registrar.ts +79 -55
  150. package/src/transport-manager.ts +3 -3
  151. package/src/upgrader.ts +94 -16
@@ -2,13 +2,13 @@ import { logger } from '@libp2p/logger'
2
2
  import pSettle from 'p-settle'
3
3
  import { codes } from './errors.js'
4
4
  import errCode from 'err-code'
5
- import type { Listener, Transport, TransportManager, TransportManagerEvents } from '@libp2p/interfaces/transport'
5
+ import type { Listener, Transport, TransportManager, TransportManagerEvents } from '@libp2p/interface-transport'
6
6
  import type { Multiaddr } from '@multiformats/multiaddr'
7
- import type { Connection } from '@libp2p/interfaces/connection'
7
+ import type { Connection } from '@libp2p/interface-connection'
8
8
  import type { AbortOptions } from '@libp2p/interfaces'
9
9
  import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
10
10
  import type { Startable } from '@libp2p/interfaces/startable'
11
- import type { Components } from '@libp2p/interfaces/components'
11
+ import type { Components } from '@libp2p/components'
12
12
  import { trackedMap } from '@libp2p/tracked-map'
13
13
 
14
14
  const log = logger('libp2p:transports')
package/src/upgrader.ts CHANGED
@@ -8,14 +8,16 @@ import { codes } from './errors.js'
8
8
  import { createConnection } from '@libp2p/connection'
9
9
  import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
10
10
  import { peerIdFromString } from '@libp2p/peer-id'
11
- import type { Connection, ProtocolStream, Stream } from '@libp2p/interfaces/connection'
12
- import type { ConnectionEncrypter, SecuredConnection } from '@libp2p/interfaces/connection-encrypter'
13
- import type { StreamMuxer, StreamMuxerFactory } from '@libp2p/interfaces/stream-muxer'
14
- import type { PeerId } from '@libp2p/interfaces/peer-id'
15
- import type { MultiaddrConnection, Upgrader, UpgraderEvents } from '@libp2p/interfaces/transport'
11
+ import type { MultiaddrConnection, Connection, Stream } from '@libp2p/interface-connection'
12
+ import type { ConnectionEncrypter, SecuredConnection } from '@libp2p/interface-connection-encrypter'
13
+ import type { StreamMuxer, StreamMuxerFactory } from '@libp2p/interface-stream-muxer'
14
+ import type { PeerId } from '@libp2p/interface-peer-id'
15
+ import type { Upgrader, UpgraderEvents } from '@libp2p/interface-transport'
16
16
  import type { Duplex } from 'it-stream-types'
17
- import type { Components } from '@libp2p/interfaces/components'
17
+ import { Components, isInitializable } from '@libp2p/components'
18
18
  import type { AbortOptions } from '@libp2p/interfaces'
19
+ import type { Registrar } from '@libp2p/interface-registrar'
20
+ import { DEFAULT_MAX_INBOUND_STREAMS, DEFAULT_MAX_OUTBOUND_STREAMS } from './registrar.js'
19
21
 
20
22
  const log = logger('libp2p:upgrader')
21
23
 
@@ -43,6 +45,46 @@ export interface UpgraderInit {
43
45
  muxers: StreamMuxerFactory[]
44
46
  }
45
47
 
48
+ function findIncomingStreamLimit (protocol: string, registrar: Registrar) {
49
+ try {
50
+ const { options } = registrar.getHandler(protocol)
51
+
52
+ return options.maxInboundStreams
53
+ } catch (err: any) {
54
+ if (err.code !== codes.ERR_NO_HANDLER_FOR_PROTOCOL) {
55
+ throw err
56
+ }
57
+ }
58
+
59
+ return DEFAULT_MAX_INBOUND_STREAMS
60
+ }
61
+
62
+ function findOutgoingStreamLimit (protocol: string, registrar: Registrar) {
63
+ try {
64
+ const { options } = registrar.getHandler(protocol)
65
+
66
+ return options.maxOutboundStreams
67
+ } catch (err: any) {
68
+ if (err.code !== codes.ERR_NO_HANDLER_FOR_PROTOCOL) {
69
+ throw err
70
+ }
71
+ }
72
+
73
+ return DEFAULT_MAX_OUTBOUND_STREAMS
74
+ }
75
+
76
+ function countStreams (protocol: string, direction: 'inbound' | 'outbound', connection: Connection) {
77
+ let streamCount = 0
78
+
79
+ connection.streams.forEach(stream => {
80
+ if (stream.stat.direction === direction && stream.stat.protocol === protocol) {
81
+ streamCount++
82
+ }
83
+ })
84
+
85
+ return streamCount
86
+ }
87
+
46
88
  export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upgrader {
47
89
  private readonly components: Components
48
90
  private readonly connectionEncryption: Map<string, ConnectionEncrypter>
@@ -267,12 +309,12 @@ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upg
267
309
  } = opts
268
310
 
269
311
  let muxer: StreamMuxer | undefined
270
- let newStream: ((multicodecs: string[], options?: AbortOptions) => Promise<ProtocolStream>) | undefined
312
+ let newStream: ((multicodecs: string[], options?: AbortOptions) => Promise<Stream>) | undefined
271
313
  let connection: Connection // eslint-disable-line prefer-const
272
314
 
273
315
  if (muxerFactory != null) {
274
316
  // Create the muxer
275
- muxer = muxerFactory.createStreamMuxer(this.components, {
317
+ muxer = muxerFactory.createStreamMuxer({
276
318
  // Run anytime a remote stream is created
277
319
  onIncomingStream: muxedStream => {
278
320
  if (connection == null) {
@@ -296,11 +338,24 @@ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upg
296
338
  return
297
339
  }
298
340
 
299
- connection.addStream(muxedStream, { protocol })
341
+ const incomingLimit = findIncomingStreamLimit(protocol, this.components.getRegistrar())
342
+ const streamCount = countStreams(protocol, 'inbound', connection)
343
+
344
+ if (streamCount === incomingLimit) {
345
+ throw errCode(new Error('Too many incoming protocol streams'), codes.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS)
346
+ }
347
+
348
+ muxedStream.stat.protocol = protocol
349
+
350
+ connection.addStream(muxedStream)
300
351
  this._onStream({ connection, stream: { ...muxedStream, ...stream }, protocol })
301
352
  })
302
353
  .catch(err => {
303
354
  log.error(err)
355
+
356
+ if (muxedStream.stat.timeline.close == null) {
357
+ muxedStream.close()
358
+ }
304
359
  })
305
360
  },
306
361
  // Run anytime a stream closes
@@ -309,7 +364,11 @@ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upg
309
364
  }
310
365
  })
311
366
 
312
- newStream = async (protocols: string[], options: AbortOptions = {}): Promise<ProtocolStream> => {
367
+ if (isInitializable(muxer)) {
368
+ muxer.init(this.components)
369
+ }
370
+
371
+ newStream = async (protocols: string[], options: AbortOptions = {}): Promise<Stream> => {
313
372
  if (muxer == null) {
314
373
  throw errCode(new Error('Stream is not multiplexed'), codes.ERR_MUXER_UNAVAILABLE)
315
374
  }
@@ -326,10 +385,30 @@ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upg
326
385
  stream = metrics.trackStream({ stream, remotePeer, protocol })
327
386
  }
328
387
 
329
- return { stream: { ...muxedStream, ...stream }, protocol }
388
+ const outgoingLimit = findOutgoingStreamLimit(protocol, this.components.getRegistrar())
389
+ const streamCount = countStreams(protocol, 'outbound', connection)
390
+
391
+ if (streamCount === outgoingLimit) {
392
+ throw errCode(new Error('Too many outgoing protocol streams'), codes.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS)
393
+ }
394
+
395
+ muxedStream.stat.protocol = protocol
396
+
397
+ return {
398
+ ...muxedStream,
399
+ ...stream,
400
+ stat: {
401
+ ...muxedStream.stat,
402
+ protocol
403
+ }
404
+ }
330
405
  } catch (err: any) {
331
406
  log.error('could not create new stream', err)
332
407
 
408
+ if (muxedStream.stat.timeline.close == null) {
409
+ muxedStream.close()
410
+ }
411
+
333
412
  if (err.code != null) {
334
413
  throw err
335
414
  }
@@ -390,9 +469,7 @@ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upg
390
469
  await maConn.close()
391
470
  // Ensure remaining streams are closed
392
471
  if (muxer != null) {
393
- await Promise.all(muxer.streams.map(async stream => {
394
- await stream.close()
395
- }))
472
+ muxer.streams.forEach(s => s.close())
396
473
  }
397
474
  }
398
475
  })
@@ -409,8 +486,9 @@ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upg
409
486
  */
410
487
  _onStream (opts: OnStreamOptions): void {
411
488
  const { connection, stream, protocol } = opts
412
- const handler = this.components.getRegistrar().getHandler(protocol)
413
- handler({ connection, stream, protocol })
489
+ const { handler } = this.components.getRegistrar().getHandler(protocol)
490
+
491
+ handler({ connection, stream })
414
492
  }
415
493
 
416
494
  /**