libp2p 2.1.7 → 2.1.8-5d199f9b6

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.
@@ -26,6 +26,7 @@ export declare class ReconnectQueue implements Startable {
26
26
  private readonly retryInterval?;
27
27
  private readonly backoffFactor?;
28
28
  private readonly connectionManager;
29
+ private readonly events;
29
30
  constructor(components: ReconnectQueueComponents, init?: ReconnectQueueInit);
30
31
  private maybeReconnect;
31
32
  start(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"reconnect-queue.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/reconnect-queue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAU,OAAO,EAAgB,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC7I,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;gBAExC,UAAU,EAAE,wBAAwB,EAAE,IAAI,GAAE,kBAAuB;YAsBlE,cAAc;IA2C5B,KAAK,IAAK,IAAI;IAIR,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;IAwBlC,IAAI,IAAK,IAAI;CAId"}
1
+ {"version":3,"file":"reconnect-queue.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/reconnect-queue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAU,OAAO,EAAgB,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC7I,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAE1C,UAAU,EAAE,wBAAwB,EAAE,IAAI,GAAE,kBAAuB;YAuBlE,cAAc;IA8D5B,KAAK,IAAK,IAAI;IAIR,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;IAwBlC,IAAI,IAAK,IAAI;CAId"}
@@ -15,6 +15,7 @@ export class ReconnectQueue {
15
15
  retryInterval;
16
16
  backoffFactor;
17
17
  connectionManager;
18
+ events;
18
19
  constructor(components, init = {}) {
19
20
  this.log = components.logger.forComponent('libp2p:reconnect-queue');
20
21
  this.peerStore = components.peerStore;
@@ -28,10 +29,11 @@ export class ReconnectQueue {
28
29
  this.retries = init.retries ?? 5;
29
30
  this.backoffFactor = init.backoffFactor;
30
31
  this.retryInterval = init.retryInterval;
32
+ this.events = components.events;
31
33
  components.events.addEventListener('peer:disconnect', (evt) => {
32
34
  this.maybeReconnect(evt.detail)
33
35
  .catch(err => {
34
- this.log.error('failed to maybe reconnect to %p', evt.detail, err);
36
+ this.log.error('failed to maybe reconnect to %p - %e', evt.detail, err);
35
37
  });
36
38
  });
37
39
  }
@@ -40,7 +42,7 @@ export class ReconnectQueue {
40
42
  return;
41
43
  }
42
44
  const peer = await this.peerStore.get(peerId);
43
- if (!peer.tags.has(KEEP_ALIVE)) {
45
+ if (!hasKeepAliveTag(peer)) {
44
46
  return;
45
47
  }
46
48
  if (this.queue.has(peerId)) {
@@ -57,7 +59,7 @@ export class ReconnectQueue {
57
59
  });
58
60
  }
59
61
  catch (err) {
60
- this.log('reconnecting to %p attempt %d of %d failed', peerId, attempt, this.retries, err);
62
+ this.log('reconnecting to %p attempt %d of %d failed - %e', peerId, attempt, this.retries, err);
61
63
  throw err;
62
64
  }
63
65
  }, {
@@ -69,8 +71,23 @@ export class ReconnectQueue {
69
71
  }, {
70
72
  peerId
71
73
  })
72
- .catch(err => {
73
- this.log.error('failed to reconnect to %p', peerId, err);
74
+ .catch(async (err) => {
75
+ this.log.error('failed to reconnect to %p - %e', peerId, err);
76
+ const tags = {};
77
+ [...peer.tags.keys()].forEach(key => {
78
+ if (key.startsWith(KEEP_ALIVE)) {
79
+ tags[key] = undefined;
80
+ }
81
+ });
82
+ await this.peerStore.merge(peerId, {
83
+ tags
84
+ });
85
+ this.events.safeDispatchEvent('peer:reconnect-failure', {
86
+ detail: peerId
87
+ });
88
+ })
89
+ .catch(async (err) => {
90
+ this.log.error('failed to remove keep-alive tag from %p - %e', peerId, err);
74
91
  });
75
92
  }
76
93
  start() {
@@ -81,9 +98,9 @@ export class ReconnectQueue {
81
98
  void Promise.resolve()
82
99
  .then(async () => {
83
100
  const keepAlivePeers = await this.peerStore.all({
84
- filters: [(peer) => {
85
- return peer.tags.has(KEEP_ALIVE);
86
- }]
101
+ filters: [
102
+ (peer) => hasKeepAliveTag(peer)
103
+ ]
87
104
  });
88
105
  await Promise.all(keepAlivePeers.map(async (peer) => {
89
106
  await this.connectionManager.openConnection(peer.id)
@@ -101,4 +118,12 @@ export class ReconnectQueue {
101
118
  this.queue.abort();
102
119
  }
103
120
  }
121
+ function hasKeepAliveTag(peer) {
122
+ for (const tag of peer.tags.keys()) {
123
+ if (tag.startsWith(KEEP_ALIVE)) {
124
+ return true;
125
+ }
126
+ }
127
+ return false;
128
+ }
104
129
  //# sourceMappingURL=reconnect-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconnect-queue.js","sourceRoot":"","sources":["../../../src/connection-manager/reconnect-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconnect-queue.js","sourceRoot":"","sources":["../../../src/connection-manager/reconnect-queue.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export declare const version = "2.1.7";
1
+ export declare const version = "2.1.8-5d199f9b6";
2
2
  export declare const name = "libp2p";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA;AAC9B,eAAO,MAAM,IAAI,WAAW,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,oBAAoB,CAAA;AACxC,eAAO,MAAM,IAAI,WAAW,CAAA"}
@@ -1,3 +1,3 @@
1
- export const version = '2.1.7';
1
+ export const version = '2.1.8-5d199f9b6';
2
2
  export const name = 'libp2p';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAC9B,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAA;AACxC,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libp2p",
3
- "version": "2.1.7",
3
+ "version": "2.1.8-5d199f9b6",
4
4
  "description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/libp2p#readme",
@@ -85,15 +85,15 @@
85
85
  "test:webkit": "aegir test -t browser -f \"./dist/test/**/*.spec.js\" -- --browser webkit"
86
86
  },
87
87
  "dependencies": {
88
- "@libp2p/crypto": "^5.0.4",
89
- "@libp2p/interface": "^2.1.2",
90
- "@libp2p/interface-internal": "^2.0.7",
91
- "@libp2p/logger": "^5.1.0",
92
- "@libp2p/multistream-select": "^6.0.5",
93
- "@libp2p/peer-collections": "^6.0.7",
94
- "@libp2p/peer-id": "^5.0.4",
95
- "@libp2p/peer-store": "^11.0.7",
96
- "@libp2p/utils": "^6.1.0",
88
+ "@libp2p/crypto": "5.0.5-5d199f9b6",
89
+ "@libp2p/interface": "2.1.3-5d199f9b6",
90
+ "@libp2p/interface-internal": "2.0.8-5d199f9b6",
91
+ "@libp2p/logger": "5.1.1-5d199f9b6",
92
+ "@libp2p/multistream-select": "6.0.6-5d199f9b6",
93
+ "@libp2p/peer-collections": "6.0.8-5d199f9b6",
94
+ "@libp2p/peer-id": "5.0.5-5d199f9b6",
95
+ "@libp2p/peer-store": "11.0.8-5d199f9b6",
96
+ "@libp2p/utils": "6.1.1-5d199f9b6",
97
97
  "@multiformats/dns": "^1.0.6",
98
98
  "@multiformats/multiaddr": "^12.2.3",
99
99
  "@multiformats/multiaddr-matcher": "^1.2.1",
@@ -114,13 +114,13 @@
114
114
  },
115
115
  "devDependencies": {
116
116
  "@chainsafe/libp2p-yamux": "^7.0.0",
117
- "@libp2p/circuit-relay-v2": "^2.1.3",
118
- "@libp2p/identify": "^3.0.7",
119
- "@libp2p/interface-compliance-tests": "^6.1.5",
120
- "@libp2p/mplex": "^11.0.7",
121
- "@libp2p/plaintext": "^2.0.7",
122
- "@libp2p/tcp": "^10.0.8",
123
- "@libp2p/websockets": "^9.0.7",
117
+ "@libp2p/circuit-relay-v2": "2.1.4-5d199f9b6",
118
+ "@libp2p/identify": "3.0.8-5d199f9b6",
119
+ "@libp2p/interface-compliance-tests": "6.1.6-5d199f9b6",
120
+ "@libp2p/mplex": "11.0.8-5d199f9b6",
121
+ "@libp2p/plaintext": "2.0.8-5d199f9b6",
122
+ "@libp2p/tcp": "10.0.9-5d199f9b6",
123
+ "@libp2p/websockets": "9.0.8-5d199f9b6",
124
124
  "@multiformats/mafmt": "^12.1.6",
125
125
  "aegir": "^44.0.1",
126
126
  "delay": "^6.0.0",
@@ -33,6 +33,7 @@ export class ReconnectQueue implements Startable {
33
33
  private readonly retryInterval?: number
34
34
  private readonly backoffFactor?: number
35
35
  private readonly connectionManager: ConnectionManager
36
+ private readonly events: TypedEventTarget<Libp2pEvents>
36
37
 
37
38
  constructor (components: ReconnectQueueComponents, init: ReconnectQueueInit = {}) {
38
39
  this.log = components.logger.forComponent('libp2p:reconnect-queue')
@@ -47,11 +48,12 @@ export class ReconnectQueue implements Startable {
47
48
  this.retries = init.retries ?? 5
48
49
  this.backoffFactor = init.backoffFactor
49
50
  this.retryInterval = init.retryInterval
51
+ this.events = components.events
50
52
 
51
53
  components.events.addEventListener('peer:disconnect', (evt) => {
52
54
  this.maybeReconnect(evt.detail)
53
55
  .catch(err => {
54
- this.log.error('failed to maybe reconnect to %p', evt.detail, err)
56
+ this.log.error('failed to maybe reconnect to %p - %e', evt.detail, err)
55
57
  })
56
58
  })
57
59
  }
@@ -63,7 +65,7 @@ export class ReconnectQueue implements Startable {
63
65
 
64
66
  const peer = await this.peerStore.get(peerId)
65
67
 
66
- if (!peer.tags.has(KEEP_ALIVE)) {
68
+ if (!hasKeepAliveTag(peer)) {
67
69
  return
68
70
  }
69
71
 
@@ -82,7 +84,7 @@ export class ReconnectQueue implements Startable {
82
84
  signal: options?.signal
83
85
  })
84
86
  } catch (err) {
85
- this.log('reconnecting to %p attempt %d of %d failed', peerId, attempt, this.retries, err)
87
+ this.log('reconnecting to %p attempt %d of %d failed - %e', peerId, attempt, this.retries, err)
86
88
  throw err
87
89
  }
88
90
  }, {
@@ -94,8 +96,27 @@ export class ReconnectQueue implements Startable {
94
96
  }, {
95
97
  peerId
96
98
  })
97
- .catch(err => {
98
- this.log.error('failed to reconnect to %p', peerId, err)
99
+ .catch(async err => {
100
+ this.log.error('failed to reconnect to %p - %e', peerId, err)
101
+
102
+ const tags: Record<string, undefined> = {}
103
+
104
+ ;[...peer.tags.keys()].forEach(key => {
105
+ if (key.startsWith(KEEP_ALIVE)) {
106
+ tags[key] = undefined
107
+ }
108
+ })
109
+
110
+ await this.peerStore.merge(peerId, {
111
+ tags
112
+ })
113
+
114
+ this.events.safeDispatchEvent('peer:reconnect-failure', {
115
+ detail: peerId
116
+ })
117
+ })
118
+ .catch(async err => {
119
+ this.log.error('failed to remove keep-alive tag from %p - %e', peerId, err)
99
120
  })
100
121
  }
101
122
 
@@ -108,9 +129,9 @@ export class ReconnectQueue implements Startable {
108
129
  void Promise.resolve()
109
130
  .then(async () => {
110
131
  const keepAlivePeers: Peer[] = await this.peerStore.all({
111
- filters: [(peer) => {
112
- return peer.tags.has(KEEP_ALIVE)
113
- }]
132
+ filters: [
133
+ (peer) => hasKeepAliveTag(peer)
134
+ ]
114
135
  })
115
136
 
116
137
  await Promise.all(
@@ -132,3 +153,13 @@ export class ReconnectQueue implements Startable {
132
153
  this.queue.abort()
133
154
  }
134
155
  }
156
+
157
+ function hasKeepAliveTag (peer: Peer): boolean {
158
+ for (const tag of peer.tags.keys()) {
159
+ if (tag.startsWith(KEEP_ALIVE)) {
160
+ return true
161
+ }
162
+ }
163
+
164
+ return false
165
+ }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '2.1.7'
1
+ export const version = '2.1.8-5d199f9b6'
2
2
  export const name = 'libp2p'
@@ -1,19 +0,0 @@
1
- {
2
- "AddressFilter": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.AddressFilter.html",
3
- "AddressManagerInit": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.AddressManagerInit.html",
4
- "ConnectionManagerInit": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.ConnectionManagerInit.html",
5
- "ConnectionMonitorInit": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.ConnectionMonitorInit.html",
6
- "Libp2pInit": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.Libp2pInit.html",
7
- ".:Libp2pInit": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.Libp2pInit.html",
8
- "TransportManagerInit": "https://libp2p.github.io/js-libp2p/interfaces/libp2p.index.TransportManagerInit.html",
9
- "Libp2pOptions": "https://libp2p.github.io/js-libp2p/types/libp2p.index.Libp2pOptions.html",
10
- ".:Libp2pOptions": "https://libp2p.github.io/js-libp2p/types/libp2p.index.Libp2pOptions.html",
11
- "ServiceFactoryMap": "https://libp2p.github.io/js-libp2p/types/libp2p.index.ServiceFactoryMap.html",
12
- ".:ServiceFactoryMap": "https://libp2p.github.io/js-libp2p/types/libp2p.index.ServiceFactoryMap.html",
13
- "createLibp2p": "https://libp2p.github.io/js-libp2p/functions/libp2p.index.createLibp2p.html",
14
- ".:createLibp2p": "https://libp2p.github.io/js-libp2p/functions/libp2p.index.createLibp2p.html",
15
- "name": "https://libp2p.github.io/js-libp2p/variables/libp2p.version.name.html",
16
- "./version:name": "https://libp2p.github.io/js-libp2p/variables/libp2p.version.name.html",
17
- "version": "https://libp2p.github.io/js-libp2p/variables/libp2p.version.version.html",
18
- "./version:version": "https://libp2p.github.io/js-libp2p/variables/libp2p.version.version.html"
19
- }