libp2p 2.1.7 → 2.1.8
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/dist/index.min.js +7 -7
- package/dist/src/connection-manager/reconnect-queue.d.ts +1 -0
- package/dist/src/connection-manager/reconnect-queue.d.ts.map +1 -1
- package/dist/src/connection-manager/reconnect-queue.js +33 -8
- package/dist/src/connection-manager/reconnect-queue.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +17 -17
- package/src/connection-manager/reconnect-queue.ts +39 -8
- package/src/version.ts +1 -1
|
@@ -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;
|
|
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
|
|
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: [
|
|
85
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAmBxD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACR,GAAG,CAAQ;IACX,KAAK,CAAW;IACzB,OAAO,CAAS;IACP,SAAS,CAAW;IACpB,OAAO,CAAQ;IACf,aAAa,CAAS;IACtB,aAAa,CAAS;IACtB,iBAAiB,CAAmB;
|
|
1
|
+
{"version":3,"file":"reconnect-queue.js","sourceRoot":"","sources":["../../../src/connection-manager/reconnect-queue.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.d.ts
CHANGED
package/dist/src/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "libp2p",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.8",
|
|
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.
|
|
89
|
-
"@libp2p/interface": "^2.1.
|
|
90
|
-
"@libp2p/interface-internal": "^2.0.
|
|
91
|
-
"@libp2p/logger": "^5.1.
|
|
92
|
-
"@libp2p/multistream-select": "^6.0.
|
|
93
|
-
"@libp2p/peer-collections": "^6.0.
|
|
94
|
-
"@libp2p/peer-id": "^5.0.
|
|
95
|
-
"@libp2p/peer-store": "^11.0.
|
|
96
|
-
"@libp2p/utils": "^6.1.
|
|
88
|
+
"@libp2p/crypto": "^5.0.5",
|
|
89
|
+
"@libp2p/interface": "^2.1.3",
|
|
90
|
+
"@libp2p/interface-internal": "^2.0.8",
|
|
91
|
+
"@libp2p/logger": "^5.1.1",
|
|
92
|
+
"@libp2p/multistream-select": "^6.0.6",
|
|
93
|
+
"@libp2p/peer-collections": "^6.0.8",
|
|
94
|
+
"@libp2p/peer-id": "^5.0.5",
|
|
95
|
+
"@libp2p/peer-store": "^11.0.8",
|
|
96
|
+
"@libp2p/utils": "^6.1.1",
|
|
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.
|
|
118
|
-
"@libp2p/identify": "^3.0.
|
|
119
|
-
"@libp2p/interface-compliance-tests": "^6.1.
|
|
120
|
-
"@libp2p/mplex": "^11.0.
|
|
121
|
-
"@libp2p/plaintext": "^2.0.
|
|
122
|
-
"@libp2p/tcp": "^10.0.
|
|
123
|
-
"@libp2p/websockets": "^9.0.
|
|
117
|
+
"@libp2p/circuit-relay-v2": "^2.1.4",
|
|
118
|
+
"@libp2p/identify": "^3.0.8",
|
|
119
|
+
"@libp2p/interface-compliance-tests": "^6.1.6",
|
|
120
|
+
"@libp2p/mplex": "^11.0.8",
|
|
121
|
+
"@libp2p/plaintext": "^2.0.8",
|
|
122
|
+
"@libp2p/tcp": "^10.0.9",
|
|
123
|
+
"@libp2p/websockets": "^9.0.8",
|
|
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
|
|
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: [
|
|
112
|
-
|
|
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.
|
|
1
|
+
export const version = '2.1.8'
|
|
2
2
|
export const name = 'libp2p'
|