arc-1 0.6.9 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -9
- package/bin/arc1-cli.js +10 -0
- package/bin/arc1.js +1 -1
- package/dist/adt/abapgit.d.ts +39 -0
- package/dist/adt/abapgit.d.ts.map +1 -0
- package/dist/adt/abapgit.js +333 -0
- package/dist/adt/abapgit.js.map +1 -0
- package/dist/adt/cds-impact.d.ts +35 -0
- package/dist/adt/cds-impact.d.ts.map +1 -1
- package/dist/adt/cds-impact.js +71 -0
- package/dist/adt/cds-impact.js.map +1 -1
- package/dist/adt/client.d.ts +4 -1
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +18 -5
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/config.d.ts +1 -0
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js +1 -0
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +74 -8
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/devtools.d.ts +39 -3
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +237 -25
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.d.ts +69 -7
- package/dist/adt/diagnostics.d.ts.map +1 -1
- package/dist/adt/diagnostics.js +694 -36
- package/dist/adt/diagnostics.js.map +1 -1
- package/dist/adt/errors.d.ts +36 -2
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +111 -11
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/features.d.ts.map +1 -1
- package/dist/adt/features.js +3 -0
- package/dist/adt/features.js.map +1 -1
- package/dist/adt/gcts.d.ts +68 -0
- package/dist/adt/gcts.d.ts.map +1 -0
- package/dist/adt/gcts.js +239 -0
- package/dist/adt/gcts.js.map +1 -0
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +86 -1
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/rap-handlers.d.ts +165 -0
- package/dist/adt/rap-handlers.d.ts.map +1 -0
- package/dist/adt/rap-handlers.js +835 -0
- package/dist/adt/rap-handlers.js.map +1 -0
- package/dist/adt/rap-preflight.d.ts +43 -0
- package/dist/adt/rap-preflight.d.ts.map +1 -0
- package/dist/adt/rap-preflight.js +405 -0
- package/dist/adt/rap-preflight.js.map +1 -0
- package/dist/adt/safety.d.ts +60 -33
- package/dist/adt/safety.d.ts.map +1 -1
- package/dist/adt/safety.js +204 -113
- package/dist/adt/safety.js.map +1 -1
- package/dist/adt/transport.d.ts +1 -1
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js +6 -3
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +225 -0
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/xml-parser.d.ts +15 -1
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +28 -15
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/authz/policy.d.ts +53 -0
- package/dist/authz/policy.d.ts.map +1 -0
- package/dist/authz/policy.js +199 -0
- package/dist/authz/policy.js.map +1 -0
- package/dist/cli-args.d.ts +14 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +62 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli.d.ts +13 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +252 -55
- package/dist/cli.js.map +1 -1
- package/dist/extract-sap-cookies.d.ts +24 -0
- package/dist/extract-sap-cookies.d.ts.map +1 -0
- package/dist/extract-sap-cookies.js +317 -0
- package/dist/extract-sap-cookies.js.map +1 -0
- package/dist/handlers/hyperfocused.d.ts +4 -3
- package/dist/handlers/hyperfocused.d.ts.map +1 -1
- package/dist/handlers/hyperfocused.js +25 -16
- package/dist/handlers/hyperfocused.js.map +1 -1
- package/dist/handlers/intent.d.ts +4 -12
- package/dist/handlers/intent.d.ts.map +1 -1
- package/dist/handlers/intent.js +1448 -89
- package/dist/handlers/intent.js.map +1 -1
- package/dist/handlers/schemas.d.ts +83 -11
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +115 -4
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/tools.d.ts +4 -3
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +342 -143
- package/dist/handlers/tools.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/probe/catalog.d.ts +30 -0
- package/dist/probe/catalog.d.ts.map +1 -0
- package/dist/probe/catalog.js +196 -0
- package/dist/probe/catalog.js.map +1 -0
- package/dist/probe/fixtures.d.ts +54 -0
- package/dist/probe/fixtures.d.ts.map +1 -0
- package/dist/probe/fixtures.js +94 -0
- package/dist/probe/fixtures.js.map +1 -0
- package/dist/probe/format.d.ts +10 -0
- package/dist/probe/format.d.ts.map +1 -0
- package/dist/probe/format.js +114 -0
- package/dist/probe/format.js.map +1 -0
- package/dist/probe/quality.d.ts +13 -0
- package/dist/probe/quality.d.ts.map +1 -0
- package/dist/probe/quality.js +50 -0
- package/dist/probe/quality.js.map +1 -0
- package/dist/probe/runner.d.ts +48 -0
- package/dist/probe/runner.d.ts.map +1 -0
- package/dist/probe/runner.js +211 -0
- package/dist/probe/runner.js.map +1 -0
- package/dist/probe/types.d.ts +159 -0
- package/dist/probe/types.d.ts.map +1 -0
- package/dist/probe/types.js +11 -0
- package/dist/probe/types.js.map +1 -0
- package/dist/server/audit.d.ts +26 -3
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js +12 -1
- package/dist/server/audit.js.map +1 -1
- package/dist/server/config.d.ts +34 -19
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +327 -187
- package/dist/server/config.js.map +1 -1
- package/dist/server/deny-actions.d.ts +31 -0
- package/dist/server/deny-actions.d.ts.map +1 -0
- package/dist/server/deny-actions.js +156 -0
- package/dist/server/deny-actions.js.map +1 -0
- package/dist/server/effective-policy-log.d.ts +27 -0
- package/dist/server/effective-policy-log.d.ts.map +1 -0
- package/dist/server/effective-policy-log.js +103 -0
- package/dist/server/effective-policy-log.js.map +1 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +15 -16
- package/dist/server/http.js.map +1 -1
- package/dist/server/server.d.ts +38 -4
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +234 -31
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +31 -13
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +11 -10
- package/dist/server/types.js.map +1 -1
- package/dist/server/xsuaa.d.ts +1 -2
- package/dist/server/xsuaa.d.ts.map +1 -1
- package/dist/server/xsuaa.js +13 -14
- package/dist/server/xsuaa.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, mkdtempSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
5
|
+
import { createInterface } from 'node:readline/promises';
|
|
6
|
+
import { pathToFileURL } from 'node:url';
|
|
7
|
+
import { config as loadDotEnv } from 'dotenv';
|
|
8
|
+
const DEV_ONLY_BANNER = '⚠️ DEV-ONLY UTILITY. The resulting cookie file MUST NOT be used with SAP_PP_ENABLED=true — it would cause every per-user request to authenticate as you. Continue? [y/N] ';
|
|
9
|
+
const PP_REFUSAL_MESSAGE = 'Refusing to run while SAP_PP_ENABLED=true. Cookie extraction is a shared-auth developer utility and must never run alongside principal propagation.';
|
|
10
|
+
function getFlag(args, name) {
|
|
11
|
+
const prefix = `--${name}=`;
|
|
12
|
+
for (let i = 0; i < args.length; i++) {
|
|
13
|
+
if (args[i] === `--${name}` && i + 1 < args.length) {
|
|
14
|
+
return args[i + 1];
|
|
15
|
+
}
|
|
16
|
+
if (args[i]?.startsWith(prefix)) {
|
|
17
|
+
return args[i].slice(prefix.length);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
function parseScriptArgs(args) {
|
|
23
|
+
const browserRaw = getFlag(args, 'browser') ?? 'chrome';
|
|
24
|
+
const browser = browserRaw === 'chrome' || browserRaw === 'firefox' || browserRaw === 'edge' ? browserRaw : null;
|
|
25
|
+
if (!browser) {
|
|
26
|
+
throw new Error(`Unsupported --browser value '${browserRaw}'. Use one of: chrome, firefox, edge.`);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
browser,
|
|
30
|
+
output: getFlag(args, 'output'),
|
|
31
|
+
yes: args.includes('--yes'),
|
|
32
|
+
help: args.includes('--help') || args.includes('-h'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Keep this helper local to mirror the server config precedence for --url.
|
|
36
|
+
export function parseServerArgs(args, env = process.env) {
|
|
37
|
+
return {
|
|
38
|
+
url: getFlag(args, 'url') ?? env.SAP_URL,
|
|
39
|
+
cookieFile: env.SAP_COOKIE_FILE,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function commandExists(command) {
|
|
43
|
+
const result = process.platform === 'win32'
|
|
44
|
+
? spawnSync('where.exe', [command], { stdio: 'ignore' })
|
|
45
|
+
: spawnSync('command', ['-v', command], { stdio: 'ignore' });
|
|
46
|
+
return result.status === 0;
|
|
47
|
+
}
|
|
48
|
+
function resolveBrowserBinary(browser, platform) {
|
|
49
|
+
const win32Paths = (relativePath, exe) => {
|
|
50
|
+
const PF = process.env.PROGRAMFILES;
|
|
51
|
+
const PF86 = process.env['PROGRAMFILES(X86)'];
|
|
52
|
+
const LAD = process.env.LOCALAPPDATA;
|
|
53
|
+
return [
|
|
54
|
+
LAD ? `${LAD}\\${relativePath}` : undefined,
|
|
55
|
+
PF ? `${PF}\\${relativePath}` : undefined,
|
|
56
|
+
PF86 ? `${PF86}\\${relativePath}` : undefined,
|
|
57
|
+
exe,
|
|
58
|
+
].filter((c) => Boolean(c));
|
|
59
|
+
};
|
|
60
|
+
const candidates = {
|
|
61
|
+
chrome: platform === 'darwin'
|
|
62
|
+
? [
|
|
63
|
+
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
64
|
+
'google-chrome',
|
|
65
|
+
'google-chrome-stable',
|
|
66
|
+
'chromium',
|
|
67
|
+
'chromium-browser',
|
|
68
|
+
]
|
|
69
|
+
: platform === 'win32'
|
|
70
|
+
? win32Paths('Google\\Chrome\\Application\\chrome.exe', 'chrome.exe')
|
|
71
|
+
: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],
|
|
72
|
+
firefox: platform === 'darwin'
|
|
73
|
+
? ['/Applications/Firefox.app/Contents/MacOS/firefox', 'firefox']
|
|
74
|
+
: platform === 'win32'
|
|
75
|
+
? win32Paths('Mozilla Firefox\\firefox.exe', 'firefox.exe')
|
|
76
|
+
: ['firefox', 'firefox-esr'],
|
|
77
|
+
edge: platform === 'darwin'
|
|
78
|
+
? ['/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge', 'microsoft-edge', 'microsoft-edge-stable']
|
|
79
|
+
: platform === 'win32'
|
|
80
|
+
? win32Paths('Microsoft\\Edge\\Application\\msedge.exe', 'msedge.exe')
|
|
81
|
+
: ['microsoft-edge', 'microsoft-edge-stable'],
|
|
82
|
+
};
|
|
83
|
+
for (const candidate of candidates[browser]) {
|
|
84
|
+
if (isAbsolute(candidate)) {
|
|
85
|
+
if (existsSync(candidate))
|
|
86
|
+
return candidate;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (platform === 'linux') {
|
|
90
|
+
if (commandExists(candidate))
|
|
91
|
+
return candidate;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (platform === 'win32') {
|
|
95
|
+
if (spawnSync('where', [candidate], { stdio: 'ignore' }).status === 0)
|
|
96
|
+
return candidate;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (commandExists(candidate))
|
|
100
|
+
return candidate;
|
|
101
|
+
}
|
|
102
|
+
throw new Error(`No runnable ${browser} binary found. Install the browser or pass an available binary via --browser (chrome|firefox|edge).`);
|
|
103
|
+
}
|
|
104
|
+
function printUsage() {
|
|
105
|
+
process.stderr.write(`Usage: arc1-cli extract-cookies --url <SAP_URL> [options]
|
|
106
|
+
(or: npx tsx src/extract-sap-cookies.ts --url <SAP_URL> [options])
|
|
107
|
+
|
|
108
|
+
Options:
|
|
109
|
+
--url <url> Target SAP URL (required). Precedence: CLI > env > .env
|
|
110
|
+
--browser <name> Browser to launch: chrome | firefox | edge (default: chrome)
|
|
111
|
+
--output <path> Output cookie file path. Precedence: CLI > SAP_COOKIE_FILE env > ./cookies.txt
|
|
112
|
+
--yes Skip the DEV-ONLY confirmation prompt
|
|
113
|
+
--help, -h Show this help
|
|
114
|
+
`);
|
|
115
|
+
}
|
|
116
|
+
function delay(ms) {
|
|
117
|
+
return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
118
|
+
}
|
|
119
|
+
async function waitForDebuggerWebSocketUrl(port, timeoutMs = 25_000) {
|
|
120
|
+
const deadline = Date.now() + timeoutMs;
|
|
121
|
+
while (Date.now() < deadline) {
|
|
122
|
+
try {
|
|
123
|
+
const response = await fetch(`http://127.0.0.1:${port}/json/version`);
|
|
124
|
+
if (response.ok) {
|
|
125
|
+
const payload = (await response.json());
|
|
126
|
+
if (payload.webSocketDebuggerUrl)
|
|
127
|
+
return payload.webSocketDebuggerUrl;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Browser not ready yet.
|
|
132
|
+
}
|
|
133
|
+
await delay(300);
|
|
134
|
+
}
|
|
135
|
+
throw new Error(`Timed out waiting for browser debugging endpoint on http://127.0.0.1:${port}/json/version`);
|
|
136
|
+
}
|
|
137
|
+
async function waitForEnter(prompt) {
|
|
138
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
139
|
+
try {
|
|
140
|
+
await rl.question(prompt);
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
rl.close();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function maybePromptConfirmation(skipPrompt) {
|
|
147
|
+
if (skipPrompt)
|
|
148
|
+
return;
|
|
149
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
150
|
+
try {
|
|
151
|
+
const answer = (await rl.question(DEV_ONLY_BANNER)).trim().toLowerCase();
|
|
152
|
+
if (answer !== 'y' && answer !== 'yes') {
|
|
153
|
+
throw new Error('Aborted by user.');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
rl.close();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function startBrowser(browserBinary, browser, url, port, profileDir) {
|
|
161
|
+
const args = browser === 'firefox'
|
|
162
|
+
? ['--remote-debugging-port', String(port), '-profile', profileDir, url]
|
|
163
|
+
: [
|
|
164
|
+
`--remote-debugging-port=${port}`,
|
|
165
|
+
`--user-data-dir=${profileDir}`,
|
|
166
|
+
'--no-first-run',
|
|
167
|
+
'--no-default-browser-check',
|
|
168
|
+
'--new-window',
|
|
169
|
+
url,
|
|
170
|
+
];
|
|
171
|
+
return spawn(browserBinary, args, { stdio: 'ignore' });
|
|
172
|
+
}
|
|
173
|
+
function cookieMatchesHost(cookieDomain, hostname) {
|
|
174
|
+
const normalized = cookieDomain.startsWith('.') ? cookieDomain.slice(1) : cookieDomain;
|
|
175
|
+
return hostname === normalized || hostname.endsWith(`.${normalized}`);
|
|
176
|
+
}
|
|
177
|
+
async function fetchCookiesViaCdp(wsUrl, origin) {
|
|
178
|
+
const hostname = new URL(origin).hostname;
|
|
179
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
180
|
+
const ws = new WebSocket(wsUrl);
|
|
181
|
+
let nextId = 1;
|
|
182
|
+
let settled = false;
|
|
183
|
+
const pending = new Map();
|
|
184
|
+
const settleOnce = (resolver) => {
|
|
185
|
+
if (settled)
|
|
186
|
+
return;
|
|
187
|
+
settled = true;
|
|
188
|
+
resolver();
|
|
189
|
+
};
|
|
190
|
+
const rejectAllPending = (error) => {
|
|
191
|
+
for (const request of pending.values()) {
|
|
192
|
+
request.reject(error);
|
|
193
|
+
}
|
|
194
|
+
pending.clear();
|
|
195
|
+
};
|
|
196
|
+
const send = (method, params = {}) => new Promise((resolveSend, rejectSend) => {
|
|
197
|
+
const id = nextId++;
|
|
198
|
+
pending.set(id, { resolve: resolveSend, reject: rejectSend });
|
|
199
|
+
ws.send(JSON.stringify({ id, method, params }));
|
|
200
|
+
});
|
|
201
|
+
ws.onerror = () => {
|
|
202
|
+
settleOnce(() => rejectPromise(new Error('Failed to connect to browser debugging websocket.')));
|
|
203
|
+
rejectAllPending(new Error('CDP websocket error'));
|
|
204
|
+
};
|
|
205
|
+
ws.onmessage = (event) => {
|
|
206
|
+
const raw = typeof event.data === 'string' ? event.data : Buffer.from(event.data).toString('utf-8');
|
|
207
|
+
const msg = JSON.parse(raw);
|
|
208
|
+
if (!msg.id)
|
|
209
|
+
return;
|
|
210
|
+
const request = pending.get(msg.id);
|
|
211
|
+
if (!request)
|
|
212
|
+
return;
|
|
213
|
+
pending.delete(msg.id);
|
|
214
|
+
if (msg.error) {
|
|
215
|
+
request.reject(new Error(msg.error.message ?? 'Unknown CDP error'));
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
request.resolve(msg.result);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
ws.onclose = () => {
|
|
222
|
+
if (!settled) {
|
|
223
|
+
settleOnce(() => rejectPromise(new Error('Browser debugging websocket closed unexpectedly.')));
|
|
224
|
+
}
|
|
225
|
+
rejectAllPending(new Error('CDP websocket closed'));
|
|
226
|
+
};
|
|
227
|
+
ws.onopen = async () => {
|
|
228
|
+
try {
|
|
229
|
+
const result = (await send('Storage.getCookies'));
|
|
230
|
+
ws.close();
|
|
231
|
+
const filtered = (result.cookies ?? []).filter((c) => cookieMatchesHost(c.domain, hostname));
|
|
232
|
+
settleOnce(() => resolvePromise(filtered));
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
ws.close();
|
|
236
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
237
|
+
settleOnce(() => rejectPromise(new Error(message)));
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function formatNetscapeCookieLine(cookie) {
|
|
243
|
+
const domain = cookie.domain || '';
|
|
244
|
+
const includeSubdomains = domain.startsWith('.') ? 'TRUE' : 'FALSE';
|
|
245
|
+
const path = cookie.path || '/';
|
|
246
|
+
const secure = cookie.secure ? 'TRUE' : 'FALSE';
|
|
247
|
+
const expires = cookie.expires && cookie.expires > 0 ? String(Math.floor(cookie.expires)) : '0';
|
|
248
|
+
return `${domain}\t${includeSubdomains}\t${path}\t${secure}\t${expires}\t${cookie.name}\t${cookie.value}`;
|
|
249
|
+
}
|
|
250
|
+
function toNetscapeCookieFile(cookies) {
|
|
251
|
+
const header = ['# Netscape HTTP Cookie File', '# Generated by ARC-1 extract-sap-cookies.ts'];
|
|
252
|
+
const lines = cookies.map(formatNetscapeCookieLine);
|
|
253
|
+
return `${[...header, ...lines].join('\n')}\n`;
|
|
254
|
+
}
|
|
255
|
+
export function planExtraction(input) {
|
|
256
|
+
if (input.env.SAP_PP_ENABLED === 'true') {
|
|
257
|
+
throw new Error(PP_REFUSAL_MESSAGE);
|
|
258
|
+
}
|
|
259
|
+
const scriptArgs = parseScriptArgs(input.args);
|
|
260
|
+
const serverArgs = parseServerArgs(input.args, input.env);
|
|
261
|
+
if (!serverArgs.url) {
|
|
262
|
+
throw new Error('Missing SAP URL. Set --url <...> (preferred) or SAP_URL (CLI > env > .env). See --help for usage.');
|
|
263
|
+
}
|
|
264
|
+
const parsedUrl = new URL(serverArgs.url);
|
|
265
|
+
const browserBinary = resolveBrowserBinary(scriptArgs.browser, input.platform);
|
|
266
|
+
return {
|
|
267
|
+
url: serverArgs.url,
|
|
268
|
+
origin: parsedUrl.origin,
|
|
269
|
+
browser: scriptArgs.browser,
|
|
270
|
+
browserBinary,
|
|
271
|
+
outputPath: resolve(input.cwd, scriptArgs.output ?? serverArgs.cookieFile ?? './cookies.txt'),
|
|
272
|
+
yes: scriptArgs.yes,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export async function run(argv = process.argv.slice(2)) {
|
|
276
|
+
loadDotEnv();
|
|
277
|
+
const scriptArgs = parseScriptArgs(argv);
|
|
278
|
+
if (scriptArgs.help) {
|
|
279
|
+
printUsage();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const plan = planExtraction({
|
|
283
|
+
args: argv,
|
|
284
|
+
env: process.env,
|
|
285
|
+
cwd: process.cwd(),
|
|
286
|
+
platform: process.platform,
|
|
287
|
+
});
|
|
288
|
+
await maybePromptConfirmation(plan.yes);
|
|
289
|
+
const port = 9222;
|
|
290
|
+
const profileDir = mkdtempSync(join(tmpdir(), 'arc1-cookie-extract-'));
|
|
291
|
+
const browserProcess = startBrowser(plan.browserBinary, plan.browser, plan.url, port, profileDir);
|
|
292
|
+
try {
|
|
293
|
+
const wsUrl = await waitForDebuggerWebSocketUrl(port);
|
|
294
|
+
process.stderr.write(`Browser started (${plan.browser}). Complete login for ${plan.origin}, then press Enter to capture cookies.\n`);
|
|
295
|
+
await waitForEnter('');
|
|
296
|
+
const cookies = await fetchCookiesViaCdp(wsUrl, plan.origin);
|
|
297
|
+
if (cookies.length === 0) {
|
|
298
|
+
throw new Error(`No cookies were returned for ${plan.origin}. Ensure you are logged in and try again.`);
|
|
299
|
+
}
|
|
300
|
+
const cookieFileContent = toNetscapeCookieFile(cookies);
|
|
301
|
+
mkdirSync(dirname(plan.outputPath), { recursive: true });
|
|
302
|
+
writeFileSync(plan.outputPath, cookieFileContent, { encoding: 'utf-8', mode: 0o600 });
|
|
303
|
+
chmodSync(plan.outputPath, 0o600);
|
|
304
|
+
process.stderr.write(`Cookies written to ${plan.outputPath} with mode 0600. Use with: SAP_COOKIE_FILE=${plan.outputPath} SAP_URL=${plan.url} arc-1. Rotate regularly — cookies expire.\n`);
|
|
305
|
+
}
|
|
306
|
+
finally {
|
|
307
|
+
browserProcess.kill('SIGTERM');
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
311
|
+
run().catch((error) => {
|
|
312
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
313
|
+
process.stderr.write(`${message}\n`);
|
|
314
|
+
process.exit(message === PP_REFUSAL_MESSAGE ? 2 : 1);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=extract-sap-cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-sap-cookies.js","sourceRoot":"","sources":["../src/extract-sap-cookies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hyperfocused mode — a single universal `SAP` tool (~200 tokens of schema).
|
|
3
3
|
*
|
|
4
|
-
* Instead of
|
|
4
|
+
* Instead of 12 intent-based tools (~14K tokens), hyperfocused mode exposes
|
|
5
5
|
* a single `SAP` tool that routes to all operations via an `action` parameter.
|
|
6
6
|
* This is useful for token-constrained scenarios (small context windows,
|
|
7
7
|
* cost optimization, or when the LLM already knows the ARC-1 API).
|
|
8
8
|
*
|
|
9
9
|
* Activate with: --tool-mode hyperfocused or ARC1_TOOL_MODE=hyperfocused
|
|
10
10
|
*/
|
|
11
|
+
import type { ResolvedFeatures } from '../adt/types.js';
|
|
11
12
|
import type { ServerConfig } from '../server/types.js';
|
|
12
13
|
import type { ToolDefinition } from './tools.js';
|
|
13
14
|
/**
|
|
14
15
|
* Get the required scope for a hyperfocused action.
|
|
15
|
-
* Must stay consistent with
|
|
16
|
+
* Must stay consistent with ACTION_POLICY.
|
|
16
17
|
*/
|
|
17
18
|
export declare function getHyperfocusedScope(action: string): string;
|
|
18
19
|
/**
|
|
@@ -32,5 +33,5 @@ export declare function expandHyperfocusedArgs(args: Record<string, unknown>): {
|
|
|
32
33
|
/**
|
|
33
34
|
* Get the hyperfocused tool definition (~200 tokens).
|
|
34
35
|
*/
|
|
35
|
-
export declare function getHyperfocusedToolDefinition(config: ServerConfig): ToolDefinition;
|
|
36
|
+
export declare function getHyperfocusedToolDefinition(config: ServerConfig, resolvedFeatures?: ResolvedFeatures): ToolDefinition;
|
|
36
37
|
//# sourceMappingURL=hyperfocused.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyperfocused.d.ts","sourceRoot":"","sources":["../../src/handlers/hyperfocused.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hyperfocused.d.ts","sourceRoot":"","sources":["../../src/handlers/hyperfocused.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChE;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,GACD;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAwBpB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,YAAY,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,cAAc,CA+ChB"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hyperfocused mode — a single universal `SAP` tool (~200 tokens of schema).
|
|
3
3
|
*
|
|
4
|
-
* Instead of
|
|
4
|
+
* Instead of 12 intent-based tools (~14K tokens), hyperfocused mode exposes
|
|
5
5
|
* a single `SAP` tool that routes to all operations via an `action` parameter.
|
|
6
6
|
* This is useful for token-constrained scenarios (small context windows,
|
|
7
7
|
* cost optimization, or when the LLM already knows the ARC-1 API).
|
|
8
8
|
*
|
|
9
9
|
* Activate with: --tool-mode hyperfocused or ARC1_TOOL_MODE=hyperfocused
|
|
10
10
|
*/
|
|
11
|
+
import { getActionPolicy } from '../authz/policy.js';
|
|
11
12
|
/** Map hyperfocused action to the real tool name */
|
|
12
13
|
const ACTION_TO_TOOL = {
|
|
13
14
|
read: 'SAPRead',
|
|
@@ -19,23 +20,16 @@ const ACTION_TO_TOOL = {
|
|
|
19
20
|
lint: 'SAPLint',
|
|
20
21
|
diagnose: 'SAPDiagnose',
|
|
21
22
|
transport: 'SAPTransport',
|
|
23
|
+
git: 'SAPGit',
|
|
22
24
|
context: 'SAPContext',
|
|
23
25
|
manage: 'SAPManage',
|
|
24
26
|
};
|
|
25
|
-
/** Actions that require write scope */
|
|
26
|
-
const WRITE_ACTIONS = new Set(['write', 'activate', 'manage', 'transport']);
|
|
27
|
-
/** Actions that require sql scope */
|
|
28
|
-
const SQL_ACTIONS = new Set(['query']);
|
|
29
27
|
/**
|
|
30
28
|
* Get the required scope for a hyperfocused action.
|
|
31
|
-
* Must stay consistent with
|
|
29
|
+
* Must stay consistent with ACTION_POLICY.
|
|
32
30
|
*/
|
|
33
31
|
export function getHyperfocusedScope(action) {
|
|
34
|
-
|
|
35
|
-
return 'sql';
|
|
36
|
-
if (WRITE_ACTIONS.has(action))
|
|
37
|
-
return 'write';
|
|
38
|
-
return 'read';
|
|
32
|
+
return getActionPolicy('SAP', action)?.scope ?? 'read';
|
|
39
33
|
}
|
|
40
34
|
/**
|
|
41
35
|
* Resolve the real tool name from a hyperfocused action.
|
|
@@ -72,11 +66,26 @@ export function expandHyperfocusedArgs(args) {
|
|
|
72
66
|
/**
|
|
73
67
|
* Get the hyperfocused tool definition (~200 tokens).
|
|
74
68
|
*/
|
|
75
|
-
export function getHyperfocusedToolDefinition(config) {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
69
|
+
export function getHyperfocusedToolDefinition(config, resolvedFeatures) {
|
|
70
|
+
const gitAvailable = resolvedFeatures !== undefined
|
|
71
|
+
? !!(resolvedFeatures.gcts?.available || resolvedFeatures.abapGit?.available)
|
|
72
|
+
: config.featureAbapGit !== 'off' || config.featureGcts !== 'off';
|
|
73
|
+
// Mixed delegators stay visible when their read sub-actions are usable.
|
|
74
|
+
// Mutating sub-actions are enforced downstream by the concrete tool policy.
|
|
75
|
+
const readActions = [
|
|
76
|
+
'read',
|
|
77
|
+
'search',
|
|
78
|
+
...(config.allowFreeSQL ? ['query'] : []),
|
|
79
|
+
'navigate',
|
|
80
|
+
'context',
|
|
81
|
+
'lint',
|
|
82
|
+
'diagnose',
|
|
83
|
+
...(config.featureTransport === 'off' ? [] : ['transport']),
|
|
84
|
+
...(gitAvailable ? ['git'] : []),
|
|
85
|
+
'manage',
|
|
86
|
+
];
|
|
87
|
+
const writeActions = config.allowWrites ? ['write', 'activate'] : [];
|
|
88
|
+
const allActions = [...readActions, ...writeActions];
|
|
80
89
|
return {
|
|
81
90
|
name: 'SAP',
|
|
82
91
|
description: 'Universal SAP tool. Actions: ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyperfocused.js","sourceRoot":"","sources":["../../src/handlers/hyperfocused.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"hyperfocused.js","sourceRoot":"","sources":["../../src/handlers/hyperfocused.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Intent-based tool handler for ARC-1.
|
|
3
3
|
*
|
|
4
4
|
* Routes MCP tool calls to the appropriate ADT client methods.
|
|
5
|
-
* Each of the
|
|
5
|
+
* Each of the 12 tools (SAPRead, SAPSearch, etc.) dispatches
|
|
6
6
|
* based on its `type` or `action` parameter.
|
|
7
7
|
*
|
|
8
8
|
* Error handling: all errors are caught and returned as MCP error
|
|
@@ -24,20 +24,12 @@ export interface ToolResult {
|
|
|
24
24
|
isError?: boolean;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* Scope enforcement is ADDITIVE to the safety system:
|
|
30
|
-
* - Safety system (readOnly, allowedOps, etc.) gates operations at the ADT client level
|
|
31
|
-
* - Scopes gate operations at the MCP tool level (only enforced when authInfo is present)
|
|
32
|
-
* - Both must pass for an operation to succeed
|
|
33
|
-
*
|
|
34
|
-
* A user with `write` scope but `readOnly=true` in config still can't write.
|
|
27
|
+
* Back-compat re-export of a tool→scope map derived from ACTION_POLICY.
|
|
28
|
+
* New code should use `getActionPolicy(tool, action)` directly.
|
|
35
29
|
*/
|
|
36
30
|
export declare const TOOL_SCOPES: Record<string, string>;
|
|
37
31
|
/**
|
|
38
|
-
* Check if authInfo has the required scope,
|
|
39
|
-
* - `write` implies `read`
|
|
40
|
-
* - `sql` implies `data`
|
|
32
|
+
* Check if authInfo has the required scope, routing through policy.hasRequiredScope.
|
|
41
33
|
*/
|
|
42
34
|
export declare function hasRequiredScope(authInfo: AuthInfo, requiredScope: string): boolean;
|
|
43
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/handlers/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/handlers/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAqBxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAkHlD,OAAO,KAAK,EAAsD,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAG5G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAc9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,2BAA2B;AAC3B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiBD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAe9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAKnF;AAqFD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAe1F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CASzD;AAwoBD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,EAC3B,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,UAAU,CAAC,CA+MrB;AA46BD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAyB1E;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CA6NR;AAwCD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAk8FD,0CAA0C;AAC1C,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAE9E;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAEhE;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAEnE;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAE1D"}
|