bun-torrent 0.0.3-beta → 0.0.5-beta

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 (50) hide show
  1. package/README.md +22 -3
  2. package/dist/client.d.ts +11 -6
  3. package/dist/client.js +21 -20
  4. package/dist/client.js.map +1 -1
  5. package/dist/configs/defaults.d.ts +25 -0
  6. package/dist/configs/defaults.js +26 -0
  7. package/dist/configs/defaults.js.map +1 -0
  8. package/dist/index.d.ts +6 -5
  9. package/dist/index.js +3 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/peer/pool/index.js +4 -5
  12. package/dist/peer/pool/index.js.map +1 -1
  13. package/dist/peer/session/index.d.ts +1 -1
  14. package/dist/peer/session/index.js +10 -5
  15. package/dist/peer/session/index.js.map +1 -1
  16. package/dist/torrent/download/PeerScorer.d.ts +15 -0
  17. package/dist/torrent/download/PeerScorer.js +24 -0
  18. package/dist/torrent/download/PeerScorer.js.map +1 -0
  19. package/dist/torrent/download/index.d.ts +3 -1
  20. package/dist/torrent/download/index.js +1 -0
  21. package/dist/torrent/download/index.js.map +1 -1
  22. package/dist/torrent/download/manager.d.ts +23 -17
  23. package/dist/torrent/download/manager.js +166 -53
  24. package/dist/torrent/download/manager.js.map +1 -1
  25. package/dist/torrent/index.d.ts +2 -2
  26. package/dist/torrent/index.js +1 -1
  27. package/dist/torrent/index.js.map +1 -1
  28. package/dist/torrent/pieces/DefaultPlanner.d.ts +1 -1
  29. package/dist/torrent/pieces/DefaultPlanner.js +6 -2
  30. package/dist/torrent/pieces/DefaultPlanner.js.map +1 -1
  31. package/dist/torrent/pieces/index.d.ts +1 -1
  32. package/dist/torrent/pieces/index.js +1 -1
  33. package/dist/torrent/pieces/index.js.map +1 -1
  34. package/dist/torrent/pieces/types.d.ts +1 -1
  35. package/dist/torrent/pieces/utils.d.ts +1 -2
  36. package/dist/torrent/pieces/utils.js +3 -3
  37. package/dist/torrent/pieces/utils.js.map +1 -1
  38. package/dist/torrent/session/index.d.ts +5 -2
  39. package/dist/torrent/session/index.js +17 -5
  40. package/dist/torrent/session/index.js.map +1 -1
  41. package/dist/tracker/http.js +4 -4
  42. package/dist/tracker/http.js.map +1 -1
  43. package/dist/tracker/index.js +3 -3
  44. package/dist/tracker/index.js.map +1 -1
  45. package/dist/tracker/types.d.ts +0 -1
  46. package/dist/tracker/types.js +1 -1
  47. package/dist/tracker/types.js.map +1 -1
  48. package/dist/tracker/udp.js +4 -3
  49. package/dist/tracker/udp.js.map +1 -1
  50. package/package.json +33 -33
package/README.md CHANGED
@@ -66,8 +66,13 @@ import { Client } from 'bun-torrent';
66
66
 
67
67
  const client = new Client({
68
68
  outputDirectory: './downloads',
69
+ targetConnections: 20,
70
+ maxConnecting: 30,
69
71
  maxInFlightRequestsPerPeer: 20,
72
+ peerConnectTimeoutMs: 5_000,
73
+ trackerTimeoutMs: 5_000,
70
74
  requestTimeoutMs: 15_000,
75
+ seed: false,
71
76
  progressEvents: 'piece',
72
77
  speedSampleIntervalMs: 500,
73
78
  });
@@ -77,8 +82,14 @@ Client options:
77
82
 
78
83
  - `outputDirectory`: directory where downloaded files are written. Defaults to `process.cwd()`.
79
84
  - `files`: optional default file selection for downloads.
85
+ - `targetConnections`: preferred number of connected peers. Defaults to `20`.
86
+ - `minConnections`: minimum connectable peer count before downloading starts. Defaults to `0`.
87
+ - `maxConnecting`: maximum simultaneous peer connection attempts. Defaults to `30`.
88
+ - `peerConnectTimeoutMs`: timeout for connecting to one peer. Defaults to `5000`.
89
+ - `trackerTimeoutMs`: timeout for tracker announces. Defaults to `5000`.
80
90
  - `maxInFlightRequestsPerPeer`: maximum active block requests per peer. Defaults to `20`.
