document360-capture 0.2.0 → 0.2.2

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.
Files changed (48) hide show
  1. package/LICENSE +10 -16
  2. package/README.md +1 -1
  3. package/dist/cli.js +21 -91
  4. package/dist/commands/init.d.ts +5 -1
  5. package/dist/config/projectConfig.d.ts +60 -5
  6. package/dist/config/writerConfigDefaults.d.ts +18 -0
  7. package/dist/helpers/index.js +1 -3
  8. package/dist/scripts/postinstall.js +1 -18
  9. package/package.json +3 -3
  10. package/dist/annotate/compose.js +0 -65
  11. package/dist/annotate/compose.js.map +0 -1
  12. package/dist/annotate/svg.js +0 -42
  13. package/dist/annotate/svg.js.map +0 -1
  14. package/dist/cli.js.map +0 -1
  15. package/dist/commands/auth.js +0 -73
  16. package/dist/commands/auth.js.map +0 -1
  17. package/dist/commands/capture.js +0 -87
  18. package/dist/commands/capture.js.map +0 -1
  19. package/dist/commands/doctor.js +0 -96
  20. package/dist/commands/doctor.js.map +0 -1
  21. package/dist/commands/init.js +0 -100
  22. package/dist/commands/init.js.map +0 -1
  23. package/dist/commands/list.js +0 -33
  24. package/dist/commands/list.js.map +0 -1
  25. package/dist/commands/profile.js +0 -43
  26. package/dist/commands/profile.js.map +0 -1
  27. package/dist/commands/status.js +0 -27
  28. package/dist/commands/status.js.map +0 -1
  29. package/dist/config/authState.js +0 -27
  30. package/dist/config/authState.js.map +0 -1
  31. package/dist/config/projectConfig.js +0 -59
  32. package/dist/config/projectConfig.js.map +0 -1
  33. package/dist/config/userConfig.js +0 -24
  34. package/dist/config/userConfig.js.map +0 -1
  35. package/dist/helpers/dumpAnnotations.js +0 -39
  36. package/dist/helpers/dumpAnnotations.js.map +0 -1
  37. package/dist/helpers/index.js.map +0 -1
  38. package/dist/helpers/types.js +0 -2
  39. package/dist/helpers/types.js.map +0 -1
  40. package/dist/helpers/waitPastLogin.js +0 -7
  41. package/dist/helpers/waitPastLogin.js.map +0 -1
  42. package/dist/runner/expiryDetect.js +0 -19
  43. package/dist/runner/expiryDetect.js.map +0 -1
  44. package/dist/runner/playwrightConfig.js +0 -71
  45. package/dist/runner/playwrightConfig.js.map +0 -1
  46. package/dist/runner/runSpecs.js +0 -88
  47. package/dist/runner/runSpecs.js.map +0 -1
  48. package/dist/scripts/postinstall.js.map +0 -1
