@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
@@ -9,4 +9,6 @@ export declare const DEFAULT_MESSAGE_SEND_CONCURRENCY = 50;
9
9
  export declare const DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS = false;
10
10
  export declare const DEFAULT_SESSION_ROOT_PRIORITY = 1;
11
11
  export declare const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3;
12
+ export declare const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE: number;
13
+ export declare const DEFAULT_MAX_INCOMING_MESSAGE_SIZE: number;
12
14
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wBAAwB,CAAA;AAChD,eAAO,MAAM,uCAAuC,OAAO,CAAA;AAC3D,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAC/C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,+BAA+B,OAAO,CAAA;AACnD,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAClD,eAAO,MAAM,oCAAoC,QAAQ,CAAA;AACzD,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAC9C,eAAO,MAAM,iCAAiC,IAAI,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wBAAwB,CAAA;AAChD,eAAO,MAAM,uCAAuC,OAAO,CAAA;AAC3D,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAC/C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,+BAA+B,OAAO,CAAA;AACnD,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAChD,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAClD,eAAO,MAAM,oCAAoC,QAAQ,CAAA;AACzD,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAC9C,eAAO,MAAM,iCAAiC,IAAI,CAAA;AAClD,eAAO,MAAM,iCAAiC,QAAkB,CAAA;AAChE,eAAO,MAAM,iCAAiC,QAAoC,CAAA"}
@@ -9,4 +9,6 @@ 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;
12
14
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAA;AAChD,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,CAAA;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAA;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAA;AAClD,MAAM,CAAC,MAAM,oCAAoC,GAAG,KAAK,CAAA;AACzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA;AAC9C,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAA;AAChD,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,CAAA;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAA;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAChD,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAA;AAClD,MAAM,CAAC,MAAM,oCAAoC,GAAG,KAAK,CAAA;AACzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA;AAC9C,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAA;AAClD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,iCAAiC,GAAG,iCAAiC,CAAA"}
@@ -7,10 +7,9 @@
7
7
  */
8
8
  import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents } from './network.js';
9
9
  import type { WantType } from './pb/message.js';
10
- import type { CreateSessionOptions } from '@helia/interface';
10
+ import type { BlockBroker, CreateSessionOptions } from '@helia/interface';
11
11
  import type { Routing } from '@helia/interface/routing';
12
12
  import type { Libp2p, AbortOptions, Startable, ComponentLogger, Metrics, PeerId } from '@libp2p/interface';
13
- import type { PeerSet } from '@libp2p/peer-collections';
14
13
  import type { Blockstore } from 'interface-blockstore';
15
14
  import type { CID } from 'multiformats/cid';
16
15
  import type { MultihashHasher } from 'multiformats/hashes/interface';
@@ -18,46 +17,11 @@ import type { ProgressEvent, ProgressOptions } from 'progress-events';
18
17
  export type BitswapWantProgressEvents = BitswapWantBlockProgressEvents;
19
18
  export type BitswapNotifyProgressEvents = BitswapNetworkNotifyProgressEvents;
20
19
  export type BitswapWantBlockProgressEvents = ProgressEvent<'bitswap:want-block:unwant', CID> | ProgressEvent<'bitswap:want-block:block', CID> | BitswapNetworkWantProgressEvents;
21
- /**
22
- * A bitswap session is a network overlay consisting of peers that all have the
23
- * first block in a file. Subsequent requests will only go to these peers.
24
- */
25
- export interface BitswapSession {
26
- /**
27
- * The peers in this session
28
- */
29
- peers: PeerSet;
30
- /**
31
- * Fetch an additional CID from this DAG
32
- */
33
- want(cid: CID, options?: AbortOptions & ProgressOptions<BitswapWantProgressEvents>): Promise<Uint8Array>;
34
- }
35
20
  export interface WantListEntry {
36
21
  cid: CID;
37
22
  priority: number;
38
23
  wantType: WantType;
39
24
  }
