@helia/bitswap 0.0.0 → 1.0.0-59de059
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 +6 -1
- package/dist/src/bitswap.d.ts +3 -2
- package/dist/src/bitswap.d.ts.map +1 -1
- package/dist/src/bitswap.js +7 -14
- package/dist/src/bitswap.js.map +1 -1
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +2 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +22 -45
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/network.d.ts +8 -7
- package/dist/src/network.d.ts.map +1 -1
- package/dist/src/network.js +71 -169
- package/dist/src/network.js.map +1 -1
- package/dist/src/pb/message.d.ts +6 -6
- package/dist/src/pb/message.d.ts.map +1 -1
- package/dist/src/pb/message.js +37 -20
- package/dist/src/pb/message.js.map +1 -1
- package/dist/src/peer-want-lists/index.d.ts +3 -2
- package/dist/src/peer-want-lists/index.d.ts.map +1 -1
- package/dist/src/peer-want-lists/index.js +7 -3
- package/dist/src/peer-want-lists/index.js.map +1 -1
- package/dist/src/peer-want-lists/ledger.d.ts +3 -1
- package/dist/src/peer-want-lists/ledger.d.ts.map +1 -1
- package/dist/src/peer-want-lists/ledger.js +8 -0
- package/dist/src/peer-want-lists/ledger.js.map +1 -1
- package/dist/src/session.d.ts +13 -8
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/session.js +25 -88
- package/dist/src/session.js.map +1 -1
- package/dist/src/stats.d.ts +2 -2
- package/dist/src/stats.d.ts.map +1 -1
- package/dist/src/stats.js +4 -4
- package/dist/src/stats.js.map +1 -1
- package/dist/src/utils/merge-messages.d.ts +3 -0
- package/dist/src/utils/merge-messages.d.ts.map +1 -0
- package/dist/src/utils/merge-messages.js +51 -0
- package/dist/src/utils/merge-messages.js.map +1 -0
- package/dist/src/utils/split-message.d.ts +14 -0
- package/dist/src/utils/split-message.d.ts.map +1 -0
- package/dist/src/utils/split-message.js +99 -0
- package/dist/src/utils/split-message.js.map +1 -0
- package/dist/src/want-list.d.ts +20 -23
- package/dist/src/want-list.d.ts.map +1 -1
- package/dist/src/want-list.js +136 -133
- package/dist/src/want-list.js.map +1 -1
- package/package.json +6 -6
- package/src/bitswap.ts +9 -16
- package/src/constants.ts +2 -0
- package/src/index.ts +24 -51
- package/src/network.ts +83 -200
- package/src/pb/message.ts +40 -20
- package/src/peer-want-lists/index.ts +9 -5
- package/src/peer-want-lists/ledger.ts +11 -1
- package/src/session.ts +31 -120
- package/src/stats.ts +6 -6
- package/src/utils/merge-messages.ts +70 -0
- package/src/utils/split-message.ts +131 -0
- package/src/want-list.ts +205 -212
- package/dist/typedoc-urls.json +0 -24
package/dist/src/want-list.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { trackedPeerMap
|
|
1
|
+
import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface';
|
|
2
|
+
import { trackedPeerMap } from '@libp2p/peer-collections';
|
|
3
3
|
import { trackedMap } from '@libp2p/utils/tracked-map';
|
|
4
4
|
import all from 'it-all';
|
|
5
5
|
import filter from 'it-filter';
|
|
@@ -8,11 +8,13 @@ import { pipe } from 'it-pipe';
|
|
|
8
8
|
import { CID } from 'multiformats/cid';
|
|
9
9
|
import { sha256 } from 'multiformats/hashes/sha2';
|
|
10
10
|
import pDefer from 'p-defer';
|
|
11
|
+
import { raceEvent } from 'race-event';
|
|
12
|
+
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
11
13
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
12
14
|
import { DEFAULT_MESSAGE_SEND_DELAY } from './constants.js';
|
|
13
15
|
import { BlockPresenceType, WantType } from './pb/message.js';
|
|
14
16
|
import vd from './utils/varint-decoder.js';
|
|
15
|
-
export class WantList {
|
|
17
|
+
export class WantList extends TypedEventEmitter {
|
|
16
18
|
/**
|
|
17
19
|
* Tracks what CIDs we've previously sent to which peers
|
|
18
20
|
*/
|
|
@@ -23,14 +25,17 @@ export class WantList {
|
|
|
23
25
|
sendMessagesDelay;
|
|
24
26
|
sendMessagesTimeout;
|
|
25
27
|
hashLoader;
|
|
28
|
+
sendingMessages;
|
|
26
29
|
constructor(components, init = {}) {
|
|
30
|
+
super();
|
|
31
|
+
setMaxListeners(Infinity, this);
|
|
27
32
|
this.peers = trackedPeerMap({
|
|
28
|
-
name: '
|
|
29
|
-
metrics: components.metrics
|
|
33
|
+
name: 'helia_bitswap_peers',
|
|
34
|
+
metrics: components.libp2p.metrics
|
|
30
35
|
});
|
|
31
36
|
this.wants = trackedMap({
|
|
32
|
-
name: '
|
|
33
|
-
metrics: components.metrics
|
|
37
|
+
name: 'helia_bitswap_wantlist',
|
|
38
|
+
metrics: components.libp2p.metrics
|
|
34
39
|
});
|
|
35
40
|
this.network = components.network;
|
|
36
41
|
this.sendMessagesDelay = init.sendMessagesDelay ?? DEFAULT_MESSAGE_SEND_DELAY;
|
|
@@ -58,17 +63,11 @@ export class WantList {
|
|
|
58
63
|
if (entry == null) {
|
|
59
64
|
entry = {
|
|
60
65
|
cid,
|
|
61
|
-
session: new PeerSet(),
|
|
62
66
|
priority: options.priority ?? 1,
|
|
63
67
|
wantType: options.wantType ?? WantType.WantBlock,
|
|
64
68
|
cancel: false,
|
|
65
|
-
sendDontHave: true
|
|
66
|
-
blockWantListeners: [],
|
|
67
|
-
blockPresenceListeners: []
|
|
69
|
+
sendDontHave: true
|
|
68
70
|
};
|
|
69
|
-
if (options.peerId != null) {
|
|
70
|
-
entry.session.add(options.peerId);
|
|
71
|
-
}
|
|
72
71
|
this.wants.set(cidStr, entry);
|
|
73
72
|
}
|
|
74
73
|
// upgrade want-have to want-block if the new want is a WantBlock but the
|
|
@@ -76,39 +75,37 @@ export class WantList {
|
|
|
76
75
|
if (entry.wantType === WantType.WantHave && options.wantType === WantType.WantBlock) {
|
|
77
76
|
entry.wantType = WantType.WantBlock;
|
|
78
77
|
}
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
entry.session.clear();
|
|
78
|
+
// broadcast changes
|
|
79
|
+
await this.sendMessagesDebounced();
|
|
80
|
+
try {
|
|
81
|
+
if (options.wantType === WantType.WantBlock) {
|
|
82
|
+
const event = await raceEvent(this, 'block', options?.signal, {
|
|
83
|
+
filter: (event) => {
|
|
84
|
+
return uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
85
|
+
},
|
|
86
|
+
errorMessage: 'Want was aborted'
|
|
87
|
+
});
|
|
88
|
+
return event.detail;
|
|
91
89
|
}
|
|
90
|
+
const event = await raceEvent(this, 'presence', options?.signal, {
|
|
91
|
+
filter: (event) => {
|
|
92
|
+
return uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
93
|
+
},
|
|
94
|
+
errorMessage: 'Want was aborted'
|
|
95
|
+
});
|
|
96
|
+
return event.detail;
|
|
92
97
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const p = deferred = pDefer();
|
|
97
|
-
entry.blockWantListeners.push(p);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
const p = deferred = pDefer();
|
|
101
|
-
entry.blockPresenceListeners.push(p);
|
|
102
|
-
}
|
|
103
|
-
// reject the promise if the want is rejected
|
|
104
|
-
const abortListener = () => {
|
|
105
|
-
this.log('want for %c was aborted, cancelling want', cid);
|
|
106
|
-
if (entry != null) {
|
|
98
|
+
finally {
|
|
99
|
+
if (options.signal?.aborted === true) {
|
|
100
|
+
this.log('want for %c was aborted, cancelling want', cid);
|
|
107
101
|
entry.cancel = true;
|
|
102
|
+
// broadcast changes
|
|
103
|
+
await this.sendMessagesDebounced();
|
|
108
104
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async sendMessagesDebounced() {
|
|
108
|
+
await this.sendingMessages?.promise;
|
|
112
109
|
// broadcast changes
|
|
113
110
|
clearTimeout(this.sendMessagesTimeout);
|
|
114
111
|
this.sendMessagesTimeout = setTimeout(() => {
|
|
@@ -117,32 +114,15 @@ export class WantList {
|
|
|
117
114
|
this.log('error sending messages to peers', err);
|
|
118
115
|
});
|
|
119
116
|
}, this.sendMessagesDelay);
|
|
120
|
-
try {
|
|
121
|
-
return await deferred.promise;
|
|
122
|
-
}
|
|
123
|
-
finally {
|
|
124
|
-
// remove listener
|
|
125
|
-
options.signal?.removeEventListener('abort', abortListener);
|
|
126
|
-
// remove deferred promise
|
|
127
|
-
if (options.wantType === WantType.WantBlock) {
|
|
128
|
-
entry.blockWantListeners = entry.blockWantListeners.filter(recipient => recipient !== deferred);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
entry.blockPresenceListeners = entry.blockPresenceListeners.filter(recipient => recipient !== deferred);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
117
|
}
|
|
135
118
|
async sendMessages() {
|
|
136
|
-
|
|
119
|
+
this.sendingMessages = pDefer();
|
|
120
|
+
await Promise.all([...this.peers.entries()].map(async ([peerId, sentWants]) => {
|
|
137
121
|
const sent = new Set();
|
|
138
122
|
const message = {
|
|
139
123
|
wantlist: {
|
|
140
124
|
full: false,
|
|
141
125
|
entries: pipe(this.wants.entries(), (source) => filter(source, ([key, entry]) => {
|
|
142
|
-
// skip session-only wants
|
|
143
|
-
if (entry.session.size > 0 && !entry.session.has(peerId)) {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
126
|
const sentPreviously = sentWants.has(key);
|
|
147
127
|
// don't cancel if we've not sent it to them before
|
|
148
128
|
if (entry.cancel) {
|
|
@@ -176,7 +156,9 @@ export class WantList {
|
|
|
176
156
|
catch (err) {
|
|
177
157
|
this.log.error('error sending full wantlist to new peer', err);
|
|
178
158
|
}
|
|
179
|
-
}
|
|
159
|
+
})).catch(err => {
|
|
160
|
+
this.log.error('error sending messages', err);
|
|
161
|
+
});
|
|
180
162
|
// queued all message sends, remove cancelled wants from wantlist and sent
|
|
181
163
|
// wants
|
|
182
164
|
for (const [key, entry] of this.wants) {
|
|
@@ -187,6 +169,7 @@ export class WantList {
|
|
|
187
169
|
}
|
|
188
170
|
}
|
|
189
171
|
}
|
|
172
|
+
this.sendingMessages.resolve();
|
|
190
173
|
}
|
|
191
174
|
has(cid) {
|
|
192
175
|
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
@@ -195,35 +178,26 @@ export class WantList {
|
|
|
195
178
|
/**
|
|
196
179
|
* Add a CID to the wantlist
|
|
197
180
|
*/
|
|
198
|
-
async
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
cid: cid.bytes,
|
|
210
|
-
sendDontHave: true,
|
|
211
|
-
wantType: WantType.WantHave,
|
|
212
|
-
priority: 1
|
|
213
|
-
}]
|
|
214
|
-
}
|
|
215
|
-
});
|
|
181
|
+
async wantSessionPresence(cid, peerId, options = {}) {
|
|
182
|
+
// sending WantHave directly to peer
|
|
183
|
+
await this.network.sendMessage(peerId, {
|
|
184
|
+
wantlist: {
|
|
185
|
+
full: false,
|
|
186
|
+
entries: [{
|
|
187
|
+
cid: cid.bytes,
|
|
188
|
+
sendDontHave: true,
|
|
189
|
+
wantType: WantType.WantHave,
|
|
190
|
+
priority: 1
|
|
191
|
+
}]
|
|
216
192
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
193
|
+
});
|
|
194
|
+
// wait for peer response
|
|
195
|
+
const event = await raceEvent(this, 'presence', options.signal, {
|
|
196
|
+
filter: (event) => {
|
|
197
|
+
return peerId.equals(event.detail.sender) && uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
221
198
|
}
|
|
222
|
-
}
|
|
223
|
-
return this.addEntry(cid, {
|
|
224
|
-
...options,
|
|
225
|
-
wantType: WantType.WantHave
|
|
226
199
|
});
|
|
200
|
+
return event.detail;
|
|
227
201
|
}
|
|
228
202
|
/**
|
|
229
203
|
* Add a CID to the wantlist
|
|
@@ -234,20 +208,53 @@ export class WantList {
|
|
|
234
208
|
wantType: WantType.WantBlock
|
|
235
209
|
});
|
|
236
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Add a CID to the wantlist
|
|
213
|
+
*/
|
|
214
|
+
async wantSessionBlock(cid, peerId, options = {}) {
|
|
215
|
+
// sending WantBlockResult directly to peer
|
|
216
|
+
await this.network.sendMessage(peerId, {
|
|
217
|
+
wantlist: {
|
|
218
|
+
full: false,
|
|
219
|
+
entries: [{
|
|
220
|
+
cid: cid.bytes,
|
|
221
|
+
sendDontHave: true,
|
|
222
|
+
wantType: WantType.WantBlock,
|
|
223
|
+
priority: 1
|
|
224
|
+
}]
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
// wait for peer response
|
|
228
|
+
const event = await raceEvent(this, 'presence', options.signal, {
|
|
229
|
+
filter: (event) => {
|
|
230
|
+
return peerId.equals(event.detail.sender) && uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
return event.detail;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Invoked when a block has been received from an external source
|
|
237
|
+
*/
|
|
238
|
+
async receivedBlock(cid, options) {
|
|
239
|
+
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
240
|
+
const entry = this.wants.get(cidStr);
|
|
241
|
+
if (entry == null) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
entry.cancel = true;
|
|
245
|
+
await this.sendMessagesDebounced();
|
|
246
|
+
}
|
|
237
247
|
/**
|
|
238
248
|
* Invoked when a message is received from a bitswap peer
|
|
239
249
|
*/
|
|
240
250
|
async receiveMessage(sender, message) {
|
|
241
|
-
this.log('received message from %p', sender);
|
|
242
|
-
|
|
243
|
-
const blockResults = [];
|
|
244
|
-
const presenceResults = [];
|
|
251
|
+
this.log('received message %d from %p with %d blocks', sender, message.blocks.length);
|
|
252
|
+
let blocksCancelled = false;
|
|
245
253
|
// process blocks
|
|
246
254
|
for (const block of message.blocks) {
|
|
247
255
|
if (block.prefix == null || block.data == null) {
|
|
248
256
|
continue;
|
|
249
257
|
}
|
|
250
|
-
this.log('received block');
|
|
251
258
|
const values = vd(block.prefix);
|
|
252
259
|
const cidVersion = values[0];
|
|
253
260
|
const multicodec = values[1];
|
|
@@ -258,58 +265,53 @@ export class WantList {
|
|
|
258
265
|
this.log.error('unknown hash algorithm', hashAlg);
|
|
259
266
|
continue;
|
|
260
267
|
}
|
|
261
|
-
|
|
268
|
+
let hash = hasher.digest(block.data);
|
|
269
|
+
if (hash.then != null) {
|
|
270
|
+
hash = await hash;
|
|
271
|
+
}
|
|
262
272
|
const cid = CID.create(cidVersion === 0 ? 0 : 1, multicodec, hash);
|
|
263
273
|
this.log('received block from %p for %c', sender, cid);
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
sender,
|
|
271
|
-
cid,
|
|
272
|
-
has: true
|
|
274
|
+
this.safeDispatchEvent('block', {
|
|
275
|
+
detail: {
|
|
276
|
+
sender,
|
|
277
|
+
cid,
|
|
278
|
+
block: block.data
|
|
279
|
+
}
|
|
273
280
|
});
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
cid,
|
|
282
|
-
has: type === BlockPresenceType.HaveBlock
|
|
281
|
+
this.safeDispatchEvent('presence', {
|
|
282
|
+
detail: {
|
|
283
|
+
sender,
|
|
284
|
+
cid,
|
|
285
|
+
has: true,
|
|
286
|
+
block: block.data
|
|
287
|
+
}
|
|
283
288
|
});
|
|
284
|
-
|
|
285
|
-
for (const result of blockResults) {
|
|
286
|
-
const cidStr = uint8ArrayToString(result.cid.multihash.bytes, 'base64');
|
|
289
|
+
const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
|
|
287
290
|
const entry = this.wants.get(cidStr);
|
|
288
291
|
if (entry == null) {
|
|
289
|
-
|
|
292
|
+
continue;
|
|
290
293
|
}
|
|
291
|
-
const recipients = entry.blockWantListeners;
|
|
292
|
-
entry.blockWantListeners = [];
|
|
293
|
-
recipients.forEach((p) => {
|
|
294
|
-
p.resolve(result);
|
|
295
|
-
});
|
|
296
294
|
// since we received the block, flip the cancel flag to send cancels to
|
|
297
295
|
// any peers on the next message sending iteration, this will remove it
|
|
298
296
|
// from the internal want list
|
|
299
297
|
entry.cancel = true;
|
|
298
|
+
blocksCancelled = true;
|
|
300
299
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
300
|
+
// process block presences
|
|
301
|
+
for (const { cid: cidBytes, type } of message.blockPresences) {
|
|
302
|
+
const cid = CID.decode(cidBytes);
|
|
303
|
+
this.log('received %s from %p for %c', type, sender, cid);
|
|
304
|
+
this.safeDispatchEvent('presence', {
|
|
305
|
+
detail: {
|
|
306
|
+
sender,
|
|
307
|
+
cid,
|
|
308
|
+
has: type === BlockPresenceType.HaveBlock
|
|
309
|
+
}
|
|
311
310
|
});
|
|
312
311
|
}
|
|
312
|
+
if (blocksCancelled) {
|
|
313
|
+
await this.sendMessagesDebounced();
|
|
314
|
+
}
|
|
313
315
|
}
|
|
314
316
|
/**
|
|
315
317
|
* Invoked when the network topology notices a new peer that supports Bitswap
|
|
@@ -320,7 +322,7 @@ export class WantList {
|
|
|
320
322
|
const message = {
|
|
321
323
|
wantlist: {
|
|
322
324
|
full: true,
|
|
323
|
-
entries: pipe(this.wants.entries(), (source) => filter(source, ([key, entry]) => !entry.cancel
|
|
325
|
+
entries: pipe(this.wants.entries(), (source) => filter(source, ([key, entry]) => !entry.cancel), (source) => map(source, ([key, entry]) => {
|
|
324
326
|
sentWants.add(key);
|
|
325
327
|
return {
|
|
326
328
|
cid: entry.cid.bytes,
|
|
@@ -356,6 +358,7 @@ export class WantList {
|
|
|
356
358
|
}
|
|
357
359
|
stop() {
|
|
358
360
|
this.peers.clear();
|
|
361
|
+
clearTimeout(this.sendMessagesTimeout);
|
|
359
362
|
}
|
|
360
363
|
}
|
|
361
364
|
//# sourceMappingURL=want-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"want-list.js","sourceRoot":"","sources":["../../src/want-list.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"want-list.js","sourceRoot":"","sources":["../../src/want-list.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/bitswap",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.0-59de059",
|
|
4
4
|
"description": "JavaScript implementation of the Bitswap data exchange protocol used by Helia",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia/tree/main/packages/bitswap#readme",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"url": "https://github.com/ipfs/helia/issues"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|
|
15
|
-
"access": "public"
|
|
15
|
+
"access": "public",
|
|
16
|
+
"provenance": true
|
|
16
17
|
},
|
|
17
18
|
"keywords": [
|
|
18
19
|
"exchange",
|
|
@@ -147,15 +148,14 @@
|
|
|
147
148
|
"docs": "aegir docs"
|
|
148
149
|
},
|
|
149
150
|
"dependencies": {
|
|
150
|
-
"@helia/interface": "
|
|
151
|
+
"@helia/interface": "4.2.0-59de059",
|
|
152
|
+
"@helia/utils": "0.2.0-59de059",
|
|
151
153
|
"@libp2p/interface": "^1.1.2",
|
|
152
154
|
"@libp2p/logger": "^4.0.5",
|
|
153
155
|
"@libp2p/peer-collections": "^5.1.6",
|
|
154
156
|
"@libp2p/utils": "^5.2.3",
|
|
155
157
|
"@multiformats/multiaddr": "^12.1.14",
|
|
156
|
-
"@multiformats/multiaddr-matcher": "^1.1.2",
|
|
157
158
|
"any-signal": "^4.1.1",
|
|
158
|
-
"debug": "^4.3.4",
|
|
159
159
|
"interface-blockstore": "^5.2.9",
|
|
160
160
|
"interface-store": "^5.1.7",
|
|
161
161
|
"it-all": "^3.0.4",
|
|
@@ -164,7 +164,6 @@
|
|
|
164
164
|
"it-length-prefixed": "^9.0.0",
|
|
165
165
|
"it-length-prefixed-stream": "^1.1.6",
|
|
166
166
|
"it-map": "^3.0.5",
|
|
167
|
-
"it-merge": "^3.0.3",
|
|
168
167
|
"it-pipe": "^3.0.1",
|
|
169
168
|
"it-take": "^3.0.1",
|
|
170
169
|
"multiformats": "^13.0.1",
|
|
@@ -177,6 +176,7 @@
|
|
|
177
176
|
"uint8arrays": "^5.0.1"
|
|
178
177
|
},
|
|
179
178
|
"devDependencies": {
|
|
179
|
+
"@libp2p/crypto": "^4.0.6",
|
|
180
180
|
"@libp2p/interface-compliance-tests": "^5.1.3",
|
|
181
181
|
"@libp2p/peer-id-factory": "^4.0.5",
|
|
182
182
|
"@types/sinon": "^17.0.3",
|
package/src/bitswap.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/* eslint-disable no-loop-func */
|
|
2
|
-
import { DEFAULT_SESSION_MAX_PROVIDERS, DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY } from '@helia/interface'
|
|
3
2
|
import { setMaxListeners } from '@libp2p/interface'
|
|
4
3
|
import { anySignal } from 'any-signal'
|
|
5
4
|
import { Network } from './network.js'
|
|
@@ -7,7 +6,8 @@ import { PeerWantLists } from './peer-want-lists/index.js'
|
|
|
7
6
|
import { createBitswapSession } from './session.js'
|
|
8
7
|
import { Stats } from './stats.js'
|
|
9
8
|
import { WantList } from './want-list.js'
|
|
10
|
-
import type { BitswapOptions, Bitswap as BitswapInterface, BitswapWantProgressEvents, BitswapNotifyProgressEvents,
|
|
9
|
+
import type { BitswapOptions, Bitswap as BitswapInterface, BitswapWantProgressEvents, BitswapNotifyProgressEvents, WantListEntry, BitswapComponents } from './index.js'
|
|
10
|
+
import type { BlockBroker, CreateSessionOptions } from '@helia/interface'
|
|
11
11
|
import type { ComponentLogger, PeerId } from '@libp2p/interface'
|
|
12
12
|
import type { Logger } from '@libp2p/logger'
|
|
13
13
|
import type { AbortOptions } from '@multiformats/multiaddr'
|
|
@@ -62,28 +62,18 @@ export class Bitswap implements BitswapInterface {
|
|
|
62
62
|
}, init)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
const minProviders = options?.minProviders ?? DEFAULT_SESSION_MIN_PROVIDERS
|
|
67
|
-
const maxProviders = options?.maxProviders ?? DEFAULT_SESSION_MAX_PROVIDERS
|
|
68
|
-
|
|
65
|
+
createSession (options: CreateSessionOptions = {}): Required<Pick<BlockBroker<BitswapWantProgressEvents>, 'retrieve'>> {
|
|
69
66
|
return createBitswapSession({
|
|
70
67
|
wantList: this.wantList,
|
|
71
68
|
network: this.network,
|
|
72
69
|
logger: this.logger
|
|
73
|
-
},
|
|
74
|
-
root,
|
|
75
|
-
queryConcurrency: options?.providerQueryConcurrency ?? DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY,
|
|
76
|
-
minProviders,
|
|
77
|
-
maxProviders,
|
|
78
|
-
connectedPeers: options?.queryConnectedPeers !== false ? [...this.wantList.peers.keys()] : [],
|
|
79
|
-
signal: options?.signal
|
|
80
|
-
})
|
|
70
|
+
}, options)
|
|
81
71
|
}
|
|
82
72
|
|
|
83
73
|
async want (cid: CID, options: WantOptions = {}): Promise<Uint8Array> {
|
|
84
74
|
const controller = new AbortController()
|
|
85
|
-
setMaxListeners(Infinity, controller.signal)
|
|
86
75
|
const signal = anySignal([controller.signal, options.signal])
|
|
76
|
+
setMaxListeners(Infinity, controller.signal, signal)
|
|
87
77
|
|
|
88
78
|
// find providers and connect to them
|
|
89
79
|
this.network.findAndConnect(cid, {
|
|
@@ -117,7 +107,10 @@ export class Bitswap implements BitswapInterface {
|
|
|
117
107
|
* Sends notifications about the arrival of a block
|
|
118
108
|
*/
|
|
119
109
|
async notify (cid: CID, block: Uint8Array, options: ProgressOptions<BitswapNotifyProgressEvents> & AbortOptions = {}): Promise<void> {
|
|
120
|
-
await
|
|
110
|
+
await Promise.all([
|
|
111
|
+
this.peerWantLists.receivedBlock(cid, options),
|
|
112
|
+
this.wantList.receivedBlock(cid, options)
|
|
113
|
+
])
|
|
121
114
|
}
|
|
122
115
|
|
|
123
116
|
getWantlist (): WantListEntry[] {
|
package/src/constants.ts
CHANGED
|
@@ -9,3 +9,5 @@ export const DEFAULT_MESSAGE_SEND_CONCURRENCY = 50
|
|
|
9
9
|
export const DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS = false
|
|
10
10
|
export const DEFAULT_SESSION_ROOT_PRIORITY = 1
|
|
11
11
|
export const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3
|
|
12
|
+
export const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE = 1024 * 1024 * 2
|
|
13
|
+
export const DEFAULT_MAX_INCOMING_MESSAGE_SIZE = DEFAULT_MAX_OUTGOING_MESSAGE_SIZE
|