@helia/bitswap 3.1.4 → 3.2.0

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.
@@ -7,7 +7,7 @@ import pDefer from 'p-defer';
7
7
  import { raceEvent } from 'race-event';
8
8
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
9
9
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
10
- import { DEFAULT_MESSAGE_SEND_DELAY } from "./constants.js";
10
+ import { DEFAULT_WANTLIST_SEND_DEBOUNCE } from "./constants.js";
11
11
  import { BlockPresenceType, WantType } from "./pb/message.js";
12
12
  import { QueuedBitswapMessage } from "./utils/bitswap-message.js";
13
13
  import vd from "./utils/varint-decoder.js";
@@ -19,9 +19,9 @@ export class WantList extends TypedEventEmitter {
19
19
  wants;
20
20
  network;
21
21
  log;
22
- sendMessagesDelay;
22
+ sendWantlistDebounce;
23
23
  sendMessagesTimeout;
24
- hashLoader;
24
+ getHasher;
25
25
  sendingMessages;
26
26
  constructor(components, init = {}) {
27
27
  super();
@@ -35,13 +35,13 @@ export class WantList extends TypedEventEmitter {
35
35
  metrics: components.metrics
36
36
  });
37
37
  this.network = components.network;
38
- this.sendMessagesDelay = init.sendMessagesDelay ?? DEFAULT_MESSAGE_SEND_DELAY;
38
+ this.sendWantlistDebounce = init.sendWantlistDebounce ?? DEFAULT_WANTLIST_SEND_DEBOUNCE;
39
39
  this.log = components.logger.forComponent('helia:bitswap:wantlist');
40
- this.hashLoader = init.hashLoader;
40
+ this.getHasher = components.getHasher;
41
41
  this.network.addEventListener('bitswap:message', (evt) => {
42
- this.receiveMessage(evt.detail.peer, evt.detail.message)
42
+ this.receiveMessage(evt.detail.connection, evt.detail.message)
43
43
  .catch(err => {
44
- this.log.error('error receiving bitswap message from %p - %e', evt.detail.peer, err);
44
+ this.log.error('error receiving bitswap message from %p - %e', evt.detail.connection.remotePeer, err);
45
45
  });
46
46
  });
47
47
  this.network.addEventListener('peer:connected', evt => {
@@ -63,10 +63,17 @@ export class WantList extends TypedEventEmitter {
63
63
  priority: options.priority ?? 1,
64
64
  wantType: options.wantType ?? WantType.WantBlock,
65
65
  cancel: false,
66
- sendDontHave: true
66
+ sendDontHave: true,
67
+ onProgress: []
67
68
  };
68
69
  this.wants.set(cidStr, entry);
69
70
  }
71
+ if (options.onProgress != null) {
72
+ entry.onProgress.push({
73
+ onProgress: options.onProgress,
74
+ signal: options.signal
75
+ });
76
+ }
70
77
  // upgrade want-have to want-block if the new want is a WantBlock but the
71
78
  // previous want was a WantHave
72
79
  if (entry.wantType === WantType.WantHave && options.wantType === WantType.WantBlock) {
@@ -110,7 +117,7 @@ export class WantList extends TypedEventEmitter {
110
117
  .catch(err => {
111
118
  this.log('error sending messages to peers - %e', err);
112
119
  });
113
- }, this.sendMessagesDelay);
120
+ }, this.sendWantlistDebounce);
114
121
  }
