@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.
Files changed (62) hide show
  1. package/dist/index.min.js +6 -1
  2. package/dist/src/bitswap.d.ts +3 -2
  3. package/dist/src/bitswap.d.ts.map +1 -1
  4. package/dist/src/bitswap.js +7 -14
  5. package/dist/src/bitswap.js.map +1 -1
  6. package/dist/src/constants.d.ts +2 -0
  7. package/dist/src/constants.d.ts.map +1 -1
  8. package/dist/src/constants.js +2 -0
  9. package/dist/src/constants.js.map +1 -1
  10. package/dist/src/index.d.ts +22 -45
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/network.d.ts +8 -7
  14. package/dist/src/network.d.ts.map +1 -1
  15. package/dist/src/network.js +71 -169
  16. package/dist/src/network.js.map +1 -1
  17. package/dist/src/pb/message.d.ts +6 -6
  18. package/dist/src/pb/message.d.ts.map +1 -1
  19. package/dist/src/pb/message.js +37 -20
  20. package/dist/src/pb/message.js.map +1 -1
  21. package/dist/src/peer-want-lists/index.d.ts +3 -2
  22. package/dist/src/peer-want-lists/index.d.ts.map +1 -1
  23. package/dist/src/peer-want-lists/index.js +7 -3
  24. package/dist/src/peer-want-lists/index.js.map +1 -1
  25. package/dist/src/peer-want-lists/ledger.d.ts +3 -1
  26. package/dist/src/peer-want-lists/ledger.d.ts.map +1 -1
  27. package/dist/src/peer-want-lists/ledger.js +8 -0
  28. package/dist/src/peer-want-lists/ledger.js.map +1 -1
  29. package/dist/src/session.d.ts +13 -8
  30. package/dist/src/session.d.ts.map +1 -1
  31. package/dist/src/session.js +25 -88
  32. package/dist/src/session.js.map +1 -1
  33. package/dist/src/stats.d.ts +2 -2
  34. package/dist/src/stats.d.ts.map +1 -1
  35. package/dist/src/stats.js +4 -4
  36. package/dist/src/stats.js.map +1 -1
  37. package/dist/src/utils/merge-messages.d.ts +3 -0
  38. package/dist/src/utils/merge-messages.d.ts.map +1 -0
  39. package/dist/src/utils/merge-messages.js +51 -0
  40. package/dist/src/utils/merge-messages.js.map +1 -0
  41. package/dist/src/utils/split-message.d.ts +14 -0
  42. package/dist/src/utils/split-message.d.ts.map +1 -0
  43. package/dist/src/utils/split-message.js +99 -0
  44. package/dist/src/utils/split-message.js.map +1 -0
  45. package/dist/src/want-list.d.ts +20 -23
  46. package/dist/src/want-list.d.ts.map +1 -1
  47. package/dist/src/want-list.js +136 -133
  48. package/dist/src/want-list.js.map +1 -1
  49. package/package.json +6 -6
  50. package/src/bitswap.ts +9 -16
  51. package/src/constants.ts +2 -0
  52. package/src/index.ts +24 -51
  53. package/src/network.ts +83 -200
  54. package/src/pb/message.ts +40 -20
  55. package/src/peer-want-lists/index.ts +9 -5
  56. package/src/peer-want-lists/ledger.ts +11 -1
  57. package/src/session.ts +31 -120
  58. package/src/stats.ts +6 -6
  59. package/src/utils/merge-messages.ts +70 -0
  60. package/src/utils/split-message.ts +131 -0
  61. package/src/want-list.ts +205 -212
  62. package/dist/typedoc-urls.json +0 -24
@@ -1,5 +1,5 @@
1
- import { AbortError } from '@libp2p/interface';
2
- import { trackedPeerMap, PeerSet } from '@libp2p/peer-collections';
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: 'ipfs_bitswap_peers',
29
- metrics: components.metrics
33
+ name: 'helia_bitswap_peers',
34
+ metrics: components.libp2p.metrics
30
35
  });
31
36
  this.wants = trackedMap({
32
- name: 'ipfs_bitswap_wantlist',
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
- // if this want was part of a session..
80
- if (entry.session.size > 0) {
81
- // if the new want is also part of a session, expand the want session to
82
- // include both sets of peers
83
- if (options.peerId != null) {
84
- entry.session.add(options.peerId);
85
- }
86
- // if the new want is not part of a session, make this want a non-session
87
- // want - nb. this will cause this WantList entry to be sent to every peer
88
- // instead of just the ones in the session
89
- if (options.peerId == null) {
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
- // add a promise that will be resolved or rejected when the response arrives
94
- let deferred;
95
- if (options.wantType === WantType.WantBlock) {
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
- deferred.reject(new AbortError('Want was aborted'));
110
- };
111
- options.signal?.addEventListener('abort', abortListener);
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
- for (const [peerId, sentWants] of this.peers) {
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 wantPresence(cid, options = {}) {
199
- if (options.peerId != null && this.peers.get(options.peerId) == null) {
200
- const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
201
- try {
202
- // if we don't have them as a peer, add them
203
- this.peers.set(options.peerId, new Set([cidStr]));
204
- // sending WantHave directly to peer
205
- await this.network.sendMessage(options.peerId, {
206
- wantlist: {
207
- full: false,
208
- entries: [{
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
- catch (err) {
218
- // sending failed, remove them as a peer
219
- this.peers.delete(options.peerId);
220
- throw err;
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
- // blocks received
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
- const hash = await hasher.digest(block.data);
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
- blockResults.push({
265
- sender,
266
- cid,
267
- block: block.data
268
- });
269
- presenceResults.push({
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
- // process block presences
276
- for (const { cid: cidBytes, type } of message.blockPresences) {
277
- const cid = CID.decode(cidBytes);
278
- this.log('received %s from %p for %c', type, sender, cid);
279
- presenceResults.push({
280
- sender,
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
- return;
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
- for (const result of presenceResults) {
302
- const cidStr = uint8ArrayToString(result.cid.multihash.bytes, 'base64');
303
- const entry = this.wants.get(cidStr);
304
- if (entry == null) {
305
- return;
306
- }
307
- const recipients = entry.blockPresenceListeners;
308
- entry.blockPresenceListeners = [];
309
- recipients.forEach((p) => {
310
- p.resolve(result);
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 && (entry.session.size > 0 && !entry.session.has(peerId))), (source) => filter(source, ([key, entry]) => !entry.cancel), (source) => map(source, ([key, entry]) => {
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": "0.0.0",
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": "^4.0.0",
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, BitswapSession, WantListEntry, BitswapComponents, CreateBitswapSessionOptions } from './index.js'
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
- async createSession (root: CID, options?: CreateBitswapSessionOptions): Promise<BitswapSession> {
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 this.peerWantLists.receivedBlock(cid, options)
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