81
91
  - `requestTimeoutMs`: timeout for an individual block request. Defaults to `15000`.
92
+ - `seed`: reserved for future seeding support. Currently only `false` is supported.
82
93
  - `progressEvents`: `'piece'` emits progress when a piece completes, `'block'` emits for every received block. Defaults to `'piece'`.
83
94
  - `speedSampleIntervalMs`: minimum interval used to refresh speed calculations. Defaults to `500`.
84
95
 
@@ -109,8 +120,11 @@ const torrent = await client.download(
109
120
  },
110
121
  {
111
122
  outputDirectory: './downloads',
123
+ targetConnections: 50,
124
+ maxConnecting: 100,
112
125
  minConnections: 5,
113
126
  announcePort: 6881,
127
+ seed: false,
114
128
  progressEvents: 'block',
115
129
  onChangeState: (state) => {
116
130
  console.log('client state:', state);
@@ -123,10 +137,15 @@ Download options:
123
137
 
124
138
  - `outputDirectory`: override the output directory for this download.
125
139
  - `files`: download only selected files.
140
+ - `targetConnections`: override the preferred peer connection count.
126
141
  - `minConnections`: minimum connectable peer count requested before downloading starts.
142
+ - `maxConnecting`: override simultaneous peer connection attempts.
143
+ - `peerConnectTimeoutMs`: override peer connection timeout.
144
+ - `trackerTimeoutMs`: override tracker announce timeout.
127
145
  - `announcePort`: port sent to trackers in announce requests.
128
146
  - `maxInFlightRequestsPerPeer`: override request concurrency per peer.
129
147
  - `requestTimeoutMs`: override block request timeout.
148
+ - `seed`: reserved for future seeding support. Currently only `false` is supported.
130
149
  - `progressEvents`: `'piece'` or `'block'`.
131
150
  - `speedSampleIntervalMs`: override speed sample interval.
132
151
  - `onChangeState`: receives client setup states: `parsing`, `tracking`, `connecting`, `downloading`.
@@ -185,8 +204,8 @@ torrent.on('progress', (progress) => {
185
204
  console.log(progress.percent, progress.speed);
186
205
  });
187
206
 
188
- torrent.on('peer', (peer) => {
189
- console.log('peer connected', peer);
207
+ torrent.on('peer', (stats) => {
208
+ console.log('peer connected', stats.connections, '/', stats.targetConnections);
190
209
  });
191
210
 
192
211
  torrent.on('done', () => {
@@ -209,7 +228,7 @@ The current torrent state is also available through `torrent.state`. Possible st
209
228
  - `failed`
210
229
  - `closed`
211
230
 
212
- Call `torrent.close()` to stop the download and close peer connections.
231
+ When a download completes, `torrent.done` resolves, the state becomes `completed`, and internal peer connections are closed automatically because seeding is not implemented yet. Call `torrent.close()` to stop an active download early or to mark a completed torrent as explicitly closed.
213
232
 
214
233
  ## Progress Shape
215
234
 
package/dist/client.d.ts CHANGED
@@ -11,16 +11,16 @@ export declare enum DownloadState {
11
11
  export type ClientConfig = {
12
12
  files?: TorrentFileSelection;
13
13
  maxInFlightRequestsPerPeer?: number;
14
+ maxConnecting?: number;
15
+ minConnections?: number;
14
16
  outputDirectory?: string;
17
+ peerConnectTimeoutMs?: number;
15
18
  progressEvents?: DownloadProgressEventMode;
16
19
  requestTimeoutMs?: number;
20
+ seed?: false;
17
21
  speedSampleIntervalMs?: number;
18
- };
19
- export declare const DEFAULT_CLIENT_CONFIG: {
20
- readonly maxInFlightRequestsPerPeer: 20;
21
- readonly progressEvents: "piece";
22
- readonly requestTimeoutMs: 15000;
23
- readonly speedSampleIntervalMs: 500;
22
+ targetConnections?: number;
23
+ trackerTimeoutMs?: number;
24
24
  };
25
25
  export declare class Client {
26
26
  private readonly config;
@@ -38,12 +38,17 @@ export type DownloadOptions = {
38
38
  announcePort?: number;
39
39
  files?: TorrentFileSelection;
40
40
  maxInFlightRequestsPerPeer?: number;
41
+ maxConnecting?: number;
41
42
  minConnections?: number;
42
43
  onChangeState?: (state: DownloadState) => unknown;
43
44
  outputDirectory?: string;
45
+ peerConnectTimeoutMs?: number;
44
46
  progressEvents?: DownloadProgressEventMode;
45
47
  requestTimeoutMs?: number;
48
+ seed?: false;
46
49
  speedSampleIntervalMs?: number;
50
+ targetConnections?: number;
51
+ trackerTimeoutMs?: number;
47
52
  };
48
53
  export type TorrentFileInput = string | Uint8Array | ArrayBuffer;
49
54
  export declare const readTorrentFile: (input: TorrentFileInput) => Promise<Uint8Array>;
package/dist/client.js CHANGED
@@ -6,6 +6,7 @@ import { Torrent } from './torrent/session/index';
6
6
  import { ClientError, ClientErrorCode } from './client.error';
7
7
  import { trackPeers, TrackerError, TrackerErrorCode } from './tracker';
8
8
  import { getUnknownSelectedFiles, normalizeTorrentFileSelection } from './torrent/file-selection';
9
+ import { defaults } from './configs/defaults';
9
10
  export var DownloadState;
10
11
  (function (DownloadState) {
11
12
  DownloadState["PARSING"] = "parsing";
@@ -13,12 +14,6 @@ export var DownloadState;
13
14
  DownloadState["CONNECTING"] = "connecting";
14
15
  DownloadState["DOWNLOADING"] = "downloading";
15
16
  })(DownloadState || (DownloadState = {}));
16
- export const DEFAULT_CLIENT_CONFIG = {
17
- maxInFlightRequestsPerPeer: 20,
18
- progressEvents: 'piece',
19
- requestTimeoutMs: 15_000,
20
- speedSampleIntervalMs: 500,
21
- };
22
17
  export class Client {
23
18
  config;
24
19
  peerId;
@@ -32,16 +27,16 @@ export class Client {
32
27
  const downloadConfig = resolveDownloadConfig(this.config, options);
33
28
  assertValidFileSelection(meta, downloadConfig.files);
34
29
  options.onChangeState?.(DownloadState.TRACKING);
35
- const peers = await this.trackPeers(meta, options);
30
+ const peers = await this.trackPeers(meta, options, downloadConfig);
36
31
  options.onChangeState?.(DownloadState.CONNECTING);
37
32
  const pool = await openPeerPool(peers, {
38
33
  infoHash: meta.infoHash,
39
34
  peerId: this.peerId,
40
- targetConnections: 20,
35
+ targetConnections: downloadConfig.targetConnections,
41
36
  totalPieces: meta.pieces.length,
42
- minConnections: options.minConnections ?? 0,
43
- maxConnecting: 30,
44
- timeoutMs: 5_000,
37
+ minConnections: downloadConfig.minConnections,
38
+ maxConnecting: downloadConfig.maxConnecting,
39
+ timeoutMs: downloadConfig.peerConnectTimeoutMs,
45
40
  });
46
41
  options.onChangeState?.(DownloadState.DOWNLOADING);
47
42
  return new Torrent(meta, pool, new DownloadManager({
@@ -53,19 +48,19 @@ export class Client {
53
48
  progressEvents: downloadConfig.progressEvents,
54
49
  requestTimeoutMs: downloadConfig.requestTimeoutMs,
55
50
  speedSampleIntervalMs: downloadConfig.speedSampleIntervalMs,
56
- }), normalizeTorrentFileSelection(downloadConfig.files));
51
+ }), normalizeTorrentFileSelection(downloadConfig.files), downloadConfig.seed);
57
52
  }
58
53
  async inspect(input) {
59
54
  const bytes = await readTorrentFile(input.torrentFile);
60
55
  return parseTorrent(bytes);
61
56
  }
62
- async trackPeers(meta, options) {
57
+ async trackPeers(meta, options, config) {
63
58
  try {
64
59
  return await trackPeers({
65
60
  meta,
66
61
  peerId: this.peerId,
67
62
  announcePort: options.announcePort,
68
- timeoutMs: 5_000,
63
+ timeoutMs: config.trackerTimeoutMs,
69
64
  });
70
65
  }
71
66
  catch (error) {
@@ -83,15 +78,21 @@ const resolveDownloadConfig = (config, options) => ({
83
78
  files: options.files ?? config.files ?? null,
84
79
  maxInFlightRequestsPerPeer: options.maxInFlightRequestsPerPeer ??
85
80
  config.maxInFlightRequestsPerPeer ??
86
- DEFAULT_CLIENT_CONFIG.maxInFlightRequestsPerPeer,
81
+ defaults.download.maxInFlightRequestsPerPeer,
82
+ maxConnecting: options.maxConnecting ?? config.maxConnecting ?? defaults.peers.maxConnecting,
83
+ minConnections: options.minConnections ?? config.minConnections ?? defaults.peers.minConnections,
87
84
  outputDirectory: options.outputDirectory ?? config.outputDirectory ?? process.cwd(),
88
- progressEvents: options.progressEvents ?? config.progressEvents ?? DEFAULT_CLIENT_CONFIG.progressEvents,
89
- requestTimeoutMs: options.requestTimeoutMs ??
90
- config.requestTimeoutMs ??
91
- DEFAULT_CLIENT_CONFIG.requestTimeoutMs,
85
+ peerConnectTimeoutMs: options.peerConnectTimeoutMs ??
86
+ config.peerConnectTimeoutMs ??
87
+ defaults.peers.connectTimeoutMs,
88
+ progressEvents: options.progressEvents ?? config.progressEvents ?? defaults.progress.events,
89
+ requestTimeoutMs: options.requestTimeoutMs ?? config.requestTimeoutMs ?? defaults.download.requestTimeoutMs,
90
+ seed: options.seed ?? config.seed ?? defaults.download.seed,
92
91
  speedSampleIntervalMs: options.speedSampleIntervalMs ??
93
92
  config.speedSampleIntervalMs ??
94
- DEFAULT_CLIENT_CONFIG.speedSampleIntervalMs,
93
+ defaults.progress.speedSampleIntervalMs,
94
+ targetConnections: options.targetConnections ?? config.targetConnections ?? defaults.peers.targetConnections,
95
+ trackerTimeoutMs: options.trackerTimeoutMs ?? config.trackerTimeoutMs ?? defaults.trackers.timeoutMs,
95
96
  });
96
97
  const assertValidFileSelection = (metadata, files) => {
97
98
  const unknownFiles = getUnknownSelectedFiles(metadata, files);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const defaults: {
2
+ readonly pieces: {
3
+ readonly blockSize: number;
4
+ };
5
+ readonly peers: {
6
+ readonly targetConnections: 20;
7
+ readonly minConnections: 0;
8
+ readonly maxConnecting: 30;
9
+ readonly connectTimeoutMs: 5000;
10
+ };
11
+ readonly download: {
12
+ readonly maxInFlightRequestsPerPeer: 300;
13
+ readonly baseInFlightRequestsPerPeer: 8;
14
+ readonly requestTimeoutMs: 15000;
15
+ readonly seed: false;
16
+ };
17
+ readonly progress: {
18
+ readonly events: "piece";
19
+ readonly speedSampleIntervalMs: 500;
20
+ };
21
+ readonly trackers: {
22
+ readonly announcePort: 6881;
23
+ readonly timeoutMs: 5000;
24
+ };
25
+ };
@@ -0,0 +1,26 @@
1
+ export const defaults = {
2
+ pieces: {
3
+ blockSize: 16 * 1024,
4
+ },
5
+ peers: {
6
+ targetConnections: 20,
7
+ minConnections: 0,
8
+ maxConnecting: 30,
9
+ connectTimeoutMs: 5_000,
10
+ },
11
+ download: {
12
+ maxInFlightRequestsPerPeer: 300,
13
+ baseInFlightRequestsPerPeer: 8,
14
+ requestTimeoutMs: 15_000,
15
+ seed: false,
16
+ },
17
+ progress: {
18
+ events: 'piece',
19
+ speedSampleIntervalMs: 500,
20
+ },
21
+ trackers: {
22
+ announcePort: 6881,
23
+ timeoutMs: 5_000,
24
+ },
25
+ };
26
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/configs/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,MAAM,EAAE;QACJ,SAAS,EAAE,EAAE,GAAG,IAAI;KACvB;IACD,KAAK,EAAE;QACH,iBAAiB,EAAE,EAAE;QACrB,cAAc,EAAE,CAAC;QACjB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,KAAK;KAC1B;IACD,QAAQ,EAAE;QACN,0BAA0B,EAAE,GAAG;QAC/B,2BAA2B,EAAE,CAAC;QAC9B,gBAAgB,EAAE,MAAM;QACxB,IAAI,EAAE,KAAK;KACd;IACD,QAAQ,EAAE;QACN,MAAM,EAAE,OAAO;QACf,qBAAqB,EAAE,GAAG;KAC7B;IACD,QAAQ,EAAE;QACN,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,KAAK;KACnB;CACK,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,11 +2,12 @@
2
2
  * Copyright (c) 2026 Nikola Nedeljkovic
3
3
  * SPDX-License-Identifier: MIT
4
4
  */
5
- export * from './client';
5
+ export { Client, DownloadState, TorrentClient } from './client';
6
6
  export { ClientError, ClientErrorCode } from './client.error';
7
- export { BencodeDecodeError, BencodeDecodeErrorCode, BencodeEncodeError, BencodeEncodeErrorCode, computeInfoHash, decodeBencode, encodeBencode, parseTorrent, Torrent, TorrentState, toBValue, TorrentParseError, TorrentParseErrorCode, type TorrentFileSelection, type TorrentMetadata, } from './torrent/index';
8
- export { connectToPeers, createPeerId, decodeHandshake, decodePeerMessage, encodePeerMessage, encodeHandshake, HandshakeErrorCode, PeerMessageError, PeerMessageErrorCode, PeerMessageId, PeerHandshakeError, PeerPoolError, PeerPoolErrorCode, PeerPool, PeerSession, PeerSessionError, PeerSessionErrorCode, openPeerPool, type PeerHandshake, } from './peer/index';
7
+ export type { ClientConfig, DownloadOptions, TorrentFileInput } from './client';
8
+ export { Torrent, TorrentState, TorrentParseError, TorrentParseErrorCode, TorrentStorageError, TorrentStorageErrorCode, PiecePlannerError, PiecePlannerErrorCode, } from './torrent/index';
9
+ export { PeerPoolError, PeerPoolErrorCode, PeerSessionError, PeerSessionErrorCode } from './peer';
9
10
  export { TrackerError, TrackerErrorCode } from './tracker';
10
- export type { BitfieldMessage, CancelMessage, ChokeMessage, HaveMessage, InterestedMessage, KeepAliveMessage, NotInterestedMessage, PeerMessage, PieceMessage, RequestMessage, UnchokeMessage, PeerConnectionSession, PeerPoolOptions, PeerSessionConnectOptions, } from './peer/index';
11
+ export type { DownloadProgress, DownloadProgressEventMode, TorrentFileSelection, TorrentFiles, TorrentMetadata, TorrentStats, TorrentStateChange, } from './torrent/index';
12
+ export type { TorrentFile } from './torrent/types';
11
13
  export { BunTorrentError } from './utils/errors';
12
- export type { BBytes, BDict, BInteger, BList, BValue, BencodeInput, TorrentFiles, TorrentStats, TorrentStateChange, } from './torrent/index';
package/dist/index.js CHANGED
@@ -2,10 +2,10 @@
2
2
  * Copyright (c) 2026 Nikola Nedeljkovic
3
3
  * SPDX-License-Identifier: MIT
4
4
  */
5
- export * from './client';
5
+ export { Client, DownloadState, TorrentClient } from './client';
6
6
  export { ClientError, ClientErrorCode } from './client.error';
7
- export { BencodeDecodeError, BencodeDecodeErrorCode, BencodeEncodeError, BencodeEncodeErrorCode, computeInfoHash, decodeBencode, encodeBencode, parseTorrent, Torrent, TorrentState, toBValue, TorrentParseError, TorrentParseErrorCode, } from './torrent/index';
8
- export { connectToPeers, createPeerId, decodeHandshake, decodePeerMessage, encodePeerMessage, encodeHandshake, HandshakeErrorCode, PeerMessageError, PeerMessageErrorCode, PeerMessageId, PeerHandshakeError, PeerPoolError, PeerPoolErrorCode, PeerPool, PeerSession, PeerSessionError, PeerSessionErrorCode, openPeerPool, } from './peer/index';
7
+ export { Torrent, TorrentState, TorrentParseError, TorrentParseErrorCode, TorrentStorageError, TorrentStorageErrorCode, PiecePlannerError, PiecePlannerErrorCode, } from './torrent/index';
8
+ export { PeerPoolError, PeerPoolErrorCode, PeerSessionError, PeerSessionErrorCode } from './peer';
9
9
  export { TrackerError, TrackerErrorCode } from './tracker';
10
10
  export { BunTorrentError } from './utils/errors';
11
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,GAGxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,cAAc,EACd,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,GAEf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAkB3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EACH,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAa3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import { PeerSession } from '../session';
2
2
  import { PeerPoolError, PeerPoolErrorCode } from './pool.error';
3
- const DEFAULT_MAX_CONNECTING = 20;
4
- const DEFAULT_CONNECT_TIMEOUT_MS = 3_000;
3
+ import { defaults } from '../../configs/defaults';
5
4
  export class PeerPool {
6
5
  peers;
7
6
  options;
@@ -175,7 +174,7 @@ export const connectToPeers = async (peers, options) => {
175
174
  };
176
175
  const normalizeOptions = (options) => {
177
176
  const targetConnections = assertPositiveInteger(options.targetConnections, 'targetConnections');
178
- const minConnections = assertNonNegativeInteger(options.minConnections ?? 1, 'minConnections');
177
+ const minConnections = assertNonNegativeInteger(options.minConnections ?? defaults.peers.minConnections, 'minConnections');
179
178
  if (minConnections > targetConnections) {
180
179
  throw new PeerPoolError(PeerPoolErrorCode.INVALID_OPTION, 'minConnections cannot be greater than targetConnections');
181
180
  }
@@ -185,8 +184,8 @@ const normalizeOptions = (options) => {
185
184
  targetConnections,
186
185
  totalPieces: options.totalPieces,
187
186
  minConnections,
188
- maxConnecting: Math.max(1, options.maxConnecting ?? DEFAULT_MAX_CONNECTING),
189
- timeoutMs: options.timeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS,
187
+ maxConnecting: Math.max(1, options.maxConnecting ?? defaults.peers.maxConnecting),
188
+ timeoutMs: options.timeoutMs ?? defaults.peers.connectTimeoutMs,
190
189
  createSession: options.createSession ??
191
190
  ((peer) => new PeerSession(peer)),
192
191
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer/pool/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer/pool/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type PeerMessage } from '../messages';
2
- import { PeerPieceAvailability } from '../availability';
2
+ import { type PeerPieceAvailability } from '../availability';
3
3
  import type { PeerInfo } from '../../tracker/types';
4
4
  export type PeerSessionConnectOptions = {
5
5
  timeoutMs?: number;
@@ -1,19 +1,19 @@
1
1
  import { HANDSHAKE_LENGTH } from '../consts';
2
2
  import { decodeHandshake, encodeHandshake } from '../handshake';
3
3
  import { decodePeerMessage, encodePeerMessage } from '../messages';
4
- import { PeerPieceAvailability } from '../availability';
4
+ import { createPeerPieceAvailability } from '../availability';
5
5
  import { concatBytes } from '../../utils/buffers';
6
6
  import { BunTorrentError } from '../../utils/errors';
7
7
  import { createConnection } from 'node:net';
8
8
  import { PeerSessionError, PeerSessionErrorCode } from './session.error';
9
- const DEFAULT_CONNECT_TIMEOUT_MS = 5_000;
9
+ import { defaults } from '../../configs/defaults';
10
10
  export class PeerSession {
11
11
  peer;
12
12
  peerChoking = true;
13
13
  peerInterested = false;
14
14
  amChoking = true;
15
15
  amInterested = false;
16
- availability = new PeerPieceAvailability(0);
16
+ availability = createPeerPieceAvailability(0);
17
17
  messageListeners = new Set();
18
18
  closeListeners = new Set();
19
19
  handshakeDone = false;
@@ -25,8 +25,8 @@ export class PeerSession {
25
25
  this.peer = peer;
26
26
  }
27
27
  async connect(infoHash, peerId, options = {}) {
28
- const timeoutMs = options.timeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
29
- this.availability = new PeerPieceAvailability(options.totalPieces ?? 0);
28
+ const timeoutMs = options.timeoutMs ?? defaults.peers.connectTimeoutMs;
29
+ this.availability = createPeerPieceAvailability(options.totalPieces ?? 0);
30
30
  return new Promise((resolve, reject) => {
31
31
  if (this.closed) {
32
32
  reject(new PeerSessionError(PeerSessionErrorCode.CLOSED, 'Peer session is already closed'));
@@ -146,6 +146,11 @@ export class PeerSession {
146
146
  }
147
147
  while (this.handshakeDone && this.buffer.byteLength >= 4) {
148
148
  const frameLength = new DataView(this.buffer.buffer, this.buffer.byteOffset, 4).getUint32(0, false);
149
+ const maxPeerMessageLength = 1 + 8 + defaults.pieces.blockSize; // add 4 bytes prefix
150
+ if (frameLength > maxPeerMessageLength) {
151
+ this.close();
152
+ return;
153
+ }
149
154
  const totalLength = 4 + frameLength;
150
155
  if (this.buffer.byteLength < totalLength)
151
156
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer/session/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/peer/session/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type PeerDownloadStats = {
2
+ receivedBytes: number;
3
+ receivedBlocks: number;
4
+ timedOutRequests: number;
5
+ sentRequests: number;
6
+ completedPieces: number;
7
+ invalidPieces: number;
8
+ lastBlockAt: number | null;
9
+ totalRequestTimeMs: number;
10
+ completedRequests: number;
11
+ };
12
+ export declare class PeerScorer {
13
+ getScore(stats: PeerDownloadStats): number;
14
+ getRequestLimit(stats: PeerDownloadStats, defaultLimit: number): number;
15
+ }
@@ -0,0 +1,24 @@
1
+ export class PeerScorer {
2
+ getScore(stats) {
3
+ const averageRequestTime = stats.completedRequests === 0
4
+ ? Number.POSITIVE_INFINITY
5
+ : stats.totalRequestTimeMs / stats.completedRequests;
6
+ const timeoutPenalty = stats.timedOutRequests * 1000;
7
+ const invalidPenalty = stats.invalidPieces * 2000;
8
+ const speedBonus = stats.receivedBytes / Math.max(1, averageRequestTime);
9
+ return speedBonus + stats.completedPieces * 100 - timeoutPenalty - invalidPenalty;
10
+ }
11
+ getRequestLimit(stats, defaultLimit) {
12
+ if (stats.timedOutRequests >= 3 && stats.completedRequests === 0)
13
+ return 1;
14
+ if (stats.completedRequests < 3)
15
+ return defaultLimit;
16
+ const timeoutRate = stats.timedOutRequests / Math.max(1, stats.sentRequests);
17
+ if (timeoutRate > 0.5)
18
+ return Math.max(1, Math.floor(defaultLimit / 4));
19
+ if (timeoutRate > 0.25)
20
+ return Math.max(1, Math.floor(defaultLimit / 2));
21
+ return defaultLimit;
22
+ }
23
+ }
24
+ //# sourceMappingURL=PeerScorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeerScorer.js","sourceRoot":"","sources":["../../../src/torrent/download/PeerScorer.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAC,KAAwB;QACpC,MAAM,kBAAkB,GACpB,KAAK,CAAC,iBAAiB,KAAK,CAAC;YACzB,CAAC,CAAC,MAAM,CAAC,iBAAiB;YAC1B,CAAC,CAAC,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAE7D,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACrD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAEzE,OAAO,UAAU,GAAG,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,cAAc,GAAG,cAAc,CAAC;IACtF,CAAC;IAEM,eAAe,CAAC,KAAwB,EAAE,YAAoB;QACjE,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;QAErD,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAE7E,IAAI,WAAW,GAAG,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,WAAW,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QAEzE,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ"}
@@ -1,2 +1,4 @@
1
1
  export { DownloadManager } from './manager';
2
- export type { DownloadManagerOptions, DownloadPeerPool, DownloadPeerSession, DownloadProgress, DownloadProgressEventMode, DownloadProgressListener, } from './manager';
2
+ export type { DownloadManagerOptions, DownloadProgress, DownloadProgressEventMode, DownloadProgressListener, } from './manager';
3
+ export { PeerScorer } from './PeerScorer';
4
+ export type { PeerDownloadStats } from './PeerScorer';
@@ -1,2 +1,3 @@
1
1
  export { DownloadManager } from './manager';
2
+ export { PeerScorer } from './PeerScorer';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/torrent/download/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/torrent/download/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAO5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}