115
122
  async sendMessages() {
116
123
  this.sendingMessages = pDefer();
@@ -138,7 +145,15 @@ export class WantList extends TypedEventEmitter {
138
145
  }
139
146
  // add message to send queue
140
147
  try {
141
- await this.network.sendMessage(peerId, message);
148
+ await this.network.sendMessage(peerId, message, {
149
+ onProgress: evt => {
150
+ this.wants.forEach(({ onProgress }) => {
151
+ onProgress.forEach(({ onProgress }) => {
152
+ onProgress(evt);
153
+ });
154
+ });
155
+ }
156
+ });
142
157
  // update list of messages sent to remote
143
158
  for (const key of sent) {
144
159
  sentWants.add(key);
@@ -178,7 +193,7 @@ export class WantList extends TypedEventEmitter {
178
193
  priority: 1
179
194
  });
180
195
  // sending WantHave directly to peer
181
- await this.network.sendMessage(peerId, message);
196
+ await this.network.sendMessage(peerId, message, options);
182
197
  // wait for peer response
183
198
  const event = await raceEvent(this, 'presence', options.signal, {
184
199
  filter: (event) => {
@@ -208,7 +223,7 @@ export class WantList extends TypedEventEmitter {
208
223
  priority: 1
209
224
  });
210
225
  // sending WantBlockResult directly to peer
211
- await this.network.sendMessage(peerId, message);
226
+ await this.network.sendMessage(peerId, message, options);
212
227
  // wait for peer response
213
228
  const event = await raceEvent(this, 'presence', options.signal, {
214
229
  filter: (event) => {
@@ -232,8 +247,8 @@ export class WantList extends TypedEventEmitter {
232
247
  /**
233
248
  * Invoked when a message is received from a bitswap peer
234
249
  */
235
- async receiveMessage(sender, message) {
236
- this.log('received message from %p with %d blocks', sender, message.blocks.length);
250
+ async receiveMessage(connection, message) {
251
+ this.log('received message from %p with %d blocks', connection.remotePeer, message.blocks.length);
237
252
  let blocksCancelled = false;
238
253
  // process blocks
239
254
  for (const block of message.blocks) {
@@ -245,7 +260,7 @@ export class WantList extends TypedEventEmitter {
245
260
  const multicodec = values[1];
246
261
  const hashAlg = values[2];
247
262
  const hashLen = values[3];
248
- const hasher = hashAlg === sha256.code ? sha256 : await this.hashLoader?.getHasher(hashAlg);
263
+ const hasher = hashAlg === sha256.code ? sha256 : await this.getHasher(hashAlg);
249
264
  if (hasher == null) {
250
265
  this.log.error('unknown hash algorithm', hashAlg);
251
266
  continue;
@@ -257,17 +272,18 @@ export class WantList extends TypedEventEmitter {
257
272
  hash = await hash;
258
273
  }
259
274
  const cid = CID.create(cidVersion === 0 ? 0 : 1, multicodec, hash);
260
- this.log('received block from %p for %c', sender, cid);
275
+ this.log('received block from %p for %c', connection.remotePeer, cid);
261
276
  this.safeDispatchEvent('block', {
262
277
  detail: {
263
- sender,
278
+ sender: connection.remotePeer,
264
279
  cid,
265
- block: block.data
280
+ block: block.data,
281
+ connection
266
282
  }
267
283
  });
268
284
  this.safeDispatchEvent('presence', {
269
285
  detail: {
270
- sender,
286
+ sender: connection.remotePeer,
271
287
  cid,
272
288
  has: true,
273
289
  block: block.data
@@ -287,10 +303,10 @@ export class WantList extends TypedEventEmitter {
287
303
  // process block presences
288
304
  for (const { cid: cidBytes, type } of message.blockPresences) {
289
305
  const cid = CID.decode(cidBytes);
290
- this.log('received %s from %p for %c', type, sender, cid);
306
+ this.log('received %s from %p for %c', type, connection.remotePeer, cid);
291
307
  this.safeDispatchEvent('presence', {
292
308
  detail: {
293
- sender,
309
+ sender: connection.remotePeer,
294
310
  cid,
295
311
  has: type === BlockPresenceType.HaveBlock
296
312
  }
@@ -326,7 +342,15 @@ export class WantList extends TypedEventEmitter {
326
342
  return;
327
343
  }
328
344
  try {
329
- await this.network.sendMessage(peerId, message);
345
+ await this.network.sendMessage(peerId, message, {
346
+ onProgress: evt => {
347
+ this.wants.forEach(({ onProgress }) => {
348
+ onProgress.forEach(({ onProgress }) => {
349
+ onProgress(evt);
350
+ });
351
+ });
352
+ }
353
+ });
330
354
  this.peers.set(peerId, sentWants);
331
355
  }
332
356
  catch (err) {
@@ -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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"}
@@ -8,8 +8,6 @@
8
8
  "BitswapOptions": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.BitswapOptions.html",
9
9
  ".:BitswapOptions": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.BitswapOptions.html",
10
10
  "BitswapProvider": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.BitswapProvider.html",
11
- "MultihashHasherLoader": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.MultihashHasherLoader.html",
12
- ".:MultihashHasherLoader": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.MultihashHasherLoader.html",
13
11
  "PeerWantListEntry": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.PeerWantListEntry.html",
14
12
  ".:PeerWantListEntry": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.PeerWantListEntry.html",
15
13
  "WantListEntry": "https://ipfs.github.io/helia/interfaces/_helia_bitswap.WantListEntry.html",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/bitswap",
3
- "version": "3.1.4",
3
+ "version": "3.2.0",
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",
@@ -51,9 +51,9 @@
51
51
  "docs": "aegir docs"
52
52
  },
53
53
  "dependencies": {
54
- "@helia/interface": "^6.1.1",
55
- "@helia/utils": "^2.4.2",
56
- "@libp2p/interface": "^3.1.0",
54
+ "@helia/interface": "^6.2.0",
55
+ "@helia/utils": "^2.5.0",
56
+ "@libp2p/interface": "^3.2.0",
57
57
  "@libp2p/logger": "^6.0.5",
58
58
  "@libp2p/peer-collections": "^7.0.5",
59
59
  "@libp2p/utils": "^7.0.5",
@@ -70,7 +70,7 @@
70
70
  "multiformats": "^13.4.1",
71
71
  "p-defer": "^4.0.1",
72
72
  "progress-events": "^1.0.1",
73
- "protons-runtime": "^5.6.0",
73
+ "protons-runtime": "^6.0.1",
74
74
  "race-event": "^1.6.1",
75
75
  "uint8-varint": "^2.0.4",
76
76
  "uint8arraylist": "^2.4.8",
@@ -78,16 +78,16 @@
78
78
  },
79
79
  "devDependencies": {
80
80
  "@libp2p/crypto": "^5.1.12",
81
- "@libp2p/peer-id": "^6.0.3",
81
+ "@libp2p/peer-id": "^6.0.6",
82
82
  "@types/sinon": "^21.0.0",
83
83
  "aegir": "^47.0.22",
84
84
  "blockstore-core": "^6.1.1",
85
85
  "delay": "^7.0.0",
86
86
  "it-all": "^3.0.9",
87
87
  "p-event": "^7.0.0",
88
- "p-retry": "^7.0.0",
88
+ "p-retry": "^8.0.0",
89
89
  "p-wait-for": "^6.0.0",
90
- "protons": "^7.7.0",
90
+ "protons": "^8.1.1",
91
91
  "sinon": "^21.0.0",
92
92
  "sinon-ts": "^2.0.0"
93
93
  },
package/src/bitswap.ts CHANGED
@@ -96,7 +96,7 @@ export class Bitswap implements BitswapInterface {
96
96
  signal
97
97
  })
98
98
 
99
- options.onProgress?.(new CustomProgressEvent<{ cid: CID, sender: PeerId }>('bitswap:block', { cid, sender: result.sender }))
99
+ options.onProgress?.(new CustomProgressEvent<{ cid: CID, sender: PeerId }>('bitswap:block', { cid, sender: result.connection.remotePeer }))
100
100
 
101
101
  return result.block
102
102
  } finally {
package/src/constants.ts CHANGED
@@ -2,9 +2,9 @@ export const BITSWAP_120 = '/ipfs/bitswap/1.2.0'
2
2
  export const DEFAULT_MAX_SIZE_REPLACE_HAS_WITH_BLOCK = 1024
3
3
  export const DEFAULT_MAX_INBOUND_STREAMS = 1024
4
4
  export const DEFAULT_MAX_OUTBOUND_STREAMS = 1024
5
- export const DEFAULT_MESSAGE_RECEIVE_TIMEOUT = 5000
6
- export const DEFAULT_MESSAGE_SEND_DELAY = 10
7
- export const DEFAULT_MESSAGE_SEND_TIMEOUT = 5000
5
+ export const DEFAULT_MESSAGE_RECEIVE_TIMEOUT = 10_000
6
+ export const DEFAULT_WANTLIST_SEND_DEBOUNCE = 10
7
+ export const DEFAULT_MESSAGE_SEND_TIMEOUT = 10_000
8
8
  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
package/src/index.ts CHANGED
@@ -9,12 +9,11 @@
9
9
  import { Bitswap as BitswapClass } from './bitswap.ts'
10
10
  import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents, BitswapNetworkProgressEvents } from './network.ts'
11
11
  import type { WantType } from './pb/message.ts'
12
- import type { CreateSessionOptions, ProviderOptions, SessionBlockBroker } from '@helia/interface'
12
+ import type { BlockBrokerGetBlockProgressEvents, CreateSessionOptions, HasherLoader, ProviderOptions, SessionBlockBroker } from '@helia/interface'
13
13
  import type { Routing } from '@helia/interface/routing'
14
14
  import type { Libp2p, AbortOptions, Startable, ComponentLogger, Metrics, PeerId } from '@libp2p/interface'
15
15
  import type { Blockstore } from 'interface-blockstore'
16
16
  import type { CID } from 'multiformats/cid'
17
- import type { MultihashHasher } from 'multiformats/hashes/interface'
18
17
  import type { ProgressEvent, ProgressOptions } from 'progress-events'
19
18
 
20
19
  export type BitswapWantProgressEvents =
@@ -27,7 +26,8 @@ export type BitswapWantBlockProgressEvents =
27
26
  ProgressEvent<'bitswap:unwant', CID> |
28
27
  ProgressEvent<'bitswap:want', CID> |
29
28
  ProgressEvent<'bitswap:block', { cid: CID, sender: PeerId }> |
30
- BitswapNetworkWantProgressEvents
29
+ BitswapNetworkWantProgressEvents |
30
+ BlockBrokerGetBlockProgressEvents
31
31
 
32
32
  export type { BitswapNetworkNotifyProgressEvents }
33
33
  export type { BitswapNetworkWantProgressEvents }
@@ -75,15 +75,12 @@ export interface Bitswap extends Startable {
75
75
  createSession(options?: CreateSessionOptions<BitswapWantProgressEvents>): Required<Pick<SessionBlockBroker<BitswapWantProgressEvents>, 'retrieve' | 'addPeer'>>
76
76
  }
77
77
 
78
- export interface MultihashHasherLoader {
79
- getHasher(codeOrName: number | string): Promise<MultihashHasher>
80
- }
81
-
82
78
  export interface BitswapComponents {
83
79
  routing: Routing
84
80
  blockstore: Blockstore
85
81
  logger: ComponentLogger
86
82
  libp2p: Libp2p
83
+ getHasher: HasherLoader
87
84
  metrics?: Metrics
88
85
  }
89
86
 
@@ -118,11 +115,6 @@ export interface BitswapOptions {
118
115
  */
119
116
  runOnLimitedConnections?: boolean
120
117
 
121
- /**
122
- * Enables loading esoteric hash functions
123
- */
124
- hashLoader?: MultihashHasherLoader
125
-
126
118
  /**
127
119
  * The protocol that we speak
128
120
  *
@@ -137,6 +129,21 @@ export interface BitswapOptions {
137
129
  */
138
130
  messageSendConcurrency?: number
139
131
 
132
+ /**
133
+ * Wantlist or blocks must be sent to peers within this many milliseconds
134
+ *
135
+ * @default 10_000
136
+ */
137
+ messageSendTimeout?: number
138
+
139
+ /**
140
+ * Incoming wantlist or block messages must be received from peers within this
141
+ * many milliseconds
142
+ *
143
+ * @default 10_000
144
+ */
145
+ messageReceiveTimeout?: number
146
+
140
147
  /**
141
148
  * When sending blocks to peers, how many messages to send at once
142
149
  *
@@ -149,7 +156,7 @@ export interface BitswapOptions {
149
156
  * This is useful for preventing slow/large peer-connections from consuming
150
157
  * your bandwidth/streams.
151
158
  *
152
- * @default 10000
159
+ * @default 10_000
153
160
  */
154
161
  sendBlocksTimeout?: number
155
162
 
@@ -162,6 +169,15 @@ export interface BitswapOptions {
162
169
  */
163
170
  sendBlocksDebounce?: number
164
171
 
172
+ /**
173
+ * When a want is added to the local wantlist, wait this many milliseconds
174
+ * before sending the wantlist to connected or session peers in case more
175
+ * wants are about to be added
176
+ *
177
+ * @default 10
178
+ */
179
+ sendWantlistDebounce?: number
180
+
165
181
  /**
166
182
  * If the client sends a want-have, and we have the corresponding block, we
167
183
  * check the size of the block and if it's small enough we send the block
package/src/network.ts CHANGED
@@ -5,22 +5,22 @@ import * as lp from 'it-length-prefixed'
5
5
  import map from 'it-map'
6
6
  import { pushable } from 'it-pushable'
7
7
  import take from 'it-take'
8
+ import { CID } from 'multiformats/cid'
8
9
  import { CustomProgressEvent } from 'progress-events'
9
10
  import { raceEvent } from 'race-event'
10
- import { BITSWAP_120, DEFAULT_MAX_INBOUND_STREAMS, DEFAULT_MAX_INCOMING_MESSAGE_SIZE, DEFAULT_MAX_OUTBOUND_STREAMS, DEFAULT_MAX_OUTGOING_MESSAGE_SIZE, DEFAULT_MAX_PROVIDERS_PER_REQUEST, DEFAULT_MESSAGE_RECEIVE_TIMEOUT, DEFAULT_MESSAGE_SEND_CONCURRENCY, DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS } from './constants.ts'
11
+ import { BITSWAP_120, DEFAULT_MAX_INBOUND_STREAMS, DEFAULT_MAX_INCOMING_MESSAGE_SIZE, DEFAULT_MAX_OUTBOUND_STREAMS, DEFAULT_MAX_OUTGOING_MESSAGE_SIZE, DEFAULT_MAX_PROVIDERS_PER_REQUEST, DEFAULT_MESSAGE_RECEIVE_TIMEOUT, DEFAULT_MESSAGE_SEND_CONCURRENCY, DEFAULT_MESSAGE_SEND_TIMEOUT, DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS } from './constants.ts'
11
12
  import { BitswapMessage } from './pb/message.ts'
12
13
  import { mergeMessages } from './utils/merge-messages.ts'
13
14
  import { splitMessage } from './utils/split-message.ts'
14
15
  import type { WantOptions } from './bitswap.ts'
15
- import type { MultihashHasherLoader } from './index.ts'
16
16
  import type { Block } from './pb/message.ts'
17
17
  import type { QueuedBitswapMessage } from './utils/bitswap-message.ts'
18
- import type { Provider, Routing } from '@helia/interface/routing'
19
- import type { Libp2p, AbortOptions, Connection, PeerId, Topology, ComponentLogger, IdentifyResult, Counter, Metrics, Stream } from '@libp2p/interface'
18
+ import type { BlockBrokerGetBlockProgressEvents } from '@helia/interface'
19
+ import type { Provider, Routing, RoutingFindProvidersProgressEvents } from '@helia/interface/routing'
20
+ import type { Libp2p, AbortOptions, Connection, PeerId, Topology, ComponentLogger, IdentifyResult, Counter, Metrics, Stream, OpenConnectionProgressEvents, NewStreamProgressEvents } from '@libp2p/interface'
20
21
  import type { Logger } from '@libp2p/logger'
21
22
  import type { PeerQueueJobOptions } from '@libp2p/utils'
22
23
  import type { Multiaddr } from '@multiformats/multiaddr'
23
- import type { CID } from 'multiformats/cid'
24
24
  import type { ProgressEvent, ProgressOptions } from 'progress-events'
25
25
  import type { Uint8ArrayList } from 'uint8arraylist'
26
26
 
@@ -47,24 +47,28 @@ export interface BitswapProvider {
47
47
  }
48
48
 
49
49
  export type BitswapNetworkProgressEvents =
50
- ProgressEvent<'bitswap:dial', PeerId | Multiaddr | Multiaddr[]>
50
+ ProgressEvent<'bitswap:dial', PeerId | Multiaddr | Multiaddr[]> |
51
+ OpenConnectionProgressEvents |
52
+ NewStreamProgressEvents
51
53
 
52
54
  export type BitswapNetworkWantProgressEvents =
53
55
  ProgressEvent<'bitswap:send-wantlist', PeerId> |
54
56
  ProgressEvent<'bitswap:send-wantlist:error', { peer: PeerId, error: Error }> |
55
57
  ProgressEvent<'bitswap:find-providers', CID> |
56
58
  ProgressEvent<'bitswap:found-provider', BitswapProvider> |
57
- BitswapNetworkProgressEvents
59
+ BitswapNetworkProgressEvents |
60
+ RoutingFindProvidersProgressEvents |
61
+ BlockBrokerGetBlockProgressEvents
58
62
 
59
63
  export type BitswapNetworkNotifyProgressEvents =
60
64
  BitswapNetworkProgressEvents |
61
65
  ProgressEvent<'bitswap:send-block', PeerId>
62
66
 
63
67
  export interface NetworkInit {
64
- hashLoader?: MultihashHasherLoader
65
68
  maxInboundStreams?: number
66
69
  maxOutboundStreams?: number
67
70
  messageReceiveTimeout?: number
71
+ messageSendTimeout?: number
68
72
  messageSendConcurrency?: number
69
73
  protocols?: string[]
70
74
  runOnLimitedConnections?: boolean
@@ -80,17 +84,21 @@ export interface NetworkComponents {
80
84
  }
81
85
 
82
86
  export interface BitswapMessageEventDetail {
87
+ /**
88
+ * @deprecated access the peer via connection.remotePeer instead
89
+ */
83
90
  peer: PeerId
84
91
  message: BitswapMessage
92
+ connection: Connection
85
93
  }
86
94
 
87
95
  export interface NetworkEvents {
88
- 'bitswap:message': CustomEvent<{ peer: PeerId, message: BitswapMessage }>
96
+ 'bitswap:message': CustomEvent<BitswapMessageEventDetail>
89
97
  'peer:connected': CustomEvent<PeerId>
90
98
  'peer:disconnected': CustomEvent<PeerId>
91
99
  }
92
100
 
93
- interface SendMessageJobOptions extends AbortOptions, ProgressOptions, PeerQueueJobOptions {
101
+ interface SendMessageJobOptions extends AbortOptions, ProgressOptions<BitswapNetworkWantProgressEvents>, PeerQueueJobOptions {
94
102
  message: QueuedBitswapMessage
95
103
  }
96
104
 
@@ -103,6 +111,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
103
111
  private readonly maxInboundStreams: number
104
112
  private readonly maxOutboundStreams: number
105
113
  private readonly messageReceiveTimeout: number
114
+ private readonly messageSendTimeout: number
106
115
  private registrarIds: string[]
107
116
  private readonly metrics: { blocksSent?: Counter, dataSent?: Counter }
108
117
  private readonly sendQueue: PeerQueue<void, SendMessageJobOptions>
@@ -125,6 +134,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
125
134
  this.maxInboundStreams = init.maxInboundStreams ?? DEFAULT_MAX_INBOUND_STREAMS
126
135
  this.maxOutboundStreams = init.maxOutboundStreams ?? DEFAULT_MAX_OUTBOUND_STREAMS
127
136
  this.messageReceiveTimeout = init.messageReceiveTimeout ?? DEFAULT_MESSAGE_RECEIVE_TIMEOUT
137
+ this.messageSendTimeout = init.messageSendTimeout ?? DEFAULT_MESSAGE_SEND_TIMEOUT
128
138
  this.runOnLimitedConnections = init.runOnLimitedConnections ?? DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS
129
139
  this.maxIncomingMessageSize = init.maxIncomingMessageSize ?? DEFAULT_MAX_OUTGOING_MESSAGE_SIZE
130
140
  this.maxOutgoingMessageSize = init.maxOutgoingMessageSize ?? init.maxIncomingMessageSize ?? DEFAULT_MAX_INCOMING_MESSAGE_SIZE
@@ -244,10 +254,11 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
244
254
  const message = BitswapMessage.decode(data)
245
255
  this.log('incoming new bitswap %s message from %p on stream', stream.protocol, connection.remotePeer, stream.id)
246
256
 
247
- this.safeDispatchEvent('bitswap:message', {
257
+ this.safeDispatchEvent<BitswapMessageEventDetail>('bitswap:message', {
248
258
  detail: {
249
259
  peer: connection.remotePeer,
250
- message
260
+ message,
261
+ connection
251
262
  }
252
263
  })
253
264
 
@@ -286,7 +297,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
286
297
  continue
287
298
  }
288
299
 
289
- options?.onProgress?.(new CustomProgressEvent('bitswap:found-provider', {
300
+ options?.onProgress?.(new CustomProgressEvent<BitswapProvider>('bitswap:found-provider', {
290
301
  type: 'bitswap',
291
302
  cid,
292
303
  provider,
@@ -324,8 +335,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
324
335
  }
325
336
 
326
337
  /**
327
- * Connect to the given peer
328
- * Send the given msg (instance of Message) to the given peer
338
+ * Connect to the specified peer and send the given message
329
339
  */
330
340
  async sendMessage (peerId: PeerId, message: QueuedBitswapMessage, options?: AbortOptions & ProgressOptions<BitswapNetworkWantProgressEvents>): Promise<void> {
331
341
  if (!this.running) {
@@ -339,15 +349,13 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
339
349
  if (existingJob != null) {
340
350
  existingJob.options.message = mergeMessages(existingJob.options.message, message)
341
351
 
342
- await existingJob.join({
343
- signal: options?.signal
344
- })
352
+ await existingJob.join(options)
345
353
 
346
354
  return
347
355
  }
348
356
 
349
357
  await this.sendQueue.add(async (options) => {
350
- const message = options?.message
358
+ const message = options.message
351
359
 
352
360
  if (message == null) {
353
361
  throw new InvalidParametersError('No message to send')
@@ -355,10 +363,10 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
355
363
 
356
364
  this.log('sendMessage to %p', peerId)
357
365
 
358
- options?.onProgress?.(new CustomProgressEvent<PeerId>('bitswap:network:send-wantlist', peerId))
366
+ options.onProgress?.(new CustomProgressEvent<PeerId>('bitswap:send-wantlist', peerId))
359
367
 
360
368
  const stream = await this.libp2p.dialProtocol(peerId, BITSWAP_120, options)
361
- await stream.closeRead()
369
+ await stream.closeRead(options)
362
370
 
363
371
  try {
364
372
  for (const buf of splitMessage(message, this.maxOutgoingMessageSize)) {
@@ -369,15 +377,19 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
369
377
 
370
378
  await stream.close(options)
371
379
  } catch (err: any) {
372
- options?.onProgress?.(new CustomProgressEvent<{ peer: PeerId, error: Error }>('bitswap:network:send-wantlist:error', { peer: peerId, error: err }))
373
380
  this.log.error('error sending message to %p - %e', peerId, err)
381
+ options?.onProgress?.(new CustomProgressEvent<{ peer: PeerId, error: Error }>('bitswap:send-wantlist:error', {
382
+ peer: peerId,
383
+ error: err
384
+ }))
374
385
  stream.abort(err)
375
386
  }
376
387
 
377
388
  this._updateSentStats(message.blocks)
378
389
  }, {
390
+ onProgress: options?.onProgress,
379
391
  peerId,
380
- signal: options?.signal,
392
+ signal: options?.signal ?? AbortSignal.timeout(this.messageSendTimeout),
381
393
  message
382
394
  })
383
395
  }
@@ -390,7 +402,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
390
402
  throw new NotStartedError('Network isn\'t running')
391
403
  }
392
404
 
393
- options?.onProgress?.(new CustomProgressEvent<PeerId | Multiaddr | Multiaddr[]>('bitswap:network:dial', peer))
405
+ options?.onProgress?.(new CustomProgressEvent<PeerId | Multiaddr | Multiaddr[]>('bitswap:dial', peer))
394
406
 
395
407
  // dial and wait for identify - this is to avoid opening a protocol stream
396
408
  // that we are not going to use but depends on the remote node running the