nyashare 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI/C,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAwC;IAEnD,SAAS,CACb,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,GAC5C,OAAO,CAAC,YAAY,EAAE,CAAC;IAuDpB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,MAAM,CAAC;IA2BlB,YAAY,IAAI,YAAY,EAAE;CAG/B"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileTransferService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const form_data_1 = __importDefault(require("form-data"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_1 = require("fs");
12
+ const promises_1 = require("stream/promises");
13
+ class FileTransferService {
14
+ constructor() {
15
+ this.transfers = new Map();
16
+ }
17
+ async sendFiles(files, device, onProgress) {
18
+ const transfers = [];
19
+ for (const filePath of files) {
20
+ const stat = await fs_extra_1.default.stat(filePath);
21
+ const transfer = {
22
+ id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
23
+ filename: path_1.default.basename(filePath),
24
+ size: stat.size,
25
+ progress: 0,
26
+ status: 'pending',
27
+ toDevice: device.name
28
+ };
29
+ this.transfers.set(transfer.id, transfer);
30
+ transfers.push(transfer);
31
+ try {
32
+ transfer.status = 'transferring';
33
+ const form = new form_data_1.default();
34
+ form.append('files', fs_extra_1.default.createReadStream(filePath), {
35
+ filename: path_1.default.basename(filePath),
36
+ knownLength: stat.size
37
+ });
38
+ await axios_1.default.post(`http://${device.ip}:${device.port}/api/upload`, form, {
39
+ headers: form.getHeaders(),
40
+ maxContentLength: Infinity,
41
+ maxBodyLength: Infinity,
42
+ onUploadProgress: (progressEvent) => {
43
+ if (progressEvent.total) {
44
+ transfer.progress = Math.round((progressEvent.loaded * 100) / progressEvent.total);
45
+ onProgress?.(transfer);
46
+ }
47
+ }
48
+ });
49
+ transfer.status = 'completed';
50
+ transfer.progress = 100;
51
+ onProgress?.(transfer);
52
+ }
53
+ catch (error) {
54
+ transfer.status = 'failed';
55
+ onProgress?.(transfer);
56
+ throw error;
57
+ }
58
+ }
59
+ return transfers;
60
+ }
61
+ async downloadFile(filename, device, downloadDir, onProgress) {
62
+ const outputPath = path_1.default.join(downloadDir, filename.replace(/^\d+-\d+-/, ''));
63
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(outputPath));
64
+ const response = await (0, axios_1.default)({
65
+ method: 'GET',
66
+ url: `http://${device.ip}:${device.port}/api/download/${filename}`,
67
+ responseType: 'stream'
68
+ });
69
+ const totalLength = parseInt(response.headers['content-length'] || '0', 10);
70
+ let downloadedLength = 0;
71
+ const writeStream = (0, fs_1.createWriteStream)(outputPath);
72
+ response.data.on('data', (chunk) => {
73
+ downloadedLength += chunk.length;
74
+ if (totalLength > 0) {
75
+ onProgress?.(Math.round((downloadedLength * 100) / totalLength));
76
+ }
77
+ });
78
+ await (0, promises_1.pipeline)(response.data, writeStream);
79
+ return outputPath;
80
+ }
81
+ getTransfers() {
82
+ return Array.from(this.transfers.values());
83
+ }
84
+ }
85
+ exports.FileTransferService = FileTransferService;
86
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface Device {
2
+ id: string;
3
+ name: string;
4
+ ip: string;
5
+ port: number;
6
+ lastSeen: Date;
7
+ }
8
+ export interface FileTransfer {
9
+ id: string;
10
+ filename: string;
11
+ size: number;
12
+ progress: number;
13
+ status: 'pending' | 'transferring' | 'completed' | 'failed';
14
+ fromDevice?: string;
15
+ toDevice?: string;
16
+ localPath?: string;
17
+ remotePath?: string;
18
+ }
19
+ export interface TransferRequest {
20
+ files: string[];
21
+ targetDevice: Device;
22
+ }
23
+ export interface ServerConfig {
24
+ port: number;
25
+ deviceName: string;
26
+ downloadDir: string;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "nyashare",
3
+ "version": "0.0.1",
4
+ "description": "CLI tool to share files over local network",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "nyashare": "dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "ts-node src/cli.ts",
12
+ "start": "node dist/cli.js",
13
+ "lint": "eslint src/**/*.ts",
14
+ "typecheck": "tsc --noEmit",
15
+ "diagnose": "DEBUG=true ts-node src/diagnostic.ts",
16
+ "diagnose:build": "npm run build && DEBUG=true node dist/diagnostic.js"
17
+ },
18
+ "keywords": [
19
+ "cli",
20
+ "file-sharing",
21
+ "local-network",
22
+ "p2p"
23
+ ],
24
+ "author": "",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "axios": "^1.6.2",
28
+ "chalk": "^4.1.2",
29
+ "commander": "^11.1.0",
30
+ "express": "^4.18.2",
31
+ "form-data": "^4.0.0",
32
+ "fs-extra": "^11.2.0",
33
+ "inquirer": "^8.2.6",
34
+ "ip": "^1.1.8",
35
+ "mime-types": "^2.1.35",
36
+ "multer": "^1.4.5-lts.1",
37
+ "open": "^8.4.2",
38
+ "ora": "^5.4.1",
39
+ "ws": "^8.16.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/express": "^4.17.21",
43
+ "@types/fs-extra": "^11.0.4",
44
+ "@types/inquirer": "^9.0.7",
45
+ "@types/ip": "^1.1.3",
46
+ "@types/mime-types": "^2.1.4",
47
+ "@types/multer": "^1.4.11",
48
+ "@types/node": "^20.10.4",
49
+ "@types/ws": "^8.5.10",
50
+ "@typescript-eslint/eslint-plugin": "^6.14.0",
51
+ "@typescript-eslint/parser": "^6.14.0",
52
+ "eslint": "^8.55.0",
53
+ "ts-node": "^10.9.2",
54
+ "typescript": "^5.3.3"
55
+ },
56
+ "engines": {
57
+ "node": ">=16.0.0"
58
+ },
59
+ "files": [
60
+ "dist/**/*",
61
+ "README.md",
62
+ "LICENSE"
63
+ ]
64
+ }