@@ -1,87 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { isAbsolute, resolve } from 'node:path';
3
- import { findProjectConfigPath, readProjectConfig, resolveProfile, } from '../config/projectConfig.js';
4
- import { authStatePath, getAuthStateInfo } from '../config/authState.js';
5
- import { writeRuntimePlaywrightConfig } from '../runner/playwrightConfig.js';
6
- import { runSpecs } from '../runner/runSpecs.js';
7
- import { looksLikeSessionExpiry } from '../runner/expiryDetect.js';
8
- import { composeAnnotations } from '../annotate/compose.js';
9
- export async function captureCommand(specId, opts) {
10
- const cwd = process.cwd();
11
- const cfg = readProjectConfig(findProjectConfigPath(cwd));
12
- const profile = resolveProfile(cfg, opts.profile);
13
- const profileName = profile.name;
14
- const info = getAuthStateInfo(cfg.projectId, profileName);
15
- if (!info.exists) {
16
- console.error('');
17
- console.error(`✗ No saved session for profile "${profileName}".`);
18
- console.error(` Expected at: ${info.path}`);
19
- console.error(` Run: d360-capture auth --profile ${profileName}`);
20
- return 2;
21
- }
22
- const captureDirAbs = isAbsolute(profile.captureDir) ? profile.captureDir : resolve(cwd, profile.captureDir);
23
- if (!existsSync(captureDirAbs)) {
24
- console.error(`✗ Capture directory missing: ${captureDirAbs}`);
25
- console.error(' Generate at least one spec there before running capture.');
26
- return 2;
27
- }
28
- const { configPath, tsconfigPath } = writeRuntimePlaywrightConfig({
29
- cwd,
30
- profileName,
31
- captureDir: profile.captureDir,
32
- viewport: profile.viewport,
33
- storageStatePath: authStatePath(cfg.projectId, profileName),
34
- });
35
- console.log('');
36
- if (profile.production)
37
- console.log(`⚠ Profile "${profileName}" is PRODUCTION (read-only capture).`);
38
- console.log(`▶ Running specs against ${profileName} (${profile.connection.startUrl})`);
39
- if (specId)
40
- console.log(` Single spec: ${specId}`);
41
- else
42
- console.log(` All specs in ${profile.captureDir}`);
43
- console.log('');
44
- const result = await runSpecs({
45
- cwd,
46
- configPath,
47
- tsconfigPath,
48
- startUrl: profile.connection.startUrl,
49
- authBoundaryUrlPattern: profile.connection.authBoundaryUrlPattern,
50
- specId,
51
- captureDirAbs,
52
- });
53
- if (result.exitCode !== 0) {
54
- const combined = result.stdout + '\n' + result.stderr;
55
- console.error('');
56
- console.error(`✗ Playwright exited with code ${result.exitCode}`);
57
- // Login-page signatures in the output are a HINT, not proof — call logs
58
- // legitimately mention .auth/login redirects even when the saved session
59
- // worked. Surface expiry as a hypothesis alongside the real failure
60
- // instead of swallowing it.
61
- if (looksLikeSessionExpiry(combined)) {
62
- console.error('');
63
- console.error(' The output mentions a login page — if specs that previously passed now');
64
- console.error(` fail this way, your saved session may have expired. Re-auth with:`);
65
- console.error(` d360-capture auth --profile ${profileName}`);
66
- console.error(' Otherwise, inspect the failure above (selector timeouts are spec bugs,');
67
- console.error(' not auth bugs) and the error-context file Playwright printed.');
68
- }
69
- return result.exitCode;
70
- }
71
- const annotateEnabled = !opts.noAnnotate && cfg.annotation.enabled;
72
- const outputDirAbs = isAbsolute(profile.outputDir) ? profile.outputDir : resolve(cwd, profile.outputDir);
73
- console.log('');
74
- console.log(annotateEnabled ? '▶ Annotating screenshots...' : '▶ Skipping annotation (--no-annotate or config off)');
75
- const annotated = await composeAnnotations(outputDirAbs, annotateEnabled);
76
- const ok = annotated.filter(r => r.ok).length;
77
- const failed = annotated.filter(r => !r.ok);
78
- console.log('');
79
- console.log(`✓ ${ok} screenshot${ok === 1 ? '' : 's'} ready in ${profile.outputDir}`);
80
- if (failed.length > 0) {
81
- console.log(`✗ ${failed.length} annotation failure${failed.length === 1 ? '' : 's'}:`);
82
- for (const f of failed)
83
- console.log(` - ${f.id}: ${f.reason}`);
84
- }
85
- return failed.length === 0 ? 0 : 1;
86
- }
87
- //# sourceMappingURL=capture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -1,96 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { isAbsolute, resolve } from 'node:path';
3
- import { createRequire } from 'node:module';
4
- import { findProjectConfigPath, readProjectConfig, resolveProfile, } from '../config/projectConfig.js';
5
- import { getAuthStateInfo } from '../config/authState.js';
6
- const require = createRequire(import.meta.url);
7
- export async function doctorCommand(opts) {
8
- const cwd = process.cwd();
9
- let failures = 0;
10
- const ok = (msg) => console.log(` ✓ ${msg}`);
11
- const fail = (msg) => {
12
- console.log(` ✗ ${msg}`);
13
- failures++;
14
- };
15
- console.log('');
16
- console.log('Checking document360-capture setup...');
17
- console.log('');
18
- const cfgPath = findProjectConfigPath(cwd);
19
- if (!existsSync(cfgPath)) {
20
- fail(`Project config missing at ${cfgPath} — run \`d360-capture init\``);
21
- return 2;
22
- }
23
- ok(`Project config: ${cfgPath}`);
24
- let cfg;
25
- try {
26
- cfg = readProjectConfig(cfgPath);
27
- ok(`Config parses; projectId="${cfg.projectId}"`);
28
- }
29
- catch (err) {
30
- fail(`Config invalid: ${err.message}`);
31
- return 2;
32
- }
33
- let profile;
34
- try {
35
- profile = resolveProfile(cfg, opts.profile);
36
- ok(`Profile "${profile.name}" resolved (startUrl=${profile.connection.startUrl})${profile.production ? ' ⚠ PRODUCTION' : ''}`);
37
- }
38
- catch (err) {
39
- fail(`Profile resolve failed: ${err.message}`);
40
- return 1;
41
- }
42
- const captureDirAbs = isAbsolute(profile.captureDir) ? profile.captureDir : resolve(cwd, profile.captureDir);
43
- if (existsSync(captureDirAbs))
44
- ok(`Capture dir exists: ${profile.captureDir}`);
45
- else
46
- fail(`Capture dir missing: ${profile.captureDir}`);
47
- const info = getAuthStateInfo(cfg.projectId, profile.name);
48
- if (info.exists) {
49
- const ageDays = info.ageMs != null ? Math.floor(info.ageMs / 86_400_000) : null;
50
- ok(`Auth-state present (${ageDays}d old): ${info.path}`);
51
- try {
52
- const parsed = JSON.parse(readFileSync(info.path, 'utf8'));
53
- if (parsed && typeof parsed === 'object')
54
- ok('Auth-state parses as JSON');
55
- else
56
- fail('Auth-state is not a valid object');
57
- }
58
- catch (err) {
59
- fail(`Auth-state unreadable: ${err.message}`);
60
- }
61
- }
62
- else {
63
- fail(`Auth-state missing for "${profile.name}" — run \`d360-capture auth --profile ${profile.name}\``);
64
- }
65
- try {
66
- const playwrightPkg = require.resolve('playwright/package.json');
67
- const pkg = JSON.parse(readFileSync(playwrightPkg, 'utf8'));
68
- ok(`playwright@${pkg.version} installed`);
69
- }
70
- catch {
71
- fail('playwright not resolvable — reinstall document360-capture');
72
- }
73
- // Newer @playwright/test versions export './cli'; older ones only the
74
- // literal './cli.js'. Accept either (mirrors runSpecs.resolvePlaywrightCli).
75
- const cliShapes = ['@playwright/test/cli', '@playwright/test/cli.js'];
76
- if (cliShapes.some(shape => { try {
77
- require.resolve(shape);
78
- return true;
79
- }
80
- catch {
81
- return false;
82
- } })) {
83
- ok('@playwright/test CLI resolvable');
84
- }
85
- else {
86
- fail('@playwright/test CLI not resolvable — reinstall document360-capture');
87
- }
88
- console.log('');
89
- if (failures === 0)
90
- console.log('All checks passed.');
91
- else
92
- console.log(`${failures} check${failures === 1 ? '' : 's'} failed.`);
93
- console.log('');
94
- return failures === 0 ? 0 : 1;
95
- }
96
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- import { input, confirm } from '@inquirer/prompts';
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import { basename, join } from 'node:path';
4
- import { findProjectConfigPath, writeProjectConfig, } from '../config/projectConfig.js';
5
- export async function initCommand() {
6
- const cwd = process.cwd();
7
- const path = findProjectConfigPath(cwd);
8
- if (existsSync(path)) {
9
- const overwrite = await confirm({
10
- message: `${path} already exists. Overwrite?`,
11
- default: false,
12
- });
13
- if (!overwrite) {
14
- console.log('Init cancelled.');
15
- return;
16
- }
17
- }
18
- const defaultProjectId = readPackageName(cwd) ?? basename(cwd);
19
- const projectId = await input({
20
- message: 'Project ID (used to scope auth-state on disk):',
21
- default: defaultProjectId,
22
- validate: v => (v.trim().length > 0 ? true : 'Project ID is required'),
23
- });
24
- const captureDir = await input({
25
- message: 'Capture directory (where .spec.ts files live):',
26
- default: 'user-docs/_capture',
27
- });
28
- const outputDir = await input({
29
- message: 'Output directory (where final .png files land):',
30
- default: 'user-docs/_screenshots',
31
- });
32
- const viewportInput = await input({
33
- message: 'Viewport (WIDTHxHEIGHT):',
34
- default: '1440x900',
35
- validate: v => /^\d+x\d+$/.test(v) || 'Use WIDTHxHEIGHT, e.g. 1440x900',
36
- });
37
- const [w, h] = viewportInput.split('x').map(Number);
38
- const stagingUrl = await input({
39
- message: 'Staging URL (where captures start):',
40
- default: 'https://example.com/',
41
- validate: v => (v.startsWith('http') ? true : 'Must be a full URL'),
42
- });
43
- const authBoundary = await input({
44
- message: 'Auth boundary URL pattern (regex matching post-login routes):',
45
- default: '/\\/(home|app|projects|dashboard)(/|$)/',
46
- });
47
- const addProd = await confirm({
48
- message: 'Add a "prod" profile too?',
49
- default: true,
50
- });
51
- const profiles = {
52
- staging: { connection: { startUrl: stagingUrl, authBoundaryUrlPattern: authBoundary } },
53
- };
54
- if (addProd) {
55
- const prodUrl = await input({
56
- message: 'Prod URL:',
57
- default: stagingUrl.replace(/staging\./, ''),
58
- validate: v => (v.startsWith('http') ? true : 'Must be a full URL'),
59
- });
60
- profiles.prod = {
61
- connection: { startUrl: prodUrl, authBoundaryUrlPattern: authBoundary },
62
- production: true,
63
- };
64
- }
65
- const annotate = await confirm({
66
- message: 'Enable annotation overlays (highlights, callouts, redactions) by default?',
67
- default: true,
68
- });
69
- const cfg = {
70
- projectId,
71
- captureDir,
72
- outputDir,
73
- viewport: { width: w, height: h },
74
- loginTimeoutMs: 0,
75
- annotation: { enabled: annotate },
76
- profiles,
77
- defaultProfile: 'staging',
78
- };
79
- writeProjectConfig(path, cfg);
80
- console.log('');
81
- console.log(`✓ Wrote ${path}`);
82
- console.log('');
83
- console.log('Next steps:');
84
- console.log(' 1. d360-capture auth --profile staging # log in once, no timeout');
85
- console.log(' 2. d360-capture capture # run all specs in captureDir');
86
- console.log('');
87
- }
88
- function readPackageName(cwd) {
89
- const path = join(cwd, 'package.json');
90
- if (!existsSync(path))
91
- return null;
92
- try {
93
- const pkg = JSON.parse(readFileSync(path, 'utf8'));
94
- return pkg.name ?? null;
95
- }
96
- catch {
97
- return null;
98
- }
99
- }
100
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import { existsSync, readdirSync, statSync } from 'node:fs';
2
- import { isAbsolute, join, resolve } from 'node:path';
3
- import { findProjectConfigPath, readProjectConfig } from '../config/projectConfig.js';
4
- export async function listCommand() {
5
- const cwd = process.cwd();
6
- const cfg = readProjectConfig(findProjectConfigPath(cwd));
7
- const captureDirAbs = isAbsolute(cfg.captureDir) ? cfg.captureDir : resolve(cwd, cfg.captureDir);
8
- const outputDirAbs = isAbsolute(cfg.outputDir) ? cfg.outputDir : resolve(cwd, cfg.outputDir);
9
- if (!existsSync(captureDirAbs)) {
10
- console.log(`Capture dir does not exist: ${captureDirAbs}`);
11
- return;
12
- }
13
- const specs = readdirSync(captureDirAbs)
14
- .filter(f => f.endsWith('.spec.ts'))
15
- .sort();
16
- if (specs.length === 0) {
17
- console.log(`No specs found in ${cfg.captureDir}.`);
18
- return;
19
- }
20
- console.log('');
21
- console.log(' Spec ID Last capture');
22
- console.log(' ─────────────────────────────────────────────── ───────────────────');
23
- for (const f of specs) {
24
- const id = f.replace(/\.spec\.ts$/, '');
25
- const finalPath = join(outputDirAbs, `${id}.png`);
26
- const lastCapture = existsSync(finalPath)
27
- ? new Date(statSync(finalPath).mtimeMs).toISOString().slice(0, 19).replace('T', ' ')
28
- : '(never)';
29
- console.log(` ${id.padEnd(47)} ${lastCapture}`);
30
- }
31
- console.log('');
32
- }
33
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAE7F,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,+BAA+B,aAAa,EAAE,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACnC,IAAI,EAAE,CAAC;IAEV,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACrF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC;YACvC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;YACpF,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -1,43 +0,0 @@
1
- import { findProjectConfigPath, readProjectConfig, resolveProfile, writeProjectConfig, } from '../config/projectConfig.js';
2
- import { getAuthStateInfo } from '../config/authState.js';
3
- export function profileList() {
4
- const cfg = readProjectConfig(findProjectConfigPath());
5
- console.log('');
6
- for (const [name, profile] of Object.entries(cfg.profiles)) {
7
- const active = name === cfg.defaultProfile ? '● ' : ' ';
8
- const prod = profile.production ? ' ⚠ PRODUCTION' : '';
9
- const info = getAuthStateInfo(cfg.projectId, name);
10
- const auth = info.exists ? 'auth saved' : 'no auth-state';
11
- console.log(`${active}${name} → ${profile.connection.startUrl}${prod} [${auth}]`);
12
- }
13
- console.log('');
14
- console.log('● = default. Switch with: d360-capture profile use <name>');
15
- console.log('');
16
- }
17
- export function profileUse(name) {
18
- const path = findProjectConfigPath();
19
- const cfg = readProjectConfig(path);
20
- if (!cfg.profiles[name]) {
21
- console.error(`✗ Unknown profile "${name}". Available: ${Object.keys(cfg.profiles).join(', ')}`);
22
- return 1;
23
- }
24
- cfg.defaultProfile = name;
25
- writeProjectConfig(path, cfg);
26
- const prod = cfg.profiles[name].production ? ' ⚠ PRODUCTION' : '';
27
- console.log(`✓ Default profile is now "${name}"${prod}`);
28
- return 0;
29
- }
30
- export function profileShow(name) {
31
- const cfg = readProjectConfig(findProjectConfigPath());
32
- const profile = resolveProfile(cfg, name);
33
- console.log('');
34
- console.log(`Profile ${profile.name}${profile.production ? ' ⚠ PRODUCTION' : ''}`);
35
- console.log(` startUrl: ${profile.connection.startUrl}`);
36
- console.log(` authBoundary:${profile.connection.authBoundaryUrlPattern}`);
37
- console.log(` captureDir: ${profile.captureDir}`);
38
- console.log(` outputDir: ${profile.outputDir}`);
39
- console.log(` viewport: ${profile.viewport.width}x${profile.viewport.height}`);
40
- console.log('');
41
- return 0;
42
- }
43
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import { findProjectConfigPath, readProjectConfig } from '../config/projectConfig.js';
2
- import { getAuthStateInfo } from '../config/authState.js';
3
- export async function statusCommand() {
4
- const cfg = readProjectConfig(findProjectConfigPath());
5
- console.log('');
6
- console.log(`projectId: ${cfg.projectId}`);
7
- console.log(`captureDir: ${cfg.captureDir} (default)`);
8
- console.log(`outputDir: ${cfg.outputDir} (default)`);
9
- console.log(`viewport: ${cfg.viewport.width}x${cfg.viewport.height} (default)`);
10
- console.log(`annotation enabled: ${cfg.annotation.enabled}`);
11
- console.log(`defaultProfile: ${cfg.defaultProfile}`);
12
- console.log('');
13
- console.log('Profiles:');
14
- for (const [name, profile] of Object.entries(cfg.profiles)) {
15
- const info = getAuthStateInfo(cfg.projectId, name);
16
- const authStatus = info.exists
17
- ? `auth saved ${info.ageMs != null ? Math.floor(info.ageMs / 86_400_000) + 'd ago' : ''}`
18
- : 'no auth-state';
19
- const marks = `${name === cfg.defaultProfile ? ' ●' : ''}${profile.production ? ' ⚠ PRODUCTION' : ''}`;
20
- console.log(` ${name.padEnd(10)} ${profile.connection.startUrl}${marks}`);
21
- if (profile.captureDir)
22
- console.log(` captureDir: ${profile.captureDir}`);
23
- console.log(` ${authStatus}`);
24
- }
25
- console.log('');
26
- }
27
- //# sourceMappingURL=status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,UAAU,cAAc,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,SAAS,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;YAC5B,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACzF,CAAC,CAAC,eAAe,CAAC;QACpB,MAAM,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -1,27 +0,0 @@
1
- import { existsSync, mkdirSync, statSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join, dirname } from 'node:path';
4
- export function authStateDir() {
5
- return join(homedir(), '.document360-capture', 'auth-states');
6
- }
7
- export function authStatePath(projectId, profileName) {
8
- return join(authStateDir(), projectId, `${profileName}.json`);
9
- }
10
- export function ensureAuthStateDir(projectId) {
11
- const dir = join(authStateDir(), projectId);
12
- if (!existsSync(dir))
13
- mkdirSync(dir, { recursive: true });
14
- }
15
- export function getAuthStateInfo(projectId, profileName) {
16
- const path = authStatePath(projectId, profileName);
17
- if (!existsSync(path))
18
- return { path, exists: false };
19
- const stat = statSync(path);
20
- return { path, exists: true, ageMs: Date.now() - stat.mtimeMs };
21
- }
22
- export function ensureParentDir(path) {
23
- const parent = dirname(path);
24
- if (!existsSync(parent))
25
- mkdirSync(parent, { recursive: true });
26
- }
27
- //# sourceMappingURL=authState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authState.js","sourceRoot":"","sources":["../../src/config/authState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,WAAmB;IAClE,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAQD,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,WAAmB;IACrE,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -1,59 +0,0 @@
1
- import { readFileSync, writeFileSync, existsSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- export const PROJECT_CONFIG_FILENAME = '.d360-capture.json';
4
- export class ProfileConfigError extends Error {
5
- }
6
- export function findProjectConfigPath(cwd = process.cwd()) {
7
- return join(cwd, PROJECT_CONFIG_FILENAME);
8
- }
9
- export function readProjectConfig(path) {
10
- if (!existsSync(path)) {
11
- throw new Error(`No project config at ${path}. Run \`d360-capture init\` to create one.`);
12
- }
13
- const raw = JSON.parse(readFileSync(path, 'utf8'));
14
- validateProjectConfig(raw, path);
15
- return raw;
16
- }
17
- export function writeProjectConfig(path, cfg) {
18
- writeFileSync(path, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
19
- }
20
- export function resolveProfile(cfg, name) {
21
- const chosen = name ?? cfg.defaultProfile;
22
- const profile = cfg.profiles[chosen];
23
- if (!profile) {
24
- const available = Object.keys(cfg.profiles).join(', ');
25
- throw new ProfileConfigError(`Unknown profile "${chosen}". Available: ${available}`);
26
- }
27
- return {
28
- name: chosen,
29
- connection: profile.connection,
30
- captureDir: profile.captureDir ?? cfg.captureDir,
31
- outputDir: profile.outputDir ?? cfg.outputDir,
32
- viewport: profile.viewport ?? cfg.viewport,
33
- production: profile.production === true,
34
- };
35
- }
36
- function validateProjectConfig(cfg, path) {
37
- // No back-compat (decided 2026-06-08): the old environments/defaultEnvironment shape
38
- // is rejected with a clear migration message rather than silently adapted.
39
- if (cfg.environments && !cfg.profiles) {
40
- throw new ProfileConfigError(`Config at ${path} uses the old "environments" shape, which is no longer supported. ` +
41
- 'It is now "profiles" (each with a "connection" { startUrl, authBoundaryUrlPattern }) + ' +
42
- '"defaultProfile". Re-run `d360-capture init`, then `d360-capture auth --profile <name>`.');
43
- }
44
- const missing = [];
45
- if (!cfg.projectId)
46
- missing.push('projectId');
47
- if (!cfg.captureDir)
48
- missing.push('captureDir');
49
- if (!cfg.outputDir)
50
- missing.push('outputDir');
51
- if (!cfg.profiles || Object.keys(cfg.profiles).length === 0)
52
- missing.push('profiles');
53
- if (!cfg.defaultProfile)
54
- missing.push('defaultProfile');
55
- if (missing.length > 0) {
56
- throw new ProfileConfigError(`Invalid config at ${path}: missing ${missing.join(', ')}`);
57
- }
58
- }
59
- //# sourceMappingURL=projectConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join, dirname } from 'node:path';
4
- const PATH = join(homedir(), '.document360-capture', 'config.json');
5
- export function userConfigPath() {
6
- return PATH;
7
- }
8
- export function readUserConfig() {
9
- if (!existsSync(PATH))
10
- return {};
11
- try {
12
- return JSON.parse(readFileSync(PATH, 'utf8'));
13
- }
14
- catch {
15
- return {};
16
- }
17
- }
18
- export function writeUserConfig(cfg) {
19
- const dir = dirname(PATH);
20
- if (!existsSync(dir))
21
- mkdirSync(dir, { recursive: true });
22
- writeFileSync(PATH, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
23
- }
24
- //# sourceMappingURL=userConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userConfig.js","sourceRoot":"","sources":["../../src/config/userConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAM1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAEpE,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAe,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAe;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC"}
@@ -1,39 +0,0 @@
1
- import { writeFileSync, mkdirSync } from 'node:fs';
2
- import { dirname } from 'node:path';
3
- async function bboxOrNull(page, selector) {
4
- try {
5
- const loc = page.locator(selector).first();
6
- await loc.waitFor({ state: 'visible', timeout: 2_000 });
7
- return await loc.boundingBox();
8
- }
9
- catch {
10
- return null;
11
- }
12
- }
13
- export async function dumpAnnotations(page, ph) {
14
- const rawPath = ph.saveTo;
15
- const finalPath = rawPath.replace(/\.raw\.png$/, '.png');
16
- const highlight = [];
17
- for (const selector of ph.highlight ?? []) {
18
- const bbox = await bboxOrNull(page, selector);
19
- if (bbox)
20
- highlight.push({ selector, bbox });
21
- }
22
- const annotations = [];
23
- for (const ann of ph.annotations ?? []) {
24
- const bbox = await bboxOrNull(page, ann.target);
25
- if (bbox)
26
- annotations.push({ label: ann.label, text: ann.text, selector: ann.target, bbox });
27
- }
28
- const redact = [];
29
- for (const selector of ph.redact ?? []) {
30
- const bbox = await bboxOrNull(page, selector);
31
- if (bbox)
32
- redact.push({ selector, bbox });
33
- }
34
- const resolved = { id: ph.id, rawPath, finalPath, highlight, annotations, redact };
35
- const jsonPath = rawPath.replace(/\.raw\.png$/, '.annotations.json');
36
- mkdirSync(dirname(jsonPath), { recursive: true });
37
- writeFileSync(jsonPath, JSON.stringify(resolved, null, 2), 'utf8');
38
- }
39
- //# sourceMappingURL=dumpAnnotations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dumpAnnotations.js","sourceRoot":"","sources":["../../src/helpers/dumpAnnotations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,KAAK,UAAU,UAAU,CAAC,IAAU,EAAE,QAAgB;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,EAAe;IAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;IAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAqC,EAAE,CAAC;IACvD,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,WAAW,GAAuC,EAAE,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAwB,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACxG,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACrE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/helpers/types.ts"],"names":[],"mappings":""}
@@ -1,7 +0,0 @@
1
- export async function waitPastLogin(page, pattern, timeoutMs = 0) {
2
- if (pattern.test(page.url()))
3
- return;
4
- const effective = timeoutMs > 0 ? timeoutMs : 600_000;
5
- await page.waitForURL(pattern, { timeout: effective });
6
- }
7
- //# sourceMappingURL=waitPastLogin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"waitPastLogin.js","sourceRoot":"","sources":["../../src/helpers/waitPastLogin.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAU,EACV,OAAe,EACf,YAAoB,CAAC;IAErB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAAE,OAAO;IACrC,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACzD,CAAC"}