gologin-agent-browser-cli 0.2.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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.js +336 -0
  5. package/dist/commands/back.d.ts +2 -0
  6. package/dist/commands/back.js +12 -0
  7. package/dist/commands/check.d.ts +2 -0
  8. package/dist/commands/check.js +17 -0
  9. package/dist/commands/click.d.ts +2 -0
  10. package/dist/commands/click.js +17 -0
  11. package/dist/commands/close.d.ts +2 -0
  12. package/dist/commands/close.js +12 -0
  13. package/dist/commands/cookies.d.ts +2 -0
  14. package/dist/commands/cookies.js +23 -0
  15. package/dist/commands/cookiesClear.d.ts +2 -0
  16. package/dist/commands/cookiesClear.js +12 -0
  17. package/dist/commands/cookiesImport.d.ts +2 -0
  18. package/dist/commands/cookiesImport.js +18 -0
  19. package/dist/commands/current.d.ts +2 -0
  20. package/dist/commands/current.js +9 -0
  21. package/dist/commands/dblclick.d.ts +2 -0
  22. package/dist/commands/dblclick.js +17 -0
  23. package/dist/commands/doctor.d.ts +2 -0
  24. package/dist/commands/doctor.js +31 -0
  25. package/dist/commands/eval.d.ts +2 -0
  26. package/dist/commands/eval.js +30 -0
  27. package/dist/commands/fill.d.ts +2 -0
  28. package/dist/commands/fill.js +18 -0
  29. package/dist/commands/find.d.ts +2 -0
  30. package/dist/commands/find.js +86 -0
  31. package/dist/commands/focus.d.ts +2 -0
  32. package/dist/commands/focus.js +17 -0
  33. package/dist/commands/forward.d.ts +2 -0
  34. package/dist/commands/forward.js +12 -0
  35. package/dist/commands/get.d.ts +2 -0
  36. package/dist/commands/get.js +19 -0
  37. package/dist/commands/hover.d.ts +2 -0
  38. package/dist/commands/hover.js +17 -0
  39. package/dist/commands/open.d.ts +2 -0
  40. package/dist/commands/open.js +67 -0
  41. package/dist/commands/pdf.d.ts +2 -0
  42. package/dist/commands/pdf.js +18 -0
  43. package/dist/commands/press.d.ts +2 -0
  44. package/dist/commands/press.js +19 -0
  45. package/dist/commands/reload.d.ts +2 -0
  46. package/dist/commands/reload.js +12 -0
  47. package/dist/commands/screenshot.d.ts +2 -0
  48. package/dist/commands/screenshot.js +22 -0
  49. package/dist/commands/scroll.d.ts +2 -0
  50. package/dist/commands/scroll.js +25 -0
  51. package/dist/commands/scrollIntoView.d.ts +2 -0
  52. package/dist/commands/scrollIntoView.js +17 -0
  53. package/dist/commands/select.d.ts +2 -0
  54. package/dist/commands/select.js +18 -0
  55. package/dist/commands/sessions.d.ts +2 -0
  56. package/dist/commands/sessions.js +15 -0
  57. package/dist/commands/shared.d.ts +7 -0
  58. package/dist/commands/shared.js +51 -0
  59. package/dist/commands/snapshot.d.ts +2 -0
  60. package/dist/commands/snapshot.js +16 -0
  61. package/dist/commands/storageClear.d.ts +2 -0
  62. package/dist/commands/storageClear.js +13 -0
  63. package/dist/commands/storageExport.d.ts +2 -0
  64. package/dist/commands/storageExport.js +24 -0
  65. package/dist/commands/storageImport.d.ts +2 -0
  66. package/dist/commands/storageImport.js +20 -0
  67. package/dist/commands/tabClose.d.ts +2 -0
  68. package/dist/commands/tabClose.js +21 -0
  69. package/dist/commands/tabFocus.d.ts +2 -0
  70. package/dist/commands/tabFocus.js +21 -0
  71. package/dist/commands/tabOpen.d.ts +2 -0
  72. package/dist/commands/tabOpen.js +13 -0
  73. package/dist/commands/tabs.d.ts +2 -0
  74. package/dist/commands/tabs.js +17 -0
  75. package/dist/commands/type.d.ts +2 -0
  76. package/dist/commands/type.js +18 -0
  77. package/dist/commands/uncheck.d.ts +2 -0
  78. package/dist/commands/uncheck.js +17 -0
  79. package/dist/commands/upload.d.ts +2 -0
  80. package/dist/commands/upload.js +18 -0
  81. package/dist/commands/wait.d.ts +2 -0
  82. package/dist/commands/wait.js +41 -0
  83. package/dist/daemon/browser.d.ts +67 -0
  84. package/dist/daemon/browser.js +818 -0
  85. package/dist/daemon/refStore.d.ts +9 -0
  86. package/dist/daemon/refStore.js +26 -0
  87. package/dist/daemon/server.d.ts +1 -0
  88. package/dist/daemon/server.js +313 -0
  89. package/dist/daemon/sessionManager.d.ts +66 -0
  90. package/dist/daemon/sessionManager.js +684 -0
  91. package/dist/daemon/snapshot.d.ts +8 -0
  92. package/dist/daemon/snapshot.js +285 -0
  93. package/dist/lib/config.d.ts +3 -0
  94. package/dist/lib/config.js +58 -0
  95. package/dist/lib/daemon.d.ts +9 -0
  96. package/dist/lib/daemon.js +197 -0
  97. package/dist/lib/errors.d.ts +12 -0
  98. package/dist/lib/errors.js +63 -0
  99. package/dist/lib/types.d.ts +407 -0
  100. package/dist/lib/types.js +2 -0
  101. package/dist/lib/utils.d.ts +27 -0
  102. package/dist/lib/utils.js +165 -0
  103. package/examples/agent-flow.sh +19 -0
  104. package/package.json +61 -0
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runBackCommand = runBackCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ const shared_1 = require("./shared");
6
+ async function runBackCommand(context, argv) {
7
+ const parsed = (0, utils_1.parseArgs)(argv);
8
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
9
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
10
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/back`);
11
+ context.stdout.write(`session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runCheckCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCheckCommand = runCheckCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runCheckCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const target = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ if (!target) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser check <target> [--session <sessionId>]", 400);
13
+ }
14
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
15
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/check`, { target });
16
+ (0, shared_1.writeActionResult)(context, "checked", target, response);
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runClickCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runClickCommand = runClickCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runClickCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const target = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ if (!target) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser click <target> [--session <sessionId>]", 400);
13
+ }
14
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
15
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/click`, { target });
16
+ (0, shared_1.writeActionResult)(context, "clicked", target, response);
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runCloseCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCloseCommand = runCloseCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ async function runCloseCommand(context, argv) {
6
+ const parsed = (0, utils_1.parseArgs)(argv);
7
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
8
+ const resolvedSessionId = sessionId ??
9
+ (await context.client.request("GET", "/sessions/current")).sessionId;
10
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/close`);
11
+ context.stdout.write(`closed session=${response.sessionId}\n`);
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runCookiesCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCookiesCommand = runCookiesCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ const shared_1 = require("./shared");
6
+ async function runCookiesCommand(context, argv) {
7
+ const parsed = (0, utils_1.parseArgs)(argv);
8
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
9
+ const outputPath = (0, utils_1.getFlagString)(parsed, "output");
10
+ const json = (0, utils_1.getFlagBoolean)(parsed, "json");
11
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
12
+ const response = await context.client.request("GET", `/sessions/${resolvedSessionId}/cookies`);
13
+ if (outputPath) {
14
+ const savedPath = (0, shared_1.writeJsonFile)(context, outputPath, response.cookies);
15
+ context.stdout.write(`${savedPath}\n`);
16
+ return;
17
+ }
18
+ if (json) {
19
+ (0, shared_1.writeJsonStdout)(context, response.cookies);
20
+ return;
21
+ }
22
+ context.stdout.write(`${JSON.stringify(response.cookies, null, 2)}\n`);
23
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runCookiesClearCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCookiesClearCommand = runCookiesClearCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ const shared_1 = require("./shared");
6
+ async function runCookiesClearCommand(context, argv) {
7
+ const parsed = (0, utils_1.parseArgs)(argv);
8
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
9
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
10
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/cookies-clear`);
11
+ context.stdout.write(`cleared=${response.cleared} session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runCookiesImportCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCookiesImportCommand = runCookiesImportCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runCookiesImportCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
10
+ const cookiesPath = parsed.positional[0];
11
+ if (!cookiesPath) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser cookies-import <cookies.json> [--session <sessionId>]", 400);
13
+ }
14
+ const cookies = (0, shared_1.readJsonFile)(context, cookiesPath);
15
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
16
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/cookies-import`, { cookies });
17
+ context.stdout.write(`imported=${response.imported} session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
18
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runCurrentCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCurrentCommand = runCurrentCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ async function runCurrentCommand(context, argv) {
6
+ (0, utils_1.parseArgs)(argv);
7
+ const response = await context.client.request("GET", "/sessions/current");
8
+ context.stdout.write(`${(0, utils_1.formatCurrentLine)(response)}\n`);
9
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runDoubleClickCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDoubleClickCommand = runDoubleClickCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runDoubleClickCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const target = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ if (!target) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser dblclick <target> [--session <sessionId>]", 400);
13
+ }
14
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
15
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/dblclick`, { target });
16
+ (0, shared_1.writeActionResult)(context, "double-clicked", target, response);
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runDoctorCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDoctorCommand = runDoctorCommand;
4
+ const daemon_1 = require("../lib/daemon");
5
+ const utils_1 = require("../lib/utils");
6
+ function writeJson(context, payload) {
7
+ context.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
8
+ }
9
+ function writeDoctorReport(context, report) {
10
+ context.stdout.write(`ok=${report.ok}\n`);
11
+ context.stdout.write(`tokenConfigured=${report.tokenConfigured}\n`);
12
+ if (report.defaultProfileId) {
13
+ context.stdout.write(`defaultProfileId=${report.defaultProfileId}\n`);
14
+ }
15
+ context.stdout.write(`connectBase=${report.connectBase}\n`);
16
+ context.stdout.write(`configPath=${report.configPath}\n`);
17
+ context.stdout.write(`daemonLogPath=${report.daemonLogPath}\n`);
18
+ for (const transport of report.transports) {
19
+ context.stdout.write(`transport=${transport.label} reachable=${transport.reachable}\n`);
20
+ }
21
+ }
22
+ async function runDoctorCommand(context, argv) {
23
+ const parsed = (0, utils_1.parseArgs)(argv);
24
+ const json = (0, utils_1.getFlagBoolean)(parsed, "json");
25
+ const report = await (0, daemon_1.inspectDaemon)(context.config);
26
+ if (json) {
27
+ writeJson(context, report);
28
+ return;
29
+ }
30
+ writeDoctorReport(context, report);
31
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runEvalCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runEvalCommand = runEvalCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runEvalCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
10
+ const json = (0, utils_1.getFlagBoolean)(parsed, "json");
11
+ const expression = parsed.positional.join(" ").trim();
12
+ if (!expression) {
13
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser eval <expression> [--json] [--session <sessionId>]", 400);
14
+ }
15
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
16
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/eval`, { expression });
17
+ if (json) {
18
+ (0, shared_1.writeJsonStdout)(context, response.value);
19
+ return;
20
+ }
21
+ if (typeof response.value === "string") {
22
+ context.stdout.write(`${response.value}\n`);
23
+ return;
24
+ }
25
+ if (response.value === undefined) {
26
+ context.stdout.write("undefined\n");
27
+ return;
28
+ }
29
+ context.stdout.write(`${JSON.stringify(response.value)}\n`);
30
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runFillCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runFillCommand = runFillCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runFillCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const target = parsed.positional[0];
10
+ const text = parsed.positional.slice(1).join(" ");
11
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
12
+ if (!target || !text) {
13
+ throw new errors_1.AppError("BAD_REQUEST", 'Usage: gologin-agent-browser fill <target> <text> [--session <sessionId>]', 400);
14
+ }
15
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
16
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/fill`, { target, text });
17
+ (0, shared_1.writeActionResult)(context, "filled", target, response);
18
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runFindCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runFindCommand = runFindCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ const ACTIONS = new Set(["click", "fill", "type", "hover", "text"]);
8
+ function parseFindLocator(positional) {
9
+ const mode = positional[0];
10
+ if (mode === "role") {
11
+ const role = positional[1];
12
+ const action = positional[2];
13
+ const value = positional.slice(3).join(" ") || undefined;
14
+ if (!role || !action || !ACTIONS.has(action)) {
15
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser find role <role> <action> [value] [--name <name>]", 400);
16
+ }
17
+ return { locator: { strategy: "role", role }, action, value };
18
+ }
19
+ if (mode === "text") {
20
+ const text = positional[1];
21
+ const action = positional[2];
22
+ const value = positional.slice(3).join(" ") || undefined;
23
+ if (!text || !action || !ACTIONS.has(action)) {
24
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser find text <text> <action> [value]", 400);
25
+ }
26
+ return { locator: { strategy: "text", text }, action, value };
27
+ }
28
+ if (mode === "label") {
29
+ const label = positional[1];
30
+ const action = positional[2];
31
+ const value = positional.slice(3).join(" ") || undefined;
32
+ if (!label || !action || !ACTIONS.has(action)) {
33
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser find label <label> <action> [value]", 400);
34
+ }
35
+ return { locator: { strategy: "label", label }, action, value };
36
+ }
37
+ if (mode === "placeholder") {
38
+ const placeholder = positional[1];
39
+ const action = positional[2];
40
+ const value = positional.slice(3).join(" ") || undefined;
41
+ if (!placeholder || !action || !ACTIONS.has(action)) {
42
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser find placeholder <placeholder> <action> [value]", 400);
43
+ }
44
+ return { locator: { strategy: "placeholder", placeholder }, action, value };
45
+ }
46
+ if (mode === "first" || mode === "last") {
47
+ const selector = positional[1];
48
+ const action = positional[2];
49
+ const value = positional.slice(3).join(" ") || undefined;
50
+ if (!selector || !action || !ACTIONS.has(action)) {
51
+ throw new errors_1.AppError("BAD_REQUEST", `Usage: gologin-agent-browser find ${mode} <selector> <action> [value]`, 400);
52
+ }
53
+ return { locator: { strategy: mode, selector }, action, value };
54
+ }
55
+ if (mode === "nth") {
56
+ const nth = positional[1];
57
+ const selector = positional[2];
58
+ const action = positional[3];
59
+ const value = positional.slice(4).join(" ") || undefined;
60
+ if (!nth || !selector || !action || !ACTIONS.has(action) || Number.isNaN(Number(nth))) {
61
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser find nth <n> <selector> <action> [value]", 400);
62
+ }
63
+ return { locator: { strategy: "nth", selector, nth: Number(nth) }, action, value };
64
+ }
65
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser find <role|text|label|placeholder|first|last|nth> ...", 400);
66
+ }
67
+ async function runFindCommand(context, argv) {
68
+ const parsed = (0, utils_1.parseArgs)(argv);
69
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
70
+ const name = (0, utils_1.getFlagString)(parsed, "name");
71
+ const exact = (0, utils_1.getFlagBoolean)(parsed, "exact");
72
+ const { locator, action, value } = parseFindLocator(parsed.positional);
73
+ if (locator.strategy === "role" && name) {
74
+ locator.name = name;
75
+ }
76
+ if (exact) {
77
+ locator.exact = true;
78
+ }
79
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
80
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/find`, { locator, action, value });
81
+ if (action === "text") {
82
+ context.stdout.write(`${response.value ?? ""}\n`);
83
+ return;
84
+ }
85
+ context.stdout.write(`find ${action} session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
86
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runFocusCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runFocusCommand = runFocusCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runFocusCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const target = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ if (!target) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser focus <target> [--session <sessionId>]", 400);
13
+ }
14
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
15
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/focus`, { target });
16
+ (0, shared_1.writeActionResult)(context, "focused", target, response);
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runForwardCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runForwardCommand = runForwardCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ const shared_1 = require("./shared");
6
+ async function runForwardCommand(context, argv) {
7
+ const parsed = (0, utils_1.parseArgs)(argv);
8
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
9
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
10
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/forward`);
11
+ context.stdout.write(`session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runGetCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runGetCommand = runGetCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ const GET_KINDS = new Set(["text", "value", "html", "title", "url"]);
8
+ async function runGetCommand(context, argv) {
9
+ const parsed = (0, utils_1.parseArgs)(argv);
10
+ const kind = parsed.positional[0];
11
+ const target = parsed.positional[1];
12
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
13
+ if (!kind || !GET_KINDS.has(kind)) {
14
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser get <text|value|html|title|url> [target] [--session <sessionId>]", 400);
15
+ }
16
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
17
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/get`, { kind, target });
18
+ context.stdout.write(`${response.value}\n`);
19
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runHoverCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runHoverCommand = runHoverCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runHoverCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const target = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ if (!target) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser hover <target> [--session <sessionId>]", 400);
13
+ }
14
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
15
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/hover`, { target });
16
+ (0, shared_1.writeActionResult)(context, "hovered", target, response);
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runOpenCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runOpenCommand = runOpenCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ function parseIdleTimeout(value) {
7
+ if (!value) {
8
+ return undefined;
9
+ }
10
+ const timeout = Number(value);
11
+ if (!Number.isInteger(timeout) || timeout <= 0) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "--idle-timeout-ms must be a positive integer", 400);
13
+ }
14
+ return timeout;
15
+ }
16
+ function parseProxy(parsed) {
17
+ const country = (0, utils_1.getFlagString)(parsed, "proxy-country");
18
+ const mode = (0, utils_1.getFlagString)(parsed, "proxy-mode");
19
+ const host = (0, utils_1.getFlagString)(parsed, "proxy-host");
20
+ const portRaw = (0, utils_1.getFlagString)(parsed, "proxy-port");
21
+ const username = (0, utils_1.getFlagString)(parsed, "proxy-user");
22
+ const password = (0, utils_1.getFlagString)(parsed, "proxy-pass");
23
+ if (country) {
24
+ throw new errors_1.AppError("BAD_REQUEST", "--proxy-country is not available for temporary cloud profiles yet; use a preconfigured --profile or a custom proxy host/port", 400);
25
+ }
26
+ if (host || portRaw || username || password || mode) {
27
+ const port = Number(portRaw);
28
+ if (!host || !portRaw || !Number.isInteger(port) || port <= 0) {
29
+ throw new errors_1.AppError("BAD_REQUEST", "Custom proxy requires --proxy-host and a valid --proxy-port", 400);
30
+ }
31
+ const resolvedMode = mode ?? "http";
32
+ if (!["http", "socks4", "socks5"].includes(resolvedMode)) {
33
+ throw new errors_1.AppError("BAD_REQUEST", "--proxy-mode must be one of http, socks4, or socks5", 400);
34
+ }
35
+ return {
36
+ mode: resolvedMode,
37
+ host,
38
+ port,
39
+ username,
40
+ password
41
+ };
42
+ }
43
+ return undefined;
44
+ }
45
+ async function runOpenCommand(context, argv) {
46
+ const parsed = (0, utils_1.parseArgs)(argv);
47
+ const url = parsed.positional[0];
48
+ const profileId = (0, utils_1.getFlagString)(parsed, "profile");
49
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
50
+ const proxy = parseProxy(parsed);
51
+ const idleTimeoutMs = parseIdleTimeout((0, utils_1.getFlagString)(parsed, "idle-timeout-ms"));
52
+ if (!url) {
53
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser open <url> [--profile <profileId>] [--session <sessionId>] [--idle-timeout-ms <ms>] [--proxy-host <host> --proxy-port <port>]", 400);
54
+ }
55
+ const response = await context.client.request("POST", "/sessions/open", {
56
+ url,
57
+ profileId,
58
+ sessionId,
59
+ proxy,
60
+ idleTimeoutMs
61
+ });
62
+ const proxyLabel = (0, utils_1.formatProxyLabel)(response.proxy);
63
+ const proxyToken = proxyLabel ? ` proxy=${proxyLabel}` : "";
64
+ const liveView = response.liveViewUrl ? ` liveview=${response.liveViewUrl}` : "";
65
+ const idleTimeout = response.idleTimeoutMs !== undefined ? ` idleTimeoutMs=${response.idleTimeoutMs}` : "";
66
+ context.stdout.write(`session=${response.sessionId} url=${response.url}${proxyToken}${idleTimeout}${liveView}\n`);
67
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runPdfCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runPdfCommand = runPdfCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runPdfCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const inputPath = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ if (!inputPath) {
12
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser pdf <path> [--session <sessionId>]", 400);
13
+ }
14
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
15
+ const path = (0, utils_1.ensureAbsolutePath)(context.cwd, inputPath);
16
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/pdf`, { path });
17
+ context.stdout.write(`pdf=${response.path} session=${response.sessionId}\n`);
18
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runPressCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runPressCommand = runPressCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runPressCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const key = parsed.positional[0];
10
+ const target = parsed.positional[1];
11
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
12
+ if (!key) {
13
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser press <key> [target] [--session <sessionId>]", 400);
14
+ }
15
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
16
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/press`, { key, target });
17
+ const targetSuffix = target ? ` target=${target}` : "";
18
+ context.stdout.write(`pressed key=${key}${targetSuffix} session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
19
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runReloadCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runReloadCommand = runReloadCommand;
4
+ const utils_1 = require("../lib/utils");
5
+ const shared_1 = require("./shared");
6
+ async function runReloadCommand(context, argv) {
7
+ const parsed = (0, utils_1.parseArgs)(argv);
8
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
9
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
10
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/reload`);
11
+ context.stdout.write(`session=${response.sessionId} url=${response.url} snapshot=${response.staleSnapshot ? "stale" : "fresh"}\n`);
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { CommandContext } from "../lib/types";
2
+ export declare function runScreenshotCommand(context: CommandContext, argv: string[]): Promise<void>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runScreenshotCommand = runScreenshotCommand;
4
+ const errors_1 = require("../lib/errors");
5
+ const utils_1 = require("../lib/utils");
6
+ const shared_1 = require("./shared");
7
+ async function runScreenshotCommand(context, argv) {
8
+ const parsed = (0, utils_1.parseArgs)(argv);
9
+ const inputPath = parsed.positional[0];
10
+ const sessionId = (0, utils_1.getFlagString)(parsed, "session");
11
+ const annotate = (0, utils_1.getFlagBoolean)(parsed, "annotate");
12
+ const pressEscape = (0, utils_1.getFlagBoolean)(parsed, "press-escape");
13
+ if (!inputPath) {
14
+ throw new errors_1.AppError("BAD_REQUEST", "Usage: gologin-agent-browser screenshot <path> [--annotate] [--press-escape] [--session <sessionId>]", 400);
15
+ }
16
+ const resolvedSessionId = await (0, shared_1.resolveSessionId)(context, sessionId);
17
+ const targetPath = (0, utils_1.ensureAbsolutePath)(context.cwd, inputPath);
18
+ const response = await context.client.request("POST", `/sessions/${resolvedSessionId}/screenshot`, { path: targetPath, annotate, pressEscape });
19
+ const annotated = response.annotated ? " annotated=yes" : "";
20
+ const escaped = response.pressedEscape ? " escape=yes" : "";
21
+ context.stdout.write(`screenshot=${response.path} session=${response.sessionId}${annotated}${escaped}\n`);
22
+ }