@framers/agentos-ext-browser-automation 0.2.0 → 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 (143) hide show
  1. package/README.md +91 -0
  2. package/dist/BrowserService.js +9 -45
  3. package/dist/BrowserService.js.map +1 -1
  4. package/dist/attach/AttachController.d.ts +54 -0
  5. package/dist/attach/AttachController.d.ts.map +1 -1
  6. package/dist/attach/AttachController.js +129 -41
  7. package/dist/attach/AttachController.js.map +1 -1
  8. package/dist/attach/backends/jxa.d.ts.map +1 -1
  9. package/dist/attach/backends/jxa.js +35 -62
  10. package/dist/attach/backends/jxa.js.map +1 -1
  11. package/dist/attach/backends/raw-cdp.d.ts +14 -0
  12. package/dist/attach/backends/raw-cdp.d.ts.map +1 -1
  13. package/dist/attach/backends/raw-cdp.js +66 -35
  14. package/dist/attach/backends/raw-cdp.js.map +1 -1
  15. package/dist/attach/daemon/client.d.ts +10 -0
  16. package/dist/attach/daemon/client.d.ts.map +1 -1
  17. package/dist/attach/daemon/client.js +34 -23
  18. package/dist/attach/daemon/client.js.map +1 -1
  19. package/dist/attach/daemon/daemon-lock.js +14 -17
  20. package/dist/attach/daemon/daemon-lock.js.map +1 -1
  21. package/dist/attach/daemon/daemon-main.d.ts +11 -0
  22. package/dist/attach/daemon/daemon-main.d.ts.map +1 -1
  23. package/dist/attach/daemon/daemon-main.js +39 -18
  24. package/dist/attach/daemon/daemon-main.js.map +1 -1
  25. package/dist/attach/daemon/daemon.d.ts.map +1 -1
  26. package/dist/attach/daemon/daemon.js +49 -32
  27. package/dist/attach/daemon/daemon.js.map +1 -1
  28. package/dist/attach/daemon/index.js +7 -25
  29. package/dist/attach/daemon/index.js.map +1 -1
  30. package/dist/attach/daemon/protocol.d.ts +1 -1
  31. package/dist/attach/daemon/protocol.d.ts.map +1 -1
  32. package/dist/attach/daemon/protocol.js +33 -45
  33. package/dist/attach/daemon/protocol.js.map +1 -1
  34. package/dist/attach/daemon/runner.js +1 -4
  35. package/dist/attach/daemon/runner.js.map +1 -1
  36. package/dist/attach/daemon/surface.d.ts +5 -0
  37. package/dist/attach/daemon/surface.d.ts.map +1 -1
  38. package/dist/attach/daemon/surface.js +16 -14
  39. package/dist/attach/daemon/surface.js.map +1 -1
  40. package/dist/attach/devtools-port.js +1 -4
  41. package/dist/attach/devtools-port.js.map +1 -1
  42. package/dist/attach/errors.js +4 -9
  43. package/dist/attach/errors.js.map +1 -1
  44. package/dist/attach/evidence.d.ts +64 -0
  45. package/dist/attach/evidence.d.ts.map +1 -0
  46. package/dist/attach/evidence.js +269 -0
  47. package/dist/attach/evidence.js.map +1 -0
  48. package/dist/attach/lease.js +18 -23
  49. package/dist/attach/lease.js.map +1 -1
  50. package/dist/attach/singleton-lock.js +1 -4
  51. package/dist/attach/singleton-lock.js.map +1 -1
  52. package/dist/attach/state.js +6 -13
  53. package/dist/attach/state.js.map +1 -1
  54. package/dist/attach/tools.d.ts +42 -2
  55. package/dist/attach/tools.d.ts.map +1 -1
  56. package/dist/attach/tools.js +124 -88
  57. package/dist/attach/tools.js.map +1 -1
  58. package/dist/attach/url-policy.js +2 -6
  59. package/dist/attach/url-policy.js.map +1 -1
  60. package/dist/attach.js +7 -23
  61. package/dist/attach.js.map +1 -1
  62. package/dist/captcha/CaptchaSolver.js +4 -7
  63. package/dist/captcha/CaptchaSolver.js.map +1 -1
  64. package/dist/captcha/ICaptchaProvider.js +1 -2
  65. package/dist/captcha/ICaptchaProvider.js.map +1 -1
  66. package/dist/index.d.ts +8 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +56 -75
  69. package/dist/index.js.map +1 -1
  70. package/dist/proxy/IProxyProvider.js +1 -2
  71. package/dist/proxy/IProxyProvider.js.map +1 -1
  72. package/dist/proxy/ProxyManager.js +7 -10
  73. package/dist/proxy/ProxyManager.js.map +1 -1
  74. package/dist/tools/ClickTool.js +17 -20
  75. package/dist/tools/ClickTool.js.map +1 -1
  76. package/dist/tools/EvaluateTool.js +16 -19
  77. package/dist/tools/EvaluateTool.js.map +1 -1
  78. package/dist/tools/ExtractTool.js +23 -26
  79. package/dist/tools/ExtractTool.js.map +1 -1
  80. package/dist/tools/FillTool.js +17 -20
  81. package/dist/tools/FillTool.js.map +1 -1
  82. package/dist/tools/NavigateTool.js +31 -34
  83. package/dist/tools/NavigateTool.js.map +1 -1
  84. package/dist/tools/PageSnapshotTool.js +13 -16
  85. package/dist/tools/PageSnapshotTool.js.map +1 -1
  86. package/dist/tools/ScreenshotTool.js +16 -19
  87. package/dist/tools/ScreenshotTool.js.map +1 -1
  88. package/dist/tools/ScrollTool.js +17 -20
  89. package/dist/tools/ScrollTool.js.map +1 -1
  90. package/dist/tools/SessionTool.js +24 -27
  91. package/dist/tools/SessionTool.js.map +1 -1
  92. package/dist/tools/WaitTool.js +22 -25
  93. package/dist/tools/WaitTool.js.map +1 -1
  94. package/manifest.json +1 -1
  95. package/package.json +5 -4
  96. package/dist/attach/__tests__/AttachController.test.d.ts +0 -2
  97. package/dist/attach/__tests__/AttachController.test.d.ts.map +0 -1
  98. package/dist/attach/__tests__/AttachController.test.js +0 -278
  99. package/dist/attach/__tests__/AttachController.test.js.map +0 -1
  100. package/dist/attach/__tests__/attach-primitives.test.d.ts +0 -2
  101. package/dist/attach/__tests__/attach-primitives.test.d.ts.map +0 -1
  102. package/dist/attach/__tests__/attach-primitives.test.js +0 -158
  103. package/dist/attach/__tests__/attach-primitives.test.js.map +0 -1
  104. package/dist/attach/__tests__/jxa-args.test.d.ts +0 -2
  105. package/dist/attach/__tests__/jxa-args.test.d.ts.map +0 -1
  106. package/dist/attach/__tests__/jxa-args.test.js +0 -37
  107. package/dist/attach/__tests__/jxa-args.test.js.map +0 -1
  108. package/dist/attach/__tests__/pack-registration.test.d.ts +0 -2
  109. package/dist/attach/__tests__/pack-registration.test.d.ts.map +0 -1
  110. package/dist/attach/__tests__/pack-registration.test.js +0 -34
  111. package/dist/attach/__tests__/pack-registration.test.js.map +0 -1
  112. package/dist/attach/__tests__/tools.test.d.ts +0 -2
  113. package/dist/attach/__tests__/tools.test.d.ts.map +0 -1
  114. package/dist/attach/__tests__/tools.test.js +0 -155
  115. package/dist/attach/__tests__/tools.test.js.map +0 -1
  116. package/dist/attach/backends/__tests__/raw-cdp.test.d.ts +0 -2
  117. package/dist/attach/backends/__tests__/raw-cdp.test.d.ts.map +0 -1
  118. package/dist/attach/backends/__tests__/raw-cdp.test.js +0 -133
  119. package/dist/attach/backends/__tests__/raw-cdp.test.js.map +0 -1
  120. package/dist/attach/daemon/__tests__/client.test.d.ts +0 -2
  121. package/dist/attach/daemon/__tests__/client.test.d.ts.map +0 -1
  122. package/dist/attach/daemon/__tests__/client.test.js +0 -58
  123. package/dist/attach/daemon/__tests__/client.test.js.map +0 -1
  124. package/dist/attach/daemon/__tests__/daemon-lock.test.d.ts +0 -2
  125. package/dist/attach/daemon/__tests__/daemon-lock.test.d.ts.map +0 -1
  126. package/dist/attach/daemon/__tests__/daemon-lock.test.js +0 -72
  127. package/dist/attach/daemon/__tests__/daemon-lock.test.js.map +0 -1
  128. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.d.ts +0 -2
  129. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.d.ts.map +0 -1
  130. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.js +0 -102
  131. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.js.map +0 -1
  132. package/dist/attach/daemon/__tests__/harness.d.ts +0 -44
  133. package/dist/attach/daemon/__tests__/harness.d.ts.map +0 -1
  134. package/dist/attach/daemon/__tests__/harness.js +0 -96
  135. package/dist/attach/daemon/__tests__/harness.js.map +0 -1
  136. package/dist/attach/daemon/__tests__/protocol.test.d.ts +0 -2
  137. package/dist/attach/daemon/__tests__/protocol.test.d.ts.map +0 -1
  138. package/dist/attach/daemon/__tests__/protocol.test.js +0 -71
  139. package/dist/attach/daemon/__tests__/protocol.test.js.map +0 -1
  140. package/dist/attach/daemon/__tests__/runner.test.d.ts +0 -2
  141. package/dist/attach/daemon/__tests__/runner.test.d.ts.map +0 -1
  142. package/dist/attach/daemon/__tests__/runner.test.js +0 -67
  143. package/dist/attach/daemon/__tests__/runner.test.js.map +0 -1
