libp2p 0.43.4 → 0.44.0-0d46c78f

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 (215) hide show
  1. package/dist/index.min.js +29 -29
  2. package/dist/src/address-manager/index.d.ts +4 -4
  3. package/dist/src/address-manager/index.d.ts.map +1 -1
  4. package/dist/src/address-manager/index.js +9 -6
  5. package/dist/src/address-manager/index.js.map +1 -1
  6. package/dist/src/autonat/index.d.ts +1 -2
  7. package/dist/src/autonat/index.d.ts.map +1 -1
  8. package/dist/src/autonat/index.js +19 -19
  9. package/dist/src/autonat/index.js.map +1 -1
  10. package/dist/src/circuit-relay/server/advert-service.d.ts.map +1 -1
  11. package/dist/src/circuit-relay/server/advert-service.js +2 -2
  12. package/dist/src/circuit-relay/server/advert-service.js.map +1 -1
  13. package/dist/src/circuit-relay/server/index.d.ts.map +1 -1
  14. package/dist/src/circuit-relay/server/index.js +7 -3
  15. package/dist/src/circuit-relay/server/index.js.map +1 -1
  16. package/dist/src/circuit-relay/transport/discovery.d.ts.map +1 -1
  17. package/dist/src/circuit-relay/transport/discovery.js +3 -1
  18. package/dist/src/circuit-relay/transport/discovery.js.map +1 -1
  19. package/dist/src/circuit-relay/transport/index.d.ts +3 -0
  20. package/dist/src/circuit-relay/transport/index.d.ts.map +1 -1
  21. package/dist/src/circuit-relay/transport/index.js +6 -2
  22. package/dist/src/circuit-relay/transport/index.js.map +1 -1
  23. package/dist/src/circuit-relay/transport/listener.d.ts +3 -0
  24. package/dist/src/circuit-relay/transport/listener.d.ts.map +1 -1
  25. package/dist/src/circuit-relay/transport/listener.js +5 -4
  26. package/dist/src/circuit-relay/transport/listener.js.map +1 -1
  27. package/dist/src/circuit-relay/transport/reservation-store.d.ts +4 -1
  28. package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +1 -1
  29. package/dist/src/circuit-relay/transport/reservation-store.js +11 -6
  30. package/dist/src/circuit-relay/transport/reservation-store.js.map +1 -1
  31. package/dist/src/circuit-relay/utils.d.ts.map +1 -1
  32. package/dist/src/circuit-relay/utils.js +3 -1
  33. package/dist/src/circuit-relay/utils.js.map +1 -1
  34. package/dist/src/components.d.ts +7 -69
  35. package/dist/src/components.d.ts.map +1 -1
  36. package/dist/src/components.js +60 -174
  37. package/dist/src/components.js.map +1 -1
  38. package/dist/src/config/connection-gater.browser.d.ts +8 -0
  39. package/dist/src/config/connection-gater.browser.d.ts.map +1 -0
  40. package/dist/src/config/connection-gater.browser.js +27 -0
  41. package/dist/src/config/connection-gater.browser.js.map +1 -0
  42. package/dist/src/config/connection-gater.d.ts +6 -0
  43. package/dist/src/config/connection-gater.d.ts.map +1 -0
  44. package/dist/src/config/connection-gater.js +18 -0
  45. package/dist/src/config/connection-gater.js.map +1 -0
  46. package/dist/src/config.d.ts +2 -1
  47. package/dist/src/config.d.ts.map +1 -1
  48. package/dist/src/config.js +0 -71
  49. package/dist/src/config.js.map +1 -1
  50. package/dist/src/connection-manager/auto-dial.d.ts +39 -0
  51. package/dist/src/connection-manager/auto-dial.d.ts.map +1 -0
  52. package/dist/src/connection-manager/auto-dial.js +136 -0
  53. package/dist/src/connection-manager/auto-dial.js.map +1 -0
  54. package/dist/src/connection-manager/connection-pruner.d.ts +32 -0
  55. package/dist/src/connection-manager/connection-pruner.d.ts.map +1 -0
  56. package/dist/src/connection-manager/connection-pruner.js +111 -0
  57. package/dist/src/connection-manager/connection-pruner.js.map +1 -0
  58. package/dist/src/connection-manager/constants.d.ts +49 -0
  59. package/dist/src/connection-manager/constants.d.ts.map +1 -0
  60. package/dist/src/connection-manager/constants.js +49 -0
  61. package/dist/src/connection-manager/constants.js.map +1 -0
  62. package/dist/src/connection-manager/dial-queue.d.ts +78 -0
  63. package/dist/src/connection-manager/dial-queue.d.ts.map +1 -0
  64. package/dist/src/connection-manager/dial-queue.js +372 -0
  65. package/dist/src/connection-manager/dial-queue.js.map +1 -0
  66. package/dist/src/connection-manager/index.d.ts +70 -73
  67. package/dist/src/connection-manager/index.d.ts.map +1 -1
  68. package/dist/src/connection-manager/index.js +118 -247
  69. package/dist/src/connection-manager/index.js.map +1 -1
  70. package/dist/src/connection-manager/utils.d.ts +9 -0
  71. package/dist/src/connection-manager/utils.d.ts.map +1 -0
  72. package/dist/src/connection-manager/utils.js +66 -0
  73. package/dist/src/connection-manager/utils.js.map +1 -0
  74. package/dist/src/content-routing/index.d.ts +0 -10
  75. package/dist/src/content-routing/index.d.ts.map +1 -1
  76. package/dist/src/content-routing/index.js +7 -42
  77. package/dist/src/content-routing/index.js.map +1 -1
  78. package/dist/src/content-routing/utils.d.ts.map +1 -1
  79. package/dist/src/content-routing/utils.js +3 -1
  80. package/dist/src/content-routing/utils.js.map +1 -1
  81. package/dist/src/fetch/index.d.ts +13 -35
  82. package/dist/src/fetch/index.d.ts.map +1 -1
  83. package/dist/src/fetch/index.js +10 -12
  84. package/dist/src/fetch/index.js.map +1 -1
  85. package/dist/src/identify/index.d.ts +16 -48
  86. package/dist/src/identify/index.d.ts.map +1 -1
  87. package/dist/src/identify/index.js +203 -201
  88. package/dist/src/identify/index.js.map +1 -1
  89. package/dist/src/index.d.ts +11 -67
  90. package/dist/src/index.d.ts.map +1 -1
  91. package/dist/src/index.js.map +1 -1
  92. package/dist/src/insecure/index.d.ts.map +1 -1
  93. package/dist/src/insecure/index.js +3 -1
  94. package/dist/src/insecure/index.js.map +1 -1
  95. package/dist/src/libp2p.d.ts +12 -35
  96. package/dist/src/libp2p.d.ts.map +1 -1
  97. package/dist/src/libp2p.js +141 -206
  98. package/dist/src/libp2p.js.map +1 -1
  99. package/dist/src/peer-routing.d.ts +1 -38
  100. package/dist/src/peer-routing.d.ts.map +1 -1
  101. package/dist/src/peer-routing.js +0 -59
  102. package/dist/src/peer-routing.js.map +1 -1
  103. package/dist/src/ping/constants.d.ts +4 -0
  104. package/dist/src/ping/constants.d.ts.map +1 -1
  105. package/dist/src/ping/constants.js +10 -0
  106. package/dist/src/ping/constants.js.map +1 -1
  107. package/dist/src/ping/index.d.ts +10 -27
  108. package/dist/src/ping/index.d.ts.map +1 -1
  109. package/dist/src/ping/index.js +18 -21
  110. package/dist/src/ping/index.js.map +1 -1
  111. package/dist/src/registrar.d.ts +5 -2
  112. package/dist/src/registrar.d.ts.map +1 -1
  113. package/dist/src/registrar.js +27 -25
  114. package/dist/src/registrar.js.map +1 -1
  115. package/dist/src/transport-manager.d.ts +15 -4
  116. package/dist/src/transport-manager.d.ts.map +1 -1
  117. package/dist/src/transport-manager.js +37 -12
  118. package/dist/src/transport-manager.js.map +1 -1
  119. package/dist/src/upgrader.d.ts +16 -11
  120. package/dist/src/upgrader.d.ts.map +1 -1
  121. package/dist/src/upgrader.js +38 -47
  122. package/dist/src/upgrader.js.map +1 -1
  123. package/dist/src/upnp-nat/index.d.ts +42 -0
  124. package/dist/src/upnp-nat/index.d.ts.map +1 -0
  125. package/dist/src/{nat-manager.js → upnp-nat/index.js} +11 -7
  126. package/dist/src/upnp-nat/index.js.map +1 -0
  127. package/package.json +70 -54
  128. package/src/address-manager/index.ts +12 -8
  129. package/src/autonat/index.ts +20 -22
  130. package/src/circuit-relay/server/advert-service.ts +2 -2
  131. package/src/circuit-relay/server/index.ts +7 -3
  132. package/src/circuit-relay/transport/discovery.ts +3 -1
  133. package/src/circuit-relay/transport/index.ts +10 -2
  134. package/src/circuit-relay/transport/listener.ts +8 -4
  135. package/src/circuit-relay/transport/reservation-store.ts +15 -7
  136. package/src/circuit-relay/utils.ts +3 -1
  137. package/src/components.ts +72 -251
  138. package/src/config/connection-gater.browser.ts +31 -0
  139. package/src/config/connection-gater.ts +19 -0
  140. package/src/config.ts +3 -73
  141. package/src/connection-manager/auto-dial.ts +189 -0
  142. package/src/connection-manager/connection-pruner.ts +157 -0
  143. package/src/connection-manager/constants.ts +60 -0
  144. package/src/connection-manager/dial-queue.ts +506 -0
  145. package/src/connection-manager/index.ts +194 -339
  146. package/src/connection-manager/utils.ts +76 -0
  147. package/src/content-routing/index.ts +7 -55
  148. package/src/content-routing/utils.ts +3 -1
  149. package/src/fetch/index.ts +55 -18
  150. package/src/identify/index.ts +238 -228
  151. package/src/index.ts +12 -76
  152. package/src/insecure/index.ts +9 -5
  153. package/src/libp2p.ts +146 -265
  154. package/src/peer-routing.ts +1 -101
  155. package/src/ping/constants.ts +11 -0
  156. package/src/ping/index.ts +32 -28
  157. package/src/registrar.ts +31 -27
  158. package/src/transport-manager.ts +49 -15
  159. package/src/upgrader.ts +62 -57
  160. package/src/{nat-manager.ts → upnp-nat/index.ts} +15 -16
  161. package/src/version.ts +1 -1
  162. package/dist/src/connection-manager/auto-dialler.d.ts +0 -42
  163. package/dist/src/connection-manager/auto-dialler.d.ts.map +0 -1
  164. package/dist/src/connection-manager/auto-dialler.js +0 -105
  165. package/dist/src/connection-manager/auto-dialler.js.map +0 -1
  166. package/dist/src/connection-manager/dialer/dial-request.d.ts +0 -27
  167. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +0 -1
  168. package/dist/src/connection-manager/dialer/dial-request.js +0 -114
  169. package/dist/src/connection-manager/dialer/dial-request.js.map +0 -1
  170. package/dist/src/connection-manager/dialer/index.d.ts +0 -121
  171. package/dist/src/connection-manager/dialer/index.d.ts.map +0 -1
  172. package/dist/src/connection-manager/dialer/index.js +0 -324
  173. package/dist/src/connection-manager/dialer/index.js.map +0 -1
  174. package/dist/src/connection-manager/latency-monitor.d.ts +0 -120
  175. package/dist/src/connection-manager/latency-monitor.d.ts.map +0 -1
  176. package/dist/src/connection-manager/latency-monitor.js +0 -220
  177. package/dist/src/connection-manager/latency-monitor.js.map +0 -1
  178. package/dist/src/connection-manager/visibility-change-emitter.d.ts +0 -66
  179. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +0 -1
  180. package/dist/src/connection-manager/visibility-change-emitter.js +0 -118
  181. package/dist/src/connection-manager/visibility-change-emitter.js.map +0 -1
  182. package/dist/src/constants.d.ts +0 -27
  183. package/dist/src/constants.d.ts.map +0 -1
  184. package/dist/src/constants.js +0 -31
  185. package/dist/src/constants.js.map +0 -1
  186. package/dist/src/dht/dht-content-routing.d.ts +0 -17
  187. package/dist/src/dht/dht-content-routing.d.ts.map +0 -1
  188. package/dist/src/dht/dht-content-routing.js +0 -32
  189. package/dist/src/dht/dht-content-routing.js.map +0 -1
  190. package/dist/src/dht/dht-peer-routing.d.ts +0 -15
  191. package/dist/src/dht/dht-peer-routing.d.ts.map +0 -1
  192. package/dist/src/dht/dht-peer-routing.js +0 -26
  193. package/dist/src/dht/dht-peer-routing.js.map +0 -1
  194. package/dist/src/dht/dummy-dht.d.ts +0 -20
  195. package/dist/src/dht/dummy-dht.d.ts.map +0 -1
  196. package/dist/src/dht/dummy-dht.js +0 -46
  197. package/dist/src/dht/dummy-dht.js.map +0 -1
  198. package/dist/src/nat-manager.d.ts +0 -74
  199. package/dist/src/nat-manager.d.ts.map +0 -1
  200. package/dist/src/nat-manager.js.map +0 -1
  201. package/dist/src/peer-record-updater.d.ts +0 -24
  202. package/dist/src/peer-record-updater.d.ts.map +0 -1
  203. package/dist/src/peer-record-updater.js +0 -44
  204. package/dist/src/peer-record-updater.js.map +0 -1
  205. package/dist/typedoc-urls.json +0 -41
  206. package/src/connection-manager/auto-dialler.ts +0 -158
  207. package/src/connection-manager/dialer/dial-request.ts +0 -144
  208. package/src/connection-manager/dialer/index.ts +0 -461
  209. package/src/connection-manager/latency-monitor.ts +0 -319
  210. package/src/connection-manager/visibility-change-emitter.ts +0 -135
  211. package/src/constants.ts +0 -36
  212. package/src/dht/dht-content-routing.ts +0 -44
  213. package/src/dht/dht-peer-routing.ts +0 -36
  214. package/src/dht/dummy-dht.ts +0 -60
  215. package/src/peer-record-updater.ts +0 -65
