fwdcast 1.0.0 → 1.2.0

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/dist/index.d.ts CHANGED
@@ -2,8 +2,6 @@
2
2
  /**
3
3
  * fwdcast CLI - Temporary file sharing tool
4
4
  * Streams local files as a public website without uploading them
5
- *
6
- * Requirements: 1.1, 1.5, 1.6, 7.1, 7.2, 7.4
7
5
  */
8
6
  export {};
9
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
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
- * Session duration in milliseconds (30 minutes)
52
+ * Default session duration in minutes
54
53
  */
55
- const SESSION_DURATION_MS = 30 * 60 * 1000;
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.0.0')
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 Share current directory
85
- $ fwdcast . Share current directory
86
- $ fwdcast ~/Downloads Share Downloads folder
87
- $ fwdcast ./project Share a specific folder
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: 30 minutes
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.relay);
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, relayUrl) {
169
+ async function runShare(dirPath, options) {
108
170
  const absolutePath = path.resolve(dirPath);
109
- console.log(`\nScanning directory: ${absolutePath}\n`);
110
- // Step 1: Scan the directory (Requirement 1.1)
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 (Requirement 1.2)
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 (Requirements 1.3, 1.4)
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 split your share into smaller directories.\n');
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 with retry logic (Requirements 1.5, 7.4)
226
+ // Step 4: Connect to relay server
152
227
  console.log(`Connecting to relay server...`);
153
- const expiresAt = Date.now() + SESSION_DURATION_MS;
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
- console.log(`Session expires in 30 minutes.`);
163
- console.log(`Press Ctrl+C to stop sharing.\n`);
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
- // Requirement 7.2
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 up to MAX_RETRY_ATTEMPTS times (Requirement 7.4)
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; // Connection successful
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 (${relayUrl}) is accessible`);
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 on Ctrl+C
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":"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"}
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
@@ -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;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CAqC3B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,UAAU,CAoBzE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B3B"}
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()) {
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -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;gBAEJ,MAAM,EAAE,kBAAkB;IAItC;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA6C5C;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;;OAKG;YACW,aAAa;IA6C3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;YACW,gBAAgB;IA4C9B;;;;;;OAMG;YACW,qBAAqB;IA2BnC;;;OAGG;YACW,SAAS;IAwBvB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;OAGG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK/E;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,cAAc;CAIvB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAI/D"}
1
+ {"version":3,"file":"tunnel-client.d.ts","sourceRoot":"","sources":["../src/tunnel-client.ts"],"names":[],"mappings":"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"}
@@ -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, '&amp;')
500
+ .replace(/</g, '&lt;')
501
+ .replace(/>/g, '&gt;')
502
+ .replace(/"/g, '&quot;')
503
+ .replace(/'/g, '&#039;');
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 children = await (0, scanner_1.scanDirectoryShallow)(absoluteDirPath, this.config.basePath);
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.0.0",
3
+ "version": "1.2.0",
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",