@trawlme/cli 1.13.0 → 1.14.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/commands/scraps.js +48 -0
- package/package.json +1 -1
package/dist/commands/scraps.js
CHANGED
|
@@ -412,6 +412,54 @@ account
|
|
|
412
412
|
await api.delete(`/api/scraps/${id}/account/session`);
|
|
413
413
|
spinner.succeed('Session cleared');
|
|
414
414
|
});
|
|
415
|
+
// account session subcommand group
|
|
416
|
+
const accountSession = account
|
|
417
|
+
.command('session')
|
|
418
|
+
.description('Manage scrap account session cookies (flavour B BYO-cookies)');
|
|
419
|
+
// account session set
|
|
420
|
+
accountSession
|
|
421
|
+
.command('set <id>')
|
|
422
|
+
.description('Upload browser session cookies for a scrap (Puppeteer cookie JSON array)')
|
|
423
|
+
.requiredOption('-c, --cookies <file>', 'Path to a Puppeteer cookie JSON array file')
|
|
424
|
+
.action(async (id, opts) => {
|
|
425
|
+
validateObjectId(id);
|
|
426
|
+
const { existsSync, readFileSync } = await import('fs');
|
|
427
|
+
if (!existsSync(opts.cookies)) {
|
|
428
|
+
console.log(chalk.red(`✗ File not found: ${opts.cookies}`));
|
|
429
|
+
process.exitCode = 1;
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
let cookies;
|
|
433
|
+
try {
|
|
434
|
+
const raw = readFileSync(opts.cookies, 'utf-8');
|
|
435
|
+
cookies = JSON.parse(raw);
|
|
436
|
+
}
|
|
437
|
+
catch (e) {
|
|
438
|
+
console.log(chalk.red(`✗ Failed to parse cookies file: ${e.message}`));
|
|
439
|
+
process.exitCode = 1;
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
if (!Array.isArray(cookies)) {
|
|
443
|
+
console.log(chalk.red('✗ Cookies file must contain a JSON array'));
|
|
444
|
+
process.exitCode = 1;
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
if (cookies.length === 0) {
|
|
448
|
+
console.log(chalk.red('✗ Cookies array must not be empty'));
|
|
449
|
+
process.exitCode = 1;
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
if (!cookies.every((c) => c && typeof c.name === 'string' && typeof c.value === 'string')) {
|
|
453
|
+
console.log(chalk.red('✗ Each cookie must have a name (string) and value (string)'));
|
|
454
|
+
process.exitCode = 1;
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
const spinner = ora('Uploading session cookies…').start();
|
|
458
|
+
const data = await api.put(`/api/scraps/${id}/account/session`, { cookies });
|
|
459
|
+
spinner.succeed(`Session cookies saved for scrap ${chalk.bold(id)}`);
|
|
460
|
+
const acc = data.account;
|
|
461
|
+
console.log(chalk.dim(' Session: ') + (acc.hasSession ? chalk.green('✓ active') : chalk.dim('none')));
|
|
462
|
+
});
|
|
415
463
|
// account status
|
|
416
464
|
account
|
|
417
465
|
.command('status <id>')
|