@jobshimo/browser-link 0.22.0 → 0.23.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/README.md +5 -0
- package/dist/agent-instructions/content.js +11 -0
- package/dist/agent-instructions/content.js.map +1 -1
- package/dist/cdp/client.d.ts +35 -0
- package/dist/cdp/client.js +149 -0
- package/dist/cdp/client.js.map +1 -0
- package/dist/cdp/flow.d.ts +178 -0
- package/dist/cdp/flow.js +217 -0
- package/dist/cdp/flow.js.map +1 -0
- package/dist/cdp/gate.d.ts +31 -0
- package/dist/cdp/gate.js +35 -0
- package/dist/cdp/gate.js.map +1 -0
- package/dist/cdp/grant.d.ts +45 -0
- package/dist/cdp/grant.js +81 -0
- package/dist/cdp/grant.js.map +1 -0
- package/dist/cdp/inpage/builders.d.ts +165 -0
- package/dist/cdp/inpage/builders.js +501 -0
- package/dist/cdp/inpage/builders.js.map +1 -0
- package/dist/cdp/inpage/deep-query.d.ts +57 -0
- package/dist/cdp/inpage/deep-query.js +325 -0
- package/dist/cdp/inpage/deep-query.js.map +1 -0
- package/dist/cdp/inpage/dom-helpers.d.ts +27 -0
- package/dist/cdp/inpage/dom-helpers.js +147 -0
- package/dist/cdp/inpage/dom-helpers.js.map +1 -0
- package/dist/cdp/keymap.d.ts +83 -0
- package/dist/cdp/keymap.js +205 -0
- package/dist/cdp/keymap.js.map +1 -0
- package/dist/cdp/settle.d.ts +38 -0
- package/dist/cdp/settle.js +76 -0
- package/dist/cdp/settle.js.map +1 -0
- package/dist/cdp/support.d.ts +26 -0
- package/dist/cdp/support.js +58 -0
- package/dist/cdp/support.js.map +1 -0
- package/dist/cdp/targets.d.ts +54 -0
- package/dist/cdp/targets.js +176 -0
- package/dist/cdp/targets.js.map +1 -0
- package/dist/cdp/transport.d.ts +31 -0
- package/dist/cdp/transport.js +531 -0
- package/dist/cdp/transport.js.map +1 -0
- package/dist/cli.js +50 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/about.js +13 -0
- package/dist/commands/about.js.map +1 -1
- package/dist/commands/cdp.d.ts +28 -0
- package/dist/commands/cdp.js +172 -0
- package/dist/commands/cdp.js.map +1 -0
- package/dist/commands/config.d.ts +92 -0
- package/dist/commands/config.js +173 -12
- package/dist/commands/config.js.map +1 -1
- package/dist/config.d.ts +70 -0
- package/dist/config.js +94 -1
- package/dist/config.js.map +1 -1
- package/dist/extension/manifest.json +1 -1
- package/dist/server.js +9 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/browser-definitions.js +4 -3
- package/dist/tools/browser-definitions.js.map +1 -1
- package/dist/tools/browser-dispatch.d.ts +31 -0
- package/dist/tools/browser-dispatch.js +88 -40
- package/dist/tools/browser-dispatch.js.map +1 -1
- package/dist/tools/server-instructions.js +19 -0
- package/dist/tools/server-instructions.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ import { runToolsCommand } from './commands/tools.js';
|
|
|
9
9
|
import { runMultiAgentCommand } from './commands/multi-agent.js';
|
|
10
10
|
import { runFreePort } from './commands/free-port.js';
|
|
11
11
|
import { runConfigCommand } from './commands/config.js';
|
|
12
|
+
import { runCdpCommand } from './commands/cdp.js';
|
|
12
13
|
import { runMapCommand } from './commands/map.js';
|
|
13
14
|
import { formatStatus as formatInstructionsStatus, installInstructionsAll, installInstructionsFor, statusAll as instructionsStatusAll, statusFor as instructionsStatusFor, uninstallInstructionsAll, uninstallInstructionsFor, } from './commands/instructions.js';
|
|
14
15
|
import { loadConfig } from './config.js';
|
|
@@ -56,6 +57,30 @@ Uso:
|
|
|
56
57
|
Habilita/deshabilita la grabación de flows (opt-in, apagado por
|
|
57
58
|
defecto). El mismo valor es editable desde el popup de la
|
|
58
59
|
extensión — gana la última escritura (ver README).
|
|
60
|
+
browser-link config get cdp-direct.enabled | cdp-direct.port | cdp-direct.grant-ttl
|
|
61
|
+
Muestra la configuración de cdp-direct (ver "browser-link cdp"
|
|
62
|
+
más abajo).
|
|
63
|
+
browser-link config set cdp-direct.enabled <true|false>
|
|
64
|
+
Habilita/deshabilita el modo cdp-direct (apagado por defecto).
|
|
65
|
+
Habilitarlo NO alcanza para que un agente use una pestaña cdp: —
|
|
66
|
+
además hace falta un permiso vigente (browser-link cdp allow).
|
|
67
|
+
browser-link config set cdp-direct.port <puerto>
|
|
68
|
+
Puerto loopback para cdp-direct (default 9222). El host es
|
|
69
|
+
siempre 127.0.0.1, nunca configurable.
|
|
70
|
+
browser-link config set cdp-direct.grant-ttl <minutos|never>
|
|
71
|
+
Duración por defecto de un permiso otorgado con
|
|
72
|
+
"browser-link cdp allow" cuando no se pasa --minutes (default
|
|
73
|
+
60, 1-1440, o "never" — reduce la postura de seguridad).
|
|
74
|
+
browser-link cdp allow [--minutes N]
|
|
75
|
+
Otorga un permiso de tiempo limitado para que los agentes usen
|
|
76
|
+
cdp-direct (ver la sección "cdp-direct mode" del README). Solo
|
|
77
|
+
vos podés correr esto — ningún agente puede otorgárselo a sí
|
|
78
|
+
mismo.
|
|
79
|
+
browser-link cdp revoke Revoca el permiso de cdp-direct vigente.
|
|
80
|
+
browser-link cdp status Muestra si cdp-direct está habilitado, el puerto configurado,
|
|
81
|
+
el estado del permiso (ninguno/vigente/expirado, tiempo
|
|
82
|
+
restante) y si hay un endpoint de Chrome DevTools alcanzable
|
|
83
|
+
ahora mismo en ese puerto.
|
|
59
84
|
browser-link map Lista las apps que el mapa persistente de UI conoce
|
|
60
85
|
(app_key, origin, cantidad de entradas/flows, última vez).
|
|
61
86
|
browser-link map show <app> Muestra las entradas y flows guardados de una app
|
|
@@ -141,6 +166,27 @@ Usage:
|
|
|
141
166
|
Enable/disable flow recording (opt-in, off by default). The same
|
|
142
167
|
setting is editable from the extension's popup — last write wins
|
|
143
168
|
(see README).
|
|
169
|
+
browser-link config get cdp-direct.enabled | cdp-direct.port | cdp-direct.grant-ttl
|
|
170
|
+
Show cdp-direct's configuration (see "browser-link cdp" below).
|
|
171
|
+
browser-link config set cdp-direct.enabled <true|false>
|
|
172
|
+
Enable/disable cdp-direct mode (off by default). Enabling it
|
|
173
|
+
alone does NOT let an agent use a cdp: tab — a live grant is
|
|
174
|
+
also required (browser-link cdp allow).
|
|
175
|
+
browser-link config set cdp-direct.port <port>
|
|
176
|
+
Loopback port cdp-direct dials (default 9222). The host is
|
|
177
|
+
always 127.0.0.1, never configurable.
|
|
178
|
+
browser-link config set cdp-direct.grant-ttl <minutes|never>
|
|
179
|
+
Default lifetime of a grant recorded by "browser-link cdp allow"
|
|
180
|
+
when --minutes is not passed (default 60, 1-1440, or "never" —
|
|
181
|
+
reduces the security posture).
|
|
182
|
+
browser-link cdp allow [--minutes N]
|
|
183
|
+
Record a time-boxed grant letting agents use cdp-direct (see the
|
|
184
|
+
README's "cdp-direct mode" section). Only you can run this — no
|
|
185
|
+
agent can grant itself access.
|
|
186
|
+
browser-link cdp revoke Revoke the current cdp-direct grant.
|
|
187
|
+
browser-link cdp status Show whether cdp-direct is enabled, the configured port, the
|
|
188
|
+
grant state (none/active/expired, remaining time), and whether a
|
|
189
|
+
Chrome DevTools endpoint is reachable right now on that port.
|
|
144
190
|
browser-link map List apps known to the persistent UI map (app_key,
|
|
145
191
|
origin, entry/flow counts, last seen).
|
|
146
192
|
browser-link map show <app> Show the saved entries and flows for one app
|
|
@@ -302,6 +348,10 @@ async function dispatch(argv) {
|
|
|
302
348
|
console.log(await runConfigCommand(rest, language));
|
|
303
349
|
return;
|
|
304
350
|
}
|
|
351
|
+
case 'cdp': {
|
|
352
|
+
console.log(await runCdpCommand(rest, language));
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
305
355
|
case 'map': {
|
|
306
356
|
console.log(runMapCommand(rest, language));
|
|
307
357
|
return;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,YAAY,IAAI,wBAAwB,EACxC,sBAAsB,EACtB,sBAAsB,EACtB,SAAS,IAAI,qBAAqB,EAClC,SAAS,IAAI,qBAAqB,EAClC,wBAAwB,EACxB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgBvC,SAAS,SAAS,CAAC,QAAkB;IACnC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,gBAAgB,OAAO
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/about.js
CHANGED
|
@@ -21,6 +21,12 @@ export const I18N_ABOUT = {
|
|
|
21
21
|
'opens its own WebSocket to that port and registers a tab_id. From',
|
|
22
22
|
'that moment on, the agent can call tools targeting that tab_id, and',
|
|
23
23
|
'the server forwards each request to the extension over the WebSocket.',
|
|
24
|
+
'',
|
|
25
|
+
'Optional: cdp-direct mode lets the server drive Chrome tabs directly',
|
|
26
|
+
'over --remote-debugging-port instead, skipping the extension — off by',
|
|
27
|
+
'default and gated behind an explicit, time-boxed grant only you can',
|
|
28
|
+
'issue (`browser-link cdp allow`). See the README\'s "cdp-direct mode"',
|
|
29
|
+
'section, or run `browser-link cdp status`.',
|
|
24
30
|
].join('\n'),
|
|
25
31
|
bindingTitle: 'Process binding (zero-config defense)',
|
|
26
32
|
binding: [
|
|
@@ -130,6 +136,13 @@ export const I18N_ABOUT = {
|
|
|
130
136
|
'registra con un tab_id. Desde ahí, el agente puede llamar',
|
|
131
137
|
'herramientas que apuntan a ese tab_id y el servidor reenvía cada',
|
|
132
138
|
'petición a la extensión.',
|
|
139
|
+
'',
|
|
140
|
+
'Opcional: el modo cdp-direct permite que el servidor maneje pestañas',
|
|
141
|
+
'de Chrome directamente vía --remote-debugging-port, sin pasar por la',
|
|
142
|
+
'extensión — apagado por defecto y protegido detrás de un permiso',
|
|
143
|
+
'explícito y de tiempo limitado que solo vos podés otorgar',
|
|
144
|
+
'(`browser-link cdp allow`). Ver la sección "cdp-direct mode" del',
|
|
145
|
+
'README, o correr `browser-link cdp status`.',
|
|
133
146
|
].join('\n'),
|
|
134
147
|
bindingTitle: 'Validación por proceso (sin configuración)',
|
|
135
148
|
binding: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"about.js","sourceRoot":"","sources":["../../src/commands/about.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,UAAU,GAAgC;IACrD,EAAE,EAAE;QACF,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,eAAe;QAC1B,IAAI,EAAE;YACJ,oEAAoE;YACpE,qEAAqE;YACrE,kEAAkE;YAClE,EAAE;YACF,4BAA4B;YAC5B,qEAAqE;YACrE,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,wDAAwD;SACzD,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,QAAQ,EAAE,mBAAmB;QAC7B,GAAG,EAAE;YACH,sEAAsE;YACtE,kEAAkE;YAClE,mEAAmE;YACnE,qEAAqE;YACrE,uEAAuE;
|
|
1
|
+
{"version":3,"file":"about.js","sourceRoot":"","sources":["../../src/commands/about.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Language } from './welcome.js';
|
|
2
|
+
/** `browser-link cdp allow [--minutes N]`. Records a grant whose lifetime
|
|
3
|
+
* is `--minutes` when given (parsed with the SAME rules
|
|
4
|
+
* `config set cdp-direct.grant-ttl` uses — see `parseGrantTtlArg`), or the
|
|
5
|
+
* configured `cdp-direct.grant-ttl` default otherwise. `0`/`never` records
|
|
6
|
+
* a grant that never expires. */
|
|
7
|
+
export declare function allowCdpDirect(argv: string[], language?: Language): string;
|
|
8
|
+
/** `browser-link cdp revoke`. Idempotent — revoking with nothing active
|
|
9
|
+
* says so instead of pretending something happened.
|
|
10
|
+
*
|
|
11
|
+
* Fails CLOSED. The realistic failure mode on Windows is a file-lock /
|
|
12
|
+
* sharing-violation that blocks DELETION while the file stays READABLE — so
|
|
13
|
+
* the grant file survives, `loadGrant` reads it fine, and the gate's grant
|
|
14
|
+
* check would keep returning `{ ok: true }` after the user believes they
|
|
15
|
+
* revoked. To make revoke genuinely fail-closed we ALSO flip
|
|
16
|
+
* `cdp-direct.enabled=false` (a DIFFERENT file — config.json — unlikely to
|
|
17
|
+
* share the grant file's lock) as a defense-in-depth fallback, so the
|
|
18
|
+
* gate's FIRST check (enabled) denies even though the stale grant file
|
|
19
|
+
* survives. If disabling ALSO fails, we surface both facts loudly. Either
|
|
20
|
+
* way this THROWS — the CLI dispatcher turns the throw into a non-zero
|
|
21
|
+
* exit. */
|
|
22
|
+
export declare function revokeCdpDirect(language?: Language): string;
|
|
23
|
+
/** `browser-link cdp status`. Reachability is checked live (a real HTTP
|
|
24
|
+
* call to `/json/version` on the configured port) regardless of the
|
|
25
|
+
* enabled/grant state — this is a diagnostic, not a gated action, same
|
|
26
|
+
* spirit as `browser-link doctor`. */
|
|
27
|
+
export declare function cdpDirectStatus(language?: Language): Promise<string>;
|
|
28
|
+
export declare function runCdpCommand(argv: string[], language?: Language): Promise<string>;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { clampGrantTtlMinutes, loadConfig, sanitizeCdpPort, saveConfig } from '../config.js';
|
|
2
|
+
import { clearGrant, grantFilePath, isGrantLive, loadGrant, remainingMs, saveGrant, } from '../cdp/grant.js';
|
|
3
|
+
import { isChromeDevtoolsEndpoint } from '../cdp/targets.js';
|
|
4
|
+
import { CFG_I18N, parseGrantTtlArg } from './config.js';
|
|
5
|
+
const CDP_I18N = {
|
|
6
|
+
en: {
|
|
7
|
+
usage: 'Usage: browser-link cdp <allow|revoke|status> [--minutes N]',
|
|
8
|
+
unknownAction: (action) => `Unknown cdp action: ${action}. Use allow, revoke or status.`,
|
|
9
|
+
allowSaved: (expiryLabel) => `cdp-direct grant recorded — expires ${expiryLabel}. Revoke any time with \`browser-link cdp revoke\`.`,
|
|
10
|
+
allowNeverNote: ' WARNING: this grant never expires until revoked — reduces the security posture.',
|
|
11
|
+
disabledNote: ' Note: cdp-direct.enabled is currently off — run `browser-link config set cdp-direct.enabled true` for the grant to take effect.',
|
|
12
|
+
revoked: 'cdp-direct grant revoked.',
|
|
13
|
+
noGrantToRevoke: 'No cdp-direct grant was active.',
|
|
14
|
+
revokeFailedDisabled: (path, reason) => `Could not remove the grant file: ${path} — ${reason}. As a safeguard, cdp-direct has been DISABLED (cdp-direct.enabled=false); re-enable it with \`browser-link config set cdp-direct.enabled true\` once you have deleted the file.`,
|
|
15
|
+
revokeFailedBoth: (path, reason, disableReason) => `Could not remove the grant file: ${path} — ${reason}. The safeguard ALSO failed to disable cdp-direct: ${disableReason}. cdp-direct MAY STILL BE ACTIVE — delete the grant file manually and run \`browser-link config set cdp-direct.enabled false\`.`,
|
|
16
|
+
statusHeader: 'cdp-direct status',
|
|
17
|
+
enabledLabel: 'enabled',
|
|
18
|
+
portLabel: 'port',
|
|
19
|
+
grantLabel: 'grant',
|
|
20
|
+
grantNone: 'none — run `browser-link cdp allow` to grant access',
|
|
21
|
+
grantNever: 'active, never expires',
|
|
22
|
+
grantExpired: 'expired — run `browser-link cdp allow` to grant access again',
|
|
23
|
+
grantRemaining: (minutes) => `active, ${minutes} min remaining`,
|
|
24
|
+
reachableLabel: 'Chrome DevTools endpoint reachable',
|
|
25
|
+
yes: 'yes',
|
|
26
|
+
no: 'no',
|
|
27
|
+
never: 'never',
|
|
28
|
+
},
|
|
29
|
+
es: {
|
|
30
|
+
usage: 'Uso: browser-link cdp <allow|revoke|status> [--minutes N]',
|
|
31
|
+
unknownAction: (action) => `Acción de cdp desconocida: ${action}. Usá allow, revoke o status.`,
|
|
32
|
+
allowSaved: (expiryLabel) => `Permiso de cdp-direct registrado — expira ${expiryLabel}. Revocalo en cualquier momento con \`browser-link cdp revoke\`.`,
|
|
33
|
+
allowNeverNote: ' ADVERTENCIA: este permiso no expira hasta que lo revoques — reduce la postura de seguridad.',
|
|
34
|
+
disabledNote: ' Nota: cdp-direct.enabled está apagado actualmente — corré `browser-link config set cdp-direct.enabled true` para que el permiso tenga efecto.',
|
|
35
|
+
revoked: 'Permiso de cdp-direct revocado.',
|
|
36
|
+
noGrantToRevoke: 'No había ningún permiso de cdp-direct activo.',
|
|
37
|
+
revokeFailedDisabled: (path, reason) => `No se pudo eliminar el archivo de permiso: ${path} — ${reason}. Como salvaguarda, cdp-direct fue DESHABILITADO (cdp-direct.enabled=false); volvé a habilitarlo con \`browser-link config set cdp-direct.enabled true\` una vez que hayas eliminado el archivo.`,
|
|
38
|
+
revokeFailedBoth: (path, reason, disableReason) => `No se pudo eliminar el archivo de permiso: ${path} — ${reason}. La salvaguarda TAMBIÉN falló al deshabilitar cdp-direct: ${disableReason}. cdp-direct PUEDE SEGUIR ACTIVO — eliminá el archivo de permiso manualmente y corré \`browser-link config set cdp-direct.enabled false\`.`,
|
|
39
|
+
statusHeader: 'Estado de cdp-direct',
|
|
40
|
+
enabledLabel: 'habilitado',
|
|
41
|
+
portLabel: 'puerto',
|
|
42
|
+
grantLabel: 'permiso',
|
|
43
|
+
grantNone: 'ninguno — corré `browser-link cdp allow` para otorgar acceso',
|
|
44
|
+
grantNever: 'activo, nunca expira',
|
|
45
|
+
grantExpired: 'expirado — corré `browser-link cdp allow` para otorgar acceso de nuevo',
|
|
46
|
+
grantRemaining: (minutes) => `activo, ${minutes} min restantes`,
|
|
47
|
+
reachableLabel: 'endpoint de Chrome DevTools alcanzable',
|
|
48
|
+
yes: 'sí',
|
|
49
|
+
no: 'no',
|
|
50
|
+
never: 'nunca',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
function parseMinutesFlag(argv) {
|
|
54
|
+
const idx = argv.indexOf('--minutes');
|
|
55
|
+
if (idx === -1 || idx === argv.length - 1)
|
|
56
|
+
return undefined;
|
|
57
|
+
return argv[idx + 1];
|
|
58
|
+
}
|
|
59
|
+
function formatExpiry(expiresAt, t) {
|
|
60
|
+
if (expiresAt === null)
|
|
61
|
+
return t.never;
|
|
62
|
+
return new Date(expiresAt).toISOString();
|
|
63
|
+
}
|
|
64
|
+
/** `browser-link cdp allow [--minutes N]`. Records a grant whose lifetime
|
|
65
|
+
* is `--minutes` when given (parsed with the SAME rules
|
|
66
|
+
* `config set cdp-direct.grant-ttl` uses — see `parseGrantTtlArg`), or the
|
|
67
|
+
* configured `cdp-direct.grant-ttl` default otherwise. `0`/`never` records
|
|
68
|
+
* a grant that never expires. */
|
|
69
|
+
export function allowCdpDirect(argv, language = 'en') {
|
|
70
|
+
const t = CDP_I18N[language];
|
|
71
|
+
const cfg = loadConfig();
|
|
72
|
+
const rawMinutes = parseMinutesFlag(argv);
|
|
73
|
+
const { minutes: parsedMinutes, note } = rawMinutes !== undefined
|
|
74
|
+
? parseGrantTtlArg(rawMinutes, CFG_I18N[language])
|
|
75
|
+
: { minutes: cfg.cdpDirectGrantTtlMinutes ?? 60, note: '' };
|
|
76
|
+
const minutes = clampGrantTtlMinutes(parsedMinutes);
|
|
77
|
+
const grant = saveGrant(minutes);
|
|
78
|
+
let message = t.allowSaved(formatExpiry(grant.expiresAt, t)) + note;
|
|
79
|
+
if (grant.expiresAt === null)
|
|
80
|
+
message += t.allowNeverNote;
|
|
81
|
+
if (cfg.cdpDirectEnabled !== true)
|
|
82
|
+
message += t.disabledNote;
|
|
83
|
+
return message;
|
|
84
|
+
}
|
|
85
|
+
/** `browser-link cdp revoke`. Idempotent — revoking with nothing active
|
|
86
|
+
* says so instead of pretending something happened.
|
|
87
|
+
*
|
|
88
|
+
* Fails CLOSED. The realistic failure mode on Windows is a file-lock /
|
|
89
|
+
* sharing-violation that blocks DELETION while the file stays READABLE — so
|
|
90
|
+
* the grant file survives, `loadGrant` reads it fine, and the gate's grant
|
|
91
|
+
* check would keep returning `{ ok: true }` after the user believes they
|
|
92
|
+
* revoked. To make revoke genuinely fail-closed we ALSO flip
|
|
93
|
+
* `cdp-direct.enabled=false` (a DIFFERENT file — config.json — unlikely to
|
|
94
|
+
* share the grant file's lock) as a defense-in-depth fallback, so the
|
|
95
|
+
* gate's FIRST check (enabled) denies even though the stale grant file
|
|
96
|
+
* survives. If disabling ALSO fails, we surface both facts loudly. Either
|
|
97
|
+
* way this THROWS — the CLI dispatcher turns the throw into a non-zero
|
|
98
|
+
* exit. */
|
|
99
|
+
export function revokeCdpDirect(language = 'en') {
|
|
100
|
+
const t = CDP_I18N[language];
|
|
101
|
+
const hadGrant = loadGrant() !== null;
|
|
102
|
+
try {
|
|
103
|
+
clearGrant();
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
107
|
+
// Defense in depth: the grant file may have survived (readable but
|
|
108
|
+
// undeletable). Deny via the enabled flag so the gate closes anyway.
|
|
109
|
+
try {
|
|
110
|
+
saveConfig({ cdpDirectEnabled: false });
|
|
111
|
+
}
|
|
112
|
+
catch (disableErr) {
|
|
113
|
+
const disableReason = disableErr instanceof Error ? disableErr.message : String(disableErr);
|
|
114
|
+
// `reason` (the original unlink failure) is carried in the message;
|
|
115
|
+
// the `cause` is this catch's own error, per preserve-caught-error.
|
|
116
|
+
throw new Error(t.revokeFailedBoth(grantFilePath(), reason, disableReason), {
|
|
117
|
+
cause: disableErr,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
throw new Error(t.revokeFailedDisabled(grantFilePath(), reason), { cause: err });
|
|
121
|
+
}
|
|
122
|
+
return hadGrant ? t.revoked : t.noGrantToRevoke;
|
|
123
|
+
}
|
|
124
|
+
/** `browser-link cdp status`. Reachability is checked live (a real HTTP
|
|
125
|
+
* call to `/json/version` on the configured port) regardless of the
|
|
126
|
+
* enabled/grant state — this is a diagnostic, not a gated action, same
|
|
127
|
+
* spirit as `browser-link doctor`. */
|
|
128
|
+
export async function cdpDirectStatus(language = 'en') {
|
|
129
|
+
const t = CDP_I18N[language];
|
|
130
|
+
const cfg = loadConfig();
|
|
131
|
+
const grant = loadGrant();
|
|
132
|
+
const now = Date.now();
|
|
133
|
+
const live = isGrantLive(grant, now);
|
|
134
|
+
let grantLine;
|
|
135
|
+
if (!grant) {
|
|
136
|
+
grantLine = t.grantNone;
|
|
137
|
+
}
|
|
138
|
+
else if (!live) {
|
|
139
|
+
grantLine = t.grantExpired;
|
|
140
|
+
}
|
|
141
|
+
else if (grant.expiresAt === null) {
|
|
142
|
+
grantLine = t.grantNever;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
grantLine = t.grantRemaining(Math.ceil((remainingMs(grant, now) ?? 0) / 60_000));
|
|
146
|
+
}
|
|
147
|
+
const port = sanitizeCdpPort(cfg.cdpDirectPort);
|
|
148
|
+
const reachable = await isChromeDevtoolsEndpoint(port);
|
|
149
|
+
return [
|
|
150
|
+
t.statusHeader,
|
|
151
|
+
'',
|
|
152
|
+
` ${t.enabledLabel} ${cfg.cdpDirectEnabled === true ? t.yes : t.no}`,
|
|
153
|
+
` ${t.portLabel} ${port}`,
|
|
154
|
+
` ${t.grantLabel} ${grantLine}`,
|
|
155
|
+
` ${t.reachableLabel} ${reachable ? t.yes : t.no}`,
|
|
156
|
+
].join('\n');
|
|
157
|
+
}
|
|
158
|
+
export async function runCdpCommand(argv, language = 'en') {
|
|
159
|
+
const t = CDP_I18N[language];
|
|
160
|
+
const action = argv.at(0);
|
|
161
|
+
const rest = argv.slice(1);
|
|
162
|
+
if (action === undefined)
|
|
163
|
+
throw new Error(t.usage);
|
|
164
|
+
if (action === 'allow')
|
|
165
|
+
return allowCdpDirect(rest, language);
|
|
166
|
+
if (action === 'revoke')
|
|
167
|
+
return revokeCdpDirect(language);
|
|
168
|
+
if (action === 'status')
|
|
169
|
+
return cdpDirectStatus(language);
|
|
170
|
+
throw new Error(t.unknownAction(action));
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=cdp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../src/commands/cdp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,72 @@
|
|
|
1
1
|
import type { Language } from './welcome.js';
|
|
2
|
+
/**
|
|
3
|
+
* `browser-link config` — scriptable CLI surface for settings that are also
|
|
4
|
+
* editable from the extension's popup: the idle-disconnect TTL (see
|
|
5
|
+
* `packages/extension/src/idle-policy.ts`) and the opt-in flow-recording
|
|
6
|
+
* toggle (see `packages/extension/src/flow-recording-policy.ts`). `get`/`set`
|
|
7
|
+
* are structured as `<action> <key> [value]` so each setting slots in
|
|
8
|
+
* without a redesign.
|
|
9
|
+
*
|
|
10
|
+
* browser-link config get Show every known setting.
|
|
11
|
+
* browser-link config get idle-ttl Show just idle-ttl.
|
|
12
|
+
* browser-link config get flow-recording Show just flow-recording.
|
|
13
|
+
* browser-link config set idle-ttl <minutes|never>
|
|
14
|
+
* browser-link config set flow-recording <on|off>
|
|
15
|
+
*
|
|
16
|
+
* Precedence with the popup: both editors write to ONE logical value per
|
|
17
|
+
* setting — last write wins, decided by comparing `updatedAt` epoch-ms
|
|
18
|
+
* timestamps (see messages.ts's SettingsUpdatePayload doc and the README's
|
|
19
|
+
* "Idle disconnect" / "Recording flows by demonstration" sections). Each
|
|
20
|
+
* `config set` here:
|
|
21
|
+
* 1. Persists the value plus its own `*UpdatedAt: Date.now()` to
|
|
22
|
+
* config.json — this is what a NEW tab connecting later reads (see
|
|
23
|
+
* ws-bridge.ts's `tab.register` handler).
|
|
24
|
+
* 2. Best-effort pushes the same value to every ALREADY connected tab
|
|
25
|
+
* right now, over the multi-agent IPC bridge (127.0.0.1:17530) — the
|
|
26
|
+
* one existing local control channel into a running primary. This
|
|
27
|
+
* requires a primary to be up AND multi-agent mode enabled (the
|
|
28
|
+
* default); when neither holds, the CLI says so plainly and the value
|
|
29
|
+
* still applies the next time a tab (re)connects.
|
|
30
|
+
*/
|
|
31
|
+
export interface ConfigI18n {
|
|
32
|
+
header: string;
|
|
33
|
+
idleTtlLabel: string;
|
|
34
|
+
never: string;
|
|
35
|
+
minutes: (n: number) => string;
|
|
36
|
+
notSetViaCli: string;
|
|
37
|
+
invalidValue: (raw: string) => string;
|
|
38
|
+
clampedNote: (original: number, clamped: number) => string;
|
|
39
|
+
setSaved: (label: string) => string;
|
|
40
|
+
pushedLive: (n: number) => string;
|
|
41
|
+
pushedNone: string;
|
|
42
|
+
pushUnavailable: string;
|
|
43
|
+
pushRejected: string;
|
|
44
|
+
usage: string;
|
|
45
|
+
unknownKey: (key: string) => string;
|
|
46
|
+
unknownAction: (action: string) => string;
|
|
47
|
+
flowRecordingLabel: string;
|
|
48
|
+
flowRecordingEnabled: string;
|
|
49
|
+
flowRecordingDisabled: string;
|
|
50
|
+
flowRecordingNotSetViaCli: string;
|
|
51
|
+
invalidFlowRecordingValue: (raw: string) => string;
|
|
52
|
+
flowRecordingSetSaved: (label: string) => string;
|
|
53
|
+
cdpDirectEnabledLabel: string;
|
|
54
|
+
cdpDirectPortLabel: string;
|
|
55
|
+
cdpDirectGrantTtlLabel: string;
|
|
56
|
+
cdpDirectOn: string;
|
|
57
|
+
cdpDirectOff: string;
|
|
58
|
+
invalidCdpDirectEnabledValue: (raw: string) => string;
|
|
59
|
+
cdpDirectEnabledSetSaved: (label: string) => string;
|
|
60
|
+
invalidCdpDirectPortValue: (raw: string) => string;
|
|
61
|
+
cdpDirectPortSetSaved: (port: number) => string;
|
|
62
|
+
invalidGrantTtlValue: (raw: string) => string;
|
|
63
|
+
grantTtlNever: string;
|
|
64
|
+
cdpDirectGrantTtlSetSaved: (label: string) => string;
|
|
65
|
+
}
|
|
66
|
+
/** Exported so `commands/cdp.ts` can reuse `parseGrantTtlArg`'s exact
|
|
67
|
+
* localized wording for `cdp allow --minutes`'s per-call override — same
|
|
68
|
+
* error/clamp messages `config set cdp-direct.grant-ttl` produces. */
|
|
69
|
+
export declare const CFG_I18N: Record<Language, ConfigI18n>;
|
|
2
70
|
/** One formatted line describing the current `idleTtlMinutes` state, shared
|
|
3
71
|
* by both `config get` (no key — lists everything) and `config get idle-ttl`
|
|
4
72
|
* (just this one). */
|
|
@@ -7,6 +75,15 @@ export declare function getIdleTtlLine(language?: Language): string;
|
|
|
7
75
|
* mirrors `getIdleTtlLine` exactly, shared by `config get` (no key) and
|
|
8
76
|
* `config get flow-recording`. */
|
|
9
77
|
export declare function getFlowRecordingLine(language?: Language): string;
|
|
78
|
+
/** One formatted line describing the current `cdpDirectEnabled` state. */
|
|
79
|
+
export declare function getCdpDirectEnabledLine(language?: Language): string;
|
|
80
|
+
/** One formatted line describing the current `cdpDirectPort` state. */
|
|
81
|
+
export declare function getCdpDirectPortLine(language?: Language): string;
|
|
82
|
+
/** One formatted line describing the current `cdpDirectGrantTtlMinutes`
|
|
83
|
+
* state — the DEFAULT lifetime `browser-link cdp allow` applies when no
|
|
84
|
+
* `--minutes` override is passed, not the state of any grant itself (see
|
|
85
|
+
* `browser-link cdp status` for that). */
|
|
86
|
+
export declare function getCdpDirectGrantTtlLine(language?: Language): string;
|
|
10
87
|
export declare function listConfig(language?: Language): string;
|
|
11
88
|
/** Override the IPC endpoint the live push dials. Production callers never
|
|
12
89
|
* set this (defaults to the real 127.0.0.1:17530); tests spin up an
|
|
@@ -19,4 +96,19 @@ export interface IpcPushOptions {
|
|
|
19
96
|
}
|
|
20
97
|
export declare function setIdleTtl(rawValue: string, language?: Language, ipcOptions?: IpcPushOptions): Promise<string>;
|
|
21
98
|
export declare function setFlowRecording(rawValue: string, language?: Language, ipcOptions?: IpcPushOptions): Promise<string>;
|
|
99
|
+
export declare function setCdpDirectEnabled(rawValue: string, language?: Language): string;
|
|
100
|
+
export declare function setCdpDirectPort(rawValue: string, language?: Language): string;
|
|
101
|
+
/**
|
|
102
|
+
* Parse the CLI's raw `<minutes|never>` argument for
|
|
103
|
+
* `config set cdp-direct.grant-ttl` — mirrors `parseIdleTtlArg` exactly,
|
|
104
|
+
* with the grant's own bounds/wording. Exported so `commands/cdp.ts` can
|
|
105
|
+
* reuse the SAME parsing for `cdp allow --minutes`'s per-call override —
|
|
106
|
+
* one implementation of "what counts as a valid TTL argument", not two
|
|
107
|
+
* that could drift.
|
|
108
|
+
*/
|
|
109
|
+
export declare function parseGrantTtlArg(raw: string, t: ConfigI18n): {
|
|
110
|
+
minutes: number;
|
|
111
|
+
note: string;
|
|
112
|
+
};
|
|
113
|
+
export declare function setCdpDirectGrantTtl(rawValue: string, language?: Language): string;
|
|
22
114
|
export declare function runConfigCommand(argv: string[], language?: Language): Promise<string>;
|