@helia/bitswap 3.1.2 → 3.1.3-83e1f40d

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 (45) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.map +3 -3
  3. package/dist/src/bitswap.d.ts +6 -6
  4. package/dist/src/bitswap.d.ts.map +1 -1
  5. package/dist/src/bitswap.js +5 -5
  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 +20 -3
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +1 -1
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/network.d.ts +5 -5
  15. package/dist/src/network.js +4 -4
  16. package/dist/src/peer-want-lists/index.d.ts +9 -5
  17. package/dist/src/peer-want-lists/index.d.ts.map +1 -1
  18. package/dist/src/peer-want-lists/index.js +16 -36
  19. package/dist/src/peer-want-lists/index.js.map +1 -1
  20. package/dist/src/peer-want-lists/ledger.d.ts +39 -4
  21. package/dist/src/peer-want-lists/ledger.d.ts.map +1 -1
  22. package/dist/src/peer-want-lists/ledger.js +146 -10
  23. package/dist/src/peer-want-lists/ledger.js.map +1 -1
  24. package/dist/src/session.d.ts +3 -3
  25. package/dist/src/utils/bitswap-message.d.ts +1 -1
  26. package/dist/src/utils/cid-prefix.js +1 -1
  27. package/dist/src/utils/merge-messages.d.ts +1 -1
  28. package/dist/src/utils/split-message.d.ts +1 -1
  29. package/dist/src/utils/split-message.js +2 -2
  30. package/dist/src/want-list.d.ts +3 -3
  31. package/dist/src/want-list.js +4 -4
  32. package/package.json +3 -3
  33. package/src/bitswap.ts +7 -7
  34. package/src/constants.ts +2 -0
  35. package/src/index.ts +25 -4
  36. package/src/network.ts +8 -8
  37. package/src/peer-want-lists/index.ts +23 -40
  38. package/src/peer-want-lists/ledger.ts +210 -14
  39. package/src/session.ts +3 -3
  40. package/src/utils/bitswap-message.ts +1 -1
  41. package/src/utils/cid-prefix.ts +1 -1
  42. package/src/utils/merge-messages.ts +1 -1
  43. package/src/utils/split-message.ts +3 -3
  44. package/src/want-list.ts +7 -7
  45. package/dist/typedoc-urls.json +0 -26
@@ -1,8 +1,8 @@
1
- import { Network } from './network.js';
2
- import { PeerWantLists } from './peer-want-lists/index.js';
3
- import { Stats } from './stats.js';
4
- import { WantList } from './want-list.js';
5
- import type { BitswapOptions, Bitswap as BitswapInterface, BitswapWantProgressEvents, BitswapNotifyProgressEvents, WantListEntry, BitswapComponents } from './index.js';
1
+ import { Network } from './network.ts';
2
+ import { PeerWantLists } from './peer-want-lists/index.ts';
3
+ import { Stats } from './stats.ts';
4
+ import { WantList } from './want-list.ts';
5
+ import type { BitswapOptions, Bitswap as BitswapInterface, BitswapWantProgressEvents, BitswapNotifyProgressEvents, WantListEntry, BitswapComponents, PeerWantListEntry } from './index.ts';
6
6
  import type { CreateSessionOptions, ProviderOptions, SessionBlockBroker } from '@helia/interface';
7
7
  import type { Libp2p, PeerId, AbortOptions } from '@libp2p/interface';
8
8
  import type { Blockstore } from 'interface-blockstore';