@@ -1,30 +1,12 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.daemonMain = void 0;
18
1
  /**
19
2
  * @fileoverview Barrel for the attach daemon lane (`./attach/daemon` subpath).
20
3
  * @module browser-automation/attach/daemon
21
4
  */
22
- __exportStar(require("./protocol.js"), exports);
23
- __exportStar(require("./daemon-lock.js"), exports);
24
- __exportStar(require("./daemon.js"), exports);
25
- __exportStar(require("./client.js"), exports);
26
- __exportStar(require("./surface.js"), exports);
27
- __exportStar(require("./runner.js"), exports);
28
- var daemon_main_js_1 = require("./daemon-main.js");
29
- Object.defineProperty(exports, "daemonMain", { enumerable: true, get: function () { return daemon_main_js_1.main; } });
5
+ export * from './protocol.js';
6
+ export * from './daemon-lock.js';
7
+ export * from './daemon.js';
8
+ export * from './client.js';
9
+ export * from './surface.js';
10
+ export * from './runner.js';
11
+ export { main as daemonMain } from './daemon-main.js';
30
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/attach/daemon/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,gDAA8B;AAC9B,mDAAiC;AACjC,8CAA4B;AAC5B,8CAA4B;AAC5B,+CAA6B;AAC7B,8CAA4B;AAC5B,mDAAsD;AAA7C,4GAAA,IAAI,OAAc"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/attach/daemon/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /** Daemon-routable operations. */
2
- export type AttachOp = 'ping' | 'status' | 'claim' | 'goto' | 'read' | 'extract' | 'eval' | 'release' | 'control' | 'quit';
2
+ export type AttachOp = 'ping' | 'status' | 'claim' | 'goto' | 'read' | 'extract' | 'eval' | 'screenshot' | 'release' | 'control' | 'quit';
3
3
  /** A command file body. */
