@thinkrun/cli 0.1.29 → 0.1.31
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 +25 -0
- package/dist/bin/thinkrun.js +5 -0
- package/dist/bin/thinkrun.js.map +1 -1
- package/dist/shared/audit-state.d.ts +32 -0
- package/dist/shared/audit-state.js +99 -0
- package/dist/shared/local-audit-sync.d.ts +12 -0
- package/dist/shared/local-audit-sync.js +38 -0
- package/dist/shared/sensitive-result-redaction.d.ts +1 -0
- package/dist/shared/sensitive-result-redaction.js +112 -0
- package/dist/src/adapters/local.d.ts +8 -0
- package/dist/src/adapters/local.d.ts.map +1 -1
- package/dist/src/adapters/local.js +260 -32
- package/dist/src/adapters/local.js.map +1 -1
- package/dist/src/commands/actions.d.ts.map +1 -1
- package/dist/src/commands/actions.js +26 -5
- package/dist/src/commands/actions.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +0 -1
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +1 -10
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/audit.d.ts +4 -0
- package/dist/src/commands/audit.d.ts.map +1 -0
- package/dist/src/commands/audit.js +101 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +4 -0
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +17 -0
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/sessions.d.ts +93 -0
- package/dist/src/commands/sessions.d.ts.map +1 -0
- package/dist/src/commands/sessions.js +354 -0
- package/dist/src/commands/sessions.js.map +1 -0
- package/dist/src/config/store.d.ts.map +1 -1
- package/dist/src/config/store.js +42 -5
- package/dist/src/config/store.js.map +1 -1
- package/dist/src/session/cli-session-sync.d.ts +10 -2
- package/dist/src/session/cli-session-sync.d.ts.map +1 -1
- package/dist/src/session/cli-session-sync.js +68 -28
- package/dist/src/session/cli-session-sync.js.map +1 -1
- package/dist/src/shared/api-helpers.d.ts +12 -0
- package/dist/src/shared/api-helpers.d.ts.map +1 -0
- package/dist/src/shared/api-helpers.js +20 -0
- package/dist/src/shared/api-helpers.js.map +1 -0
- package/package.json +9 -7
package/README.md
CHANGED
|
@@ -77,6 +77,28 @@ Use `thinkrun doctor` anytime to verify endpoint mode, health, bridge status, an
|
|
|
77
77
|
When changing CLI behavior in this repository, use the agent DX release checklist in [docs/AGENT_CLI_DX_CHECKLIST.md](../../docs/AGENT_CLI_DX_CHECKLIST.md).
|
|
78
78
|
Parity-sensitive CLI/MCP screenshot and observation claims are backed by [docs/mcp-cli-parity-evidence.md](../../docs/mcp-cli-parity-evidence.md).
|
|
79
79
|
|
|
80
|
+
## Local Audit Mode
|
|
81
|
+
|
|
82
|
+
Audit mode is a local-only capture toggle for attached Chromium tabs. When enabled, ThinkRun attempts an extra screenshot after each state-changing action so the Activity Feed and session detail page show an audit trail without requiring manual `screenshot` calls.
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
thinkrun tabs
|
|
86
|
+
thinkrun attach <tabId>
|
|
87
|
+
thinkrun audit on
|
|
88
|
+
thinkrun navigate "https://example.com"
|
|
89
|
+
thinkrun click "a.more"
|
|
90
|
+
thinkrun audit status
|
|
91
|
+
thinkrun audit off
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Rules:
|
|
95
|
+
|
|
96
|
+
- `thinkrun audit on|off|status` operates on the current attached local tab
|
|
97
|
+
- audit mode only applies to local attached-tab sessions, not cloud sessions
|
|
98
|
+
- observation commands (`extract`, `evaluate`, `snapshot`, `url`, `title`, `html`, `console`, `network`, `wait`) do not trigger audit screenshots
|
|
99
|
+
- screenshots are fire-and-forget best effort; browser actions do not fail just because audit capture fails
|
|
100
|
+
- explicit precedence is: `--audit` attach flag > `THINKRUN_AUDIT` env var > stored per-tab toggle
|
|
101
|
+
|
|
80
102
|
## AI Agent Workflow
|
|
81
103
|
|
|
82
104
|
The `snapshot` command returns an accessibility tree — ideal for AI agents that need to understand page structure without screenshots:
|
|
@@ -104,6 +126,7 @@ thinkrun cloud stop
|
|
|
104
126
|
| `cloud artifacts` | List session artifacts (screenshots, logs, actions) |
|
|
105
127
|
| `cloud use <id>` | Switch active session |
|
|
106
128
|
| `doctor` | Diagnose endpoint/auth/session setup |
|
|
129
|
+
| `audit on|off|status` | Enable, disable, or inspect local audit mode for the attached tab |
|
|
107
130
|
|
|
108
131
|
#### Cloud Start Options
|
|
109
132
|
|
|
@@ -137,6 +160,8 @@ thinkrun forward
|
|
|
137
160
|
|
|
138
161
|
Use `--mode local` or `--mode cloud` to override persisted context for a single command.
|
|
139
162
|
|
|
163
|
+
`thinkrun attach <tabId> --audit` enables audit mode immediately for that attached local tab.
|
|
164
|
+
|
|
140
165
|
### Interaction
|
|
141
166
|
|
|
142
167
|
| Command | Description |
|
package/dist/bin/thinkrun.js
CHANGED
|
@@ -12,11 +12,13 @@ import { createConfigCommand } from '../src/commands/config.js';
|
|
|
12
12
|
import { createCloudCommand } from '../src/commands/cloud.js';
|
|
13
13
|
import { createCacheCommand } from '../src/commands/cache.js';
|
|
14
14
|
import { createDoctorCommand } from '../src/commands/doctor.js';
|
|
15
|
+
import { createAuditCommand } from '../src/commands/audit.js';
|
|
15
16
|
import { createResetConnectionCommand } from '../src/commands/reset-connection.js';
|
|
16
17
|
import { createInstallCommand } from '../src/commands/install.js';
|
|
17
18
|
import { createSessionDebugCommand } from '../src/commands/session-debug.js';
|
|
18
19
|
import { createSetupCommand } from '../src/commands/setup.js';
|
|
19
20
|
import { createAnalyzeCommand } from '../src/commands/analyze.js';
|
|
21
|
+
import { createSessionsCommand } from '../src/commands/sessions.js';
|
|
20
22
|
import { createReleaseCommand } from '../src/commands/release.js';
|
|
21
23
|
import { createAgentInitCommand } from '../src/commands/agent-init.js';
|
|
22
24
|
import { createNavigateCommand, createClickCommand, createClickAtCommand, createTypeCommand, createFillCommand, createScrollCommand, createWaitCommand, createWaitForTextCommand, createHoverCommand, createSelectCommand, createPressCommand, createBackCommand, createForwardCommand, createResumeCommand, createSnapshotCommand, createScreenshotCommand, createExtractCommand, createEvaluateCommand, createDialogCommand, createConsoleCommand, createNetworkCommand, createTabsCommand, createNewTabCommand, createCloseTabCommand, createAttachCommand, createUrlCommand, createTitleCommand, createHtmlCommand, createClearLogsCommand, createSwitchTabCommand, createFocusCommand, createNewWindowCommand, createTaskCommand, createTaskStatusCommand, createTaskCancelCommand, } from '../src/commands/actions.js';
|
|
@@ -58,6 +60,7 @@ program.addCommand(createConfigCommand());
|
|
|
58
60
|
program.addCommand(createCloudCommand());
|
|
59
61
|
program.addCommand(createCacheCommand());
|
|
60
62
|
program.addCommand(createDoctorCommand());
|
|
63
|
+
program.addCommand(createAuditCommand());
|
|
61
64
|
program.addCommand(createResetConnectionCommand());
|
|
62
65
|
program.addCommand(createInstallCommand());
|
|
63
66
|
program.addCommand(createSessionDebugCommand());
|
|
@@ -109,6 +112,8 @@ program.addCommand(createTaskStatusCommand());
|
|
|
109
112
|
program.addCommand(createTaskCancelCommand());
|
|
110
113
|
// Recording analysis
|
|
111
114
|
program.addCommand(createAnalyzeCommand());
|
|
115
|
+
// Session + recording listing
|
|
116
|
+
program.addCommand(createSessionsCommand());
|
|
112
117
|
// On SIGINT (Ctrl-C) or SIGTERM (kill/Docker/systemd), send a best-effort
|
|
113
118
|
// local-close to the activity feed so the session is marked failed rather
|
|
114
119
|
// than left in a running/orphaned state. Uses synchronous spawnSync inside
|
package/dist/bin/thinkrun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinkrun.js","sourceRoot":"","sources":["../../bin/thinkrun.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thinkrun.js","sourceRoot":"","sources":["../../bin/thinkrun.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface TabAuditState {
|
|
2
|
+
tabId: string;
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
updatedAt: string;
|
|
5
|
+
explicit?: boolean;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type AuditStateSource = 'flag' | 'env' | 'stored' | 'default';
|
|
9
|
+
|
|
10
|
+
export interface ResolveTabAuditStateArgs {
|
|
11
|
+
tabId?: string | number;
|
|
12
|
+
flagEnabled?: boolean;
|
|
13
|
+
envValue?: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ResolvedTabAuditState {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
source: AuditStateSource;
|
|
19
|
+
stored?: TabAuditState | undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getTabAuditStateFilePath(tabId: string | number): string;
|
|
23
|
+
export function parseAuditPreference(value: string | undefined): boolean | undefined;
|
|
24
|
+
export function readTabAuditState(tabId: string | number): TabAuditState | undefined;
|
|
25
|
+
export function writeTabAuditState(
|
|
26
|
+
tabId: string | number,
|
|
27
|
+
enabled: boolean,
|
|
28
|
+
updatedAt?: string,
|
|
29
|
+
options?: { explicit?: boolean },
|
|
30
|
+
): TabAuditState;
|
|
31
|
+
export function clearTabAuditState(tabId: string | number): void;
|
|
32
|
+
export function resolveTabAuditState(args?: ResolveTabAuditStateArgs): ResolvedTabAuditState;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
|
|
5
|
+
function getLockDir() {
|
|
6
|
+
const configuredDir = process.env.THINKRUN_LOCK_DIR ?? process.env.THINKBROWSE_LOCK_DIR;
|
|
7
|
+
if (configuredDir) return configuredDir;
|
|
8
|
+
|
|
9
|
+
const thinkrunDir = join(homedir(), '.thinkrun');
|
|
10
|
+
const thinkbrowseDir = join(homedir(), '.thinkbrowse');
|
|
11
|
+
if (!existsSync(thinkrunDir) && existsSync(thinkbrowseDir)) {
|
|
12
|
+
return thinkbrowseDir;
|
|
13
|
+
}
|
|
14
|
+
return thinkrunDir;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function sanitizeTabId(tabId) {
|
|
18
|
+
return String(tabId).replace(/[^a-zA-Z0-9_-]/g, '_') || 'unknown';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function getTabAuditStateFilePath(tabId) {
|
|
22
|
+
return join(getLockDir(), 'audit-states', `${sanitizeTabId(tabId)}.json`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function parseAuditPreference(value) {
|
|
26
|
+
if (typeof value !== 'string') return undefined;
|
|
27
|
+
const normalized = value.trim().toLowerCase();
|
|
28
|
+
if (!normalized) return undefined;
|
|
29
|
+
if (['1', 'true', 'on', 'yes'].includes(normalized)) return true;
|
|
30
|
+
if (['0', 'false', 'off', 'no'].includes(normalized)) return false;
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function readTabAuditState(tabId) {
|
|
35
|
+
try {
|
|
36
|
+
const filePath = getTabAuditStateFilePath(tabId);
|
|
37
|
+
if (!existsSync(filePath)) return undefined;
|
|
38
|
+
const data = JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
39
|
+
if (
|
|
40
|
+
!data
|
|
41
|
+
|| typeof data !== 'object'
|
|
42
|
+
|| typeof data.enabled !== 'boolean'
|
|
43
|
+
|| typeof data.updatedAt !== 'string'
|
|
44
|
+
) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
tabId: String(tabId),
|
|
49
|
+
enabled: data.enabled,
|
|
50
|
+
updatedAt: data.updatedAt,
|
|
51
|
+
explicit: data.explicit === true,
|
|
52
|
+
};
|
|
53
|
+
} catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function writeTabAuditState(tabId, enabled, updatedAt = new Date().toISOString(), options = {}) {
|
|
59
|
+
const state = {
|
|
60
|
+
tabId: String(tabId),
|
|
61
|
+
enabled: Boolean(enabled),
|
|
62
|
+
updatedAt,
|
|
63
|
+
...(options.explicit === true ? { explicit: true } : {}),
|
|
64
|
+
};
|
|
65
|
+
const filePath = getTabAuditStateFilePath(tabId);
|
|
66
|
+
mkdirSync(join(getLockDir(), 'audit-states'), { recursive: true });
|
|
67
|
+
writeFileSync(filePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
68
|
+
return state;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function clearTabAuditState(tabId) {
|
|
72
|
+
try {
|
|
73
|
+
rmSync(getTabAuditStateFilePath(tabId), { force: true });
|
|
74
|
+
} catch {
|
|
75
|
+
// best-effort cleanup
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function resolveTabAuditState({
|
|
80
|
+
tabId,
|
|
81
|
+
flagEnabled = false,
|
|
82
|
+
envValue = process.env.THINKRUN_AUDIT,
|
|
83
|
+
} = {}) {
|
|
84
|
+
const stored = tabId !== undefined && tabId !== null ? readTabAuditState(tabId) : undefined;
|
|
85
|
+
if (flagEnabled) {
|
|
86
|
+
return { enabled: true, source: 'flag', stored };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const envEnabled = parseAuditPreference(envValue);
|
|
90
|
+
if (envEnabled !== undefined) {
|
|
91
|
+
return { enabled: envEnabled, source: 'env', stored };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (stored) {
|
|
95
|
+
return { enabled: stored.enabled, source: 'stored', stored };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return { enabled: false, source: 'default', stored };
|
|
99
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface PatchLocalAuditStateArgs {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
updatedAt?: string | undefined;
|
|
5
|
+
apiKey: string;
|
|
6
|
+
apiUrl?: string | undefined;
|
|
7
|
+
fetchFn?: typeof fetch | undefined;
|
|
8
|
+
timeoutMs?: number | undefined;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function unrefAbortSignal(ms: number): AbortSignal;
|
|
12
|
+
export function patchLocalAuditState(args: PatchLocalAuditStateArgs): Promise<boolean>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function unrefAbortSignal(ms) {
|
|
2
|
+
const controller = new AbortController();
|
|
3
|
+
const timer = setTimeout(() => controller.abort(), ms);
|
|
4
|
+
if (typeof timer?.unref === 'function') timer.unref();
|
|
5
|
+
return controller.signal;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function patchLocalAuditState({
|
|
9
|
+
sessionId,
|
|
10
|
+
enabled,
|
|
11
|
+
updatedAt,
|
|
12
|
+
apiKey,
|
|
13
|
+
apiUrl = 'https://api.thinkrun.ai',
|
|
14
|
+
fetchFn = globalThis.fetch,
|
|
15
|
+
timeoutMs = 10_000,
|
|
16
|
+
} = {}) {
|
|
17
|
+
if (typeof sessionId !== 'string' || sessionId.length === 0) return Promise.resolve(false);
|
|
18
|
+
if (typeof apiKey !== 'string' || apiKey.length === 0) return Promise.resolve(false);
|
|
19
|
+
if (typeof apiUrl !== 'string' || !apiUrl.startsWith('https://')) return Promise.resolve(false);
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
return fetchFn(`${apiUrl}/api/sessions/${sessionId}/local-audit`, {
|
|
23
|
+
method: 'PATCH',
|
|
24
|
+
headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
enabled: Boolean(enabled),
|
|
27
|
+
...(typeof updatedAt === 'string' ? { updatedAt } : {}),
|
|
28
|
+
}),
|
|
29
|
+
signal: unrefAbortSignal(timeoutMs),
|
|
30
|
+
}).then((res) => {
|
|
31
|
+
const delivered = res.ok;
|
|
32
|
+
res.body?.cancel?.().catch(() => {});
|
|
33
|
+
return delivered;
|
|
34
|
+
}).catch(() => false);
|
|
35
|
+
} catch {
|
|
36
|
+
return Promise.resolve(false);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function redactSensitiveResult(value: unknown): unknown;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
const SENSITIVE_RESULT_PATTERNS = [
|
|
2
|
+
{
|
|
3
|
+
key: /^pass(?:word)?$/i,
|
|
4
|
+
json: /("pass(?:word)?"\s*:\s*)"[^"]*"/gi,
|
|
5
|
+
quotedDouble: /(pass(?:word)?\s*[=:]\s*)"[^"]*"/gi,
|
|
6
|
+
quotedSingle: /(pass(?:word)?\s*[=:]\s*)'[^']*'/gi,
|
|
7
|
+
plain: /(pass(?:word)?\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
key: /^[a-z0-9_-]*token$/i,
|
|
11
|
+
json: /("[a-z0-9_-]*token"\s*:\s*)"[^"]*"/gi,
|
|
12
|
+
quotedDouble: /([a-z0-9_-]*token\s*[=:]\s*)"[^"]*"/gi,
|
|
13
|
+
quotedSingle: /([a-z0-9_-]*token\s*[=:]\s*)'[^']*'/gi,
|
|
14
|
+
plain: /([a-z0-9_-]*token\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
key: /^[a-z0-9_-]*secret$/i,
|
|
18
|
+
json: /("[a-z0-9_-]*secret"\s*:\s*)"[^"]*"/gi,
|
|
19
|
+
quotedDouble: /([a-z0-9_-]*secret\s*[=:]\s*)"[^"]*"/gi,
|
|
20
|
+
quotedSingle: /([a-z0-9_-]*secret\s*[=:]\s*)'[^']*'/gi,
|
|
21
|
+
plain: /([a-z0-9_-]*secret\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: /^[a-z0-9_-]*credential$/i,
|
|
25
|
+
json: /("[a-z0-9_-]*credential"\s*:\s*)"[^"]*"/gi,
|
|
26
|
+
quotedDouble: /([a-z0-9_-]*credential\s*[=:]\s*)"[^"]*"/gi,
|
|
27
|
+
quotedSingle: /([a-z0-9_-]*credential\s*[=:]\s*)'[^']*'/gi,
|
|
28
|
+
plain: /([a-z0-9_-]*credential\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
key: /^[a-z0-9_-]*api[-_]?key$/i,
|
|
32
|
+
json: /("[a-z0-9_-]*api[-_]?key"\s*:\s*)"[^"]*"/gi,
|
|
33
|
+
quotedDouble: /([a-z0-9_-]*api[-_]?key\s*[=:]\s*)"[^"]*"/gi,
|
|
34
|
+
quotedSingle: /([a-z0-9_-]*api[-_]?key\s*[=:]\s*)'[^']*'/gi,
|
|
35
|
+
plain: /([a-z0-9_-]*api[-_]?key\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: /^auth(?:orization)?$/i,
|
|
39
|
+
json: /("auth(?:orization)?"\s*:\s*)"[^"]*"/gi,
|
|
40
|
+
quotedDouble: /(auth(?:orization)?\s*[=:]\s*)"[^"]*"/gi,
|
|
41
|
+
quotedSingle: /(auth(?:orization)?\s*[=:]\s*)'[^']*'/gi,
|
|
42
|
+
plain: /(auth(?:orization)?\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: /^set-cookie$/i,
|
|
46
|
+
json: /("set-cookie"\s*:\s*)"[^"]*"/gi,
|
|
47
|
+
quotedDouble: /(set-cookie\s*[=:]\s*)"[^"]*"/gi,
|
|
48
|
+
quotedSingle: /(set-cookie\s*[=:]\s*)'[^']*'/gi,
|
|
49
|
+
plain: /(set-cookie\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
key: /^cookie$/i,
|
|
53
|
+
json: /("cookie"\s*:\s*)"[^"]*"/gi,
|
|
54
|
+
quotedDouble: /(cookie\s*[=:]\s*)"[^"]*"/gi,
|
|
55
|
+
quotedSingle: /(cookie\s*[=:]\s*)'[^']*'/gi,
|
|
56
|
+
plain: /(cookie\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
function isSensitiveResultKey(key) {
|
|
61
|
+
return SENSITIVE_RESULT_PATTERNS.some((pattern) => pattern.key.test(key));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function isPlainObject(value) {
|
|
65
|
+
if (!value || typeof value !== 'object') return false;
|
|
66
|
+
const prototype = Object.getPrototypeOf(value);
|
|
67
|
+
return prototype === Object.prototype || prototype === null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function redactSensitiveResult(value) {
|
|
71
|
+
if (typeof value === 'string') {
|
|
72
|
+
let redacted = value;
|
|
73
|
+
for (const pattern of SENSITIVE_RESULT_PATTERNS) {
|
|
74
|
+
redacted = redacted
|
|
75
|
+
.replace(pattern.json, '$1"[REDACTED]"')
|
|
76
|
+
.replace(pattern.quotedDouble, '$1"[REDACTED]"')
|
|
77
|
+
.replace(pattern.quotedSingle, "$1'[REDACTED]'")
|
|
78
|
+
.replace(pattern.plain, '$1[REDACTED]');
|
|
79
|
+
}
|
|
80
|
+
return redacted;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (Array.isArray(value)) {
|
|
84
|
+
return value.map((entry) => redactSensitiveResult(entry));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (isPlainObject(value)) {
|
|
88
|
+
const hasSensitiveHeaderName = ['name', 'key', 'header'].some((field) => (
|
|
89
|
+
typeof value[field] === 'string' && isSensitiveResultKey(value[field])
|
|
90
|
+
));
|
|
91
|
+
return Object.fromEntries(
|
|
92
|
+
Object.entries(value).map(([key, entry]) => {
|
|
93
|
+
const lowerKey = key.toLowerCase();
|
|
94
|
+
const redactByContext = hasSensitiveHeaderName && ['value', 'text', 'content'].includes(lowerKey);
|
|
95
|
+
return [
|
|
96
|
+
key,
|
|
97
|
+
isSensitiveResultKey(key) || redactByContext ? '[REDACTED]' : redactSensitiveResult(entry),
|
|
98
|
+
];
|
|
99
|
+
}),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
|
|
104
|
+
try {
|
|
105
|
+
return redactSensitiveResult(value.toJSON());
|
|
106
|
+
} catch {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return value;
|
|
112
|
+
}
|
|
@@ -14,6 +14,7 @@ export declare class LocalAdapter implements BrowserAdapter {
|
|
|
14
14
|
private defaultTimeout;
|
|
15
15
|
private validatedTabCache;
|
|
16
16
|
private syncedNetworkRequestMarkers;
|
|
17
|
+
private auditScreenshotChains;
|
|
17
18
|
private readonly TAB_CACHE_TTL_MS;
|
|
18
19
|
/** Injected fetch function — allows unit tests to intercept all HTTP calls. */
|
|
19
20
|
private readonly fetchFn;
|
|
@@ -36,6 +37,13 @@ export declare class LocalAdapter implements BrowserAdapter {
|
|
|
36
37
|
private syncAction;
|
|
37
38
|
private getNetworkRequestSyncKey;
|
|
38
39
|
private getNetworkRequestId;
|
|
40
|
+
private getScreenshotMimeType;
|
|
41
|
+
private buildAuditScreenshotCaption;
|
|
42
|
+
private runSerializedAuditScreenshotCapture;
|
|
43
|
+
private captureAuditScreenshot;
|
|
44
|
+
private triggerAuditScreenshot;
|
|
45
|
+
private createAuditActionId;
|
|
46
|
+
private buildAuditCaptureDetails;
|
|
39
47
|
private getNetworkRequestMarker;
|
|
40
48
|
private getNetworkRequestTimestamp;
|
|
41
49
|
private findNetworkRequestMarkerIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/adapters/local.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/adapters/local.ts"],"names":[],"mappings":"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"}
|