gologin-web-access 0.3.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 (141) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +344 -0
  4. package/dist/cli.js +173 -0
  5. package/dist/commands/back.js +13 -0
  6. package/dist/commands/batch.js +81 -0
  7. package/dist/commands/batchChangeTrack.js +99 -0
  8. package/dist/commands/batchExtract.js +97 -0
  9. package/dist/commands/batchScrape.js +140 -0
  10. package/dist/commands/changeTrack.js +65 -0
  11. package/dist/commands/check.js +14 -0
  12. package/dist/commands/click.js +14 -0
  13. package/dist/commands/close.js +19 -0
  14. package/dist/commands/configInit.js +77 -0
  15. package/dist/commands/configShow.js +23 -0
  16. package/dist/commands/cookies.js +22 -0
  17. package/dist/commands/cookiesClear.js +13 -0
  18. package/dist/commands/cookiesImport.js +14 -0
  19. package/dist/commands/crawl.js +71 -0
  20. package/dist/commands/crawlErrors.js +20 -0
  21. package/dist/commands/crawlResult.js +27 -0
  22. package/dist/commands/crawlStart.js +56 -0
  23. package/dist/commands/crawlStatus.js +25 -0
  24. package/dist/commands/current.js +14 -0
  25. package/dist/commands/dblclick.js +14 -0
  26. package/dist/commands/eval.js +20 -0
  27. package/dist/commands/extract.js +44 -0
  28. package/dist/commands/fill.js +15 -0
  29. package/dist/commands/find.js +16 -0
  30. package/dist/commands/focus.js +14 -0
  31. package/dist/commands/forward.js +13 -0
  32. package/dist/commands/get.js +15 -0
  33. package/dist/commands/hover.js +14 -0
  34. package/dist/commands/jobs.js +47 -0
  35. package/dist/commands/map.js +61 -0
  36. package/dist/commands/open.js +22 -0
  37. package/dist/commands/parseDocument.js +34 -0
  38. package/dist/commands/pdf.js +14 -0
  39. package/dist/commands/press.js +15 -0
  40. package/dist/commands/read.js +51 -0
  41. package/dist/commands/reload.js +13 -0
  42. package/dist/commands/run.js +76 -0
  43. package/dist/commands/scrape.js +19 -0
  44. package/dist/commands/scrapeJson.js +24 -0
  45. package/dist/commands/scrapeMarkdown.js +37 -0
  46. package/dist/commands/scrapeScreenshot.js +65 -0
  47. package/dist/commands/scrapeText.js +37 -0
  48. package/dist/commands/screenshot.js +23 -0
  49. package/dist/commands/scroll.js +23 -0
  50. package/dist/commands/scrollIntoView.js +14 -0
  51. package/dist/commands/search.js +39 -0
  52. package/dist/commands/searchBrowser.js +28 -0
  53. package/dist/commands/select.js +15 -0
  54. package/dist/commands/sessions.js +14 -0
  55. package/dist/commands/shared.js +102 -0
  56. package/dist/commands/snapshot.js +18 -0
  57. package/dist/commands/storageClear.js +18 -0
  58. package/dist/commands/storageExport.js +26 -0
  59. package/dist/commands/storageImport.js +23 -0
  60. package/dist/commands/tabClose.js +18 -0
  61. package/dist/commands/tabFocus.js +15 -0
  62. package/dist/commands/tabOpen.js +19 -0
  63. package/dist/commands/tabs.js +13 -0
  64. package/dist/commands/type.js +15 -0
  65. package/dist/commands/uncheck.js +14 -0
  66. package/dist/commands/upload.js +15 -0
  67. package/dist/commands/wait.js +27 -0
  68. package/dist/config.js +260 -0
  69. package/dist/doctor.js +86 -0
  70. package/dist/internal-agent/cli.js +336 -0
  71. package/dist/internal-agent/commands/back.js +12 -0
  72. package/dist/internal-agent/commands/check.js +17 -0
  73. package/dist/internal-agent/commands/click.js +17 -0
  74. package/dist/internal-agent/commands/close.js +12 -0
  75. package/dist/internal-agent/commands/cookies.js +23 -0
  76. package/dist/internal-agent/commands/cookiesClear.js +12 -0
  77. package/dist/internal-agent/commands/cookiesImport.js +18 -0
  78. package/dist/internal-agent/commands/current.js +9 -0
  79. package/dist/internal-agent/commands/dblclick.js +17 -0
  80. package/dist/internal-agent/commands/doctor.js +53 -0
  81. package/dist/internal-agent/commands/eval.js +30 -0
  82. package/dist/internal-agent/commands/fill.js +18 -0
  83. package/dist/internal-agent/commands/find.js +86 -0
  84. package/dist/internal-agent/commands/focus.js +17 -0
  85. package/dist/internal-agent/commands/forward.js +12 -0
  86. package/dist/internal-agent/commands/get.js +19 -0
  87. package/dist/internal-agent/commands/hover.js +17 -0
  88. package/dist/internal-agent/commands/open.js +67 -0
  89. package/dist/internal-agent/commands/pdf.js +18 -0
  90. package/dist/internal-agent/commands/press.js +19 -0
  91. package/dist/internal-agent/commands/reload.js +12 -0
  92. package/dist/internal-agent/commands/screenshot.js +22 -0
  93. package/dist/internal-agent/commands/scroll.js +25 -0
  94. package/dist/internal-agent/commands/scrollIntoView.js +17 -0
  95. package/dist/internal-agent/commands/select.js +18 -0
  96. package/dist/internal-agent/commands/sessions.js +15 -0
  97. package/dist/internal-agent/commands/shared.js +51 -0
  98. package/dist/internal-agent/commands/snapshot.js +16 -0
  99. package/dist/internal-agent/commands/storageClear.js +13 -0
  100. package/dist/internal-agent/commands/storageExport.js +24 -0
  101. package/dist/internal-agent/commands/storageImport.js +20 -0
  102. package/dist/internal-agent/commands/tabClose.js +21 -0
  103. package/dist/internal-agent/commands/tabFocus.js +21 -0
  104. package/dist/internal-agent/commands/tabOpen.js +13 -0
  105. package/dist/internal-agent/commands/tabs.js +17 -0
  106. package/dist/internal-agent/commands/type.js +18 -0
  107. package/dist/internal-agent/commands/uncheck.js +17 -0
  108. package/dist/internal-agent/commands/upload.js +18 -0
  109. package/dist/internal-agent/commands/wait.js +41 -0
  110. package/dist/internal-agent/daemon/browser.js +818 -0
  111. package/dist/internal-agent/daemon/refStore.js +26 -0
  112. package/dist/internal-agent/daemon/server.js +330 -0
  113. package/dist/internal-agent/daemon/sessionManager.js +684 -0
  114. package/dist/internal-agent/daemon/snapshot.js +285 -0
  115. package/dist/internal-agent/lib/config.js +59 -0
  116. package/dist/internal-agent/lib/daemon.js +300 -0
  117. package/dist/internal-agent/lib/errors.js +63 -0
  118. package/dist/internal-agent/lib/types.js +2 -0
  119. package/dist/internal-agent/lib/utils.js +165 -0
  120. package/dist/jobRunner.js +56 -0
  121. package/dist/lib/agentCli.js +158 -0
  122. package/dist/lib/browserRead.js +125 -0
  123. package/dist/lib/browserStructured.js +77 -0
  124. package/dist/lib/changeTracking.js +117 -0
  125. package/dist/lib/cloudApi.js +41 -0
  126. package/dist/lib/concurrency.js +15 -0
  127. package/dist/lib/crawl.js +313 -0
  128. package/dist/lib/document.js +170 -0
  129. package/dist/lib/errors.js +55 -0
  130. package/dist/lib/extract.js +65 -0
  131. package/dist/lib/extractRunner.js +22 -0
  132. package/dist/lib/jobRegistry.js +164 -0
  133. package/dist/lib/output.js +122 -0
  134. package/dist/lib/readSource.js +297 -0
  135. package/dist/lib/runbooks.js +193 -0
  136. package/dist/lib/search.js +727 -0
  137. package/dist/lib/selfCli.js +136 -0
  138. package/dist/lib/structuredScrape.js +83 -0
  139. package/dist/lib/types.js +2 -0
  140. package/dist/lib/unlocker.js +383 -0
  141. package/package.json +67 -0