4
4
  export interface AttachCmd {
5
5
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/attach/daemon/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/attach/daemon/protocol.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HEARTBEAT_STALE_MS = exports.STALE_FILE_MS = exports.DEFAULT_PID_FILE = exports.DEFAULT_IPC_DIR = void 0;
4
- exports.resolveIpcDir = resolveIpcDir;
5
- exports.newCmdId = newCmdId;
6
- exports.cmdPath = cmdPath;
7
- exports.respPath = respPath;
8
- exports.statusPath = statusPath;
9
- exports.writeAtomicJson = writeAtomicJson;
10
- exports.readJson = readJson;
11
- exports.listPendingCmds = listPendingCmds;
12
- exports.gcStale = gcStale;
13
1
  /**
14
2
  * @fileoverview File-queue IPC protocol for the attach daemon.
15
3
  *
@@ -25,64 +13,64 @@ exports.gcStale = gcStale;
25
13
  *
26
14
  * @module browser-automation/attach/daemon/protocol
27
15
  */
28
- const node_fs_1 = require("node:fs");
29
- const node_os_1 = require("node:os");
30
- const node_path_1 = require("node:path");
31
- const node_crypto_1 = require("node:crypto");
16
+ import { readFileSync, writeFileSync, renameSync, readdirSync, statSync, unlinkSync, mkdirSync } from 'node:fs';
17
+ import { homedir } from 'node:os';
18
+ import { join } from 'node:path';
19
+ import { randomUUID } from 'node:crypto';
32
20
  /** Default IPC directory (created 0700). */
33
- exports.DEFAULT_IPC_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.wunderland', 'attach', 'ipc');
21
+ export const DEFAULT_IPC_DIR = join(homedir(), '.wunderland', 'attach', 'ipc');
34
22
  /** Default daemon pidfile. */
35
- exports.DEFAULT_PID_FILE = (0, node_path_1.join)((0, node_os_1.homedir)(), '.wunderland', 'attach', 'daemon.pid');
23
+ export const DEFAULT_PID_FILE = join(homedir(), '.wunderland', 'attach', 'daemon.pid');
36
24
  /** cmd/resp files older than this are garbage-collected. */
37
- exports.STALE_FILE_MS = 10 * 60000;
25
+ export const STALE_FILE_MS = 10 * 60_000;
38
26
  /** status.json heartbeats older than this mark the daemon stale. */
39
- exports.HEARTBEAT_STALE_MS = 30000;
27
+ export const HEARTBEAT_STALE_MS = 30_000;
40
28
  /** Resolve the IPC dir from an explicit override or env, ensuring it exists 0700. */
41
- function resolveIpcDir(override, env = process.env) {
42
- const dir = override?.trim() || env.WUNDERLAND_ATTACH_IPC_DIR?.trim() || exports.DEFAULT_IPC_DIR;
43
- (0, node_fs_1.mkdirSync)(dir, { recursive: true, mode: 0o700 });
29
+ export function resolveIpcDir(override, env = process.env) {
30
+ const dir = override?.trim() || env.WUNDERLAND_ATTACH_IPC_DIR?.trim() || DEFAULT_IPC_DIR;
31
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
44
32
  return dir;
45
33
  }
46
34
  /** New string command id: `<client>-<epochMs>-<random8>`. */
47
- function newCmdId(client) {
48
- return `${client}-${Date.now()}-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`;
35
+ export function newCmdId(client) {
36
+ return `${client}-${Date.now()}-${randomUUID().slice(0, 8)}`;
49
37
  }
50
38
  /** Path of a command file. */
51
- function cmdPath(dir, id) {
52
- return (0, node_path_1.join)(dir, `cmd-${id}.json`);
39
+ export function cmdPath(dir, id) {
40
+ return join(dir, `cmd-${id}.json`);
53
41
  }
54
42
  /** Path of a response file. */
55
- function respPath(dir, id) {
56
- return (0, node_path_1.join)(dir, `resp-${id}.json`);
43
+ export function respPath(dir, id) {
44
+ return join(dir, `resp-${id}.json`);
57
45
  }
58
46
  /** Path of the daemon heartbeat file. */
59
- function statusPath(dir) {
60
- return (0, node_path_1.join)(dir, 'status.json');
47
+ export function statusPath(dir) {
48
+ return join(dir, 'status.json');
61
49
  }
62
50
  /** Write JSON via tmp-then-rename so readers never see a torn body. */
63
- function writeAtomicJson(file, value) {
51
+ export function writeAtomicJson(file, value) {
64
52
  const tmp = `${file}.${process.pid}.tmp`;
65
- (0, node_fs_1.writeFileSync)(tmp, JSON.stringify(value), { mode: 0o600 });
66
- (0, node_fs_1.renameSync)(tmp, file);
53
+ writeFileSync(tmp, JSON.stringify(value), { mode: 0o600 });
54
+ renameSync(tmp, file);
67
55
  }
68
56
  /** Read+parse JSON; undefined when missing or torn. */
69
- function readJson(file) {
57
+ export function readJson(file) {
70
58
  try {
71
- return JSON.parse((0, node_fs_1.readFileSync)(file, 'utf8'));
59
+ return JSON.parse(readFileSync(file, 'utf8'));
72
60
  }
73
61
  catch {
74
62
  return undefined;
75
63
  }
76
64
  }
77
65
  /** Pending command files, oldest first (mtime, then name for determinism). */
78
- function listPendingCmds(dir) {
66
+ export function listPendingCmds(dir) {
79
67
  const out = [];
80
- for (const name of (0, node_fs_1.readdirSync)(dir)) {
68
+ for (const name of readdirSync(dir)) {
81
69
  if (!name.startsWith('cmd-') || !name.endsWith('.json'))
82
70
  continue;
83
- const path = (0, node_path_1.join)(dir, name);
71
+ const path = join(dir, name);
84
72
  try {
85
- out.push({ id: name.slice(4, -5), path, mtimeMs: (0, node_fs_1.statSync)(path).mtimeMs });
73
+ out.push({ id: name.slice(4, -5), path, mtimeMs: statSync(path).mtimeMs });
86
74
  }
87
75
  catch {
88
76
  /* raced with GC or the consumer */
@@ -91,14 +79,14 @@ function listPendingCmds(dir) {
91
79
  return out.sort((a, b) => a.mtimeMs - b.mtimeMs || (a.id < b.id ? -1 : 1));
92
80
  }
93
81
  /** Delete cmd/resp files older than {@link STALE_FILE_MS} (pass `now` = Infinity to sweep all). */
94
- function gcStale(dir, now = Date.now()) {
95
- for (const name of (0, node_fs_1.readdirSync)(dir)) {
82
+ export function gcStale(dir, now = Date.now()) {
83
+ for (const name of readdirSync(dir)) {
96
84
  if (!/^(cmd|resp)-.*\.json$/.test(name))
97
85
  continue;
98
- const path = (0, node_path_1.join)(dir, name);
86
+ const path = join(dir, name);
99
87
  try {
100
- if (now - (0, node_fs_1.statSync)(path).mtimeMs > exports.STALE_FILE_MS)
101
- (0, node_fs_1.unlinkSync)(path);
88
+ if (now - statSync(path).mtimeMs > STALE_FILE_MS)
89
+ unlinkSync(path);
102
90
  }
103
91
  catch {
104
92
  /* raced with the consumer */
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/attach/daemon/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/attach/daemon/protocol.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runAttachScript = runAttachScript;
4
1
  const ALLOWED = new Set(['goto', 'read', 'extract', 'wait']);
5
2
  /**
6
3
  * Execute `plan` against a live daemon via `client`. Validates the op
7
4
  * whitelist up front (an eval step is a hard error, not a skipped step),
8
5
  * aborts on the first failing step, and always releases the claim.
9
6
  */
10
- async function runAttachScript(plan, client) {
7
+ export async function runAttachScript(plan, client) {
11
8
  if (!plan || !Array.isArray(plan.steps))
12
9
  throw new Error('attach run plan needs a steps array');
13
10
  for (const [i, s] of plan.steps.entries()) {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/attach/daemon/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/attach/daemon/runner.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,11 @@ export declare class DaemonAttachSurface implements AttachSurface {
21
21
  goto(url: string): Promise<string>;
22
22
  /** Read visible text from the agent tab. */
23
23
  read(selector?: string, maxChars?: number): Promise<string>;
24
+ /** Capture a PNG of the agent tab to `path` (CDP transport behind the daemon). */
25
+ screenshot(path: string, fullPage?: boolean): Promise<{
26
+ path: string;
27
+ bytes: number;
28
+ }>;
24
29
  /** Give up driving rights; the daemon keeps its held session. */
25
30
  detach(): Promise<void>;
26
31
  pause(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../../src/attach/daemon/surface.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAI5D,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAID,wBAAwB;AACxB,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,IAAI,GAAE,0BAA+B;IAKjD,wEAAwE;IACxE,MAAM,IAAI,OAAO;IAKjB,4EAA4E;IACtE,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ/B,4DAA4D;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,4CAA4C;IACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE,iEAAiE;IAC3D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAMd,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;YAMd,eAAe;CAmB9B"}
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../../src/attach/daemon/surface.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAI5D,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAID,wBAAwB;AACxB,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,IAAI,GAAE,0BAA+B;IAKjD,wEAAwE;IACxE,MAAM,IAAI,OAAO;IAKjB,4EAA4E;IACtE,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ/B,4DAA4D;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,4CAA4C;IACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE,kFAAkF;IAC5E,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5F,iEAAiE;IAC3D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAMd,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;YAMd,eAAe;CAmB9B"}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DaemonAttachSurface = void 0;
4
1
  /**
5
2
  * @fileoverview Daemon-backed implementation of the tool-facing AttachSurface.
6
3
  *
@@ -12,17 +9,19 @@ exports.DaemonAttachSurface = void 0;
12
9
  *
13
10
  * @module browser-automation/attach/daemon/surface
14
11
  */
15
- const node_child_process_1 = require("node:child_process");
16
- const node_url_1 = require("node:url");
17
- const errors_js_1 = require("../errors.js");
18
- const client_js_1 = require("./client.js");
12
+ import { spawn } from 'node:child_process';
13
+ import { fileURLToPath } from 'node:url';
14
+ import { AttachError } from '../errors.js';
15
+ import { AttachDaemonClient } from './client.js';
19
16
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
20
17
  /** See fileoverview. */
21
- class DaemonAttachSurface {
18
+ export class DaemonAttachSurface {
19
+ client;
20
+ opts;
21
+ autostartAttempted = false;
22
22
  constructor(opts = {}) {
23
- this.autostartAttempted = false;
24
23
  this.opts = opts;
25
- this.client = new client_js_1.AttachDaemonClient({ ipcDir: opts.ipcDir, client: 'agent-tools' });
24
+ this.client = new AttachDaemonClient({ ipcDir: opts.ipcDir, client: 'agent-tools' });
26
25
  }
27
26
  /** Synchronous snapshot from status.json (tools call status() sync). */
28
27
  status() {
@@ -45,6 +44,10 @@ class DaemonAttachSurface {
45
44
  async read(selector, maxChars) {
46
45
  return (await this.client.read({ selector, maxChars })).text;
47
46
  }
47
+ /** Capture a PNG of the agent tab to `path` (CDP transport behind the daemon). */
48
+ async screenshot(path, fullPage) {
49
+ return this.client.screenshot(path, fullPage);
50
+ }
48
51
  /** Give up driving rights; the daemon keeps its held session. */
49
52
  async detach() {
50
53
  await this.client.release();
@@ -67,8 +70,8 @@ class DaemonAttachSurface {
67
70
  });
68
71
  }
69
72
  async spawnDaemonOnce() {
70
- const entry = (0, node_url_1.fileURLToPath)(new URL('./daemon-main.js', import.meta.url));
71
- (0, node_child_process_1.spawn)(process.execPath, [entry], {
73
+ const entry = fileURLToPath(new URL('./daemon-main.js', import.meta.url));
74
+ spawn(process.execPath, [entry], {
72
75
  detached: true,
73
76
  stdio: 'ignore',
74
77
  env: { ...(this.opts.env ?? process.env) },
@@ -82,8 +85,7 @@ class DaemonAttachSurface {
82
85
  if (s?.state === 'failed')
83
86
  break;
84
87
  }
85
- throw new errors_js_1.AttachError('DAEMON_UNAVAILABLE', `autostart did not reach connected: ${this.client.statusFile()?.lastError ?? 'no status'}`);
88
+ throw new AttachError('DAEMON_UNAVAILABLE', `autostart did not reach connected: ${this.client.statusFile()?.lastError ?? 'no status'}`);
86
89
  }
87
90
  }
88
- exports.DaemonAttachSurface = DaemonAttachSurface;
89
91
  //# sourceMappingURL=surface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"surface.js","sourceRoot":"","sources":["../../../src/attach/daemon/surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../../../src/attach/daemon/surface.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * @fileoverview Parser for Chrome's `DevToolsActivePort` discovery file.
4
3
  *
@@ -16,8 +15,6 @@
16
15
  *
17
16
  * @module browser-automation/attach/devtools-port
18
17
  */
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.parseDevToolsActivePort = parseDevToolsActivePort;
21
18
  /**
22
19
  * Parse the raw text of a `DevToolsActivePort` file.
23
20
  *
@@ -27,7 +24,7 @@ exports.parseDevToolsActivePort = parseDevToolsActivePort;
27
24
  * a non-numeric/out-of-range port, or a ws path that is not a
28
25
  * `/devtools/browser/…` browser-target path.
29
26
  */
30
- function parseDevToolsActivePort(text) {
27
+ export function parseDevToolsActivePort(text) {
31
28
  const lines = String(text)
32
29
  .split('\n')
33
30
  .map((l) => l.trim())
@@ -1 +1 @@
1
- {"version":3,"file":"devtools-port.js","sourceRoot":"","sources":["../../src/attach/devtools-port.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAqBH,0DAmBC;AA5BD;;;;;;;;GAQG;AACH,SAAgB,uBAAuB,CAAC,IAAY;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,+CAA+C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,qDAAqD,MAAM,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,0EAA0E;IAC1E,+DAA+D;IAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"devtools-port.js","sourceRoot":"","sources":["../../src/attach/devtools-port.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,+CAA+C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,qDAAqD,MAAM,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,0EAA0E;IAC1E,+DAA+D;IAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC;AACpE,CAAC"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * @fileoverview Structured errors + diagnostic redaction for the attach lane.
4
3
  *
@@ -10,19 +9,15 @@
10
9
  *
11
10
  * @module browser-automation/attach/errors
12
11
  */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.AttachError = void 0;
15
- exports.redactDiagnostic = redactDiagnostic;
16
- exports.toStructuredError = toStructuredError;
17
12
  /** Error subclass carrying a structured code through throw sites. */
18
- class AttachError extends Error {
13
+ export class AttachError extends Error {
14
+ code;
19
15
  constructor(code, message) {
20
16
  super(message);
21
17
  this.name = 'AttachError';
22
18
  this.code = code;
23
19
  }
24
20
  }
25
- exports.AttachError = AttachError;
26
21
  const CREDENTIAL_PATTERNS = [
27
22
  [/(token|secret|password|passwd|apikey|api_key|auth|bearer|session|cookie)(["']?\s*[:=]\s*["']?)[^\s"'&;]+/gi, '$1$2[redacted]'],
28
23
  [/eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g, '[redacted-jwt]'],
@@ -35,7 +30,7 @@ const CREDENTIAL_PATTERNS = [
35
30
  * @param text Raw diagnostic text.
36
31
  * @returns The text with tokens/keys/secrets masked.
37
32
  */
38
- function redactDiagnostic(text) {
33
+ export function redactDiagnostic(text) {
39
34
  let out = String(text ?? '');
40
35
  for (const [re, rep] of CREDENTIAL_PATTERNS)
41
36
  out = out.replace(re, rep);
@@ -58,7 +53,7 @@ const CODE_MATCHERS = [
58
53
  * message. An {@link AttachError} keeps its explicit code; everything else is
59
54
  * classified by message pattern, defaulting to `UNKNOWN`.
60
55
  */
61
- function toStructuredError(err) {
56
+ export function toStructuredError(err) {
62
57
  if (err instanceof AttachError) {
63
58
  return { code: err.code, message: redactDiagnostic(err.message) };
64
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/attach/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAkDH,4CAIC;AAoBD,8CASC;AAxDD,qEAAqE;AACrE,MAAa,WAAY,SAAQ,KAAK;IAEpC,YAAY,IAAqB,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAPD,kCAOC;AAED,MAAM,mBAAmB,GAA4B;IACnD,CAAC,4GAA4G,EAAE,gBAAgB,CAAC;IAChI,CAAC,6DAA6D,EAAE,gBAAgB,CAAC;IACjF,CAAC,uCAAuC,EAAE,gBAAgB,CAAC;IAC3D,CAAC,kEAAkE,EAAE,mBAAmB,CAAC;CAC1F,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,mBAAmB;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,aAAa,GAAqC;IACtD,CAAC,+DAA+D,EAAE,aAAa,CAAC;IAChF,CAAC,wDAAwD,EAAE,iBAAiB,CAAC;IAC7E,CAAC,+CAA+C,EAAE,aAAa,CAAC;IAChE,CAAC,oDAAoD,EAAE,sBAAsB,CAAC;IAC9E,CAAC,kCAAkC,EAAE,kBAAkB,CAAC;IACxD,CAAC,qDAAqD,EAAE,YAAY,CAAC;IACrE,CAAC,sDAAsD,EAAE,aAAa,CAAC;IACvE,CAAC,6BAA6B,EAAE,gBAAgB,CAAC;IACjD,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,4CAA4C,EAAE,iBAAiB,CAAC;CAClE,CAAC;AAEF;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACvC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/attach/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA2BH,qEAAqE;AACrE,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IAC/B,YAAY,IAAqB,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,mBAAmB,GAA4B;IACnD,CAAC,4GAA4G,EAAE,gBAAgB,CAAC;IAChI,CAAC,6DAA6D,EAAE,gBAAgB,CAAC;IACjF,CAAC,uCAAuC,EAAE,gBAAgB,CAAC;IAC3D,CAAC,kEAAkE,EAAE,mBAAmB,CAAC;CAC1F,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,mBAAmB;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,aAAa,GAAqC;IACtD,CAAC,+DAA+D,EAAE,aAAa,CAAC;IAChF,CAAC,wDAAwD,EAAE,iBAAiB,CAAC;IAC7E,CAAC,+CAA+C,EAAE,aAAa,CAAC;IAChE,CAAC,oDAAoD,EAAE,sBAAsB,CAAC;IAC9E,CAAC,kCAAkC,EAAE,kBAAkB,CAAC;IACxD,CAAC,qDAAqD,EAAE,YAAY,CAAC;IACrE,CAAC,sDAAsD,EAAE,aAAa,CAAC;IACvE,CAAC,6BAA6B,EAAE,gBAAgB,CAAC;IACjD,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,4CAA4C,EAAE,iBAAiB,CAAC;CAClE,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACvC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,64 @@
1
+ /** The evidence directory when none is configured. */
2
+ export declare const DEFAULT_EVIDENCE_DIR: string;
3
+ /** A directory as it was checked: its path and its identity on the file system. */
4
+ interface CheckedDirectory {
5
+ path: string;
6
+ dev: bigint;
7
+ ino: bigint;
8
+ }
9
+ /** A screenshot's file, prepared by {@link prepareEvidenceFile}. */
10
+ export interface PreparedEvidence {
11
+ /** The file to create, inside the evidence directory's real path. */
12
+ target: string;
13
+ /** The evidence directory, then each directory in it on the way to the file, as checked. */
14
+ directories: readonly CheckedDirectory[];
15
+ }
16
+ /**
17
+ * The path a screenshot at `filePath` would be written to, for a dry run:
18
+ * the same reading of the path as {@link prepareEvidenceFile}, with nothing
19
+ * made on the disk. The evidence directory is named by its real path when it
20
+ * exists, as a written screenshot's path is.
21
+ *
22
+ * @param evidenceDir - The configured evidence directory, or `undefined` for the default.
23
+ * @param filePath - The path asked for, relative to the directory or absolute inside it.
24
+ * @throws POLICY_BLOCKED when the path names no file or leaves the directory.
25
+ */
26
+ export declare function plannedEvidencePath(evidenceDir: string | undefined, filePath: string): Promise<string>;
27
+ /**
28
+ * Prepares the file a screenshot is written to, before the page is captured.
29
+ * The evidence directory is made when missing (mode 0700) and read by its
30
+ * real path, so a link swapped in for it later moves nothing. Each directory
31
+ * from it to the file is made (mode 0700) or checked: a directory, not a
32
+ * link, private to this user, with no directory above the evidence directory
33
+ * that another user can change. A file already at the path is refused.
34
+ *
35
+ * @param evidenceDir - The configured evidence directory, or `undefined` for the default.
36
+ * @param filePath - The path asked for, relative to the directory or absolute inside it.
37
+ * @throws POLICY_BLOCKED for a path that names no file, leaves the directory,
38
+ * passes through a link or a file, or names something that exists, and for
39
+ * a directory that is not private to this user.
40
+ * @throws UNKNOWN when the directory cannot take a new file (its mode, or a
41
+ * file system mounted read-only).
42
+ */
43
+ export declare function prepareEvidenceFile(evidenceDir: string | undefined, filePath: string): Promise<PreparedEvidence>;
44
+ /**
45
+ * Creates the prepared file and writes `bytes` to it.
46
+ *
47
+ * The directories are checked to be the ones prepared, the file is created
48
+ * with flag `wx` (it never replaces a file, and a link at its name is not
49
+ * followed), and with the file open the directories are checked again and the
50
+ * file is checked to be the one at its path, with no other name. Only then
51
+ * are the bytes written, through the handle. Node has no `openat`, so this is
52
+ * the order that keeps an image out of a directory swapped in while the page
53
+ * was captured: a file created in the wrong place stays empty.
54
+ *
55
+ * A write that fails leaves no partial image: the file is emptied through
56
+ * its handle, and removed when it is still the file at its path. A close
57
+ * that reports the write failed is an error of the call too, and the file is
58
+ * removed by the same rule.
59
+ *
60
+ * @throws POLICY_BLOCKED when a file is already there or a directory changed.
61
+ */
62
+ export declare function writeEvidenceFile(prepared: PreparedEvidence, bytes: Buffer): Promise<void>;
63
+ export {};
64
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/attach/evidence.ts"],"names":[],"mappings":"AAiCA,sDAAsD;AACtD,eAAO,MAAM,oBAAoB,QAAoD,CAAC;AAEtF,mFAAmF;AACnF,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC1C;AA2GD;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK5G;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BtH;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhG"}