@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.
@@ -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>')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trawlme/cli",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "Trawl CLI — manage scraps from the terminal",
5
5
  "type": "module",
6
6
  "bin": {