@@ -1,114 +0,0 @@
1
- import { CodeError } from '@libp2p/interfaces/errors';
2
- import { anySignal } from 'any-signal';
3
- import FIFO from 'p-fifo';
4
- import { setMaxListeners } from 'events';
5
- import { codes } from '../../errors.js';
6
- import { logger } from '@libp2p/logger';
7
- const log = logger('libp2p:dialer:dial-request');
8
- export class DialRequest {
9
- /**
10
- * Manages running the `dialAction` on multiple provided `addrs` in parallel
11
- * up to a maximum determined by the number of tokens returned
12
- * from `dialer.getTokens`. Once a DialRequest is created, it can be
13
- * started using `DialRequest.run(options)`. Once a single dial has succeeded,
14
- * all other dials in the request will be cancelled.
15
- */
16
- constructor(options) {
17
- const { addrs, dialAction, dialer } = options;
18
- this.addrs = addrs;
19
- this.dialer = dialer;
20
- this.dialAction = dialAction;
21
- }
22
- async run(options = {}) {
23
- const tokens = this.dialer.getTokens(this.addrs.length);
24
- // If no tokens are available, throw
25
- if (tokens.length < 1) {
26
- throw new CodeError('No dial tokens available', codes.ERR_NO_DIAL_TOKENS);
27
- }
28
- const tokenHolder = new FIFO();
29
- for (const token of tokens) {
30
- void tokenHolder.push(token).catch(err => {
31
- log.error(err);
32
- });
33
- }
34
- const dialAbortControllers = this.addrs.map(() => {
35
- const controller = new AbortController();
36
- try {
37
- // fails on node < 15.4
38
- setMaxListeners?.(Infinity, controller.signal);
39
- }
40
- catch { }
41
- return controller;
42
- });
43
- if (options.signal != null) {
44
- try {
45
- // fails on node < 15.4
46
- setMaxListeners?.(Infinity, options.signal);
47
- }
48
- catch { }
49
- }
50
- let completedDials = 0;
51
- let done = false;
52
- try {
53
- return await Promise.any(this.addrs.map(async (addr, i) => {
54
- const token = await tokenHolder.shift(); // get token
55
- // End attempt once another attempt succeeded
56
- if (done) {
57
- this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0]);
58
- throw new CodeError('dialAction already succeeded', codes.ERR_ALREADY_SUCCEEDED);
59
- }
60
- const controller = dialAbortControllers[i];
61
- if (controller == null) {
62
- throw new CodeError('dialAction did not come with an AbortController', codes.ERR_INVALID_PARAMETERS);
63
- }
64
- let conn;
65
- try {
66
- const signal = controller.signal;
67
- conn = await this.dialAction(addr, { ...options, signal: (options.signal != null) ? anySignal([signal, options.signal]) : signal });
68
- // Remove the successful AbortController so it is not aborted
69
- dialAbortControllers[i] = undefined;
70
- }
71
- finally {
72
- completedDials++;
73
- // If we have more or equal dials remaining than tokens, recycle the token, otherwise release it
74
- if (this.addrs.length - completedDials >= tokens.length) {
75
- void tokenHolder.push(token).catch(err => {
76
- log.error(err);
77
- });
78
- }
79
- else {
80
- this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0]);
81
- }
82
- }
83
- if (conn == null) {
84
- // Notify Promise.any that attempt was not successful
85
- // to prevent from returning undefined despite there
86
- // were successful dial attempts
87
- throw new CodeError('dialAction led to empty object', codes.ERR_TRANSPORT_DIAL_FAILED);
88
- }
89
- else {
90
- // This dial succeeded, don't attempt anything else
91
- done = true;
92
- }
93
- return conn;
94
- }));
95
- }
96
- catch (err) {
97
- // if we only dialed one address, unwrap the AggregateError
98
- if (this.addrs.length === 1 && err.name === 'AggregateError') {
99
- throw err.errors[0];
100
- }
101
- throw err;
102
- }
103
- finally {
104
- // success/failure happened, abort everything else
105
- dialAbortControllers.forEach(c => {
106
- if (c !== undefined) {
107
- c.abort();
108
- }
109
- });
110
- tokens.forEach(token => { this.dialer.releaseToken(token); }); // release tokens back to the dialer
111
- }
112
- }
113
- }
114
- //# sourceMappingURL=dial-request.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dial-request.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"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"}
@@ -1,121 +0,0 @@
1
- import { Multiaddr, Resolver } from '@multiformats/multiaddr';
2
- import { TimeoutController } from 'timeout-abort-controller';
3
- import { DialRequest } from './dial-request.js';
4
- import type { Connection } from '@libp2p/interface-connection';
5
- import type { AbortOptions } from '@libp2p/interfaces';
6
- import type { Startable } from '@libp2p/interfaces/startable';
7
- import { PeerId } from '@libp2p/interface-peer-id';
8
- import { PeerAddress } from '../../get-peer.js';
9
- import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store';
10
- import type { Metrics } from '@libp2p/interface-metrics';
11
- import type { Dialer } from '@libp2p/interface-connection-manager';
12
- import type { TransportManager } from '@libp2p/interface-transport';
13
- import type { ConnectionGater } from '@libp2p/interface-connection-gater';
14
- export interface DialTarget {
15
- id: string;
16
- addrs: Multiaddr[];
17
- }
18
- export interface PendingDial {
19
- dialRequest: DialRequest;
20
- controller: TimeoutController;
21
- promise: Promise<Connection>;
22
- destroy: () => void;
23
- }
24
- export interface PendingDialTarget {
25
- resolve: (value: any) => void;
26
- reject: (err: Error) => void;
27
- }
28
- export interface DialerInit {
29
- /**
30
- * Sort the known addresses of a peer before trying to dial
31
- */
32
- addressSorter?: AddressSorter;
33
- /**
34
- * Number of max concurrent dials
35
- */
36
- maxParallelDials?: number;
37
- /**
38
- * Number of max addresses to dial for a given peer
39
- */
40
- maxAddrsToDial?: number;
41
- /**
42
- * How long a dial attempt is allowed to take
43
- */
44
- dialTimeout?: number;
45
- /**
46
- * Number of max concurrent dials per peer
47
- */
48
- maxDialsPerPeer?: number;
49
- /**
50
- * Multiaddr resolvers to use when dialing
51
- */
52
- resolvers?: Record<string, Resolver>;
53
- }
54
- export interface DefaultDialerComponents {
55
- peerId: PeerId;
56
- metrics?: Metrics;
57
- peerStore: PeerStore;
58
- transportManager: TransportManager;
59
- connectionGater: ConnectionGater;
60
- }
61
- export declare class DefaultDialer implements Startable, Dialer {
62
- private readonly components;
63
- private readonly addressSorter;
64
- private readonly maxAddrsToDial;
65
- private readonly timeout;
66
- private readonly maxDialsPerPeer;
67
- tokens: number[];
68
- pendingDials: Map<string, PendingDial>;
69
- pendingDialTargets: Map<string, AbortController>;
70
- private started;
71
- constructor(components: DefaultDialerComponents, init?: DialerInit);
72
- isStarted(): boolean;
73
- start(): Promise<void>;
74
- /**
75
- * Clears any pending dials
76
- */
77
- stop(): Promise<void>;
78
- /**
79
- * Connects to a given `peer` by dialing all of its known addresses.
80
- * The dial to the first address that is successfully able to upgrade a connection
81
- * will be used.
82
- */
83
- dial(peerIdOrMultiaddr: PeerId | Multiaddr | Multiaddr[], options?: AbortOptions): Promise<Connection>;
84
- createDialTarget(peerAddress: PeerAddress, options?: AbortOptions): Promise<Connection>;
85
- /**
86
- * Get the current dial targets which are pending
87
- */
88
- getPendingDialTargets(): Map<string, AbortController>;
89
- /**
90
- * Returns true if the peer id is in the pending dials
91
- */
92
- hasPendingDial(peerId: PeerId | Multiaddr): boolean;
93
- /**
94
- * Creates a DialTarget. The DialTarget is used to create and track
95
- * the DialRequest to a given peer.
96
- *
97
- * If a multiaddr is received it should be the only address attempted.
98
- *
99
- * Multiaddrs not supported by the available transports will be filtered out.
100
- */
101
- _createDialTarget(peerIdOrMultiaddr: PeerAddress, options: AbortOptions): Promise<DialTarget>;
102
- /**
103
- * Loads a list of addresses from the peer store for the passed peer id
104
- */
105
- _loadAddresses(peer: PeerId): Promise<Multiaddr[]>;
106
- /**
107
- * Creates a PendingDial that wraps the underlying DialRequest
108
- */
109
- _createPendingDial(dialTarget: DialTarget, options?: AbortOptions): PendingDial;
110
- getTokens(num: number): number[];
111
- releaseToken(token: number): void;
112
- /**
113
- * Resolve multiaddr recursively
114
- */
115
- _resolve(ma: Multiaddr, options: AbortOptions): Promise<Multiaddr[]>;
116
- /**
117
- * Resolve a given multiaddr. If this fails, an empty array will be returned
118
- */
119
- _resolveRecord(ma: Multiaddr, options: AbortOptions): Promise<Multiaddr[]>;
120
- }
121
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
@@ -1,324 +0,0 @@
1
- import { logger } from '@libp2p/logger';
2
- import { CodeError } from '@libp2p/interfaces/errors';
3
- import { isMultiaddr, multiaddr, resolvers } from '@multiformats/multiaddr';
4
- import { TimeoutController } from 'timeout-abort-controller';
5
- import { anySignal } from 'any-signal';
6
- import { setMaxListeners } from 'events';
7
- import { DialRequest } from './dial-request.js';
8
- import { publicAddressesFirst } from '@libp2p/utils/address-sort';
9
- import { trackedMap } from '@libp2p/tracked-map';
10
- import { codes } from '../../errors.js';
11
- import { DIAL_TIMEOUT, MAX_PARALLEL_DIALS, MAX_PER_PEER_DIALS, MAX_ADDRS_TO_DIAL } from '../../constants.js';
12
- import { isPeerId } from '@libp2p/interface-peer-id';
13
- import { getPeerAddress } from '../../get-peer.js';
14
- const log = logger('libp2p:dialer');
15
- export class DefaultDialer {
16
- constructor(components, init = {}) {
17
- this.started = false;
18
- this.addressSorter = init.addressSorter ?? publicAddressesFirst;
19
- this.maxAddrsToDial = init.maxAddrsToDial ?? MAX_ADDRS_TO_DIAL;
20
- this.timeout = init.dialTimeout ?? DIAL_TIMEOUT;
21
- this.maxDialsPerPeer = init.maxDialsPerPeer ?? MAX_PER_PEER_DIALS;
22
- this.tokens = [...new Array(init.maxParallelDials ?? MAX_PARALLEL_DIALS)].map((_, index) => index);
23
- this.components = components;
24
- this.pendingDials = trackedMap({
25
- name: 'libp2p_dialler_pending_dials',
26
- metrics: components.metrics
27
- });
28
- this.pendingDialTargets = trackedMap({
29
- name: 'libp2p_dialler_pending_dial_targets',
30
- metrics: components.metrics
31
- });
32
- for (const [key, value] of Object.entries(init.resolvers ?? {})) {
33
- resolvers.set(key, value);
34
- }
35
- }
36
- isStarted() {
37
- return this.started;
38
- }
39
- async start() {
40
- this.started = true;
41
- }
42
- /**
43
- * Clears any pending dials
44
- */
45
- async stop() {
46
- this.started = false;
47
- for (const dial of this.pendingDials.values()) {
48
- try {
49
- dial.controller.abort();
50
- }
51
- catch (err) {
52
- log.error(err);
53
- }
54
- }
55
- this.pendingDials.clear();
56
- for (const pendingTarget of this.pendingDialTargets.values()) {
57
- pendingTarget.abort();
58
- }
59
- this.pendingDialTargets.clear();
60
- }
61
- /**
62
- * Connects to a given `peer` by dialing all of its known addresses.
63
- * The dial to the first address that is successfully able to upgrade a connection
64
- * will be used.
65
- */
66
- async dial(peerIdOrMultiaddr, options = {}) {
67
- const peerAddress = getPeerAddress(peerIdOrMultiaddr);
68
- if (peerAddress.peerId != null) {
69
- if (this.components.peerId.equals(peerAddress.peerId)) {
70
- throw new CodeError('Tried to dial self', codes.ERR_DIALED_SELF);
71
- }
72
- if (peerAddress.multiaddrs.length > 0) {
73
- log('storing multiaddrs %p', peerAddress.peerId, peerAddress.multiaddrs);
74
- await this.components.peerStore.addressBook.add(peerAddress.peerId, peerAddress.multiaddrs);
75
- }
76
- if ((await this.components.connectionGater.denyDialPeer?.(peerAddress.peerId)) === true) {
77
- throw new CodeError('The dial request is blocked by gater.allowDialPeer', codes.ERR_PEER_DIAL_INTERCEPTED);
78
- }
79
- }
80
- log('creating dial target for %p', peerAddress.peerId);
81
- return await this.createDialTarget(peerAddress, options);
82
- }
83
- async createDialTarget(peerAddress, options = {}) {
84
- // resolving multiaddrs can involve dns lookups so allow them to be aborted
85
- const controller = new AbortController();
86
- const controllerId = randomId();
87
- this.pendingDialTargets.set(controllerId, controller);
88
- let signal = controller.signal;
89
- // merge with the passed signal, if any
90
- if (options.signal != null) {
91
- signal = anySignal([signal, options.signal]);
92
- }
93
- let dialTarget;
94
- try {
95
- dialTarget = await this._createDialTarget(peerAddress, {
96
- ...options,
97
- signal
98
- });
99
- }
100
- finally {
101
- // done resolving the multiaddrs so remove the abort controller
102
- this.pendingDialTargets.delete(controllerId);
103
- }
104
- if (dialTarget.addrs.length === 0) {
105
- throw new CodeError('The dial request has no valid addresses', codes.ERR_NO_VALID_ADDRESSES);
106
- }
107
- // try to join an in-flight dial for this peer if one is available
108
- const pendingDial = this.pendingDials.get(dialTarget.id) ?? this._createPendingDial(dialTarget, options);
109
- try {
110
- const connection = await pendingDial.promise;
111
- log('dial succeeded to %s', dialTarget.id);
112
- return connection;
113
- }
114
- catch (err) {
115
- log('dial failed to %s', dialTarget.id, err);
116
- // Error is a timeout
117
- if (pendingDial.controller.signal.aborted) {
118
- const error = new CodeError(err.message, codes.ERR_TIMEOUT);
119
- log.error(error);
120
- throw error;
121
- }
122
- log.error(err);
123
- throw err;
124
- }
125
- finally {
126
- pendingDial.destroy();
127
- }
128
- }
129
- /**
130
- * Get the current dial targets which are pending
131
- */
132
- getPendingDialTargets() {
133
- return this.pendingDialTargets;
134
- }
135
- /**
136
- * Returns true if the peer id is in the pending dials
137
- */
138
- hasPendingDial(peerId) {
139
- if (isMultiaddr(peerId)) {
140
- return this.pendingDials.has(peerId.getPeerId() ?? '');
141
- }
142
- return this.pendingDials.has(peerId.toString());
143
- }
144
- /**
145
- * Creates a DialTarget. The DialTarget is used to create and track
146
- * the DialRequest to a given peer.
147
- *
148
- * If a multiaddr is received it should be the only address attempted.
149
- *
150
- * Multiaddrs not supported by the available transports will be filtered out.
151
- */
152
- async _createDialTarget(peerIdOrMultiaddr, options) {
153
- let addrs = [
154
- ...peerIdOrMultiaddr.multiaddrs
155
- ];
156
- // load addresses if only a peer id was passed, otherwise just dial the passed multiaddrs
157
- if (peerIdOrMultiaddr.peerId != null && peerIdOrMultiaddr.multiaddrs.length === 0) {
158
- addrs.push(...await this._loadAddresses(peerIdOrMultiaddr.peerId));
159
- }
160
- // resolve addresses - this can result in a one-to-many translation when dnsaddrs are resolved
161
- addrs = (await Promise.all(addrs.map(async (ma) => await this._resolve(ma, options))))
162
- .flat();
163
- // Multiaddrs not supported by the available transports will be filtered out.
164
- const filteredAddrs = addrs.filter(ma => Boolean(this.components.transportManager.transportForMultiaddr(ma)));
165
- // deduplicate addresses
166
- const dedupedAddrs = [...new Set(filteredAddrs.map(ma => ma.toString()))];
167
- let dedupedMultiaddrs = dedupedAddrs.map(ma => multiaddr(ma));
168
- if (dedupedMultiaddrs.length > this.maxAddrsToDial) {
169
- log('addresses after filtering', dedupedMultiaddrs.map(ma => ma.toString()));
170
- throw new CodeError('dial with more addresses than allowed', codes.ERR_TOO_MANY_ADDRESSES);
171
- }
172
- if (dedupedMultiaddrs.length === 0) {
173
- log('addresses before filtering', addrs.map(ma => ma.toString()));
174
- log('addresses after filtering', dedupedMultiaddrs.map(ma => ma.toString()));
175
- }
176
- const peerId = isPeerId(peerIdOrMultiaddr.peerId) ? peerIdOrMultiaddr.peerId : undefined;
177
- if (peerId != null) {
178
- const peerIdMultiaddr = `/p2p/${peerId.toString()}`;
179
- dedupedMultiaddrs = dedupedMultiaddrs.map(addr => {
180
- const addressPeerId = addr.getPeerId();
181
- const lastProto = addr.protos().pop();
182
- // do not append peer id to path multiaddrs
183
- if (lastProto?.path === true) {
184
- return addr;
185
- }
186
- if (addressPeerId == null) {
187
- return addr.encapsulate(peerIdMultiaddr);
188
- }
189
- return addr;
190
- });
191
- }
192
- return {
193
- id: peerId == null ? randomId() : peerId.toString(),
194
- addrs: dedupedMultiaddrs
195
- };
196
- }
197
- /**
198
- * Loads a list of addresses from the peer store for the passed peer id
199
- */
200
- async _loadAddresses(peer) {
201
- const addresses = await this.components.peerStore.addressBook.get(peer);
202
- return (await Promise.all(addresses.map(async (address) => {
203
- const deny = await this.components.connectionGater.denyDialMultiaddr?.(peer, address.multiaddr);
204
- if (deny === true) {
205
- return false;
206
- }
207
- return address;
208
- })))
209
- .filter(isTruthy)
210
- // Sort addresses so, for example, we try certified public address first
211
- .sort(this.addressSorter)
212
- .map(address => address.multiaddr);
213
- }
214
- /**
215
- * Creates a PendingDial that wraps the underlying DialRequest
216
- */
217
- _createPendingDial(dialTarget, options = {}) {
218
- /**
219
- * @param {Multiaddr} addr
220
- * @param {{ signal: { aborted: any; }; }} options
221
- */
222
- const dialAction = async (addr, options = {}) => {
223
- if (options.signal?.aborted === true) {
224
- throw new CodeError('already aborted', codes.ERR_ALREADY_ABORTED);
225
- }
226
- return await this.components.transportManager.dial(addr, options).catch(err => {
227
- log.error('dial to %s failed', addr, err);
228
- throw err;
229
- });
230
- };
231
- const dialRequest = new DialRequest({
232
- addrs: dialTarget.addrs,
233
- dialAction,
234
- dialer: this
235
- });
236
- // Combine the timeout signal and options.signal, if provided
237
- const timeoutController = new TimeoutController(this.timeout);
238
- const signals = [timeoutController.signal];
239
- (options.signal != null) && signals.push(options.signal);
240
- const signal = anySignal(signals);
241
- // this signal will potentially be used while dialing lots of
242
- // peers so prevent MaxListenersExceededWarning appearing in the console
243
- try {
244
- // fails on node < 15.4
245
- setMaxListeners?.(Infinity, signal);
246
- }
247
- catch { }
248
- const pendingDial = {
249
- dialRequest,
250
- controller: timeoutController,
251
- promise: dialRequest.run({ ...options, signal }),
252
- destroy: () => {
253
- timeoutController.clear();
254
- this.pendingDials.delete(dialTarget.id);
255
- }
256
- };
257
- this.pendingDials.set(dialTarget.id, pendingDial);
258
- return pendingDial;
259
- }
260
- getTokens(num) {
261
- const total = Math.min(num, this.maxDialsPerPeer, this.tokens.length);
262
- const tokens = this.tokens.splice(0, total);
263
- log('%d tokens request, returning %d, %d remaining', num, total, this.tokens.length);
264
- return tokens;
265
- }
266
- releaseToken(token) {
267
- // Guard against duplicate releases
268
- if (this.tokens.includes(token)) {
269
- return;
270
- }
271
- log('token %d released', token);
272
- this.tokens.push(token);
273
- }
274
- /**
275
- * Resolve multiaddr recursively
276
- */
277
- async _resolve(ma, options) {
278
- // TODO: recursive logic should live in multiaddr once dns4/dns6 support is in place
279
- // Now only supporting resolve for dnsaddr
280
- const resolvableProto = ma.protoNames().includes('dnsaddr');
281
- // Multiaddr is not resolvable? End recursion!
282
- if (!resolvableProto) {
283
- return [ma];
284
- }
285
- const resolvedMultiaddrs = await this._resolveRecord(ma, options);
286
- const recursiveMultiaddrs = await Promise.all(resolvedMultiaddrs.map(async (nm) => {
287
- return await this._resolve(nm, options);
288
- }));
289
- const addrs = recursiveMultiaddrs.flat();
290
- return addrs.reduce((array, newM) => {
291
- if (array.find(m => m.equals(newM)) == null) {
292
- array.push(newM);
293
- }
294
- return array;
295
- }, ([]));
296
- }
297
- /**
298
- * Resolve a given multiaddr. If this fails, an empty array will be returned
299
- */
300
- async _resolveRecord(ma, options) {
301
- try {
302
- ma = multiaddr(ma.toString()); // Use current multiaddr module
303
- const multiaddrs = await ma.resolve(options);
304
- return multiaddrs;
305
- }
306
- catch (err) {
307
- log.error(`multiaddr ${ma.toString()} could not be resolved`, err);
308
- return [];
309
- }
310
- }
311
- }
312
- /**
313
- * Type safe version of `list.filter(Boolean)`
314
- */
315
- function isTruthy(e) {
316
- return Boolean(e);
317
- }
318
- /**
319
- * Returns a random string
320
- */
321
- function randomId() {
322
- return `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`;
323
- }
324
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}