@framers/agentos-ext-browser-automation 0.1.0 → 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.
- package/dist/attach/AttachController.d.ts +183 -0
- package/dist/attach/AttachController.d.ts.map +1 -0
- package/dist/attach/AttachController.js +283 -0
- package/dist/attach/AttachController.js.map +1 -0
- package/dist/attach/__tests__/AttachController.test.d.ts +2 -0
- package/dist/attach/__tests__/AttachController.test.d.ts.map +1 -0
- package/dist/attach/__tests__/AttachController.test.js +278 -0
- package/dist/attach/__tests__/AttachController.test.js.map +1 -0
- package/dist/attach/__tests__/attach-primitives.test.d.ts +2 -0
- package/dist/attach/__tests__/attach-primitives.test.d.ts.map +1 -0
- package/dist/attach/__tests__/attach-primitives.test.js +158 -0
- package/dist/attach/__tests__/attach-primitives.test.js.map +1 -0
- package/dist/attach/__tests__/jxa-args.test.d.ts +2 -0
- package/dist/attach/__tests__/jxa-args.test.d.ts.map +1 -0
- package/dist/attach/__tests__/jxa-args.test.js +37 -0
- package/dist/attach/__tests__/jxa-args.test.js.map +1 -0
- package/dist/attach/__tests__/pack-registration.test.d.ts +2 -0
- package/dist/attach/__tests__/pack-registration.test.d.ts.map +1 -0
- package/dist/attach/__tests__/pack-registration.test.js +34 -0
- package/dist/attach/__tests__/pack-registration.test.js.map +1 -0
- package/dist/attach/__tests__/tools.test.d.ts +2 -0
- package/dist/attach/__tests__/tools.test.d.ts.map +1 -0
- package/dist/attach/__tests__/tools.test.js +155 -0
- package/dist/attach/__tests__/tools.test.js.map +1 -0
- package/dist/attach/backends/__tests__/raw-cdp.test.d.ts +2 -0
- package/dist/attach/backends/__tests__/raw-cdp.test.d.ts.map +1 -0
- package/dist/attach/backends/__tests__/raw-cdp.test.js +133 -0
- package/dist/attach/backends/__tests__/raw-cdp.test.js.map +1 -0
- package/dist/attach/backends/jxa.d.ts +39 -0
- package/dist/attach/backends/jxa.d.ts.map +1 -0
- package/dist/attach/backends/jxa.js +188 -0
- package/dist/attach/backends/jxa.js.map +1 -0
- package/dist/attach/backends/raw-cdp.d.ts +53 -0
- package/dist/attach/backends/raw-cdp.d.ts.map +1 -0
- package/dist/attach/backends/raw-cdp.js +216 -0
- package/dist/attach/backends/raw-cdp.js.map +1 -0
- package/dist/attach/daemon/__tests__/client.test.d.ts +2 -0
- package/dist/attach/daemon/__tests__/client.test.d.ts.map +1 -0
- package/dist/attach/daemon/__tests__/client.test.js +58 -0
- package/dist/attach/daemon/__tests__/client.test.js.map +1 -0
- package/dist/attach/daemon/__tests__/daemon-lock.test.d.ts +2 -0
- package/dist/attach/daemon/__tests__/daemon-lock.test.d.ts.map +1 -0
- package/dist/attach/daemon/__tests__/daemon-lock.test.js +72 -0
- package/dist/attach/daemon/__tests__/daemon-lock.test.js.map +1 -0
- package/dist/attach/daemon/__tests__/daemon-loop.integration.test.d.ts +2 -0
- package/dist/attach/daemon/__tests__/daemon-loop.integration.test.d.ts.map +1 -0
- package/dist/attach/daemon/__tests__/daemon-loop.integration.test.js +102 -0
- package/dist/attach/daemon/__tests__/daemon-loop.integration.test.js.map +1 -0
- package/dist/attach/daemon/__tests__/harness.d.ts +44 -0
- package/dist/attach/daemon/__tests__/harness.d.ts.map +1 -0
- package/dist/attach/daemon/__tests__/harness.js +96 -0
- package/dist/attach/daemon/__tests__/harness.js.map +1 -0
- package/dist/attach/daemon/__tests__/protocol.test.d.ts +2 -0
- package/dist/attach/daemon/__tests__/protocol.test.d.ts.map +1 -0
- package/dist/attach/daemon/__tests__/protocol.test.js +71 -0
- package/dist/attach/daemon/__tests__/protocol.test.js.map +1 -0
- package/dist/attach/daemon/__tests__/runner.test.d.ts +2 -0
- package/dist/attach/daemon/__tests__/runner.test.d.ts.map +1 -0
- package/dist/attach/daemon/__tests__/runner.test.js +67 -0
- package/dist/attach/daemon/__tests__/runner.test.js.map +1 -0
- package/dist/attach/daemon/client.d.ts +64 -0
- package/dist/attach/daemon/client.d.ts.map +1 -0
- package/dist/attach/daemon/client.js +120 -0
- package/dist/attach/daemon/client.js.map +1 -0
- package/dist/attach/daemon/daemon-lock.d.ts +19 -0
- package/dist/attach/daemon/daemon-lock.d.ts.map +1 -0
- package/dist/attach/daemon/daemon-lock.js +87 -0
- package/dist/attach/daemon/daemon-lock.js.map +1 -0
- package/dist/attach/daemon/daemon-main.d.ts +6 -0
- package/dist/attach/daemon/daemon-main.d.ts.map +1 -0
- package/dist/attach/daemon/daemon-main.js +80 -0
- package/dist/attach/daemon/daemon-main.js.map +1 -0
- package/dist/attach/daemon/daemon.d.ts +52 -0
- package/dist/attach/daemon/daemon.d.ts.map +1 -0
- package/dist/attach/daemon/daemon.js +264 -0
- package/dist/attach/daemon/daemon.js.map +1 -0
- package/dist/attach/daemon/index.d.ts +12 -0
- package/dist/attach/daemon/index.d.ts.map +1 -0
- package/dist/attach/daemon/index.js +30 -0
- package/dist/attach/daemon/index.js.map +1 -0
- package/dist/attach/daemon/protocol.d.ts +69 -0
- package/dist/attach/daemon/protocol.d.ts.map +1 -0
- package/dist/attach/daemon/protocol.js +108 -0
- package/dist/attach/daemon/protocol.js.map +1 -0
- package/dist/attach/daemon/runner.d.ts +64 -0
- package/dist/attach/daemon/runner.d.ts.map +1 -0
- package/dist/attach/daemon/runner.js +60 -0
- package/dist/attach/daemon/runner.js.map +1 -0
- package/dist/attach/daemon/surface.d.ts +31 -0
- package/dist/attach/daemon/surface.d.ts.map +1 -0
- package/dist/attach/daemon/surface.js +89 -0
- package/dist/attach/daemon/surface.js.map +1 -0
- package/dist/attach/devtools-port.d.ts +37 -0
- package/dist/attach/devtools-port.d.ts.map +1 -0
- package/dist/attach/devtools-port.js +50 -0
- package/dist/attach/devtools-port.js.map +1 -0
- package/dist/attach/errors.d.ts +38 -0
- package/dist/attach/errors.d.ts.map +1 -0
- package/dist/attach/errors.js +72 -0
- package/dist/attach/errors.js.map +1 -0
- package/dist/attach/lease.d.ts +43 -0
- package/dist/attach/lease.d.ts.map +1 -0
- package/dist/attach/lease.js +92 -0
- package/dist/attach/lease.js.map +1 -0
- package/dist/attach/singleton-lock.d.ts +21 -0
- package/dist/attach/singleton-lock.d.ts.map +1 -0
- package/dist/attach/singleton-lock.js +30 -0
- package/dist/attach/singleton-lock.js.map +1 -0
- package/dist/attach/state.d.ts +31 -0
- package/dist/attach/state.d.ts.map +1 -0
- package/dist/attach/state.js +78 -0
- package/dist/attach/state.js.map +1 -0
- package/dist/attach/tools.d.ts +208 -0
- package/dist/attach/tools.d.ts.map +1 -0
- package/dist/attach/tools.js +195 -0
- package/dist/attach/tools.js.map +1 -0
- package/dist/attach/url-policy.d.ts +41 -0
- package/dist/attach/url-policy.d.ts.map +1 -0
- package/dist/attach/url-policy.js +59 -0
- package/dist/attach/url-policy.js.map +1 -0
- package/dist/attach.d.ts +18 -0
- package/dist/attach.d.ts.map +1 -0
- package/dist/attach.js +34 -0
- package/dist/attach.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/package.json +22 -7
|
@@ -0,0 +1,278 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const vitest_1 = require("vitest");
|
|
37
|
+
const node_fs_1 = require("node:fs");
|
|
38
|
+
const node_os_1 = require("node:os");
|
|
39
|
+
const node_path_1 = require("node:path");
|
|
40
|
+
const AttachController_js_1 = require("../AttachController.js");
|
|
41
|
+
/**
|
|
42
|
+
* Spy backend that records every method call. Its type deliberately mirrors
|
|
43
|
+
* AttachBackend, which has NO browser/tab close surface — the core F10 claim
|
|
44
|
+
* is proven structurally plus asserted behaviorally here.
|
|
45
|
+
*/
|
|
46
|
+
function makeBackend(overrides = {}) {
|
|
47
|
+
const calls = [];
|
|
48
|
+
const backend = {
|
|
49
|
+
kind: 'jxa',
|
|
50
|
+
async connect() {
|
|
51
|
+
calls.push('connect');
|
|
52
|
+
},
|
|
53
|
+
async disconnectTransport() {
|
|
54
|
+
calls.push('disconnectTransport');
|
|
55
|
+
},
|
|
56
|
+
async claimAgentTab() {
|
|
57
|
+
calls.push('claimAgentTab');
|
|
58
|
+
return 'w1 t1';
|
|
59
|
+
},
|
|
60
|
+
async probeIdentity() {
|
|
61
|
+
calls.push('probeIdentity');
|
|
62
|
+
return 'Inbox - johnny@example.com - Gmail';
|
|
63
|
+
},
|
|
64
|
+
async gotoTab(_tab, url) {
|
|
65
|
+
calls.push(`goto:${url}`);
|
|
66
|
+
return url;
|
|
67
|
+
},
|
|
68
|
+
async readTab() {
|
|
69
|
+
calls.push('read');
|
|
70
|
+
return 'text';
|
|
71
|
+
},
|
|
72
|
+
...overrides,
|
|
73
|
+
};
|
|
74
|
+
return { backend, calls };
|
|
75
|
+
}
|
|
76
|
+
let leaseFile;
|
|
77
|
+
(0, vitest_1.beforeEach)(() => {
|
|
78
|
+
leaseFile = (0, node_path_1.join)((0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-ctl-')), 'attach.lease');
|
|
79
|
+
});
|
|
80
|
+
function controller(backend, extra = {}) {
|
|
81
|
+
return new AttachController_js_1.AttachController({
|
|
82
|
+
backend,
|
|
83
|
+
leaseFile,
|
|
84
|
+
expectedIdentity: 'johnny@example.com',
|
|
85
|
+
...extra,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
(0, vitest_1.describe)('AttachController', () => {
|
|
89
|
+
(0, vitest_1.it)('claims: lease → connect → identity probe → agent tab', async () => {
|
|
90
|
+
const { backend, calls } = makeBackend();
|
|
91
|
+
const c = controller(backend);
|
|
92
|
+
const st = await c.claim();
|
|
93
|
+
(0, vitest_1.expect)(st.state).toBe('ready');
|
|
94
|
+
(0, vitest_1.expect)(st.leaseHeld).toBe(true);
|
|
95
|
+
(0, vitest_1.expect)(st.agentTab).toBe('w1 t1');
|
|
96
|
+
(0, vitest_1.expect)(calls).toEqual(['connect', 'probeIdentity', 'claimAgentTab']);
|
|
97
|
+
await c.detach();
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.it)('ABORTS with PROFILE_MISMATCH instead of proceeding on wrong identity (never launches)', async () => {
|
|
100
|
+
const { backend, calls } = makeBackend({
|
|
101
|
+
async probeIdentity() {
|
|
102
|
+
calls.push('probeIdentity');
|
|
103
|
+
return 'someone-else@example.com session';
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
const { backend: b2, calls: c2 } = { backend, calls };
|
|
107
|
+
const c = controller(b2);
|
|
108
|
+
await (0, vitest_1.expect)(c.claim()).rejects.toMatchObject({ code: 'PROFILE_MISMATCH' });
|
|
109
|
+
(0, vitest_1.expect)(c2).not.toContain('claimAgentTab'); // no tab was touched
|
|
110
|
+
(0, vitest_1.expect)(c.status().leaseHeld).toBe(false); // lease released on failure
|
|
111
|
+
});
|
|
112
|
+
(0, vitest_1.it)('policy-blocks bad navigation before touching the backend', async () => {
|
|
113
|
+
const { backend, calls } = makeBackend();
|
|
114
|
+
const c = controller(backend);
|
|
115
|
+
await c.claim();
|
|
116
|
+
await (0, vitest_1.expect)(c.goto('file:///etc/passwd')).rejects.toMatchObject({ code: 'POLICY_BLOCKED' });
|
|
117
|
+
(0, vitest_1.expect)(calls.filter((x) => x.startsWith('goto:'))).toHaveLength(0);
|
|
118
|
+
await c.detach();
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('revalidates redirects: an https→http downgrade fails the op', async () => {
|
|
121
|
+
const { backend } = makeBackend({
|
|
122
|
+
async gotoTab() {
|
|
123
|
+
return 'http://downgraded.example.com/';
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
const c = controller(backend);
|
|
127
|
+
await c.claim();
|
|
128
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/')).rejects.toMatchObject({ code: 'POLICY_BLOCKED' });
|
|
129
|
+
await c.detach();
|
|
130
|
+
});
|
|
131
|
+
(0, vitest_1.it)('detach closes ONLY the transport and releases the lease — no close surface exists', async () => {
|
|
132
|
+
const { backend, calls } = makeBackend();
|
|
133
|
+
const c = controller(backend);
|
|
134
|
+
await c.claim();
|
|
135
|
+
await c.detach();
|
|
136
|
+
(0, vitest_1.expect)(calls).toContain('disconnectTransport');
|
|
137
|
+
// Structural F10 guarantee: the backend contract exposes no browser/tab
|
|
138
|
+
// close method for the controller to call.
|
|
139
|
+
const forbidden = ['close', 'closeBrowser', 'closeTab', 'quit'];
|
|
140
|
+
for (const name of forbidden) {
|
|
141
|
+
(0, vitest_1.expect)(backend[name]).toBeUndefined();
|
|
142
|
+
}
|
|
143
|
+
// Lease is released → a second controller can claim.
|
|
144
|
+
const c2 = controller(makeBackend().backend);
|
|
145
|
+
await (0, vitest_1.expect)(c2.claim()).resolves.toMatchObject({ state: 'ready' });
|
|
146
|
+
await c2.detach();
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.it)('second concurrent claim is LEASE_DENIED while the first holds', async () => {
|
|
149
|
+
const { backend } = makeBackend();
|
|
150
|
+
const c1 = controller(backend);
|
|
151
|
+
await c1.claim();
|
|
152
|
+
const c2 = controller(makeBackend().backend);
|
|
153
|
+
await (0, vitest_1.expect)(c2.claim()).rejects.toMatchObject({ code: 'LEASE_DENIED' });
|
|
154
|
+
await c1.detach();
|
|
155
|
+
});
|
|
156
|
+
(0, vitest_1.it)('a failed navigation lands in failed state and refuses further ops (no silent replay)', async () => {
|
|
157
|
+
const { backend } = makeBackend({
|
|
158
|
+
async gotoTab() {
|
|
159
|
+
throw new Error('tab 999 not found in window 1');
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
const c = controller(backend);
|
|
163
|
+
await c.claim();
|
|
164
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/')).rejects.toBeTruthy();
|
|
165
|
+
(0, vitest_1.expect)(c.status().state).toBe('failed');
|
|
166
|
+
(0, vitest_1.expect)(c.status().lastError?.code).toBe('TAB_CLOSED');
|
|
167
|
+
await (0, vitest_1.expect)(c.read()).rejects.toMatchObject({ code: 'UNKNOWN' });
|
|
168
|
+
await c.detach();
|
|
169
|
+
(0, vitest_1.expect)(c.status().state).toBe('disconnected');
|
|
170
|
+
});
|
|
171
|
+
(0, vitest_1.it)('HITL approver can deny a policy-clean navigation', async () => {
|
|
172
|
+
const { backend, calls } = makeBackend();
|
|
173
|
+
const c = controller(backend, { onNavigate: (url) => !url.includes('secret') });
|
|
174
|
+
await c.claim();
|
|
175
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/secret')).rejects.toMatchObject({ code: 'POLICY_BLOCKED' });
|
|
176
|
+
(0, vitest_1.expect)(calls.filter((x) => x.startsWith('goto:'))).toHaveLength(0); // never reached the backend
|
|
177
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/public')).resolves.toContain('public');
|
|
178
|
+
await c.detach();
|
|
179
|
+
});
|
|
180
|
+
(0, vitest_1.it)('dry-run reports the target without touching the backend, and counts navigations', async () => {
|
|
181
|
+
const { backend, calls } = makeBackend();
|
|
182
|
+
const c = controller(backend, { dryRun: true });
|
|
183
|
+
await c.claim();
|
|
184
|
+
(0, vitest_1.expect)(await c.goto('https://ok.example.com/')).toBe('https://ok.example.com/');
|
|
185
|
+
(0, vitest_1.expect)(await c.read()).toContain('dry-run');
|
|
186
|
+
(0, vitest_1.expect)(calls.filter((x) => x.startsWith('goto:'))).toHaveLength(0);
|
|
187
|
+
(0, vitest_1.expect)(c.status().dryRun).toBe(true);
|
|
188
|
+
(0, vitest_1.expect)(c.status().navigations).toBe(1);
|
|
189
|
+
(0, vitest_1.expect)(c.status().lastUrl).toBe('https://ok.example.com/');
|
|
190
|
+
await c.detach();
|
|
191
|
+
});
|
|
192
|
+
(0, vitest_1.it)('pause refuses operations until resume', async () => {
|
|
193
|
+
const { backend } = makeBackend();
|
|
194
|
+
const c = controller(backend);
|
|
195
|
+
await c.claim();
|
|
196
|
+
c.pause();
|
|
197
|
+
(0, vitest_1.expect)(c.status().paused).toBe(true);
|
|
198
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/')).rejects.toThrow(/paused/i);
|
|
199
|
+
c.resume();
|
|
200
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/')).resolves.toContain('ok.example.com');
|
|
201
|
+
await c.detach();
|
|
202
|
+
});
|
|
203
|
+
(0, vitest_1.it)('status tracks navigation count and last url on real ops', async () => {
|
|
204
|
+
const { backend } = makeBackend();
|
|
205
|
+
const c = controller(backend);
|
|
206
|
+
await c.claim();
|
|
207
|
+
await c.goto('https://a.example.com/');
|
|
208
|
+
await c.goto('https://b.example.com/');
|
|
209
|
+
(0, vitest_1.expect)(c.status().navigations).toBe(2);
|
|
210
|
+
(0, vitest_1.expect)(c.status().lastUrl).toBe('https://b.example.com/');
|
|
211
|
+
await c.detach();
|
|
212
|
+
});
|
|
213
|
+
(0, vitest_1.it)('ops enforce the lease nonce at call time (foreign takeover is detected)', async () => {
|
|
214
|
+
let t = 1000000;
|
|
215
|
+
const { backend } = makeBackend();
|
|
216
|
+
const c = controller(backend, { deadlineMs: 500 });
|
|
217
|
+
await c.claim();
|
|
218
|
+
// Simulate a foreign session force-taking the lease file.
|
|
219
|
+
const { acquireLease } = await Promise.resolve().then(() => __importStar(require('../lease.js')));
|
|
220
|
+
acquireLease({ file: leaseFile, isPidAlive: () => false, now: () => (t += 1) });
|
|
221
|
+
await (0, vitest_1.expect)(c.goto('https://ok.example.com/')).rejects.toMatchObject({ code: 'LEASE_DENIED' });
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
(0, vitest_1.describe)('extract and evaluate', () => {
|
|
225
|
+
(0, vitest_1.it)('extract maps {name: selector} to text lists via a FIXED expression (selectors are data)', async () => {
|
|
226
|
+
const exprs = [];
|
|
227
|
+
const { backend } = makeBackend({
|
|
228
|
+
async evalInTab(_tab, expression) {
|
|
229
|
+
exprs.push(expression);
|
|
230
|
+
return { perks: ['Late checkout', 'Breakfast for two'] };
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
const c = controller(backend);
|
|
234
|
+
await c.claim();
|
|
235
|
+
const out = await c.extract({ perks: "[class*='perk'] li" });
|
|
236
|
+
(0, vitest_1.expect)(out).toEqual({ perks: ['Late checkout', 'Breakfast for two'] });
|
|
237
|
+
(0, vitest_1.expect)(exprs[0]).toContain('querySelectorAll');
|
|
238
|
+
(0, vitest_1.expect)(exprs[0]).toContain('perk');
|
|
239
|
+
});
|
|
240
|
+
(0, vitest_1.it)('extract without fields requests the default page summary expression', async () => {
|
|
241
|
+
const exprs = [];
|
|
242
|
+
const { backend } = makeBackend({
|
|
243
|
+
async evalInTab(_tab, expression) {
|
|
244
|
+
exprs.push(expression);
|
|
245
|
+
return { url: 'https://x/', links: [] };
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
const c = controller(backend);
|
|
249
|
+
await c.claim();
|
|
250
|
+
await c.extract();
|
|
251
|
+
(0, vitest_1.expect)(exprs[0]).toContain('location.href');
|
|
252
|
+
(0, vitest_1.expect)(exprs[0]).toContain('document.title');
|
|
253
|
+
});
|
|
254
|
+
(0, vitest_1.it)('extract and evaluate surface UNSUPPORTED_OP when the backend lacks evalInTab', async () => {
|
|
255
|
+
const { backend } = makeBackend();
|
|
256
|
+
const c = controller(backend);
|
|
257
|
+
await c.claim();
|
|
258
|
+
await (0, vitest_1.expect)(c.extract()).rejects.toMatchObject({ code: 'UNSUPPORTED_OP' });
|
|
259
|
+
await (0, vitest_1.expect)(c.evaluate('1+1')).rejects.toMatchObject({ code: 'UNSUPPORTED_OP' });
|
|
260
|
+
});
|
|
261
|
+
(0, vitest_1.it)('evaluate passes the expression through (user lane; no tool exposes it)', async () => {
|
|
262
|
+
const { backend } = makeBackend({
|
|
263
|
+
async evalInTab(_tab, expression) {
|
|
264
|
+
return expression === '1+1' ? 2 : undefined;
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
const c = controller(backend);
|
|
268
|
+
await c.claim();
|
|
269
|
+
await (0, vitest_1.expect)(c.evaluate('1+1')).resolves.toBe(2);
|
|
270
|
+
});
|
|
271
|
+
(0, vitest_1.it)('both refuse before claim like every other driving op', async () => {
|
|
272
|
+
const { backend } = makeBackend({ async evalInTab() { return 1; } });
|
|
273
|
+
const c = controller(backend);
|
|
274
|
+
await (0, vitest_1.expect)(c.extract()).rejects.toMatchObject({ code: 'UNKNOWN' });
|
|
275
|
+
await (0, vitest_1.expect)(c.evaluate('1')).rejects.toMatchObject({ code: 'UNKNOWN' });
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
//# sourceMappingURL=AttachController.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachController.test.js","sourceRoot":"","sources":["../../../src/attach/__tests__/AttachController.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-primitives.test.d.ts","sourceRoot":"","sources":["../../../src/attach/__tests__/attach-primitives.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const devtools_port_js_1 = require("../devtools-port.js");
|
|
8
|
+
const singleton_lock_js_1 = require("../singleton-lock.js");
|
|
9
|
+
const url_policy_js_1 = require("../url-policy.js");
|
|
10
|
+
const errors_js_1 = require("../errors.js");
|
|
11
|
+
const state_js_1 = require("../state.js");
|
|
12
|
+
const lease_js_1 = require("../lease.js");
|
|
13
|
+
(0, vitest_1.describe)('parseDevToolsActivePort', () => {
|
|
14
|
+
(0, vitest_1.it)('parses a well-formed file', () => {
|
|
15
|
+
const r = (0, devtools_port_js_1.parseDevToolsActivePort)('9222\n/devtools/browser/07797f92-4fc3-432a-91dd-0e982e1a3bc0\n');
|
|
16
|
+
(0, vitest_1.expect)(r.port).toBe(9222);
|
|
17
|
+
(0, vitest_1.expect)(r.wsUrl).toBe('ws://localhost:9222/devtools/browser/07797f92-4fc3-432a-91dd-0e982e1a3bc0');
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)('builds ws URLs on localhost, never 127.0.0.1 (Chrome DNS-rebinding guard 403s the IP form)', () => {
|
|
20
|
+
const r = (0, devtools_port_js_1.parseDevToolsActivePort)('9222\n/devtools/browser/abc-def\n');
|
|
21
|
+
(0, vitest_1.expect)(r.wsUrl).toBe('ws://localhost:9222/devtools/browser/abc-def');
|
|
22
|
+
(0, vitest_1.expect)(r.wsUrl).not.toContain('127.0.0.1');
|
|
23
|
+
});
|
|
24
|
+
(0, vitest_1.it)('rejects a single-line file', () => {
|
|
25
|
+
(0, vitest_1.expect)(() => (0, devtools_port_js_1.parseDevToolsActivePort)('9222\n')).toThrow(/malformed/i);
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('rejects a non-numeric port', () => {
|
|
28
|
+
(0, vitest_1.expect)(() => (0, devtools_port_js_1.parseDevToolsActivePort)('nope\n/devtools/browser/x\n')).toThrow(/invalid port/i);
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)('rejects a non-browser-target ws path', () => {
|
|
31
|
+
(0, vitest_1.expect)(() => (0, devtools_port_js_1.parseDevToolsActivePort)('9222\n/devtools/page/abc\n')).toThrow(/unexpected ws path/i);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.describe)('pidFromSingletonLock', () => {
|
|
35
|
+
(0, vitest_1.it)('extracts the pid', () => {
|
|
36
|
+
(0, vitest_1.expect)((0, singleton_lock_js_1.pidFromSingletonLock)('MacBook-Air.local-666')).toBe(666);
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)('handles hostnames containing dashes', () => {
|
|
39
|
+
(0, vitest_1.expect)((0, singleton_lock_js_1.pidFromSingletonLock)('my-host-name.local-12345')).toBe(12345);
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('rejects a target without a pid suffix', () => {
|
|
42
|
+
(0, vitest_1.expect)(() => (0, singleton_lock_js_1.pidFromSingletonLock)('just-a-hostname.local')).toThrow(/malformed/i);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.describe)('url-policy', () => {
|
|
46
|
+
(0, vitest_1.it)('allows https and about:blank', () => {
|
|
47
|
+
(0, vitest_1.expect)((0, url_policy_js_1.isNavigationAllowed)('https://founderscard.com/home').allowed).toBe(true);
|
|
48
|
+
(0, vitest_1.expect)((0, url_policy_js_1.isNavigationAllowed)('about:blank').allowed).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
vitest_1.it.each([
|
|
51
|
+
['file:///etc/passwd', 'SCHEME_BLOCKED'],
|
|
52
|
+
['javascript:alert(1)', 'SCHEME_BLOCKED'],
|
|
53
|
+
['data:text/html,<b>x</b>', 'SCHEME_BLOCKED'],
|
|
54
|
+
['devtools://devtools/bundled/inspector.html', 'SCHEME_BLOCKED'],
|
|
55
|
+
['chrome://settings', 'SCHEME_BLOCKED'],
|
|
56
|
+
['http://example.com', 'SCHEME_BLOCKED'],
|
|
57
|
+
['https://user:pass@example.com/x', 'CREDENTIALS_IN_URL'],
|
|
58
|
+
['https://localhost/admin', 'PRIVATE_HOST'],
|
|
59
|
+
['https://127.0.0.1:8080/', 'PRIVATE_HOST'],
|
|
60
|
+
['https://192.168.1.10/router', 'PRIVATE_HOST'],
|
|
61
|
+
['https://10.1.2.3/internal', 'PRIVATE_HOST'],
|
|
62
|
+
['https://172.16.0.1/', 'PRIVATE_HOST'],
|
|
63
|
+
['https://printer.local/', 'PRIVATE_HOST'],
|
|
64
|
+
['not a url', 'MALFORMED_URL'],
|
|
65
|
+
])('rejects %s with %s', (url, reason) => {
|
|
66
|
+
const r = (0, url_policy_js_1.isNavigationAllowed)(url);
|
|
67
|
+
(0, vitest_1.expect)(r.allowed).toBe(false);
|
|
68
|
+
(0, vitest_1.expect)(r.reason).toBe(reason);
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.it)('enforces the host allowlist including subdomains', () => {
|
|
71
|
+
const opts = { allowHosts: ['founderscard.com', 'hotels.com'] };
|
|
72
|
+
(0, vitest_1.expect)((0, url_policy_js_1.isNavigationAllowed)('https://founderscard.com/x', opts).allowed).toBe(true);
|
|
73
|
+
(0, vitest_1.expect)((0, url_policy_js_1.isNavigationAllowed)('https://www.hotels.com/', opts).allowed).toBe(true);
|
|
74
|
+
(0, vitest_1.expect)((0, url_policy_js_1.isNavigationAllowed)('https://evil.com/', opts).reason).toBe('HOST_NOT_ALLOWLISTED');
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.it)('revalidates redirects with the same policy', () => {
|
|
77
|
+
(0, vitest_1.expect)((0, url_policy_js_1.revalidateRedirect)('https://ok.com/landing').allowed).toBe(true);
|
|
78
|
+
(0, vitest_1.expect)((0, url_policy_js_1.revalidateRedirect)('http://downgraded.com/').reason).toBe('SCHEME_BLOCKED');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.describe)('errors', () => {
|
|
82
|
+
(0, vitest_1.it)('redacts credential-class substrings', () => {
|
|
83
|
+
const out = (0, errors_js_1.redactDiagnostic)('failed with token=abc123 and api_key: xyz987 at https://x.com?access_token=zz9secret');
|
|
84
|
+
(0, vitest_1.expect)(out).not.toContain('abc123');
|
|
85
|
+
(0, vitest_1.expect)(out).not.toContain('xyz987');
|
|
86
|
+
(0, vitest_1.expect)(out).not.toContain('zz9secret');
|
|
87
|
+
});
|
|
88
|
+
(0, vitest_1.it)('keeps explicit AttachError codes', () => {
|
|
89
|
+
(0, vitest_1.expect)((0, errors_js_1.toStructuredError)(new errors_js_1.AttachError('LEASE_DENIED', 'nope')).code).toBe('LEASE_DENIED');
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.it)('classifies known failure shapes', () => {
|
|
92
|
+
(0, vitest_1.expect)((0, errors_js_1.toStructuredError)(new Error('Executing JavaScript through AppleScript is turned off')).code).toBe('JS_DISABLED');
|
|
93
|
+
(0, vitest_1.expect)((0, errors_js_1.toStructuredError)(new Error('browserType.connectOverCDP: Timeout 12000ms exceeded')).code).toBe('CDP_TIMEOUT');
|
|
94
|
+
(0, vitest_1.expect)((0, errors_js_1.toStructuredError)(new Error('tab 999 not found in window 1')).code).toBe('TAB_CLOSED');
|
|
95
|
+
});
|
|
96
|
+
(0, vitest_1.it)('defaults to UNKNOWN', () => {
|
|
97
|
+
(0, vitest_1.expect)((0, errors_js_1.toStructuredError)(new Error('weird')).code).toBe('UNKNOWN');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.describe)('AttachStateMachine', () => {
|
|
101
|
+
(0, vitest_1.it)('walks the happy path', () => {
|
|
102
|
+
const m = new state_js_1.AttachStateMachine();
|
|
103
|
+
m.to('connecting');
|
|
104
|
+
m.to('ready');
|
|
105
|
+
m.to('navigating');
|
|
106
|
+
m.to('ready');
|
|
107
|
+
(0, vitest_1.expect)(m.state).toBe('ready');
|
|
108
|
+
});
|
|
109
|
+
(0, vitest_1.it)('rejects illegal transitions', () => {
|
|
110
|
+
const m = new state_js_1.AttachStateMachine();
|
|
111
|
+
(0, vitest_1.expect)(() => m.to('navigating')).toThrow(/illegal/i);
|
|
112
|
+
});
|
|
113
|
+
(0, vitest_1.it)('failed only resets through disconnected (no silent replay)', () => {
|
|
114
|
+
const m = new state_js_1.AttachStateMachine();
|
|
115
|
+
m.to('connecting');
|
|
116
|
+
m.to('ready');
|
|
117
|
+
m.to('navigating');
|
|
118
|
+
m.to('failed');
|
|
119
|
+
(0, vitest_1.expect)(() => m.to('navigating')).toThrow(/illegal/i);
|
|
120
|
+
m.to('disconnected');
|
|
121
|
+
(0, vitest_1.expect)(m.state).toBe('disconnected');
|
|
122
|
+
});
|
|
123
|
+
(0, vitest_1.it)('withDeadline rejects with NAV_TIMEOUT after expiry', async () => {
|
|
124
|
+
await (0, vitest_1.expect)((0, state_js_1.withDeadline)(new Promise(() => { }), 20, 'goto')).rejects.toMatchObject({ code: 'NAV_TIMEOUT' });
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
(0, vitest_1.describe)('lease', () => {
|
|
128
|
+
const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-lease-'));
|
|
129
|
+
const file = (0, node_path_1.join)(dir, 'attach.lease');
|
|
130
|
+
(0, vitest_1.it)('acquires, requires, and releases', () => {
|
|
131
|
+
const lease = (0, lease_js_1.acquireLease)({ file, isPidAlive: () => true });
|
|
132
|
+
(0, vitest_1.expect)((0, lease_js_1.requireLease)(file, lease.nonce).pid).toBe(process.pid);
|
|
133
|
+
(0, lease_js_1.releaseLease)(file, lease.nonce);
|
|
134
|
+
(0, vitest_1.expect)(() => (0, lease_js_1.requireLease)(file, lease.nonce)).toThrow(/nonce/i);
|
|
135
|
+
});
|
|
136
|
+
(0, vitest_1.it)('denies while a live lease exists, allows after the holder dies', () => {
|
|
137
|
+
const lease = (0, lease_js_1.acquireLease)({ file, isPidAlive: () => true });
|
|
138
|
+
(0, vitest_1.expect)(() => (0, lease_js_1.acquireLease)({ file, isPidAlive: () => true })).toThrow(/lease held/i);
|
|
139
|
+
const takenOver = (0, lease_js_1.acquireLease)({ file, isPidAlive: () => false });
|
|
140
|
+
(0, vitest_1.expect)(takenOver.nonce).not.toBe(lease.nonce);
|
|
141
|
+
(0, lease_js_1.releaseLease)(file, takenOver.nonce);
|
|
142
|
+
});
|
|
143
|
+
(0, vitest_1.it)('allows reclaim after TTL expiry even if the holder is alive', () => {
|
|
144
|
+
let t = 1000000;
|
|
145
|
+
const now = () => t;
|
|
146
|
+
(0, lease_js_1.acquireLease)({ file, ttlMs: 100, now, isPidAlive: () => true });
|
|
147
|
+
t += 101;
|
|
148
|
+
const second = (0, lease_js_1.acquireLease)({ file, ttlMs: 100, now, isPidAlive: () => true });
|
|
149
|
+
(0, vitest_1.expect)(second.acquiredAt).toBe(t);
|
|
150
|
+
(0, lease_js_1.releaseLease)(file, second.nonce);
|
|
151
|
+
});
|
|
152
|
+
(0, vitest_1.it)('refuses to release with a foreign nonce', () => {
|
|
153
|
+
const lease = (0, lease_js_1.acquireLease)({ file, isPidAlive: () => true });
|
|
154
|
+
(0, vitest_1.expect)(() => (0, lease_js_1.releaseLease)(file, 'not-the-nonce')).toThrow(/another session/i);
|
|
155
|
+
(0, lease_js_1.releaseLease)(file, lease.nonce);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=attach-primitives.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-primitives.test.js","sourceRoot":"","sources":["../../../src/attach/__tests__/attach-primitives.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jxa-args.test.d.ts","sourceRoot":"","sources":["../../../src/attach/__tests__/jxa-args.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const jxa_js_1 = require("../backends/jxa.js");
|
|
5
|
+
(0, vitest_1.describe)('buildJxaArgs', () => {
|
|
6
|
+
(0, vitest_1.it)('builds exact argv with profileRoot first, then cmd and args (no shell interpolation)', () => {
|
|
7
|
+
(0, vitest_1.expect)((0, jxa_js_1.buildJxaArgs)('/tmp/driver.js', '/Users/x/Chrome', 'goto', ['1', '2', 'https://a.com/?q=1&r=2'])).toEqual([
|
|
8
|
+
'-l',
|
|
9
|
+
'JavaScript',
|
|
10
|
+
'/tmp/driver.js',
|
|
11
|
+
'/Users/x/Chrome',
|
|
12
|
+
'goto',
|
|
13
|
+
'1',
|
|
14
|
+
'2',
|
|
15
|
+
'https://a.com/?q=1&r=2',
|
|
16
|
+
]);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.describe)('JXA driver source', () => {
|
|
20
|
+
(0, vitest_1.it)('addresses Chrome by PID from SingletonLock, never by bundle name', () => {
|
|
21
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).toContain('SingletonLock');
|
|
22
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).toContain('Application(chromePid(root))');
|
|
23
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).not.toMatch(/Application\((['"])Google Chrome\1\)/);
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.it)('marker-binds the claimed tab and exposes no close/quit commands', () => {
|
|
26
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).toContain('__agentos_attach_tab_v1__');
|
|
27
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).not.toMatch(/\.close\(\)|\bquit\b/);
|
|
28
|
+
});
|
|
29
|
+
(0, vitest_1.it)('supports only claim/goto/url/read (no arbitrary JS command)', () => {
|
|
30
|
+
for (const cmd of ['claim', 'goto', 'url', 'read']) {
|
|
31
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).toContain(`'${cmd}'`);
|
|
32
|
+
}
|
|
33
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).not.toContain("'eval'");
|
|
34
|
+
(0, vitest_1.expect)(jxa_js_1.JXA_DRIVER_SOURCE).not.toContain("'js'");
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=jxa-args.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jxa-args.test.js","sourceRoot":"","sources":["../../../src/attach/__tests__/jxa-args.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,+CAAqE;AAErE,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAA,WAAE,EAAC,sFAAsF,EAAE,GAAG,EAAE;QAC9F,IAAA,eAAM,EAAC,IAAA,qBAAY,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9G,IAAI;YACJ,YAAY;YACZ,gBAAgB;YAChB,iBAAiB;YACjB,MAAM;YACN,GAAG;YACH,GAAG;YACH,wBAAwB;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAA,WAAE,EAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACrD,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACpE,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IACH,IAAA,WAAE,EAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACjE,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YACnD,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAA,eAAM,EAAC,0BAAiB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-registration.test.d.ts","sourceRoot":"","sources":["../../../src/attach/__tests__/pack-registration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const index_js_1 = require("../../index.js");
|
|
5
|
+
(0, vitest_1.describe)('browser-automation attach registration', () => {
|
|
6
|
+
(0, vitest_1.it)('does NOT register attach tools by default', () => {
|
|
7
|
+
const pack = (0, index_js_1.createExtensionPack)({ options: {} });
|
|
8
|
+
const ids = pack.descriptors.map((d) => d.id);
|
|
9
|
+
(0, vitest_1.expect)(ids).not.toContain('browser_attach_claim');
|
|
10
|
+
(0, vitest_1.expect)(ids).not.toContain('browser_attach_goto');
|
|
11
|
+
});
|
|
12
|
+
(0, vitest_1.it)('registers the attach tools (default-off descriptors) when opted in', () => {
|
|
13
|
+
const pack = (0, index_js_1.createExtensionPack)({ options: { attach: { expectedIdentity: 'johnny@example.com' } } });
|
|
14
|
+
const attach = pack.descriptors.filter((d) => d.id.startsWith('browser_attach_'));
|
|
15
|
+
(0, vitest_1.expect)(attach.map((d) => d.id).sort()).toEqual([
|
|
16
|
+
'browser_attach_claim',
|
|
17
|
+
'browser_attach_control',
|
|
18
|
+
'browser_attach_goto',
|
|
19
|
+
'browser_attach_read',
|
|
20
|
+
'browser_attach_release',
|
|
21
|
+
'browser_attach_status',
|
|
22
|
+
]);
|
|
23
|
+
for (const d of attach)
|
|
24
|
+
(0, vitest_1.expect)(d.enableByDefault).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('leaves the launch-mode tools intact in both modes', () => {
|
|
27
|
+
for (const options of [{}, { attach: { expectedIdentity: 'x@y.com' } }]) {
|
|
28
|
+
const ids = (0, index_js_1.createExtensionPack)({ options }).descriptors.map((d) => d.id);
|
|
29
|
+
(0, vitest_1.expect)(ids).toContain('browserNavigate');
|
|
30
|
+
(0, vitest_1.expect)(ids).toContain('browserSession');
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=pack-registration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-registration.test.js","sourceRoot":"","sources":["../../../src/attach/__tests__/pack-registration.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,6CAAqD;AAErD,IAAA,iBAAQ,EAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,IAAA,WAAE,EAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,IAAA,8BAAmB,EAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAClD,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,IAAI,GAAG,IAAA,8BAAmB,EAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,CAAC;QACtG,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClF,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YAC7C,sBAAsB;YACtB,wBAAwB;YACxB,qBAAqB;YACrB,qBAAqB;YACrB,wBAAwB;YACxB,uBAAuB;SACxB,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,GAAG,GAAG,IAAA,8BAAmB,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACzC,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../../../src/attach/__tests__/tools.test.ts"],"names":[],"mappings":""}
|