@@ -38,7 +38,7 @@ export declare class Bitswap implements BitswapInterface {
38
38
  */
39
39
  notify(cid: CID, options?: ProgressOptions<BitswapNotifyProgressEvents> & AbortOptions): Promise<void>;
40
40
  getWantlist(): WantListEntry[];
41
- getPeerWantlist(peer: PeerId): WantListEntry[] | undefined;
41
+ getPeerWantlist(peer: PeerId): PeerWantListEntry[] | undefined;
42
42
  /**
43
43
  * Start the bitswap node
44
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"bitswap.d.ts","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,IAAI,gBAAgB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACvK,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,KAAK,EAAmB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,eAAe,CAAC,yBAAyB,CAAC,EAAE,eAAe;IAC5G;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,SAAgB,KAAK,EAAE,KAAK,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;gBAER,UAAU,EAAE,iBAAiB,EAAE,IAAI,GAAE,cAAmB;IAyBrE,aAAa,CAAE,OAAO,GAAE,oBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IASnI,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAmCrE;;OAEG;IACG,MAAM,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjH,WAAW,IAAK,aAAa,EAAE;IAU/B,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,SAAS;IAI3D;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAK7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAI7B"}
1
+ {"version":3,"file":"bitswap.d.ts","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,IAAI,gBAAgB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC1L,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,KAAK,EAAmB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,eAAe,CAAC,yBAAyB,CAAC,EAAE,eAAe;IAC5G;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,SAAgB,KAAK,EAAE,KAAK,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;gBAER,UAAU,EAAE,iBAAiB,EAAE,IAAI,GAAE,cAAmB;IAyBrE,aAAa,CAAE,OAAO,GAAE,oBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IASnI,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAmCrE;;OAEG;IACG,MAAM,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjH,WAAW,IAAK,aAAa,EAAE;IAU/B,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,SAAS;IAI/D;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAK7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -1,11 +1,11 @@
1
1
  import { setMaxListeners } from '@libp2p/interface';
2
2
  import { anySignal } from 'any-signal';
3
3
  import { CustomProgressEvent } from 'progress-events';
4
- import { Network } from './network.js';
5
- import { PeerWantLists } from './peer-want-lists/index.js';
6
- import { createBitswapSession } from './session.js';
7
- import { Stats } from './stats.js';
8
- import { WantList } from './want-list.js';
4
+ import { Network } from "./network.js";
5
+ import { PeerWantLists } from "./peer-want-lists/index.js";
6
+ import { createBitswapSession } from "./session.js";
7
+ import { Stats } from "./stats.js";
8
+ import { WantList } from "./want-list.js";
9
9
  /**
10
10
  * JavaScript implementation of the Bitswap 'data exchange' protocol
11
11
  * used by IPFS.
@@ -11,4 +11,6 @@ export declare const DEFAULT_SESSION_ROOT_PRIORITY = 1;
11
11
  export declare const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3;
12
12
  export declare const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE: number;
13
13
  export declare const DEFAULT_MAX_INCOMING_MESSAGE_SIZE: number;
14
+ export declare const DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW: number;
15
+ export declare const DEFAULT_MAX_WANTLIST_SIZE = 1024;
14
16
  //# 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;AAClD,eAAO,MAAM,iCAAiC,QAAkB,CAAA;AAChE,eAAO,MAAM,iCAAiC,QAAoC,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;AAClF,eAAO,MAAM,kCAAkC,QAAY,CAAA;AAC3D,eAAO,MAAM,yBAAyB,OAAO,CAAA"}
@@ -11,4 +11,6 @@ export const DEFAULT_SESSION_ROOT_PRIORITY = 1;
11
11
  export const DEFAULT_MAX_PROVIDERS_PER_REQUEST = 3;
12
12
  export const DEFAULT_MAX_OUTGOING_MESSAGE_SIZE = 1024 * 1024 * 4;
13
13
  export const DEFAULT_MAX_INCOMING_MESSAGE_SIZE = DEFAULT_MAX_OUTGOING_MESSAGE_SIZE;
14
+ export const DEFAULT_DO_NOT_RESEND_BLOCK_WINDOW = 1_000 * 5;
15
+ export const DEFAULT_MAX_WANTLIST_SIZE = 1024;
14
16
  //# 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;AAClD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,iCAAiC,GAAG,iCAAiC,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;AAClF,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAK,GAAG,CAAC,CAAA;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAA"}
@@ -5,8 +5,8 @@
5
5
  *
6
6
  * It supersedes the older [ipfs-bitswap](https://www.npmjs.com/package/ipfs-bitswap) module with the aim of being smaller, faster, better integrated with libp2p/helia, having fewer dependencies and using standard JavaScript instead of Node.js APIs.
7
7
  */
8
- import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents, BitswapNetworkProgressEvents } from './network.js';
9
- import type { WantType } from './pb/message.js';
8
+ import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents, BitswapNetworkProgressEvents } from './network.ts';
9
+ import type { WantType } from './pb/message.ts';
10
10
  import type { CreateSessionOptions, ProviderOptions, SessionBlockBroker } 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';