@@ -0,0 +1,336 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isHelpRequest = isHelpRequest;
5
+ exports.main = main;
6
+ const back_1 = require("./commands/back");
7
+ const check_1 = require("./commands/check");
8
+ const click_1 = require("./commands/click");
9
+ const close_1 = require("./commands/close");
10
+ const cookies_1 = require("./commands/cookies");
11
+ const cookiesClear_1 = require("./commands/cookiesClear");
12
+ const cookiesImport_1 = require("./commands/cookiesImport");
13
+ const current_1 = require("./commands/current");
14
+ const doctor_1 = require("./commands/doctor");
15
+ const dblclick_1 = require("./commands/dblclick");
16
+ const eval_1 = require("./commands/eval");
17
+ const fill_1 = require("./commands/fill");
18
+ const find_1 = require("./commands/find");
19
+ const focus_1 = require("./commands/focus");
20
+ const forward_1 = require("./commands/forward");
21
+ const get_1 = require("./commands/get");
22
+ const hover_1 = require("./commands/hover");
23
+ const open_1 = require("./commands/open");
24
+ const pdf_1 = require("./commands/pdf");
25
+ const press_1 = require("./commands/press");
26
+ const reload_1 = require("./commands/reload");
27
+ const screenshot_1 = require("./commands/screenshot");
28
+ const scroll_1 = require("./commands/scroll");
29
+ const scrollIntoView_1 = require("./commands/scrollIntoView");
30
+ const storageClear_1 = require("./commands/storageClear");
31
+ const storageExport_1 = require("./commands/storageExport");
32
+ const storageImport_1 = require("./commands/storageImport");
33
+ const sessions_1 = require("./commands/sessions");
34
+ const snapshot_1 = require("./commands/snapshot");
35
+ const select_1 = require("./commands/select");
36
+ const tabClose_1 = require("./commands/tabClose");
37
+ const tabFocus_1 = require("./commands/tabFocus");
38
+ const tabOpen_1 = require("./commands/tabOpen");
39
+ const tabs_1 = require("./commands/tabs");
40
+ const type_1 = require("./commands/type");
41
+ const uncheck_1 = require("./commands/uncheck");
42
+ const upload_1 = require("./commands/upload");
43
+ const wait_1 = require("./commands/wait");
44
+ const daemon_1 = require("./lib/daemon");
45
+ const config_1 = require("./lib/config");
46
+ const errors_1 = require("./lib/errors");
47
+ const commandUsage = {
48
+ open: "open <url> [--profile <profileId>] [--session <sessionId>] [--idle-timeout-ms <ms>] [--proxy-host <host> --proxy-port <port> --proxy-mode <http|socks4|socks5>] (aliases: goto, navigate)",
49
+ doctor: "doctor [--json]",
50
+ tabs: "tabs [--session <sessionId>]",
51
+ tabopen: "tabopen [url] [--session <sessionId>] (alias: tabnew)",
52
+ tabfocus: "tabfocus <index> [--session <sessionId>] (alias: tabswitch)",
53
+ tabclose: "tabclose [index] [--session <sessionId>]",
54
+ cookies: "cookies [--session <sessionId>] [--output <path>] [--json]",
55
+ "cookies-import": "cookies-import <cookies.json> [--session <sessionId>]",
56
+ "cookies-clear": "cookies-clear [--session <sessionId>]",
57
+ "storage-export": "storage-export [path] [--scope <local|session|both>] [--session <sessionId>] [--json]",
58
+ "storage-import": "storage-import <storage.json> [--scope <local|session|both>] [--clear] [--session <sessionId>]",
59
+ "storage-clear": "storage-clear [--scope <local|session|both>] [--session <sessionId>]",
60
+ eval: "eval <expression> [--json] [--session <sessionId>] (alias: js)",
61
+ snapshot: "snapshot [--session <sessionId>] [--interactive|-i]",
62
+ click: "click <target> [--session <sessionId>]",
63
+ dblclick: "dblclick <target> [--session <sessionId>]",
64
+ focus: "focus <target> [--session <sessionId>]",
65
+ type: "type <target> <text> [--session <sessionId>]",
66
+ fill: "fill <target> <text> [--session <sessionId>]",
67
+ hover: "hover <target> [--session <sessionId>]",
68
+ select: "select <target> <value> [--session <sessionId>]",
69
+ check: "check <target> [--session <sessionId>]",
70
+ uncheck: "uncheck <target> [--session <sessionId>]",
71
+ press: "press <key> [target] [--session <sessionId>] (alias: key)",
72
+ scroll: "scroll <up|down|left|right> [pixels] [--target <target>] [--session <sessionId>]",
73
+ scrollintoview: "scrollintoview <target> [--session <sessionId>] (alias: scrollinto)",
74
+ wait: "wait <target|ms> [--text <text>] [--url <pattern>] [--load <state>] [--session <sessionId>]",
75
+ get: "get <text|value|html|title|url> [target] [--session <sessionId>]",
76
+ back: "back [--session <sessionId>]",
77
+ forward: "forward [--session <sessionId>]",
78
+ reload: "reload [--session <sessionId>]",
79
+ find: "find <role|text|label|placeholder|first|last|nth> ... [--exact]",
80
+ upload: "upload <target> <file...> [--session <sessionId>]",
81
+ pdf: "pdf <path> [--session <sessionId>]",
82
+ screenshot: "screenshot <path> [--annotate] [--press-escape] [--session <sessionId>]",
83
+ close: "close [--session <sessionId>] (aliases: quit, exit)",
84
+ sessions: "sessions",
85
+ current: "current"
86
+ };
87
+ function printUsage() {
88
+ process.stderr.write([
89
+ "Gologin Web Access Browser Runtime",
90
+ "",
91
+ "Usage:",
92
+ " gologin-web-access <command> [args] [options]",
93
+ "",
94
+ "Commands:",
95
+ ...Object.values(commandUsage).map((usage) => ` ${usage}`),
96
+ "",
97
+ "Environment:",
98
+ " GOLOGIN_TOKEN",
99
+ " GOLOGIN_PROFILE_ID",
100
+ " GOLOGIN_DAEMON_PORT",
101
+ " GOLOGIN_CONNECT_BASE"
102
+ ].join("\n") + "\n");
103
+ }
104
+ function printCommandUsage(command) {
105
+ process.stderr.write([
106
+ "Usage:",
107
+ ` gologin-web-access ${commandUsage[command]}`,
108
+ "",
109
+ "Tip:",
110
+ " Use --json when you want machine-readable output."
111
+ ].join("\n") + "\n");
112
+ }
113
+ function commandRequiresDaemon(command) {
114
+ return command !== "doctor";
115
+ }
116
+ function isHelpRequest(argv) {
117
+ return argv.includes("--help") || argv.includes("-h");
118
+ }
119
+ async function runCommand(command, context, args) {
120
+ switch (command) {
121
+ case "open":
122
+ await (0, open_1.runOpenCommand)(context, args);
123
+ return;
124
+ case "doctor":
125
+ await (0, doctor_1.runDoctorCommand)(context, args);
126
+ return;
127
+ case "tabs":
128
+ await (0, tabs_1.runTabsCommand)(context, args);
129
+ return;
130
+ case "tabopen":
131
+ await (0, tabOpen_1.runTabOpenCommand)(context, args);
132
+ return;
133
+ case "tabfocus":
134
+ await (0, tabFocus_1.runTabFocusCommand)(context, args);
135
+ return;
136
+ case "tabclose":
137
+ await (0, tabClose_1.runTabCloseCommand)(context, args);
138
+ return;
139
+ case "cookies":
140
+ await (0, cookies_1.runCookiesCommand)(context, args);
141
+ return;
142
+ case "cookies-import":
143
+ await (0, cookiesImport_1.runCookiesImportCommand)(context, args);
144
+ return;
145
+ case "cookies-clear":
146
+ await (0, cookiesClear_1.runCookiesClearCommand)(context, args);
147
+ return;
148
+ case "storage-export":
149
+ await (0, storageExport_1.runStorageExportCommand)(context, args);
150
+ return;
151
+ case "storage-import":
152
+ await (0, storageImport_1.runStorageImportCommand)(context, args);
153
+ return;
154
+ case "storage-clear":
155
+ await (0, storageClear_1.runStorageClearCommand)(context, args);
156
+ return;
157
+ case "eval":
158
+ await (0, eval_1.runEvalCommand)(context, args);
159
+ return;
160
+ case "snapshot":
161
+ await (0, snapshot_1.runSnapshotCommand)(context, args);
162
+ return;
163
+ case "click":
164
+ await (0, click_1.runClickCommand)(context, args);
165
+ return;
166
+ case "dblclick":
167
+ await (0, dblclick_1.runDoubleClickCommand)(context, args);
168
+ return;
169
+ case "focus":
170
+ await (0, focus_1.runFocusCommand)(context, args);
171
+ return;
172
+ case "type":
173
+ await (0, type_1.runTypeCommand)(context, args);
174
+ return;
175
+ case "fill":
176
+ await (0, fill_1.runFillCommand)(context, args);
177
+ return;
178
+ case "hover":
179
+ await (0, hover_1.runHoverCommand)(context, args);
180
+ return;
181
+ case "select":
182
+ await (0, select_1.runSelectCommand)(context, args);
183
+ return;
184
+ case "check":
185
+ await (0, check_1.runCheckCommand)(context, args);
186
+ return;
187
+ case "uncheck":
188
+ await (0, uncheck_1.runUncheckCommand)(context, args);
189
+ return;
190
+ case "press":
191
+ await (0, press_1.runPressCommand)(context, args);
192
+ return;
193
+ case "scroll":
194
+ await (0, scroll_1.runScrollCommand)(context, args);
195
+ return;
196
+ case "scrollintoview":
197
+ await (0, scrollIntoView_1.runScrollIntoViewCommand)(context, args);
198
+ return;
199
+ case "wait":
200
+ await (0, wait_1.runWaitCommand)(context, args);
201
+ return;
202
+ case "get":
203
+ await (0, get_1.runGetCommand)(context, args);
204
+ return;
205
+ case "back":
206
+ await (0, back_1.runBackCommand)(context, args);
207
+ return;
208
+ case "forward":
209
+ await (0, forward_1.runForwardCommand)(context, args);
210
+ return;
211
+ case "reload":
212
+ await (0, reload_1.runReloadCommand)(context, args);
213
+ return;
214
+ case "find":
215
+ await (0, find_1.runFindCommand)(context, args);
216
+ return;
217
+ case "upload":
218
+ await (0, upload_1.runUploadCommand)(context, args);
219
+ return;
220
+ case "pdf":
221
+ await (0, pdf_1.runPdfCommand)(context, args);
222
+ return;
223
+ case "screenshot":
224
+ await (0, screenshot_1.runScreenshotCommand)(context, args);
225
+ return;
226
+ case "close":
227
+ await (0, close_1.runCloseCommand)(context, args);
228
+ return;
229
+ case "sessions":
230
+ await (0, sessions_1.runSessionsCommand)(context, args);
231
+ return;
232
+ case "current":
233
+ await (0, current_1.runCurrentCommand)(context, args);
234
+ return;
235
+ }
236
+ }
237
+ function normalizeCommand(commandArg) {
238
+ const aliases = {
239
+ goto: "open",
240
+ navigate: "open",
241
+ tabnew: "tabopen",
242
+ tabswitch: "tabfocus",
243
+ js: "eval",
244
+ key: "press",
245
+ scrollinto: "scrollintoview",
246
+ quit: "close",
247
+ exit: "close"
248
+ };
249
+ if (aliases[commandArg]) {
250
+ return aliases[commandArg];
251
+ }
252
+ const directCommands = new Set([
253
+ "open",
254
+ "doctor",
255
+ "tabs",
256
+ "tabopen",
257
+ "tabfocus",
258
+ "tabclose",
259
+ "cookies",
260
+ "cookies-import",
261
+ "cookies-clear",
262
+ "storage-export",
263
+ "storage-import",
264
+ "storage-clear",
265
+ "eval",
266
+ "snapshot",
267
+ "click",
268
+ "dblclick",
269
+ "focus",
270
+ "type",
271
+ "fill",
272
+ "hover",
273
+ "select",
274
+ "check",
275
+ "uncheck",
276
+ "press",
277
+ "scroll",
278
+ "scrollintoview",
279
+ "wait",
280
+ "get",
281
+ "back",
282
+ "forward",
283
+ "reload",
284
+ "find",
285
+ "upload",
286
+ "pdf",
287
+ "screenshot",
288
+ "close",
289
+ "sessions",
290
+ "current"
291
+ ]);
292
+ return directCommands.has(commandArg) ? commandArg : undefined;
293
+ }
294
+ async function main() {
295
+ const argv = process.argv.slice(2);
296
+ const commandArg = argv[0];
297
+ if (!commandArg || commandArg === "--help" || commandArg === "-h") {
298
+ printUsage();
299
+ process.exit(commandArg ? 0 : 1);
300
+ }
301
+ const command = normalizeCommand(commandArg);
302
+ if (!command) {
303
+ throw new errors_1.AppError("BAD_REQUEST", `Unknown command: ${commandArg}`, 400);
304
+ }
305
+ if (isHelpRequest(argv.slice(1))) {
306
+ printCommandUsage(command);
307
+ process.exit(0);
308
+ }
309
+ const config = (0, config_1.loadConfig)();
310
+ const client = commandRequiresDaemon(command)
311
+ ? await (0, daemon_1.createHealthyDaemonClient)(config)
312
+ : {
313
+ transport: {
314
+ kind: "http",
315
+ host: config.daemonHost,
316
+ port: config.daemonPort
317
+ },
318
+ async request() {
319
+ throw new errors_1.AppError("DAEMON_UNREACHABLE", "This command should not call the daemon client", 500);
320
+ }
321
+ };
322
+ const context = {
323
+ config,
324
+ client,
325
+ stdout: process.stdout,
326
+ stderr: process.stderr,
327
+ cwd: process.cwd()
328
+ };
329
+ await runCommand(command, context, argv.slice(1));
330
+ }
331
+ if (require.main === module) {
332
+ main().catch((error) => {
333
+ process.stderr.write(`${(0, errors_1.formatErrorLine)(error)}\n`);
334
+ process.exit(error instanceof errors_1.AppError ? 1 : 1);
335
+ });
336
+ }
@@ -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,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-web-access 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,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-web-access 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,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,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,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,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-web-access 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,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,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-web-access 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,53 @@
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
+ if (report.currentProjectRoot) {
19
+ context.stdout.write(`currentProjectRoot=${report.currentProjectRoot}\n`);
20
+ }
21
+ if (report.currentVersion) {
22
+ context.stdout.write(`currentVersion=${report.currentVersion}\n`);
23
+ }
24
+ for (const transport of report.transports) {
25
+ const parts = [`transport=${transport.label}`, `reachable=${transport.reachable}`];
26
+ if (transport.pid !== undefined) {
27
+ parts.push(`pid=${transport.pid}`);
28
+ }
29
+ if (transport.projectRoot) {
30
+ parts.push(`projectRoot=${transport.projectRoot}`);
31
+ }
32
+ if (transport.version) {
33
+ parts.push(`version=${transport.version}`);
34
+ }
35
+ if (transport.startedAt) {
36
+ parts.push(`startedAt=${transport.startedAt}`);
37
+ }
38
+ if (transport.matchesCurrentBuild !== undefined) {
39
+ parts.push(`matchesCurrentBuild=${transport.matchesCurrentBuild}`);
40
+ }
41
+ context.stdout.write(`${parts.join(" ")}\n`);
42
+ }
43
+ }
44
+ async function runDoctorCommand(context, argv) {
45
+ const parsed = (0, utils_1.parseArgs)(argv);
46
+ const json = (0, utils_1.getFlagBoolean)(parsed, "json");
47
+ const report = await (0, daemon_1.inspectDaemon)(context.config);
48
+ if (json) {
49
+ writeJson(context, report);
50
+ return;
51
+ }
52
+ writeDoctorReport(context, report);
53
+ }
@@ -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-web-access 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,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-web-access 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
+ }