bun-torrent 0.0.1-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.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/package.json +49 -0
- package/src/app.ts +65 -0
- package/src/client.error.ts +12 -0
- package/src/client.test.ts +117 -0
- package/src/client.ts +185 -0
- package/src/index.test.ts +7 -0
- package/src/index.ts +76 -0
- package/src/peer/__tests__/peer-id.test.ts +24 -0
- package/src/peer/availability.test.ts +50 -0
- package/src/peer/availability.ts +88 -0
- package/src/peer/consts.ts +11 -0
- package/src/peer/handshake/handshake.error.ts +15 -0
- package/src/peer/handshake/handshake.test.ts +125 -0
- package/src/peer/handshake/index.ts +83 -0
- package/src/peer/index.ts +31 -0
- package/src/peer/messages/error.ts +16 -0
- package/src/peer/messages/helpers.ts +36 -0
- package/src/peer/messages/index.ts +174 -0
- package/src/peer/messages/messages.test.ts +231 -0
- package/src/peer/messages/types.ts +76 -0
- package/src/peer/peer-id.ts +9 -0
- package/src/peer/pool/index.ts +301 -0
- package/src/peer/pool/pool.error.ts +17 -0
- package/src/peer/pool/pool.test.ts +305 -0
- package/src/peer/session/index.ts +276 -0
- package/src/peer/session/session.error.ts +19 -0
- package/src/peer/session/session.test.ts +110 -0
- package/src/peer/types.ts +6 -0
- package/src/torrent/bencode/__tests__/decoder.test.ts +212 -0
- package/src/torrent/bencode/__tests__/encoder.test.ts +138 -0
- package/src/torrent/bencode/__tests__/encoder.unit.test.ts +24 -0
- package/src/torrent/bencode/__tests__/integration.test.ts +64 -0
- package/src/torrent/bencode/decoder.error.ts +36 -0
- package/src/torrent/bencode/decoder.ts +180 -0
- package/src/torrent/bencode/encoder.error.ts +14 -0
- package/src/torrent/bencode/encoder.ts +86 -0
- package/src/torrent/bencode/index.ts +9 -0
- package/src/torrent/bencode/types.ts +15 -0
- package/src/torrent/bencode/utils.ts +17 -0
- package/src/torrent/download/index.ts +9 -0
- package/src/torrent/download/manager.test.ts +393 -0
- package/src/torrent/download/manager.ts +376 -0
- package/src/torrent/file-selection.ts +51 -0
- package/src/torrent/index.ts +61 -0
- package/src/torrent/parser/helpers.ts +44 -0
- package/src/torrent/parser/index.ts +197 -0
- package/src/torrent/parser/info-hash.test.ts +39 -0
- package/src/torrent/parser/info-hash.ts +7 -0
- package/src/torrent/parser/parser.error.ts +21 -0
- package/src/torrent/parser/parser.test.ts +286 -0
- package/src/torrent/pieces/DefaultPlanner.ts +257 -0
- package/src/torrent/pieces/index.ts +20 -0
- package/src/torrent/pieces/planner.error.ts +18 -0
- package/src/torrent/pieces/planner.test.ts +303 -0
- package/src/torrent/pieces/planner.ts +16 -0
- package/src/torrent/pieces/types.ts +59 -0
- package/src/torrent/pieces/utils.ts +85 -0
- package/src/torrent/pieces/validation.test.ts +32 -0
- package/src/torrent/pieces/validation.ts +27 -0
- package/src/torrent/session/index.ts +195 -0
- package/src/torrent/session/session.test.ts +279 -0
- package/src/torrent/storage/index.ts +161 -0
- package/src/torrent/storage/storage.error.ts +18 -0
- package/src/torrent/storage/storage.test.ts +326 -0
- package/src/torrent/storage/types.ts +13 -0
- package/src/torrent/types.ts +16 -0
- package/src/tracker/http.test.ts +66 -0
- package/src/tracker/http.ts +137 -0
- package/src/tracker/index.ts +93 -0
- package/src/tracker/tracker.error.ts +26 -0
- package/src/tracker/types.ts +17 -0
- package/src/tracker/udp.test.ts +155 -0
- package/src/tracker/udp.ts +234 -0
- package/src/utils/__tests__/sha1.test.ts +16 -0
- package/src/utils/buffers.ts +28 -0
- package/src/utils/errors.ts +9 -0
- package/src/utils/formats.ts +8 -0
- package/src/utils/sha1.ts +4 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
type ByteArray = Uint8Array<ArrayBufferLike>;
|
|
2
|
+
|
|
3
|
+
export const concatBytes = (parts: ByteArray[]): Uint8Array => {
|
|
4
|
+
const length = parts.reduce((total, part) => total + part.byteLength, 0);
|
|
5
|
+
const output = new Uint8Array(length);
|
|
6
|
+
|
|
7
|
+
let offset = 0;
|
|
8
|
+
for (const part of parts) {
|
|
9
|
+
output.set(part, offset);
|
|
10
|
+
offset += part.byteLength;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return output;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const compareBytes = (left: ByteArray, right: ByteArray): number => {
|
|
17
|
+
const length = Math.min(left.byteLength, right.byteLength);
|
|
18
|
+
|
|
19
|
+
for (let i = 0; i < length; i++) {
|
|
20
|
+
const diff = left[i]! - right[i]!;
|
|
21
|
+
if (diff !== 0) return diff;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return left.byteLength - right.byteLength;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const bytesToHex = (bytes: ByteArray): string =>
|
|
28
|
+
[...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const byteUnits = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
|
|
2
|
+
export const formatBytes = (bytes: number): string => {
|
|
3
|
+
const i = bytes === 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));
|
|
4
|
+
const value = Number(bytes / Math.pow(1024, i)).toFixed(1);
|
|
5
|
+
|
|
6
|
+
if (i >= byteUnits.length) return `${bytes} B`;
|
|
7
|
+
return `${value} ${byteUnits[i]}`;
|
|
8
|
+
};
|