40
- export interface CreateBitswapSessionOptions extends CreateSessionOptions<BitswapWantProgressEvents> {
41
- /**
42
- * If true, query connected peers before searching for providers via
43
- * Helia routers
44
- *
45
- * @default true
46
- */
47
- queryConnectedPeers?: boolean;
48
- /**
49
- * If true, search for providers via Helia routers to query for the root CID
50
- *
51
- * @default true
52
- */
53
- queryRoutingPeers?: boolean;
54
- /**
55
- * The priority to use when querying availability of the root CID
56
- *
57
- * @default 1
58
- */
59
- priority?: number;
60
- }
61
25
  export interface Bitswap extends Startable {
62
26
  /**
63
27
  * Returns the current state of the wantlist
@@ -79,7 +43,7 @@ export interface Bitswap extends Startable {
79
43
  /**
80
44
  * Start a session to retrieve a file from the network
81
45
  */
82
- createSession(root: CID, options?: AbortOptions & ProgressOptions<BitswapWantProgressEvents>): Promise<BitswapSession>;
46
+ createSession(options?: CreateSessionOptions<BitswapWantProgressEvents>): Required<Pick<BlockBroker<BitswapWantProgressEvents>, 'retrieve'>>;
83
47
  }
84
48
  export interface MultihashHasherLoader {
85
49
  getHasher(codeOrName: number | string): Promise<MultihashHasher>;
@@ -128,13 +92,6 @@ export interface BitswapOptions {
128
92
  * @default '/ipfs/bitswap/1.2.0'
129
93
  */
130
94
  protocol?: string;
131
- /**
132
- * When a new peer connects, sending our WantList should complete within this
133
- * many ms
134
- *
135
- * @default 5000
136
- */
137
- messageSendTimeout?: number;
138
95
  /**
139
96
  * When sending want list updates to peers, how many messages to send at once
140
97
  *
@@ -173,6 +130,26 @@ export interface BitswapOptions {
173
130
  * @default 1024
174
131
  */
175
132
  maxSizeReplaceHasWithBlock?: number;
133
+ /**
134
+ * The maximum size in bytes of a message that we will send. If a message is
135
+ * larger than this (due to lots of blocks or wantlist entries) it will be
136
+ * broken up into several smaller messages that are under this size.
137
+ *
138
+ * @see https://github.com/ipfs/boxo/blob/eeea414587350401b6b804f0574ed8436833331d/bitswap/client/internal/messagequeue/messagequeue.go#L33
139
+ *
140
+ * @default 2097152
141
+ */
142
+ maxOutgoingMessageSize?: number;
143
+ /**
144
+ * The maximum size in bytes of an incoming message that we will process.
145
+ *
146
+ * Messages larger than this will cause the incoming stream to be reset.
147
+ *
148
+ * Defaults to `maxOutgoingMessageSize`
149
+ *
150
+ * @default 2097152
151
+ */
152
+ maxIncomingMessageSize?: number;
176
153
  }
177
154
  export declare const createBitswap: (components: BitswapComponents, options?: BitswapOptions) => Bitswap;
178
155
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,kCAAkC,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAA;AACxG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,yBAAyB,GACnC,8BAA8B,CAAA;AAEhC,MAAM,MAAM,2BAA2B,GACrC,kCAAkC,CAAA;AAEpC,MAAM,MAAM,8BAA8B,GACxC,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,aAAa,CAAC,0BAA0B,EAAE,GAAG,CAAC,GAC9C,gCAAgC,CAAA;AAElC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,GAAG,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC;;OAEG;IACH,WAAW,IAAI,aAAa,EAAE,CAAA;IAE9B;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,SAAS,CAAA;IAE5D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1G;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAExG;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;CAC7I;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACjE;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAA;IAEnC;;OAEG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAElC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;;;;;;OAQG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAEnC;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,eAAO,MAAM,aAAa,eAAgB,iBAAiB,YAAW,cAAc,KAAQ,OAE3F,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAA;AA4MtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAA6B,EAAE,UAA0B,EAAE,EAAW,EAAE;IACpG,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAA;AAiLtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAA6B,EAAE,UAA0B,EAAE,EAAW,EAAE;IACpG,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC,CAAA"}
@@ -1,11 +1,11 @@
1
1
  import { TypedEventEmitter } from '@libp2p/interface';
2
- import { CID } from 'multiformats/cid';
3
2
  import { BitswapMessage } from './pb/message.js';
4
3
  import type { WantOptions } from './bitswap.js';
5
4
  import type { MultihashHasherLoader } from './index.js';
6
5
  import type { Block } from './pb/message.js';
7
6
  import type { Provider, Routing } from '@helia/interface/routing';
8
- import type { Libp2p, AbortOptions, Connection, PeerId, IncomingStreamData, ComponentLogger, Metrics } from '@libp2p/interface';
7
+ import type { Libp2p, AbortOptions, Connection, PeerId, IncomingStreamData, ComponentLogger } from '@libp2p/interface';
8
+ import type { CID } from 'multiformats/cid';
9
9
  import type { ProgressEvent, ProgressOptions } from 'progress-events';
10
10
  export type BitswapNetworkProgressEvents = ProgressEvent<'bitswap:network:dial', PeerId>;
11
11
  export type BitswapNetworkWantProgressEvents = ProgressEvent<'bitswap:network:send-wantlist', PeerId> | ProgressEvent<'bitswap:network:send-wantlist:error', {
@@ -18,16 +18,16 @@ export interface NetworkInit {
18
18
  maxInboundStreams?: number;
19
19
  maxOutboundStreams?: number;
20
20
  messageReceiveTimeout?: number;
21
- messageSendTimeout?: number;
22
21
  messageSendConcurrency?: number;
23
22
  protocols?: string[];
24
23
  runOnTransientConnections?: boolean;
24
+ maxOutgoingMessageSize?: number;
25
+ maxIncomingMessageSize?: number;
25
26
  }
26
27
  export interface NetworkComponents {
27
28
  routing: Routing;
28
29
  logger: ComponentLogger;
29
30
  libp2p: Libp2p;
30
- metrics?: Metrics;
31
31
  }
32
32
  export interface BitswapMessageEventDetail {
33
33
  peer: PeerId;
@@ -51,10 +51,11 @@ export declare class Network extends TypedEventEmitter<NetworkEvents> {
51
51
  private readonly maxOutboundStreams;
52
52
  private readonly messageReceiveTimeout;
53
53
  private registrarIds;
54
- private readonly metrics?;
54
+ private readonly metrics;
55
55
  private readonly sendQueue;
56
- private readonly messageSendTimeout;
57
56
  private readonly runOnTransientConnections;
57
+ private readonly maxOutgoingMessageSize;
58
+ private readonly maxIncomingMessageSize;
58
59
  constructor(components: NetworkComponents, init?: NetworkInit);
59
60
  start(): Promise<void>;
60
61
  stop(): Promise<void>;
@@ -79,6 +80,6 @@ export declare class Network extends TypedEventEmitter<NetworkEvents> {
79
80
  * Connects to another peer
80
81
  */
81
82
  connectTo(peer: PeerId, options?: AbortOptions & ProgressOptions<BitswapNetworkProgressEvents>): Promise<Connection>;
82
- _updateSentStats(peerId: PeerId, blocks?: Block[]): void;
83
+ _updateSentStats(blocks?: Block[]): void;
83
84
  }
84
85
  //# sourceMappingURL=network.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}
@@ -1,46 +1,16 @@
1
1
  import { CodeError, TypedEventEmitter, setMaxListeners } from '@libp2p/interface';
2
2
  import { PeerQueue } from '@libp2p/utils/peer-queue';
3
- import { Circuit } from '@multiformats/multiaddr-matcher';
4
- import { anySignal } from 'any-signal';
5
- import debug from 'debug';
6
3
  import drain from 'it-drain';
7
4
  import * as lp from 'it-length-prefixed';
8
- import { lpStream } from 'it-length-prefixed-stream';
9
5
  import map from 'it-map';
10
6
  import { pipe } from 'it-pipe';
11
7
  import take from 'it-take';
12
- import { base64 } from 'multiformats/bases/base64';
13
- import { CID } from 'multiformats/cid';
14
8
  import { CustomProgressEvent } from 'progress-events';
15
9
  import { raceEvent } from 'race-event';
16
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
17
- import { BITSWAP_120, DEFAULT_MAX_INBOUND_STREAMS, DEFAULT_MAX_OUTBOUND_STREAMS, DEFAULT_MAX_PROVIDERS_PER_REQUEST, DEFAULT_MESSAGE_RECEIVE_TIMEOUT, DEFAULT_MESSAGE_SEND_TIMEOUT, DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS } from './constants.js';
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.js';
18
11
  import { BitswapMessage } from './pb/message.js';
19
- // Add a formatter for a bitswap message
20
- debug.formatters.B = (b) => {
21
- if (b == null) {
22
- return 'undefined';
23
- }
24
- return JSON.stringify({
25
- blocks: b.blocks?.map(b => ({
26
- data: `${uint8ArrayToString(b.data, 'base64').substring(0, 10)}...`,
27
- prefix: uint8ArrayToString(b.prefix, 'base64')
28
- })),
29
- blockPresences: b.blockPresences?.map(p => ({
30
- ...p,
31
- cid: CID.decode(p.cid).toString()
32
- })),
33
- wantlist: b.wantlist == null
34
- ? undefined
35
- : {
36
- full: b.wantlist.full,
37
- entries: b.wantlist.entries.map(e => ({
38
- ...e,
39
- cid: CID.decode(e.cid).toString()
40
- }))
41
- }
42
- }, null, 2);
43
- };
12
+ import { mergeMessages } from './utils/merge-messages.js';
13
+ import { splitMessage } from './utils/split-message.js';
44
14
  export class Network extends TypedEventEmitter {
45
15
  log;
46
16
  libp2p;
@@ -53,8 +23,9 @@ export class Network extends TypedEventEmitter {
53
23
  registrarIds;
54
24
  metrics;
55
25
  sendQueue;
56
- messageSendTimeout;
57
26
  runOnTransientConnections;
27
+ maxOutgoingMessageSize;
28
+ maxIncomingMessageSize;
58
29
  constructor(components, init = {}) {
59
30
  super();
60
31
  this.log = components.logger.forComponent('helia:bitswap:network');
@@ -68,18 +39,17 @@ export class Network extends TypedEventEmitter {
68
39
  this.maxInboundStreams = init.maxInboundStreams ?? DEFAULT_MAX_INBOUND_STREAMS;
69
40
  this.maxOutboundStreams = init.maxOutboundStreams ?? DEFAULT_MAX_OUTBOUND_STREAMS;
70
41
  this.messageReceiveTimeout = init.messageReceiveTimeout ?? DEFAULT_MESSAGE_RECEIVE_TIMEOUT;
71
- this.messageSendTimeout = init.messageSendTimeout ?? DEFAULT_MESSAGE_SEND_TIMEOUT;
72
42
  this.runOnTransientConnections = init.runOnTransientConnections ?? DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS;
73
- if (components.metrics != null) {
74
- this.metrics = {
75
- blocksSent: components.metrics?.registerMetricGroup('ipfs_bitswap_sent_blocks'),
76
- dataSent: components.metrics?.registerMetricGroup('ipfs_bitswap_sent_data_bytes')
77
- };
78
- }
43
+ this.maxIncomingMessageSize = init.maxIncomingMessageSize ?? DEFAULT_MAX_OUTGOING_MESSAGE_SIZE;
44
+ this.maxOutgoingMessageSize = init.maxOutgoingMessageSize ?? init.maxIncomingMessageSize ?? DEFAULT_MAX_INCOMING_MESSAGE_SIZE;
45
+ this.metrics = {
46
+ blocksSent: components.libp2p.metrics?.registerCounter('helia_bitswap_sent_blocks_total'),
47
+ dataSent: components.libp2p.metrics?.registerCounter('helia_bitswap_sent_data_bytes_total')
48
+ };
79
49
  this.sendQueue = new PeerQueue({
80
- concurrency: init.messageSendConcurrency,
81
- metrics: components.metrics,
82
- metricName: 'ipfs_bitswap_message_send_queue'
50
+ concurrency: init.messageSendConcurrency ?? DEFAULT_MESSAGE_SEND_CONCURRENCY,
51
+ metrics: components.libp2p.metrics,
52
+ metricName: 'helia_bitswap_message_send_queue'
83
53
  });
84
54
  this.sendQueue.addEventListener('error', (evt) => {
85
55
  this.log.error('error sending wantlist to peer', evt.detail);
@@ -142,16 +112,24 @@ export class Network extends TypedEventEmitter {
142
112
  Promise.resolve().then(async () => {
143
113
  this.log('incoming new bitswap %s stream from %p', stream.protocol, connection.remotePeer);
144
114
  const abortListener = () => {
145
- stream.abort(new CodeError('Incoming Bitswap stream timed out', 'ERR_TIMEOUT'));
115
+ if (stream.status === 'open') {
116
+ stream.abort(new CodeError('Incoming Bitswap stream timed out', 'ERR_TIMEOUT'));
117
+ }
118
+ else {
119
+ this.log('stream aborted with status', stream.status);
120
+ }
146
121
  };
147
122
  let signal = AbortSignal.timeout(this.messageReceiveTimeout);
148
123
  setMaxListeners(Infinity, signal);
149
124
  signal.addEventListener('abort', abortListener);
150
- await pipe(stream, (source) => lp.decode(source), async (source) => {
125
+ await stream.closeWrite();
126
+ await pipe(stream, (source) => lp.decode(source, {
127
+ maxDataLength: this.maxIncomingMessageSize
128
+ }), async (source) => {
151
129
  for await (const data of source) {
152
130
  try {
153
131
  const message = BitswapMessage.decode(data);
154
- this.log('incoming new bitswap %s message from %p %B', stream.protocol, connection.remotePeer, message);
132
+ this.log('incoming new bitswap %s message from %p on stream', stream.protocol, connection.remotePeer, stream.id);
155
133
  this.safeDispatchEvent('bitswap:message', {
156
134
  detail: {
157
135
  peer: connection.remotePeer,
@@ -165,7 +143,7 @@ export class Network extends TypedEventEmitter {
165
143
  signal.addEventListener('abort', abortListener);
166
144
  }
167
145
  catch (err) {
168
- this.log.error('error reading incoming bitswap message from %p', connection.remotePeer, err);
146
+ this.log.error('error reading incoming bitswap message from %p on stream', connection.remotePeer, stream.id, err);
169
147
  stream.abort(err);
170
148
  break;
171
149
  }
@@ -183,25 +161,11 @@ export class Network extends TypedEventEmitter {
183
161
  async *findProviders(cid, options) {
184
162
  options?.onProgress?.(new CustomProgressEvent('bitswap:network:find-providers', cid));
185
163
  for await (const provider of this.routing.findProviders(cid, options)) {
186
- // unless we explicitly run on transient connections, skip peers that only
187
- // have circuit relay addresses as bitswap won't run over them
188
- if (!this.runOnTransientConnections) {
189
- let hasDirectAddress = false;
190
- for (let ma of provider.multiaddrs) {
191
- if (ma.getPeerId() == null) {
192
- ma = ma.encapsulate(`/p2p/${provider.id}`);
193
- }
194
- if (!Circuit.exactMatch(ma)) {
195
- hasDirectAddress = true;
196
- break;
197
- }
198
- }
199
- if (!hasDirectAddress) {
200
- continue;
201
- }
202
- }
203
- // ignore non-bitswap providers
204
- if (provider.protocols?.includes('transport-bitswap') === false) {
164
+ // make sure we can dial the provider
165
+ const dialable = await this.libp2p.isDialable(provider.multiaddrs, {
166
+ runOnTransientConnection: this.runOnTransientConnections
167
+ });
168
+ if (!dialable) {
205
169
  continue;
206
170
  }
207
171
  yield provider;
@@ -211,7 +175,7 @@ export class Network extends TypedEventEmitter {
211
175
  * Find the providers of a given `cid` and connect to them.
212
176
  */
213
177
  async findAndConnect(cid, options) {
214
- await drain(take(map(this.findProviders(cid, options), async (provider) => this.connectTo(provider.id, options)), options?.maxProviders ?? DEFAULT_MAX_PROVIDERS_PER_REQUEST))
178
+ await drain(map(take(this.findProviders(cid, options), options?.maxProviders ?? DEFAULT_MAX_PROVIDERS_PER_REQUEST), async (provider) => this.connectTo(provider.id, options)))
215
179
  .catch(err => {
216
180
  this.log.error(err);
217
181
  });
@@ -233,46 +197,41 @@ export class Network extends TypedEventEmitter {
233
197
  blockPresences: msg.blockPresences ?? [],
234
198
  pendingBytes: msg.pendingBytes ?? 0
235
199
  };
236
- const signal = anySignal([AbortSignal.timeout(this.messageSendTimeout), options?.signal]);
237
- setMaxListeners(Infinity, signal);
238
- try {
239
- const existingJob = this.sendQueue.find(peerId);
240
- if (existingJob?.status === 'queued') {
241
- // merge messages instead of adding new job
242
- existingJob.options.message = mergeMessages(existingJob.options.message, message);
243
- await existingJob.join({
244
- signal
245
- });
246
- return;
247
- }
248
- await this.sendQueue.add(async (options) => {
249
- const message = options?.message;
250
- if (message == null) {
251
- throw new CodeError('No message to send', 'ERR_NO_MESSAGE');
252
- }
253
- this.log('sendMessage to %p %B', peerId, message);
254
- options?.onProgress?.(new CustomProgressEvent('bitswap:network:send-wantlist', peerId));
255
- const stream = await this.libp2p.dialProtocol(peerId, BITSWAP_120, options);
256
- try {
257
- const lp = lpStream(stream);
258
- await lp.write(BitswapMessage.encode(message), options);
259
- await lp.unwrap().close(options);
260
- }
261
- catch (err) {
262
- options?.onProgress?.(new CustomProgressEvent('bitswap:network:send-wantlist:error', { peer: peerId, error: err }));
263
- this.log.error('error sending message to %p', peerId, err);
264
- stream.abort(err);
265
- }
266
- this._updateSentStats(peerId, message.blocks);
267
- }, {
268
- peerId,
269
- signal,
270
- message
200
+ const existingJob = this.sendQueue.queue.find(job => {
201
+ return peerId.equals(job.options.peerId) && job.status === 'queued';
202
+ });
203
+ if (existingJob != null) {
204
+ // merge messages instead of adding new job
205
+ existingJob.options.message = mergeMessages(existingJob.options.message, message);
206
+ await existingJob.join({
207
+ signal: options?.signal
271
208
  });
209
+ return;
272
210
  }
273
- finally {
274
- signal.clear();
275
- }
211
+ await this.sendQueue.add(async (options) => {
212
+ const message = options?.message;
213
+ if (message == null) {
214
+ throw new CodeError('No message to send', 'ERR_NO_MESSAGE');
215
+ }
216
+ this.log('sendMessage to %p', peerId);
217
+ options?.onProgress?.(new CustomProgressEvent('bitswap:network:send-wantlist', peerId));
218
+ const stream = await this.libp2p.dialProtocol(peerId, BITSWAP_120, options);
219
+ await stream.closeRead();
220
+ try {
221
+ await pipe(splitMessage(message, this.maxOutgoingMessageSize), (source) => lp.encode(source), stream);
222
+ await stream.close(options);
223
+ }
224
+ catch (err) {
225
+ options?.onProgress?.(new CustomProgressEvent('bitswap:network:send-wantlist:error', { peer: peerId, error: err }));
226
+ this.log.error('error sending message to %p', peerId, err);
227
+ stream.abort(err);
228
+ }
229
+ this._updateSentStats(message.blocks);
230
+ }, {
231
+ peerId,
232
+ signal: options?.signal,
233
+ message
234
+ });
276
235
  }
277
236
  /**
278
237
  * Connects to another peer
@@ -301,70 +260,13 @@ export class Network extends TypedEventEmitter {
301
260
  ]);
302
261
  return connection;
303
262
  }
304
- _updateSentStats(peerId, blocks = []) {
305
- if (this.metrics != null) {
306
- let bytes = 0;
307
- for (const block of blocks.values()) {
308
- bytes += block.data.byteLength;
309
- }
310
- this.metrics.dataSent.increment({
311
- global: bytes,
312
- [peerId.toString()]: bytes
313
- });
314
- this.metrics.blocksSent.increment({
315
- global: blocks.length,
316
- [peerId.toString()]: blocks.length
317
- });
318
- }
319
- }
320
- }
321
- function mergeMessages(messageA, messageB) {
322
- const wantListEntries = new Map((messageA.wantlist?.entries ?? []).map(entry => ([
323
- base64.encode(entry.cid),
324
- entry
325
- ])));
326
- for (const entry of messageB.wantlist?.entries ?? []) {
327
- const key = base64.encode(entry.cid);
328
- const existingEntry = wantListEntries.get(key);
329
- if (existingEntry != null) {
330
- // take highest priority
331
- if (existingEntry.priority > entry.priority) {
332
- entry.priority = existingEntry.priority;
333
- }
334
- // take later values if passed, otherwise use earlier ones
335
- entry.cancel = entry.cancel ?? existingEntry.cancel;
336
- entry.wantType = entry.wantType ?? existingEntry.wantType;
337
- entry.sendDontHave = entry.sendDontHave ?? existingEntry.sendDontHave;
263
+ _updateSentStats(blocks = []) {
264
+ let bytes = 0;
265
+ for (const block of blocks.values()) {
266
+ bytes += block.data.byteLength;
338
267
  }
339
- wantListEntries.set(key, entry);
340
- }
341
- const blockPresences = new Map(messageA.blockPresences.map(presence => ([
342
- base64.encode(presence.cid),
343
- presence
344
- ])));
345
- for (const blockPresence of messageB.blockPresences) {
346
- const key = base64.encode(blockPresence.cid);
347
- // override earlier block presence with later one as if duplicated it is
348
- // likely to be more accurate since it is more recent
349
- blockPresences.set(key, blockPresence);
350
- }
351
- const blocks = new Map(messageA.blocks.map(block => ([
352
- base64.encode(block.data),
353
- block
354
- ])));
355
- for (const block of messageB.blocks) {
356
- const key = base64.encode(block.data);
357
- blocks.set(key, block);
268
+ this.metrics.dataSent?.increment(bytes);
269
+ this.metrics.blocksSent?.increment(blocks.length);
358
270
  }
359
- const output = {
360
- wantlist: {
361
- full: messageA.wantlist?.full ?? messageB.wantlist?.full ?? false,
362
- entries: [...wantListEntries.values()]
363
- },
364
- blockPresences: [...blockPresences.values()],
365
- blocks: [...blocks.values()],
366
- pendingBytes: messageA.pendingBytes + messageB.pendingBytes
367
- };
368
- return output;
369
271
  }
370
272
  //# sourceMappingURL=network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}