@@ -25,11 +25,15 @@ export type { BitswapNetworkWantProgressEvents };
25
25
  export type { BitswapNetworkProgressEvents };
26
26
  export type { WantType };
27
27
  export type { BitswapProvider } from './network.ts';
28
+ export type WantStatus = 'want' | 'sending' | 'sent';
28
29
  export interface WantListEntry {
29
30
  cid: CID;
30
31
  priority: number;
31
32
  wantType: WantType;
32
33
  }
34
+ export interface PeerWantListEntry extends WantListEntry {
35
+ status: WantStatus;
36
+ }
33
37
  export interface Bitswap extends Startable {
34
38
  /**
35
39
  * Returns the current state of the wantlist
@@ -39,7 +43,7 @@ export interface Bitswap extends Startable {
39
43
  * Returns the current state of the wantlist for a peer, if it is being
40
44
  * tracked
41
45
  */
42
- getPeerWantlist(peerId: PeerId): WantListEntry[] | undefined;
46
+ getPeerWantlist(peerId: PeerId): PeerWantListEntry[] | undefined;
43
47
  /**
44
48
  * Notify bitswap that a new block is available
45
49
  */
@@ -158,6 +162,19 @@ export interface BitswapOptions {
158
162
  * @default 2097152
159
163
  */
160
164
  maxIncomingMessageSize?: number;
165
+ /**
166
+ * If a block has been sent to a peer and it is requested again by the same
167
+ * peer, do not send it again until this many ms have elapsed
168
+ *
169
+ * @default 5000
170
+ */
171
+ doNotResendBlockWindow?: number;
172
+ /**
173
+ * Restrict the local copy of each peer wantlist to this many entries
174
+ *
175
+ * @default 1024
176
+ */
177
+ maxWantlistSize?: number;
161
178
  }
162
179
  export declare const createBitswap: (components: BitswapComponents, options?: BitswapOptions) => Bitswap;
163
180
  //# 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,4BAA4B,EAAE,MAAM,cAAc,CAAA;AACtI,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACjG,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,gBAAgB,EAAE,GAAG,CAAC,GACpC,aAAa,CAAC,cAAc,EAAE,GAAG,CAAC,GAClC,aAAa,CAAC,eAAe,EAAE;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5D,gCAAgC,CAAA;AAElC,YAAY,EAAE,kCAAkC,EAAE,CAAA;AAClD,YAAY,EAAE,gCAAgC,EAAE,CAAA;AAChD,YAAY,EAAE,4BAA4B,EAAE,CAAA;AAC5C,YAAY,EAAE,QAAQ,EAAE,CAAA;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAEpD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,GAAG,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,MAAM,EAAE,UAAU,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,iBAAiB,EAAE,GAAG,SAAS,CAAA;IAEhE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvF;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,yBAAyB,CAAC,GAAG,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAE1H;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC,CAAA;CAChK;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,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAEjC;;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;IAE/B;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,aAAa,GAAI,YAAY,iBAAiB,EAAE,UAAS,cAAmB,KAAG,OAE3F,CAAA"}
package/dist/src/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * It supersedes the older [ipfs-bitswap](https://www.npmjs.com/package/ipfs-bitswap) module with the aim of being smaller, faster, better integrated with libp2p/helia, having fewer dependencies and using standard JavaScript instead of Node.js APIs.
7
7
  */
8
- import { Bitswap as BitswapClass } from './bitswap.js';
8
+ import { Bitswap as BitswapClass } from "./bitswap.js";
9
9
  export const createBitswap = (components, options = {}) => {
10
10
  return new BitswapClass(components, options);
11
11
  };
@@ -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;AAwLtD,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;AA6MtD,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,9 +1,9 @@
1
1
  import { TypedEventEmitter } from '@libp2p/interface';
2
- import { BitswapMessage } from './pb/message.js';
3
- import type { WantOptions } from './bitswap.js';
4
- import type { MultihashHasherLoader } from './index.js';
5
- import type { Block } from './pb/message.js';
6
- import type { QueuedBitswapMessage } from './utils/bitswap-message.js';
2
+ import { BitswapMessage } from './pb/message.ts';
3
+ import type { WantOptions } from './bitswap.ts';
4
+ import type { MultihashHasherLoader } from './index.ts';
5
+ import type { Block } from './pb/message.ts';
6
+ import type { QueuedBitswapMessage } from './utils/bitswap-message.ts';
7
7
  import type { Provider, Routing } from '@helia/interface/routing';
8
8
  import type { Libp2p, AbortOptions, Connection, PeerId, ComponentLogger, Metrics, Stream } from '@libp2p/interface';
9
9
  import type { Multiaddr } from '@multiformats/multiaddr';
@@ -7,10 +7,10 @@ import { pushable } from 'it-pushable';
7
7
  import take from 'it-take';
8
8
  import { CustomProgressEvent } from 'progress-events';
9
9
  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.js';
11
- import { BitswapMessage } from './pb/message.js';
12
- import { mergeMessages } from './utils/merge-messages.js';
13
- import { splitMessage } from './utils/split-message.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";
11
+ import { BitswapMessage } from "./pb/message.js";
12
+ import { mergeMessages } from "./utils/merge-messages.js";
13
+ import { splitMessage } from "./utils/split-message.js";
14
14
  export class Network extends TypedEventEmitter {
15
15
  log;
16
16
  libp2p;
@@ -1,14 +1,16 @@
1
1
  import { CID } from 'multiformats/cid';
2
- import { Ledger } from './ledger.js';
3
- import type { BitswapNotifyProgressEvents, WantListEntry } from '../index.js';
4
- import type { Network } from '../network.js';
5
- import type { BitswapMessage } from '../pb/message.js';
2
+ import { Ledger } from './ledger.ts';
3
+ import type { BitswapNotifyProgressEvents, PeerWantListEntry } from '../index.ts';
4
+ import type { Network } from '../network.ts';
5
+ import type { BitswapMessage } from '../pb/message.ts';
6
6
  import type { AbortOptions, ComponentLogger, Libp2p, Metrics, PeerId } from '@libp2p/interface';
7
7
  import type { PeerMap } from '@libp2p/peer-collections';
8
8
  import type { Blockstore } from 'interface-blockstore';
9
9
  import type { ProgressOptions } from 'progress-events';
10
10
  export interface PeerWantListsInit {
11
11
  maxSizeReplaceHasWithBlock?: number;
12
+ doNotResendBlockWindow?: number;
13
+ maxWantListSize?: number;
12
14
  }
13
15
  export interface PeerWantListsComponents {
14
16
  blockstore: Blockstore;
@@ -29,11 +31,13 @@ export declare class PeerWantLists {
29
31
  network: Network;
30
32
  readonly ledgerMap: PeerMap<Ledger>;
31
33
  private readonly maxSizeReplaceHasWithBlock?;
34
+ private readonly doNotResendBlockWindow?;
35
+ private readonly maxWantListSize?;
32
36
  private readonly log;
33
37
  private readonly logger;
34
38
  constructor(components: PeerWantListsComponents, init?: PeerWantListsInit);
35
39
  ledgerForPeer(peerId: PeerId): PeerLedger | undefined;
36
- wantListForPeer(peerId: PeerId): WantListEntry[] | undefined;
40
+ wantListForPeer(peerId: PeerId): PeerWantListEntry[] | undefined;
37
41
  peers(): PeerId[];
38
42
  /**
39
43
  * Handle incoming messages
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,iBAAiB;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAA;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,aAAa;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IACvB,SAAgB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE3B,UAAU,EAAE,uBAAuB,EAAE,IAAI,GAAE,iBAAsB;IAuB9E,aAAa,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAgBtD,eAAe,CAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,SAAS;IAU7D,KAAK,IAAK,MAAM,EAAE;IAIlB;;OAEG;IACG,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDvE,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAenH,gBAAgB,CAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAGxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,iBAAiB;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,aAAa;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IACvB,SAAgB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE3B,UAAU,EAAE,uBAAuB,EAAE,IAAI,GAAE,iBAAsB;IAyB9E,aAAa,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAgBtD,eAAe,CAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,SAAS;IAajE,KAAK,IAAK,MAAM,EAAE;IAIlB;;OAEG;IACG,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvE,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,2BAA2B,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnH,gBAAgB,CAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAGxC"}
@@ -1,19 +1,21 @@
1
1
  import { trackedPeerMap } from '@libp2p/peer-collections';
2
2
  import { CID } from 'multiformats/cid';
3
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
4
- import { WantType } from '../pb/message.js';
5
- import { Ledger } from './ledger.js';
3
+ import { Ledger } from "./ledger.js";
6
4
  export class PeerWantLists {
7
5
  blockstore;
8
6
  network;
9
7
  ledgerMap;
10
8
  maxSizeReplaceHasWithBlock;
9
+ doNotResendBlockWindow;
10
+ maxWantListSize;
11
11
  log;
12
12
  logger;
13
13
  constructor(components, init = {}) {
14
14
  this.blockstore = components.blockstore;
15
15
  this.network = components.network;
16
16
  this.maxSizeReplaceHasWithBlock = init.maxSizeReplaceHasWithBlock;
17
+ this.doNotResendBlockWindow = init.doNotResendBlockWindow;
18
+ this.maxWantListSize = init.maxWantListSize;
17
19
  this.log = components.logger.forComponent('helia:bitswap:peer-want-lists');
18
20
  this.logger = components.logger;
19
21
  this.ledgerMap = trackedPeerMap({
@@ -48,7 +50,9 @@ export class PeerWantLists {
48
50
  if (ledger == null) {
49
51
  return undefined;
50
52
  }
51
- return [...ledger.wants.values()];
53
+ // remove any expired wants
54
+ ledger.removeExpiredWants();
55
+ return ledger.getWants();
52
56
  }
53
57
  peers() {
54
58
  return Array.from(this.ledgerMap.values()).map((l) => l.peerId);
@@ -65,49 +69,25 @@ export class PeerWantLists {
65
69
  network: this.network,
66
70
  logger: this.logger
67
71
  }, {
68
- maxSizeReplaceHasWithBlock: this.maxSizeReplaceHasWithBlock
72
+ maxSizeReplaceHasWithBlock: this.maxSizeReplaceHasWithBlock,
73
+ doNotResendBlockWindow: this.doNotResendBlockWindow,
74
+ maxWantListSize: this.maxWantListSize
69
75
  });
70
76
  this.ledgerMap.set(peerId, ledger);
71
77
  }
72
78
  // record the amount of block data received
73
79
  ledger.receivedBytes(message.blocks?.reduce((acc, curr) => acc + curr.data.byteLength, 0) ?? 0);
74
- if (message.wantlist != null) {
75
- // if the message has a full wantlist, clear the current wantlist
76
- if (message.wantlist.full === true) {
77
- ledger.wants.clear();
78
- }
79
- // clear cancelled wants and add new wants to the ledger
80
- for (const entry of message.wantlist.entries) {
81
- const cid = CID.decode(entry.cid);
82
- const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
83
- if (entry.cancel === true) {
84
- this.log('peer %p cancelled want of block for %c', peerId, cid);
85
- ledger.wants.delete(cidStr);
86
- }
87
- else {
88
- if (entry.wantType === WantType.WantHave) {
89
- this.log('peer %p wanted block presence for %c', peerId, cid);
90
- }
91
- else {
92
- this.log('peer %p wanted block for %c', peerId, cid);
93
- }
94
- ledger.wants.set(cidStr, {
95
- cid,
96
- priority: entry.priority,
97
- wantType: entry.wantType ?? WantType.WantBlock,
98
- sendDontHave: entry.sendDontHave ?? false
99
- });
100
- }
101
- }
102
- }
80
+ // remove any expired wants
81
+ ledger.removeExpiredWants();
82
+ // add new wants
83
+ ledger.addWants(message.wantlist);
103
84
  this.log('send blocks to peer');
104
85
  await ledger.sendBlocksToPeer();
105
86
  }
106
87
  async receivedBlock(cid, options) {
107
- const cidStr = uint8ArrayToString(cid.multihash.bytes, 'base64');
108
88
  const ledgers = [];
109
89
  for (const ledger of this.ledgerMap.values()) {
110
- if (ledger.wants.has(cidStr)) {
90
+ if (ledger.hasWant(cid)) {
111
91
  ledgers.push(ledger);
112
92
  }
113
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer-want-lists/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { WantType } from '../pb/message.js';
2
- import type { Network } from '../network.js';
1
+ import { CID } from 'multiformats/cid';
2
+ import { WantType } from '../pb/message.ts';
3
+ import type { Network } from '../network.ts';
4
+ import type { Wantlist } from '../pb/message.ts';
3
5
  import type { AbortOptions, ComponentLogger, PeerId } from '@libp2p/interface';
4
6
  import type { Blockstore } from 'interface-blockstore';
5
- import type { CID } from 'multiformats/cid';
6
7
  export interface LedgerComponents {
7
8
  peerId: PeerId;
8
9
  blockstore: Blockstore;
@@ -11,6 +12,8 @@ export interface LedgerComponents {
11
12
  }
12
13
  export interface LedgerInit {
13
14
  maxSizeReplaceHasWithBlock?: number;
15
+ doNotResendBlockWindow?: number;
16
+ maxWantListSize?: number;
14
17
  }
15
18
  export interface PeerWantListEntry {
16
19
  /**
@@ -34,22 +37,54 @@ export interface PeerWantListEntry {
34
37
  * If we don't have the block and we've told them we don't have the block
35
38
  */
36
39
  sentDoNotHave?: boolean;
40
+ /**
41
+ * If the status is `sending` or `sent`, the block for this CID is or has been
42
+ * sent to the peer so we should not attempt to send it again
43
+ */
44
+ status: 'want' | 'sending' | 'sent';
45
+ /**
46
+ * A timestamp for when this want should be removed from the list, typically
47
+ * this is set with the `sent` status to prevent sending duplicate blocks to a
48
+ * peer. Once it has expired the peer can request the block a subsequent time.
49
+ */
50
+ expires?: number;
51
+ /**
52
+ * A timestamp of when this entry was created
53
+ */
54
+ created: number;
55
+ /**
56
+ * If this field is false, we have attempted to send this WantList entry but
57
+ * found there is no block for the CID in the blockstore and we are
58
+ * optimistically waiting to see if we come across it later.
59
+ *
60
+ * We only perform the check when we are about to send the block, by which
61
+ * point the entry status is 'sending' so this value with either be false or
62
+ * not set
63
+ */
64
+ haveBlock?: false;
37
65
  }
38
66
  export declare class Ledger {
39
67
  peerId: PeerId;
40
68
  private readonly blockstore;
41
69
  private readonly network;
42
- wants: Map<string, PeerWantListEntry>;
70
+ private wants;
43
71
  exchangeCount: number;
44
72
  bytesSent: number;
45
73
  bytesReceived: number;
46
74
  lastExchange?: number;
47
75
  private readonly maxSizeReplaceHasWithBlock;
48
76
  private readonly log;
77
+ private readonly doNotResendBlockWindow;
78
+ private readonly maxWantListSize;
49
79
  constructor(components: LedgerComponents, init: LedgerInit);
50
80
  sentBytes(n: number): void;
51
81
  receivedBytes(n: number): void;
52
82
  debtRatio(): number;
83
+ removeExpiredWants(): void;
84
+ addWants(wantlist?: Wantlist): void;
85
+ private truncateWants;
86
+ getWants(): PeerWantListEntry[];
87
+ hasWant(cid: CID): boolean;
53
88
  sendBlocksToPeer(options?: AbortOptions): Promise<void>;
54
89
  }
55
90
  //# sourceMappingURL=ledger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/ledger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAU,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAA;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAElB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,qBAAa,MAAM;IACV,MAAM,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACrC,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAQ;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU;IAa3D,SAAS,CAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM3B,aAAa,CAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM/B,SAAS,IAAK,MAAM;IAIP,gBAAgB,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CA6EtE"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/peer-want-lists/ledger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAqB,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAG9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAU,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAElB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IAEnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,KAAK,CAAA;CAClB;AAED,qBAAa,MAAM;IACV,MAAM,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAAgC;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAQ;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;gBAE3B,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU;IAe3D,SAAS,CAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM3B,aAAa,CAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM/B,SAAS,IAAK,MAAM;IAIpB,kBAAkB,IAAK,IAAI;IASpB,QAAQ,CAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;IAuE3C,OAAO,CAAC,aAAa;IA8Cd,QAAQ,IAAK,iBAAiB,EAAE;IAIhC,OAAO,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAMrB,gBAAgB,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAoGtE"}