fwdcast 1.0.0 → 1.2.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.
- package/README.md +79 -22
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -35
- package/dist/index.js.map +1 -1
- package/dist/scanner.d.ts +9 -2
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +33 -3
- package/dist/scanner.js.map +1 -1
- package/dist/tunnel-client.d.ts +61 -0
- package/dist/tunnel-client.d.ts.map +1 -1
- package/dist/tunnel-client.js +280 -1
- package/dist/tunnel-client.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -1,63 +1,120 @@
|
|
|
1
1
|
# fwdcast
|
|
2
2
|
|
|
3
|
-
Temporary file sharing -
|
|
3
|
+
**Temporary file sharing** - Stream local files as a public website without uploading anything.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **
|
|
8
|
-
- **
|
|
9
|
-
- **VS Code-style UI** - Beautiful dark theme file browser
|
|
10
|
-
- **File preview** - View text
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
7
|
+
- 🚀 **Instant sharing** - Get a public URL in seconds
|
|
8
|
+
- 📁 **No upload** - Files stream directly from your machine
|
|
9
|
+
- 🎨 **VS Code-style UI** - Beautiful dark theme file browser
|
|
10
|
+
- 👁️ **File preview** - View text, code, and images in-browser
|
|
11
|
+
- 📥 **ZIP download** - Download entire directories with one click
|
|
12
|
+
- 🔒 **Password protection** - Secure your share with a password
|
|
13
|
+
- 📱 **QR code** - Easy mobile sharing with terminal QR code
|
|
14
|
+
- 📊 **Live stats** - View count and bandwidth in real-time
|
|
15
|
+
- ⏱️ **Custom duration** - Sessions from 1-120 minutes
|
|
16
|
+
- 🚫 **Exclude files** - Skip .git, node_modules, etc.
|
|
13
17
|
|
|
14
18
|
## Installation
|
|
15
19
|
|
|
20
|
+
### Using npx (no install required)
|
|
16
21
|
```bash
|
|
17
|
-
|
|
22
|
+
npx fwdcast
|
|
18
23
|
```
|
|
19
24
|
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
### Global install
|
|
22
26
|
```bash
|
|
23
|
-
|
|
27
|
+
npm install -g fwdcast
|
|
28
|
+
fwdcast
|
|
24
29
|
```
|
|
25
30
|
|
|
26
31
|
## Usage
|
|
27
32
|
|
|
28
|
-
Share
|
|
29
|
-
|
|
33
|
+
### Basic - Share current directory
|
|
30
34
|
```bash
|
|
31
35
|
fwdcast
|
|
32
36
|
```
|
|
33
37
|
|
|
34
|
-
Share a specific
|
|
35
|
-
|
|
38
|
+
### Share a specific folder
|
|
36
39
|
```bash
|
|
37
40
|
fwdcast /path/to/folder
|
|
38
41
|
```
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
### Password protect your share
|
|
44
|
+
```bash
|
|
45
|
+
fwdcast -p mysecretpassword
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Show QR code for mobile
|
|
49
|
+
```bash
|
|
50
|
+
fwdcast -q
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Custom session duration (60 minutes)
|
|
54
|
+
```bash
|
|
55
|
+
fwdcast -d 60
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Exclude additional files/folders
|
|
59
|
+
```bash
|
|
60
|
+
fwdcast -e .git node_modules dist
|
|
61
|
+
```
|
|
41
62
|
|
|
63
|
+
### Use a custom relay server
|
|
42
64
|
```bash
|
|
43
65
|
fwdcast --relay wss://your-relay.com/ws
|
|
44
66
|
```
|
|
45
67
|
|
|
68
|
+
### Combine options
|
|
69
|
+
```bash
|
|
70
|
+
fwdcast ~/Documents -p secret123 -d 60 -q
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## CLI Options
|
|
74
|
+
|
|
75
|
+
| Option | Description | Default |
|
|
76
|
+
|--------|-------------|---------|
|
|
77
|
+
| `-p, --password <pass>` | Require password to access | None |
|
|
78
|
+
| `-d, --duration <mins>` | Session duration (1-120) | 30 |
|
|
79
|
+
| `-q, --qr` | Show QR code in terminal | false |
|
|
80
|
+
| `-e, --exclude <patterns>` | Exclude files/folders | See below |
|
|
81
|
+
| `-r, --relay <url>` | Custom relay server | Public relay |
|
|
82
|
+
|
|
83
|
+
### Default Excludes
|
|
84
|
+
These are always excluded: `.git`, `node_modules`, `.DS_Store`, `__pycache__`, `.env`
|
|
85
|
+
|
|
46
86
|
## How It Works
|
|
47
87
|
|
|
48
|
-
1. fwdcast scans your
|
|
49
|
-
2.
|
|
50
|
-
3.
|
|
51
|
-
4.
|
|
52
|
-
5.
|
|
88
|
+
1. **You run fwdcast** - CLI scans your directory and connects to relay
|
|
89
|
+
2. **Get a URL** - Relay assigns a unique session URL
|
|
90
|
+
3. **Share the URL** - Anyone with the link can browse your files
|
|
91
|
+
4. **Files stream on-demand** - When someone requests a file, it streams from your machine
|
|
92
|
+
5. **Session ends** - When you stop the CLI or session expires, files become inaccessible
|
|
93
|
+
|
|
94
|
+
## Live Stats
|
|
95
|
+
|
|
96
|
+
While sharing, fwdcast shows real-time statistics:
|
|
97
|
+
```
|
|
98
|
+
[2 viewers] Total: 15.3 MB | Requests: 42 | 1.2 MB/s
|
|
99
|
+
```
|
|
53
100
|
|
|
54
101
|
## Limits
|
|
55
102
|
|
|
56
103
|
- Maximum total size: 500 MB
|
|
57
104
|
- Maximum file size: 100 MB per file
|
|
58
|
-
- Session duration:
|
|
105
|
+
- Session duration: 1-120 minutes (default: 30)
|
|
59
106
|
- Maximum concurrent viewers: 3
|
|
60
107
|
|
|
108
|
+
## Security Considerations
|
|
109
|
+
|
|
110
|
+
- **Password protection** - Add `-p` flag to require authentication
|
|
111
|
+
- **Temporary by design** - Sessions auto-expire, reducing exposure window
|
|
112
|
+
- **No persistence** - Nothing is stored on the relay server
|
|
113
|
+
- **Path traversal protection** - CLI validates all file paths
|
|
114
|
+
- **Default excludes** - Sensitive files like `.env` are excluded by default
|
|
115
|
+
|
|
116
|
+
**⚠️ Warning**: Without a password, anyone with your session URL can access your shared files.
|
|
117
|
+
|
|
61
118
|
## Self-Hosting
|
|
62
119
|
|
|
63
120
|
You can run your own relay server. See the [relay documentation](https://github.com/vamsiy/fwdcast/tree/main/relay) for setup instructions.
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
package/dist/index.js
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* fwdcast CLI - Temporary file sharing tool
|
|
5
5
|
* Streams local files as a public website without uploading them
|
|
6
|
-
*
|
|
7
|
-
* Requirements: 1.1, 1.5, 1.6, 7.1, 7.2, 7.4
|
|
8
6
|
*/
|
|
9
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
8
|
if (k2 === undefined) k2 = k;
|
|
@@ -42,6 +40,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
42
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
41
|
const commander_1 = require("commander");
|
|
44
42
|
const path = __importStar(require("path"));
|
|
43
|
+
const qrcode = __importStar(require("qrcode-terminal"));
|
|
45
44
|
const scanner_1 = require("./scanner");
|
|
46
45
|
const validator_1 = require("./validator");
|
|
47
46
|
const tunnel_client_1 = require("./tunnel-client");
|
|
@@ -50,24 +49,79 @@ const tunnel_client_1 = require("./tunnel-client");
|
|
|
50
49
|
*/
|
|
51
50
|
const DEFAULT_RELAY_URL = 'wss://fwdcast.publicvm.com/ws';
|
|
52
51
|
/**
|
|
53
|
-
*
|
|
52
|
+
* Default session duration in minutes
|
|
54
53
|
*/
|
|
55
|
-
const
|
|
54
|
+
const DEFAULT_DURATION_MINUTES = 30;
|
|
55
|
+
/**
|
|
56
|
+
* Maximum session duration in minutes (2 hours)
|
|
57
|
+
*/
|
|
58
|
+
const MAX_DURATION_MINUTES = 120;
|
|
59
|
+
/**
|
|
60
|
+
* Minimum session duration in minutes
|
|
61
|
+
*/
|
|
62
|
+
const MIN_DURATION_MINUTES = 1;
|
|
56
63
|
/**
|
|
57
64
|
* Maximum number of connection retry attempts
|
|
58
|
-
* Requirement: 7.4
|
|
59
65
|
*/
|
|
60
66
|
const MAX_RETRY_ATTEMPTS = 10;
|
|
61
67
|
/**
|
|
62
68
|
* Delay between retry attempts in milliseconds
|
|
63
69
|
*/
|
|
64
70
|
const RETRY_DELAY_MS = 500;
|
|
71
|
+
/**
|
|
72
|
+
* Default exclude patterns
|
|
73
|
+
*/
|
|
74
|
+
const DEFAULT_EXCLUDES = ['.git', 'node_modules', '.DS_Store', '__pycache__', '.env'];
|
|
75
|
+
/**
|
|
76
|
+
* Format bytes to human readable string
|
|
77
|
+
*/
|
|
78
|
+
function formatBytes(bytes) {
|
|
79
|
+
if (bytes === 0)
|
|
80
|
+
return '0 B';
|
|
81
|
+
const k = 1024;
|
|
82
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
83
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
84
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Format transfer speed
|
|
88
|
+
*/
|
|
89
|
+
function formatSpeed(bytesPerSecond) {
|
|
90
|
+
return formatBytes(bytesPerSecond) + '/s';
|
|
91
|
+
}
|
|
65
92
|
/**
|
|
66
93
|
* Sleep for a specified number of milliseconds
|
|
67
94
|
*/
|
|
68
95
|
function sleep(ms) {
|
|
69
96
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
70
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Parse duration string to minutes
|
|
100
|
+
*/
|
|
101
|
+
function parseDuration(value) {
|
|
102
|
+
const num = parseInt(value, 10);
|
|
103
|
+
if (isNaN(num) || num < MIN_DURATION_MINUTES) {
|
|
104
|
+
return MIN_DURATION_MINUTES;
|
|
105
|
+
}
|
|
106
|
+
if (num > MAX_DURATION_MINUTES) {
|
|
107
|
+
return MAX_DURATION_MINUTES;
|
|
108
|
+
}
|
|
109
|
+
return num;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Format duration for display
|
|
113
|
+
*/
|
|
114
|
+
function formatDuration(minutes) {
|
|
115
|
+
if (minutes < 60) {
|
|
116
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''}`;
|
|
117
|
+
}
|
|
118
|
+
const hours = Math.floor(minutes / 60);
|
|
119
|
+
const mins = minutes % 60;
|
|
120
|
+
if (mins === 0) {
|
|
121
|
+
return `${hours} hour${hours !== 1 ? 's' : ''}`;
|
|
122
|
+
}
|
|
123
|
+
return `${hours}h ${mins}m`;
|
|
124
|
+
}
|
|
71
125
|
/**
|
|
72
126
|
* Main CLI entry point
|
|
73
127
|
*/
|
|
@@ -76,41 +130,62 @@ async function main() {
|
|
|
76
130
|
program
|
|
77
131
|
.name('fwdcast')
|
|
78
132
|
.description('Temporary file sharing - stream local files as a public website without uploading')
|
|
79
|
-
.version('1.
|
|
133
|
+
.version('1.2.0')
|
|
80
134
|
.argument('[path]', 'Directory to share (default: current directory)', '.')
|
|
81
135
|
.option('-r, --relay <url>', 'Custom relay server URL', DEFAULT_RELAY_URL)
|
|
136
|
+
.option('-p, --password <password>', 'Require password to access files')
|
|
137
|
+
.option('-e, --exclude <patterns...>', 'Exclude files/folders matching patterns (e.g., -e .git node_modules)')
|
|
138
|
+
.option('-d, --duration <minutes>', 'Session duration in minutes (1-120)', String(DEFAULT_DURATION_MINUTES))
|
|
139
|
+
.option('-q, --qr', 'Show QR code for easy mobile sharing', false)
|
|
82
140
|
.addHelpText('after', `
|
|
83
141
|
Examples:
|
|
84
|
-
$ fwdcast
|
|
85
|
-
$ fwdcast
|
|
86
|
-
$ fwdcast
|
|
87
|
-
$ fwdcast
|
|
142
|
+
$ fwdcast Share current directory
|
|
143
|
+
$ fwdcast ~/Downloads Share Downloads folder
|
|
144
|
+
$ fwdcast -p secret123 Password protect the share
|
|
145
|
+
$ fwdcast -e .git node_modules Exclude .git and node_modules
|
|
146
|
+
$ fwdcast -d 60 Session lasts 60 minutes
|
|
147
|
+
$ fwdcast -q Show QR code for mobile
|
|
148
|
+
$ fwdcast -p mypass -d 120 -e .git Combine options
|
|
149
|
+
|
|
150
|
+
Default excludes (always applied):
|
|
151
|
+
${DEFAULT_EXCLUDES.join(', ')}
|
|
88
152
|
|
|
89
153
|
Limits:
|
|
90
154
|
• Max total size: 500 MB
|
|
91
155
|
• Max file size: 100 MB
|
|
92
|
-
• Session duration:
|
|
156
|
+
• Session duration: 1-120 minutes (default: 30)
|
|
93
157
|
• Concurrent viewers: 3
|
|
94
158
|
|
|
95
159
|
More info: https://github.com/vamsiy78/fwdcast
|
|
96
160
|
`)
|
|
97
161
|
.action(async (dirPath, options) => {
|
|
98
|
-
await runShare(dirPath, options
|
|
162
|
+
await runShare(dirPath, options);
|
|
99
163
|
});
|
|
100
164
|
await program.parseAsync(process.argv);
|
|
101
165
|
}
|
|
102
166
|
/**
|
|
103
167
|
* Run the file sharing process
|
|
104
|
-
*
|
|
105
|
-
* Requirements: 1.1, 1.5, 1.6, 7.1, 7.2
|
|
106
168
|
*/
|
|
107
|
-
async function runShare(dirPath,
|
|
169
|
+
async function runShare(dirPath, options) {
|
|
108
170
|
const absolutePath = path.resolve(dirPath);
|
|
109
|
-
|
|
110
|
-
|
|
171
|
+
const durationMinutes = parseDuration(options.duration);
|
|
172
|
+
const durationMs = durationMinutes * 60 * 1000;
|
|
173
|
+
// Combine default excludes with user-provided excludes
|
|
174
|
+
const excludePatterns = [...DEFAULT_EXCLUDES];
|
|
175
|
+
if (options.exclude && options.exclude.length > 0) {
|
|
176
|
+
excludePatterns.push(...options.exclude);
|
|
177
|
+
}
|
|
178
|
+
// Remove duplicates
|
|
179
|
+
const uniqueExcludes = [...new Set(excludePatterns)];
|
|
180
|
+
console.log(`\nScanning directory: ${absolutePath}`);
|
|
181
|
+
if (uniqueExcludes.length > 0) {
|
|
182
|
+
console.log(`Excluding: ${uniqueExcludes.join(', ')}`);
|
|
183
|
+
}
|
|
184
|
+
console.log('');
|
|
185
|
+
// Step 1: Scan the directory with exclusions
|
|
111
186
|
let entries;
|
|
112
187
|
try {
|
|
113
|
-
entries = await (0, scanner_1.scanDirectory)(absolutePath);
|
|
188
|
+
entries = await (0, scanner_1.scanDirectory)(absolutePath, undefined, uniqueExcludes);
|
|
114
189
|
}
|
|
115
190
|
catch (error) {
|
|
116
191
|
const err = error;
|
|
@@ -125,12 +200,12 @@ async function runShare(dirPath, relayUrl) {
|
|
|
125
200
|
}
|
|
126
201
|
process.exit(1);
|
|
127
202
|
}
|
|
128
|
-
// Step 2: Calculate scan result
|
|
203
|
+
// Step 2: Calculate scan result
|
|
129
204
|
const scanResult = (0, scanner_1.calculateScanResult)(entries);
|
|
130
205
|
console.log(` Files: ${scanResult.fileCount}`);
|
|
131
206
|
console.log(` Directories: ${scanResult.directoryCount}`);
|
|
132
207
|
console.log(` Total size: ${(0, validator_1.formatSize)(scanResult.totalSize)}\n`);
|
|
133
|
-
// Step 3: Validate size limits
|
|
208
|
+
// Step 3: Validate size limits
|
|
134
209
|
const validation = (0, validator_1.validateScanResult)(scanResult);
|
|
135
210
|
if (!validation.valid) {
|
|
136
211
|
console.error('Error: Cannot share directory\n');
|
|
@@ -145,49 +220,62 @@ async function runShare(dirPath, relayUrl) {
|
|
|
145
220
|
console.error(` - ${error.message}`);
|
|
146
221
|
}
|
|
147
222
|
}
|
|
148
|
-
console.error('\nTip: Remove large files or
|
|
223
|
+
console.error('\nTip: Remove large files or use --exclude to skip them.\n');
|
|
149
224
|
process.exit(1);
|
|
150
225
|
}
|
|
151
|
-
// Step 4: Connect to relay server
|
|
226
|
+
// Step 4: Connect to relay server
|
|
152
227
|
console.log(`Connecting to relay server...`);
|
|
153
|
-
const expiresAt = Date.now() +
|
|
228
|
+
const expiresAt = Date.now() + durationMs;
|
|
154
229
|
const config = {
|
|
155
|
-
relayUrl,
|
|
230
|
+
relayUrl: options.relay,
|
|
156
231
|
basePath: absolutePath,
|
|
157
232
|
entries,
|
|
158
233
|
expiresAt,
|
|
234
|
+
password: options.password,
|
|
235
|
+
excludePatterns: uniqueExcludes,
|
|
159
236
|
onUrl: (url) => {
|
|
160
237
|
console.log(`\nShare active. URL:\n`);
|
|
161
238
|
console.log(` ${url}\n`);
|
|
162
|
-
|
|
163
|
-
|
|
239
|
+
if (options.password) {
|
|
240
|
+
console.log(`Password: ${options.password}`);
|
|
241
|
+
}
|
|
242
|
+
console.log(`Session expires in ${formatDuration(durationMinutes)}.`);
|
|
243
|
+
// Show QR code if requested
|
|
244
|
+
if (options.qr) {
|
|
245
|
+
console.log(`\nScan QR code to access on mobile:\n`);
|
|
246
|
+
qrcode.generate(url, { small: true });
|
|
247
|
+
}
|
|
248
|
+
console.log(`\nPress Ctrl+C to stop sharing.\n`);
|
|
249
|
+
},
|
|
250
|
+
onStats: (stats) => {
|
|
251
|
+
// Clear line and show stats
|
|
252
|
+
const viewerText = stats.activeViewers === 1 ? '1 viewer' : `${stats.activeViewers} viewers`;
|
|
253
|
+
const speedText = stats.currentSpeed > 0 ? ` | ${formatSpeed(stats.currentSpeed)}` : '';
|
|
254
|
+
process.stdout.write(`\r[${viewerText}] Total: ${formatBytes(stats.totalBytesSent)} | Requests: ${stats.requestCount}${speedText} `);
|
|
164
255
|
},
|
|
165
256
|
onExpired: () => {
|
|
166
|
-
|
|
167
|
-
console.log('\nSession expired after 30 minutes.');
|
|
257
|
+
console.log(`\nSession expired after ${formatDuration(durationMinutes)}.`);
|
|
168
258
|
console.log('Files are no longer accessible.\n');
|
|
169
259
|
process.exit(0);
|
|
170
260
|
},
|
|
171
261
|
onDisconnect: () => {
|
|
172
|
-
// Requirement 7.1
|
|
173
262
|
console.log('\nDisconnected from relay server.');
|
|
174
263
|
console.log('Files are no longer accessible.\n');
|
|
175
264
|
process.exit(0);
|
|
176
265
|
},
|
|
177
266
|
onError: (error) => {
|
|
178
|
-
// Requirement 7.4
|
|
179
267
|
console.error(`\nConnection error: ${error.message}\n`);
|
|
180
268
|
},
|
|
181
269
|
};
|
|
182
270
|
let client = null;
|
|
183
271
|
let lastError = null;
|
|
184
|
-
// Retry connection
|
|
272
|
+
// Retry connection
|
|
185
273
|
for (let attempt = 1; attempt <= MAX_RETRY_ATTEMPTS; attempt++) {
|
|
186
274
|
try {
|
|
187
275
|
client = new tunnel_client_1.TunnelClient(config);
|
|
188
276
|
await client.connect();
|
|
189
277
|
lastError = null;
|
|
190
|
-
break;
|
|
278
|
+
break;
|
|
191
279
|
}
|
|
192
280
|
catch (error) {
|
|
193
281
|
lastError = error;
|
|
@@ -199,16 +287,15 @@ async function runShare(dirPath, relayUrl) {
|
|
|
199
287
|
}
|
|
200
288
|
}
|
|
201
289
|
if (lastError) {
|
|
202
|
-
// Requirement 7.4 - All retries failed
|
|
203
290
|
console.error(`\nFailed to connect after ${MAX_RETRY_ATTEMPTS} attempts.`);
|
|
204
291
|
console.error(`Last error: ${lastError.message}`);
|
|
205
292
|
console.error(`\nPlease check:`);
|
|
206
293
|
console.error(` - Your internet connection`);
|
|
207
|
-
console.error(` - The relay server (${
|
|
294
|
+
console.error(` - The relay server (${options.relay}) is accessible`);
|
|
208
295
|
console.error(` - No firewall is blocking WebSocket connections\n`);
|
|
209
296
|
process.exit(1);
|
|
210
297
|
}
|
|
211
|
-
// Handle graceful shutdown
|
|
298
|
+
// Handle graceful shutdown
|
|
212
299
|
const shutdown = () => {
|
|
213
300
|
console.log('\n\nStopping file share...');
|
|
214
301
|
if (client) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner.d.ts
CHANGED
|
@@ -18,15 +18,20 @@ export interface ScanResult {
|
|
|
18
18
|
fileCount: number;
|
|
19
19
|
directoryCount: number;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if a name matches any exclude pattern
|
|
23
|
+
*/
|
|
24
|
+
declare function matchesExcludePattern(name: string, excludePatterns: string[]): boolean;
|
|
21
25
|
/**
|
|
22
26
|
* Recursively scans a directory and returns all entries.
|
|
23
27
|
* Symlinks are skipped.
|
|
24
28
|
*
|
|
25
29
|
* @param dirPath - The directory path to scan
|
|
26
30
|
* @param basePath - The base path for calculating relative paths (defaults to dirPath)
|
|
31
|
+
* @param excludePatterns - Array of patterns to exclude (e.g., ['.git', 'node_modules'])
|
|
27
32
|
* @returns Array of DirectoryEntry objects
|
|
28
33
|
*/
|
|
29
|
-
export declare function scanDirectory(dirPath: string, basePath?: string): Promise<DirectoryEntry[]>;
|
|
34
|
+
export declare function scanDirectory(dirPath: string, basePath?: string, excludePatterns?: string[]): Promise<DirectoryEntry[]>;
|
|
30
35
|
/**
|
|
31
36
|
* Calculates the total size and counts from directory entries.
|
|
32
37
|
*
|
|
@@ -40,7 +45,9 @@ export declare function calculateScanResult(entries: DirectoryEntry[]): ScanResu
|
|
|
40
45
|
*
|
|
41
46
|
* @param dirPath - The directory path to scan
|
|
42
47
|
* @param basePath - The base path for calculating relative paths
|
|
48
|
+
* @param excludePatterns - Array of patterns to exclude
|
|
43
49
|
* @returns Array of DirectoryEntry objects for immediate children only
|
|
44
50
|
*/
|
|
45
|
-
export declare function scanDirectoryShallow(dirPath: string, basePath: string): Promise<DirectoryEntry[]>;
|
|
51
|
+
export declare function scanDirectoryShallow(dirPath: string, basePath: string, excludePatterns?: string[]): Promise<DirectoryEntry[]>;
|
|
52
|
+
export { matchesExcludePattern };
|
|
46
53
|
//# sourceMappingURL=scanner.d.ts.map
|
package/dist/scanner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,iBAAS,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAY/E;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC,CA0C3B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,UAAU,CAoBzE;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC,CAoC3B;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/scanner.js
CHANGED
|
@@ -36,22 +36,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.scanDirectory = scanDirectory;
|
|
37
37
|
exports.calculateScanResult = calculateScanResult;
|
|
38
38
|
exports.scanDirectoryShallow = scanDirectoryShallow;
|
|
39
|
+
exports.matchesExcludePattern = matchesExcludePattern;
|
|
39
40
|
const fs = __importStar(require("fs/promises"));
|
|
40
41
|
const path = __importStar(require("path"));
|
|
42
|
+
/**
|
|
43
|
+
* Check if a name matches any exclude pattern
|
|
44
|
+
*/
|
|
45
|
+
function matchesExcludePattern(name, excludePatterns) {
|
|
46
|
+
for (const pattern of excludePatterns) {
|
|
47
|
+
// Simple glob matching: support * wildcard
|
|
48
|
+
if (pattern.includes('*')) {
|
|
49
|
+
const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
|
|
50
|
+
if (regex.test(name))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Exact match
|
|
55
|
+
if (name === pattern)
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
41
61
|
/**
|
|
42
62
|
* Recursively scans a directory and returns all entries.
|
|
43
63
|
* Symlinks are skipped.
|
|
44
64
|
*
|
|
45
65
|
* @param dirPath - The directory path to scan
|
|
46
66
|
* @param basePath - The base path for calculating relative paths (defaults to dirPath)
|
|
67
|
+
* @param excludePatterns - Array of patterns to exclude (e.g., ['.git', 'node_modules'])
|
|
47
68
|
* @returns Array of DirectoryEntry objects
|
|
48
69
|
*/
|
|
49
|
-
async function scanDirectory(dirPath, basePath) {
|
|
70
|
+
async function scanDirectory(dirPath, basePath, excludePatterns = []) {
|
|
50
71
|
const resolvedPath = path.resolve(dirPath);
|
|
51
72
|
const resolvedBase = basePath ? path.resolve(basePath) : resolvedPath;
|
|
52
73
|
const entries = [];
|
|
53
74
|
const items = await fs.readdir(resolvedPath, { withFileTypes: true });
|
|
54
75
|
for (const item of items) {
|
|
76
|
+
// Skip excluded items
|
|
77
|
+
if (matchesExcludePattern(item.name, excludePatterns)) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
55
80
|
const absolutePath = path.join(resolvedPath, item.name);
|
|
56
81
|
// Skip symlinks as per requirements
|
|
57
82
|
if (item.isSymbolicLink()) {
|
|
@@ -70,7 +95,7 @@ async function scanDirectory(dirPath, basePath) {
|
|
|
70
95
|
entries.push(entry);
|
|
71
96
|
// Recursively scan subdirectories
|
|
72
97
|
if (item.isDirectory()) {
|
|
73
|
-
const subEntries = await scanDirectory(absolutePath, resolvedBase);
|
|
98
|
+
const subEntries = await scanDirectory(absolutePath, resolvedBase, excludePatterns);
|
|
74
99
|
entries.push(...subEntries);
|
|
75
100
|
}
|
|
76
101
|
}
|
|
@@ -108,14 +133,19 @@ function calculateScanResult(entries) {
|
|
|
108
133
|
*
|
|
109
134
|
* @param dirPath - The directory path to scan
|
|
110
135
|
* @param basePath - The base path for calculating relative paths
|
|
136
|
+
* @param excludePatterns - Array of patterns to exclude
|
|
111
137
|
* @returns Array of DirectoryEntry objects for immediate children only
|
|
112
138
|
*/
|
|
113
|
-
async function scanDirectoryShallow(dirPath, basePath) {
|
|
139
|
+
async function scanDirectoryShallow(dirPath, basePath, excludePatterns = []) {
|
|
114
140
|
const resolvedPath = path.resolve(dirPath);
|
|
115
141
|
const resolvedBase = path.resolve(basePath);
|
|
116
142
|
const entries = [];
|
|
117
143
|
const items = await fs.readdir(resolvedPath, { withFileTypes: true });
|
|
118
144
|
for (const item of items) {
|
|
145
|
+
// Skip excluded items
|
|
146
|
+
if (matchesExcludePattern(item.name, excludePatterns)) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
119
149
|
const absolutePath = path.join(resolvedPath, item.name);
|
|
120
150
|
// Skip symlinks as per requirements
|
|
121
151
|
if (item.isSymbolicLink()) {
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/tunnel-client.d.ts
CHANGED
|
@@ -7,6 +7,15 @@
|
|
|
7
7
|
* Requirements: 1.5, 1.6, 3.1, 3.2, 3.6, 5.1, 5.3, 5.4, 5.5
|
|
8
8
|
*/
|
|
9
9
|
import { DirectoryEntry } from './scanner';
|
|
10
|
+
/**
|
|
11
|
+
* Transfer statistics
|
|
12
|
+
*/
|
|
13
|
+
export interface TransferStats {
|
|
14
|
+
totalBytesSent: number;
|
|
15
|
+
requestCount: number;
|
|
16
|
+
activeViewers: number;
|
|
17
|
+
currentSpeed: number;
|
|
18
|
+
}
|
|
10
19
|
/**
|
|
11
20
|
* Configuration for the tunnel client
|
|
12
21
|
*/
|
|
@@ -15,7 +24,10 @@ export interface TunnelClientConfig {
|
|
|
15
24
|
basePath: string;
|
|
16
25
|
entries: DirectoryEntry[];
|
|
17
26
|
expiresAt: number;
|
|
27
|
+
password?: string;
|
|
28
|
+
excludePatterns?: string[];
|
|
18
29
|
onUrl?: (url: string) => void;
|
|
30
|
+
onStats?: (stats: TransferStats) => void;
|
|
19
31
|
onExpired?: () => void;
|
|
20
32
|
onDisconnect?: () => void;
|
|
21
33
|
onError?: (error: Error) => void;
|
|
@@ -36,8 +48,37 @@ export declare class TunnelClient {
|
|
|
36
48
|
private config;
|
|
37
49
|
private connected;
|
|
38
50
|
private sessionId;
|
|
51
|
+
private authenticatedTokens;
|
|
39
52
|
private registrationPromise;
|
|
53
|
+
private stats;
|
|
54
|
+
private activeRequests;
|
|
55
|
+
private recentBytes;
|
|
56
|
+
private statsInterval;
|
|
40
57
|
constructor(config: TunnelClientConfig);
|
|
58
|
+
/**
|
|
59
|
+
* Track bytes sent for bandwidth stats
|
|
60
|
+
*/
|
|
61
|
+
private trackBytesSent;
|
|
62
|
+
/**
|
|
63
|
+
* Start a request (track active viewers)
|
|
64
|
+
*/
|
|
65
|
+
private startRequest;
|
|
66
|
+
/**
|
|
67
|
+
* End a request (track active viewers)
|
|
68
|
+
*/
|
|
69
|
+
private endRequest;
|
|
70
|
+
/**
|
|
71
|
+
* Emit stats to callback
|
|
72
|
+
*/
|
|
73
|
+
private emitStats;
|
|
74
|
+
/**
|
|
75
|
+
* Start periodic stats updates
|
|
76
|
+
*/
|
|
77
|
+
private startStatsInterval;
|
|
78
|
+
/**
|
|
79
|
+
* Stop stats interval
|
|
80
|
+
*/
|
|
81
|
+
private stopStatsInterval;
|
|
41
82
|
/**
|
|
42
83
|
* Connect to the relay server and register the session.
|
|
43
84
|
* Returns the public URL for the shared directory.
|
|
@@ -74,6 +115,26 @@ export declare class TunnelClient {
|
|
|
74
115
|
* Requirements: 3.1, 3.2, 5.3, 5.4, 5.5
|
|
75
116
|
*/
|
|
76
117
|
private handleRequest;
|
|
118
|
+
/**
|
|
119
|
+
* Handle authentication request (password submission)
|
|
120
|
+
*/
|
|
121
|
+
private handleAuthRequest;
|
|
122
|
+
/**
|
|
123
|
+
* Generate a random auth token
|
|
124
|
+
*/
|
|
125
|
+
private generateAuthToken;
|
|
126
|
+
/**
|
|
127
|
+
* Serve the login page for password-protected shares
|
|
128
|
+
*/
|
|
129
|
+
private serveLoginPage;
|
|
130
|
+
/**
|
|
131
|
+
* Generate login page HTML
|
|
132
|
+
*/
|
|
133
|
+
private generateLoginHtml;
|
|
134
|
+
/**
|
|
135
|
+
* Escape HTML special characters
|
|
136
|
+
*/
|
|
137
|
+
private escapeHtml;
|
|
77
138
|
/**
|
|
78
139
|
* Handle session expired message
|
|
79
140
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-client.d.ts","sourceRoot":"","sources":["../src/tunnel-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAOD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,mBAAmB,CAGX;
|
|
1
|
+
{"version":3,"file":"tunnel-client.d.ts","sourceRoot":"","sources":["../src/tunnel-client.ts"],"names":[],"mappings":"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"}
|
package/dist/tunnel-client.js
CHANGED
|
@@ -67,10 +67,96 @@ class TunnelClient {
|
|
|
67
67
|
config;
|
|
68
68
|
connected = false;
|
|
69
69
|
sessionId = null;
|
|
70
|
+
authenticatedTokens = new Set();
|
|
70
71
|
registrationPromise = null;
|
|
72
|
+
// Stats tracking
|
|
73
|
+
stats = {
|
|
74
|
+
totalBytesSent: 0,
|
|
75
|
+
requestCount: 0,
|
|
76
|
+
activeViewers: 0,
|
|
77
|
+
currentSpeed: 0,
|
|
78
|
+
};
|
|
79
|
+
activeRequests = new Set();
|
|
80
|
+
recentBytes = [];
|
|
81
|
+
statsInterval = null;
|
|
71
82
|
constructor(config) {
|
|
72
83
|
this.config = config;
|
|
73
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Track bytes sent for bandwidth stats
|
|
87
|
+
*/
|
|
88
|
+
trackBytesSent(bytes) {
|
|
89
|
+
this.stats.totalBytesSent += bytes;
|
|
90
|
+
this.recentBytes.push({ time: Date.now(), bytes });
|
|
91
|
+
// Keep only last 5 seconds of data
|
|
92
|
+
const cutoff = Date.now() - 5000;
|
|
93
|
+
this.recentBytes = this.recentBytes.filter(r => r.time > cutoff);
|
|
94
|
+
// Calculate current speed
|
|
95
|
+
if (this.recentBytes.length > 0) {
|
|
96
|
+
const totalRecentBytes = this.recentBytes.reduce((sum, r) => sum + r.bytes, 0);
|
|
97
|
+
const timeSpan = (Date.now() - this.recentBytes[0].time) / 1000;
|
|
98
|
+
this.stats.currentSpeed = timeSpan > 0 ? totalRecentBytes / timeSpan : 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Start a request (track active viewers)
|
|
103
|
+
*/
|
|
104
|
+
startRequest(requestId) {
|
|
105
|
+
if (!this.activeRequests.has(requestId)) {
|
|
106
|
+
this.activeRequests.add(requestId);
|
|
107
|
+
this.stats.activeViewers = this.activeRequests.size;
|
|
108
|
+
this.stats.requestCount++;
|
|
109
|
+
this.emitStats();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* End a request (track active viewers)
|
|
114
|
+
*/
|
|
115
|
+
endRequest(requestId) {
|
|
116
|
+
if (this.activeRequests.has(requestId)) {
|
|
117
|
+
this.activeRequests.delete(requestId);
|
|
118
|
+
this.stats.activeViewers = this.activeRequests.size;
|
|
119
|
+
this.emitStats();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Emit stats to callback
|
|
124
|
+
*/
|
|
125
|
+
emitStats() {
|
|
126
|
+
if (this.config.onStats) {
|
|
127
|
+
this.config.onStats({ ...this.stats });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Start periodic stats updates
|
|
132
|
+
*/
|
|
133
|
+
startStatsInterval() {
|
|
134
|
+
if (this.statsInterval)
|
|
135
|
+
return;
|
|
136
|
+
this.statsInterval = setInterval(() => {
|
|
137
|
+
// Recalculate speed
|
|
138
|
+
const cutoff = Date.now() - 5000;
|
|
139
|
+
this.recentBytes = this.recentBytes.filter(r => r.time > cutoff);
|
|
140
|
+
if (this.recentBytes.length > 0) {
|
|
141
|
+
const totalRecentBytes = this.recentBytes.reduce((sum, r) => sum + r.bytes, 0);
|
|
142
|
+
const timeSpan = (Date.now() - this.recentBytes[0].time) / 1000;
|
|
143
|
+
this.stats.currentSpeed = timeSpan > 0 ? totalRecentBytes / timeSpan : 0;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.stats.currentSpeed = 0;
|
|
147
|
+
}
|
|
148
|
+
this.emitStats();
|
|
149
|
+
}, 1000);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Stop stats interval
|
|
153
|
+
*/
|
|
154
|
+
stopStatsInterval() {
|
|
155
|
+
if (this.statsInterval) {
|
|
156
|
+
clearInterval(this.statsInterval);
|
|
157
|
+
this.statsInterval = null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
74
160
|
/**
|
|
75
161
|
* Connect to the relay server and register the session.
|
|
76
162
|
* Returns the public URL for the shared directory.
|
|
@@ -121,6 +207,7 @@ class TunnelClient {
|
|
|
121
207
|
* Disconnect from the relay server
|
|
122
208
|
*/
|
|
123
209
|
disconnect() {
|
|
210
|
+
this.stopStatsInterval();
|
|
124
211
|
if (this.ws) {
|
|
125
212
|
this.ws.close();
|
|
126
213
|
this.ws = null;
|
|
@@ -179,6 +266,8 @@ class TunnelClient {
|
|
|
179
266
|
if (this.config.onUrl) {
|
|
180
267
|
this.config.onUrl(message.url);
|
|
181
268
|
}
|
|
269
|
+
// Start stats interval
|
|
270
|
+
this.startStatsInterval();
|
|
182
271
|
}
|
|
183
272
|
/**
|
|
184
273
|
* Handle incoming request from relay
|
|
@@ -188,8 +277,26 @@ class TunnelClient {
|
|
|
188
277
|
*/
|
|
189
278
|
async handleRequest(message) {
|
|
190
279
|
const { id, method, path: requestPath } = message;
|
|
280
|
+
// Track this request
|
|
281
|
+
this.startRequest(id);
|
|
191
282
|
// Normalize the request path
|
|
192
283
|
const normalizedPath = this.normalizePath(requestPath);
|
|
284
|
+
// Check for password authentication
|
|
285
|
+
if (this.config.password) {
|
|
286
|
+
// Check for auth token in query string
|
|
287
|
+
const authMatch = requestPath.match(/[?&]auth=([^&]+)/);
|
|
288
|
+
const authToken = authMatch ? authMatch[1] : null;
|
|
289
|
+
// Handle login form submission
|
|
290
|
+
if (normalizedPath === '__auth__' || normalizedPath.endsWith('/__auth__')) {
|
|
291
|
+
await this.handleAuthRequest(id, requestPath);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// Check if authenticated
|
|
295
|
+
if (!authToken || !this.authenticatedTokens.has(authToken)) {
|
|
296
|
+
await this.serveLoginPage(id, normalizedPath);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
193
300
|
// Check for special ZIP download request
|
|
194
301
|
if (normalizedPath === '__download__.zip' || normalizedPath.endsWith('/__download__.zip')) {
|
|
195
302
|
const dirPath = normalizedPath.replace('/__download__.zip', '').replace('__download__.zip', '');
|
|
@@ -226,6 +333,175 @@ class TunnelClient {
|
|
|
226
333
|
}
|
|
227
334
|
}
|
|
228
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Handle authentication request (password submission)
|
|
338
|
+
*/
|
|
339
|
+
async handleAuthRequest(requestId, requestPath) {
|
|
340
|
+
// Extract password from query string
|
|
341
|
+
const pwMatch = requestPath.match(/[?&]password=([^&]*)/);
|
|
342
|
+
const submittedPassword = pwMatch ? decodeURIComponent(pwMatch[1]) : '';
|
|
343
|
+
const redirectMatch = requestPath.match(/[?&]redirect=([^&]*)/);
|
|
344
|
+
const redirectPath = redirectMatch ? decodeURIComponent(redirectMatch[1]) : '/';
|
|
345
|
+
if (submittedPassword === this.config.password) {
|
|
346
|
+
// Generate auth token
|
|
347
|
+
const authToken = this.generateAuthToken();
|
|
348
|
+
this.authenticatedTokens.add(authToken);
|
|
349
|
+
// Redirect with auth token
|
|
350
|
+
const baseUrl = this.sessionId ? `/${this.sessionId}` : '';
|
|
351
|
+
const redirectUrl = `${baseUrl}${redirectPath.startsWith('/') ? redirectPath : '/' + redirectPath}?auth=${authToken}`;
|
|
352
|
+
this.sendResponse(requestId, 302, {
|
|
353
|
+
'Location': redirectUrl,
|
|
354
|
+
'Content-Type': 'text/html',
|
|
355
|
+
'Content-Length': '0',
|
|
356
|
+
});
|
|
357
|
+
this.sendEnd(requestId);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
// Wrong password - show login page with error
|
|
361
|
+
await this.serveLoginPage(requestId, redirectPath, true);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Generate a random auth token
|
|
366
|
+
*/
|
|
367
|
+
generateAuthToken() {
|
|
368
|
+
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
369
|
+
let token = '';
|
|
370
|
+
for (let i = 0; i < 32; i++) {
|
|
371
|
+
token += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
372
|
+
}
|
|
373
|
+
return token;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Serve the login page for password-protected shares
|
|
377
|
+
*/
|
|
378
|
+
async serveLoginPage(requestId, redirectPath, showError = false) {
|
|
379
|
+
const baseUrl = this.sessionId ? `/${this.sessionId}` : '';
|
|
380
|
+
const html = this.generateLoginHtml(baseUrl, redirectPath, showError);
|
|
381
|
+
const htmlBuffer = Buffer.from(html, 'utf-8');
|
|
382
|
+
this.sendResponse(requestId, 200, {
|
|
383
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
384
|
+
'Content-Length': htmlBuffer.length.toString(),
|
|
385
|
+
});
|
|
386
|
+
this.sendData(requestId, htmlBuffer);
|
|
387
|
+
this.sendEnd(requestId);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Generate login page HTML
|
|
391
|
+
*/
|
|
392
|
+
generateLoginHtml(baseUrl, redirectPath, showError) {
|
|
393
|
+
return `<!DOCTYPE html>
|
|
394
|
+
<html lang="en">
|
|
395
|
+
<head>
|
|
396
|
+
<meta charset="UTF-8">
|
|
397
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
398
|
+
<title>fwdcast - Password Required</title>
|
|
399
|
+
<style>
|
|
400
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
401
|
+
body {
|
|
402
|
+
font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
403
|
+
background: #1e1e1e;
|
|
404
|
+
color: #cccccc;
|
|
405
|
+
height: 100vh;
|
|
406
|
+
display: flex;
|
|
407
|
+
align-items: center;
|
|
408
|
+
justify-content: center;
|
|
409
|
+
}
|
|
410
|
+
.login-box {
|
|
411
|
+
background: #252526;
|
|
412
|
+
padding: 40px;
|
|
413
|
+
border-radius: 8px;
|
|
414
|
+
width: 100%;
|
|
415
|
+
max-width: 360px;
|
|
416
|
+
box-shadow: 0 4px 24px rgba(0,0,0,0.4);
|
|
417
|
+
}
|
|
418
|
+
.logo {
|
|
419
|
+
text-align: center;
|
|
420
|
+
font-size: 48px;
|
|
421
|
+
margin-bottom: 16px;
|
|
422
|
+
}
|
|
423
|
+
h1 {
|
|
424
|
+
text-align: center;
|
|
425
|
+
font-size: 20px;
|
|
426
|
+
font-weight: 400;
|
|
427
|
+
margin-bottom: 8px;
|
|
428
|
+
}
|
|
429
|
+
.subtitle {
|
|
430
|
+
text-align: center;
|
|
431
|
+
color: #858585;
|
|
432
|
+
font-size: 13px;
|
|
433
|
+
margin-bottom: 24px;
|
|
434
|
+
}
|
|
435
|
+
.error {
|
|
436
|
+
background: #5a1d1d;
|
|
437
|
+
color: #f48771;
|
|
438
|
+
padding: 10px 14px;
|
|
439
|
+
border-radius: 4px;
|
|
440
|
+
margin-bottom: 16px;
|
|
441
|
+
font-size: 13px;
|
|
442
|
+
}
|
|
443
|
+
label {
|
|
444
|
+
display: block;
|
|
445
|
+
font-size: 12px;
|
|
446
|
+
color: #858585;
|
|
447
|
+
margin-bottom: 6px;
|
|
448
|
+
}
|
|
449
|
+
input[type="password"] {
|
|
450
|
+
width: 100%;
|
|
451
|
+
padding: 10px 12px;
|
|
452
|
+
background: #3c3c3c;
|
|
453
|
+
border: 1px solid #3c3c3c;
|
|
454
|
+
border-radius: 4px;
|
|
455
|
+
color: #cccccc;
|
|
456
|
+
font-size: 14px;
|
|
457
|
+
margin-bottom: 20px;
|
|
458
|
+
}
|
|
459
|
+
input[type="password"]:focus {
|
|
460
|
+
outline: none;
|
|
461
|
+
border-color: #007acc;
|
|
462
|
+
}
|
|
463
|
+
button {
|
|
464
|
+
width: 100%;
|
|
465
|
+
padding: 10px;
|
|
466
|
+
background: #007acc;
|
|
467
|
+
color: white;
|
|
468
|
+
border: none;
|
|
469
|
+
border-radius: 4px;
|
|
470
|
+
font-size: 14px;
|
|
471
|
+
cursor: pointer;
|
|
472
|
+
}
|
|
473
|
+
button:hover {
|
|
474
|
+
background: #0098ff;
|
|
475
|
+
}
|
|
476
|
+
</style>
|
|
477
|
+
</head>
|
|
478
|
+
<body>
|
|
479
|
+
<div class="login-box">
|
|
480
|
+
<div class="logo">🔒</div>
|
|
481
|
+
<h1>Password Required</h1>
|
|
482
|
+
<p class="subtitle">This share is password protected</p>
|
|
483
|
+
${showError ? '<div class="error">Incorrect password. Please try again.</div>' : ''}
|
|
484
|
+
<form method="GET" action="${baseUrl}/__auth__">
|
|
485
|
+
<input type="hidden" name="redirect" value="${this.escapeHtml(redirectPath)}">
|
|
486
|
+
<label for="password">Password</label>
|
|
487
|
+
<input type="password" id="password" name="password" autofocus required>
|
|
488
|
+
<button type="submit">Access Files</button>
|
|
489
|
+
</form>
|
|
490
|
+
</div>
|
|
491
|
+
</body>
|
|
492
|
+
</html>`;
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Escape HTML special characters
|
|
496
|
+
*/
|
|
497
|
+
escapeHtml(str) {
|
|
498
|
+
return str
|
|
499
|
+
.replace(/&/g, '&')
|
|
500
|
+
.replace(/</g, '<')
|
|
501
|
+
.replace(/>/g, '>')
|
|
502
|
+
.replace(/"/g, '"')
|
|
503
|
+
.replace(/'/g, ''');
|
|
504
|
+
}
|
|
229
505
|
/**
|
|
230
506
|
* Handle session expired message
|
|
231
507
|
*/
|
|
@@ -285,7 +561,8 @@ class TunnelClient {
|
|
|
285
561
|
try {
|
|
286
562
|
// Dynamically scan the directory for current contents
|
|
287
563
|
const absoluteDirPath = path.join(this.config.basePath, dirPath);
|
|
288
|
-
const
|
|
564
|
+
const excludePatterns = this.config.excludePatterns || [];
|
|
565
|
+
const children = await (0, scanner_1.scanDirectoryShallow)(absoluteDirPath, this.config.basePath, excludePatterns);
|
|
289
566
|
// Generate HTML with session ID for correct links
|
|
290
567
|
const html = (0, html_generator_1.generateDirectoryHtml)(children, dirPath, this.sessionId || undefined);
|
|
291
568
|
const htmlBuffer = Buffer.from(html, 'utf-8');
|
|
@@ -380,6 +657,7 @@ class TunnelClient {
|
|
|
380
657
|
sendData(id, chunk) {
|
|
381
658
|
const message = (0, protocol_1.createDataMessage)(id, chunk.toString('base64'));
|
|
382
659
|
this.send(message);
|
|
660
|
+
this.trackBytesSent(chunk.length);
|
|
383
661
|
}
|
|
384
662
|
/**
|
|
385
663
|
* Send an end message
|
|
@@ -388,6 +666,7 @@ class TunnelClient {
|
|
|
388
666
|
sendEnd(id) {
|
|
389
667
|
const message = (0, protocol_1.createEndMessage)(id);
|
|
390
668
|
this.send(message);
|
|
669
|
+
this.endRequest(id);
|
|
391
670
|
}
|
|
392
671
|
/**
|
|
393
672
|
* Send a message through the WebSocket
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-client.js","sourceRoot":"","sources":["../src/tunnel-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tunnel-client.js","sourceRoot":"","sources":["../src/tunnel-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fwdcast",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Temporary file sharing - stream local files as a public website without uploading",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -49,12 +49,14 @@
|
|
|
49
49
|
"archiver": "^7.0.1",
|
|
50
50
|
"commander": "^12.1.0",
|
|
51
51
|
"mime-types": "^3.0.2",
|
|
52
|
+
"qrcode-terminal": "^0.12.0",
|
|
52
53
|
"ws": "^8.18.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@types/archiver": "^7.0.0",
|
|
56
57
|
"@types/mime-types": "^3.0.1",
|
|
57
58
|
"@types/node": "^22.10.0",
|
|
59
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
58
60
|
"@types/ws": "^8.5.13",
|
|
59
61
|
"fast-check": "^3.23.0",
|
|
60
62
|
"ts-node": "^10.9.2",
|