nowaikit 4.12.0 → 4.15.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 -5
- package/dist/cli/auth.d.ts +13 -0
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +237 -50
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/detect-clients.d.ts.map +1 -1
- package/dist/cli/detect-clients.js +78 -2
- package/dist/cli/detect-clients.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +218 -9
- package/dist/cli/setup.js.map +1 -1
- package/dist/servicenow/client.d.ts +49 -1
- package/dist/servicenow/client.d.ts.map +1 -1
- package/dist/servicenow/client.js +367 -46
- package/dist/servicenow/client.js.map +1 -1
- package/dist/servicenow/instances.d.ts.map +1 -1
- package/dist/servicenow/instances.js +56 -4
- package/dist/servicenow/instances.js.map +1 -1
- package/dist/servicenow/types.d.ts +17 -0
- package/dist/servicenow/types.d.ts.map +1 -1
- package/dist/tools/app-studio.d.ts.map +1 -1
- package/dist/tools/app-studio.js +80 -9
- package/dist/tools/app-studio.js.map +1 -1
- package/dist/tools/change.d.ts.map +1 -1
- package/dist/tools/change.js +3 -1
- package/dist/tools/change.js.map +1 -1
- package/dist/tools/core.d.ts.map +1 -1
- package/dist/tools/core.js +28 -2
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/incident.d.ts.map +1 -1
- package/dist/tools/incident.js +5 -3
- package/dist/tools/incident.js.map +1 -1
- package/dist/tools/index.d.ts +159 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/knowledge.d.ts.map +1 -1
- package/dist/tools/knowledge.js +12 -1
- package/dist/tools/knowledge.js.map +1 -1
- package/dist/tools/notification.d.ts +169 -0
- package/dist/tools/notification.d.ts.map +1 -1
- package/dist/tools/notification.js +88 -9
- package/dist/tools/notification.js.map +1 -1
- package/dist/tools/problem.d.ts.map +1 -1
- package/dist/tools/problem.js +3 -1
- package/dist/tools/problem.js.map +1 -1
- package/dist/tools/updateset.d.ts.map +1 -1
- package/dist/tools/updateset.js +62 -38
- package/dist/tools/updateset.js.map +1 -1
- package/dist/tools-manifest.json +82 -11
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -19,19 +19,26 @@ New in 4.4 to 4.7: **impact analysis** to see what depends on a table, field, or
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
## 🚀
|
|
22
|
+
## 🚀 Get started (2 minutes)
|
|
23
23
|
|
|
24
24
|
> Requires **Node.js 20+**.
|
|
25
25
|
|
|
26
|
+
**1. Install and run the wizard.** It connects you to ServiceNow and writes your AI client's config for you.
|
|
27
|
+
|
|
26
28
|
```bash
|
|
27
|
-
# 1 — install
|
|
28
29
|
npm install -g nowaikit
|
|
30
|
+
nowaikit setup
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
For OAuth the wizard signs in once, detects an existing OAuth app, or creates one for you (with an admin sign-in), or falls back to username/password. No manual OAuth app steps. On newer ServiceNow releases it creates a public client with PKCE (no secret).
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
**2. Sign in as yourself (per-user OAuth only).** Each user runs this once; the browser opens, you approve, and your queries then run in your own ServiceNow permission context.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
nowaikit auth login
|
|
32
39
|
```
|
|
33
40
|
|
|
34
|
-
Restart your AI client (Claude Desktop, Cursor, …) and start asking. Done.
|
|
41
|
+
**3. Restart your AI client** (Claude Desktop, Cursor, …) and start asking. Done.
|
|
35
42
|
|
|
36
43
|
**Keeping it up to date:** NowAIKit checks on startup and, when a newer version is out, asks a single **"Update now?"**. Say yes and it updates itself. You can also run `nowaikit update` any time, or `npm install -g nowaikit@latest`.
|
|
37
44
|
|
package/dist/cli/auth.d.ts
CHANGED
|
@@ -10,5 +10,18 @@ export declare function authLogin(): Promise<void>;
|
|
|
10
10
|
export declare function authLogout(instanceUrl?: string): void;
|
|
11
11
|
export declare function authWhoami(): void;
|
|
12
12
|
export declare function getStoredToken(instanceUrl: string): UserToken | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Return a currently-valid stored token for an instance, refreshing it first if it is expired (or
|
|
15
|
+
* within 60s of expiry) and a refresh token + OAuth client are available. Persists the rotated
|
|
16
|
+
* token. Returns undefined if there is no stored token. Never throws (falls back to the stale token
|
|
17
|
+
* so the caller can still try, and the client will refresh reactively on a 401).
|
|
18
|
+
*/
|
|
19
|
+
export declare function getValidUserToken(instanceUrl: string): Promise<UserToken | undefined>;
|
|
20
|
+
/** Persist a refreshed per-user token (used as the client's onTokenRefreshed callback). */
|
|
21
|
+
export declare function persistRefreshedToken(instanceUrl: string, t: {
|
|
22
|
+
accessToken: string;
|
|
23
|
+
refreshToken: string;
|
|
24
|
+
expiresAt: number;
|
|
25
|
+
}): void;
|
|
13
26
|
export {};
|
|
14
27
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/cli/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AA4DA,UAAU,SAAS;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAqCD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAqI/C;AA4CD,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBrD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAGzE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA4B3F;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAapI"}
|
package/dist/cli/auth.js
CHANGED
|
@@ -5,17 +5,83 @@
|
|
|
5
5
|
* logout — removes stored token
|
|
6
6
|
* whoami — show which ServiceNow user is currently authenticated
|
|
7
7
|
*/
|
|
8
|
-
import { input, password, select } from '@inquirer/prompts';
|
|
8
|
+
import { confirm, input, password, select } from '@inquirer/prompts';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
10
|
import ora from 'ora';
|
|
11
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
11
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
12
12
|
import { homedir } from 'os';
|
|
13
13
|
import { join } from 'path';
|
|
14
|
+
import { createHash, randomBytes } from 'crypto';
|
|
15
|
+
import { createServer } from 'node:http';
|
|
16
|
+
import { spawn } from 'node:child_process';
|
|
14
17
|
import { listInstances } from './config-store.js';
|
|
18
|
+
const b64url = (b) => b.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
19
|
+
/** Open a URL in the user's default browser (best-effort, cross-platform). */
|
|
20
|
+
function openBrowser(url) {
|
|
21
|
+
try {
|
|
22
|
+
if (process.platform === 'darwin') {
|
|
23
|
+
spawn('open', [url], { stdio: 'ignore', detached: true }).unref();
|
|
24
|
+
}
|
|
25
|
+
else if (process.platform === 'win32') {
|
|
26
|
+
// NOT `cmd /c start` — cmd treats the `&` in an OAuth URL as a command separator and breaks it.
|
|
27
|
+
// rundll32 gets the full URL as a single argument, so query strings survive intact.
|
|
28
|
+
spawn('rundll32', ['url.dll,FileProtocolHandler', url], { stdio: 'ignore', detached: true }).unref();
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
spawn('xdg-open', [url], { stdio: 'ignore', detached: true }).unref();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch { /* best effort; the URL is also printed for manual open */ }
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Loopback OAuth capture (RFC 8252): run a tiny local server on the redirect port, open the browser,
|
|
38
|
+
* and capture the ?code= automatically so the user never pastes anything. Rejects if the port can't
|
|
39
|
+
* bind or the flow times out, so the caller can fall back to the manual paste prompt.
|
|
40
|
+
*/
|
|
41
|
+
function captureCodeViaLoopback(authUrl, port) {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const server = createServer((req, res) => {
|
|
44
|
+
try {
|
|
45
|
+
const u = new URL(req.url || '/', `http://127.0.0.1:${port}`);
|
|
46
|
+
if (u.pathname !== '/callback') {
|
|
47
|
+
res.writeHead(404);
|
|
48
|
+
res.end('Not found');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const code = u.searchParams.get('code');
|
|
52
|
+
const err = u.searchParams.get('error');
|
|
53
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
54
|
+
res.end(`<html><body style="font-family:sans-serif;padding:48px;color:#2b2630"><h2 style="color:#2f7256">NowAIKit</h2><p>${code ? 'Signed in. You can close this tab and return to your terminal.' : 'Sign-in failed: ' + (err || 'no authorization code returned')}.</p></body></html>`);
|
|
55
|
+
server.close();
|
|
56
|
+
if (code)
|
|
57
|
+
resolve(code);
|
|
58
|
+
else
|
|
59
|
+
reject(new Error(err || 'no code in callback'));
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
try {
|
|
63
|
+
res.writeHead(500);
|
|
64
|
+
res.end();
|
|
65
|
+
}
|
|
66
|
+
catch { /* noop */ }
|
|
67
|
+
server.close();
|
|
68
|
+
reject(e);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
server.on('error', (e) => reject(e));
|
|
72
|
+
server.listen(port, '127.0.0.1', () => openBrowser(authUrl));
|
|
73
|
+
setTimeout(() => { try {
|
|
74
|
+
server.close();
|
|
75
|
+
}
|
|
76
|
+
catch { /* noop */ } reject(new Error('timed out waiting for browser sign-in')); }, 180_000);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
15
79
|
function tokenPath() {
|
|
16
80
|
const dir = join(homedir(), '.config', 'nowaikit');
|
|
81
|
+
// mode is honored on POSIX (owner-only) and harmlessly ignored on Windows,
|
|
82
|
+
// where the file is already scoped to the user profile.
|
|
17
83
|
if (!existsSync(dir))
|
|
18
|
-
mkdirSync(dir, { recursive: true });
|
|
84
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
19
85
|
return join(dir, 'tokens.json');
|
|
20
86
|
}
|
|
21
87
|
function loadTokens() {
|
|
@@ -30,7 +96,15 @@ function loadTokens() {
|
|
|
30
96
|
}
|
|
31
97
|
}
|
|
32
98
|
function saveTokens(store) {
|
|
33
|
-
|
|
99
|
+
const p = tokenPath();
|
|
100
|
+
// tokens.json holds OAuth access + refresh tokens: keep it owner-only.
|
|
101
|
+
// `mode` only applies when the file is created, so also chmod an existing file.
|
|
102
|
+
// Both are POSIX-effective and safely ignored/no-op on Windows (user-profile scoped).
|
|
103
|
+
writeFileSync(p, JSON.stringify(store, null, 2), { encoding: 'utf8', mode: 0o600 });
|
|
104
|
+
try {
|
|
105
|
+
chmodSync(p, 0o600);
|
|
106
|
+
}
|
|
107
|
+
catch { /* Windows / restricted FS: ignore */ }
|
|
34
108
|
}
|
|
35
109
|
function tokenKey(instanceUrl) {
|
|
36
110
|
return instanceUrl.replace(/https?:\/\//, '').replace(/[^a-z0-9]/gi, '_');
|
|
@@ -55,44 +129,90 @@ export async function authLogin() {
|
|
|
55
129
|
console.log(chalk.dim('Your queries will run in your own ServiceNow permission context.'));
|
|
56
130
|
console.log('');
|
|
57
131
|
if (instance.authMethod === 'oauth' && instance.clientId) {
|
|
58
|
-
// OAuth Authorization Code flow — open browser
|
|
132
|
+
// OAuth Authorization Code flow — open browser.
|
|
133
|
+
// PKCE is added ONLY for public clients (no client secret configured), so existing
|
|
134
|
+
// confidential-client setups keep the exact same request they use today.
|
|
135
|
+
const usePkce = !instance.clientSecret;
|
|
136
|
+
const codeVerifier = usePkce ? b64url(randomBytes(32)) : '';
|
|
137
|
+
const codeChallenge = usePkce ? b64url(createHash('sha256').update(codeVerifier).digest()) : '';
|
|
59
138
|
const authUrl = `${instanceUrl}/oauth_auth.do` +
|
|
60
139
|
`?response_type=code&client_id=${instance.clientId}` +
|
|
61
|
-
`&redirect_uri=http://localhost:8765/callback
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
140
|
+
`&redirect_uri=http://localhost:8765/callback` +
|
|
141
|
+
(usePkce ? `&code_challenge=${codeChallenge}&code_challenge_method=S256` : '');
|
|
142
|
+
// Preferred: loopback capture (RFC 8252) — open the browser and grab the code automatically,
|
|
143
|
+
// no copy/paste. Falls back to manual paste if the local port can't bind or the flow times out.
|
|
144
|
+
let code;
|
|
145
|
+
try {
|
|
146
|
+
console.log(chalk.cyan('Opening your browser to sign in…'));
|
|
147
|
+
console.log(chalk.dim('If it does not open, use this URL:'));
|
|
148
|
+
console.log(chalk.underline(authUrl));
|
|
149
|
+
console.log('');
|
|
150
|
+
code = await captureCodeViaLoopback(authUrl, 8765);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
console.log('');
|
|
154
|
+
console.log(chalk.yellow('Could not capture the sign-in automatically.'));
|
|
155
|
+
console.log(chalk.dim('If the browser showed a ServiceNow error, this instance may not have the NowAIKit OAuth app installed.'));
|
|
156
|
+
console.log(chalk.cyan('Open this URL in your browser to authenticate, then paste the code from the redirect:'));
|
|
157
|
+
console.log(chalk.underline(authUrl));
|
|
158
|
+
console.log('');
|
|
159
|
+
code = await input({
|
|
160
|
+
message: 'Paste the authorization code (or leave blank to sign in with username/password):',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// No OAuth app / user gave up on the browser flow → fall back to the no-app path.
|
|
164
|
+
if (!code || !code.trim()) {
|
|
165
|
+
const useBasic = await confirm({
|
|
166
|
+
message: 'No code entered. Sign in with your ServiceNow username and password instead?',
|
|
167
|
+
default: true,
|
|
168
|
+
});
|
|
169
|
+
if (useBasic)
|
|
170
|
+
return await basicAuthLogin(instanceUrl);
|
|
171
|
+
console.log(chalk.yellow('Sign-in cancelled.'));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
68
174
|
const spinner = ora('Exchanging authorization code for token…').start();
|
|
69
175
|
try {
|
|
176
|
+
const tokenBody = new URLSearchParams({
|
|
177
|
+
grant_type: 'authorization_code',
|
|
178
|
+
client_id: instance.clientId,
|
|
179
|
+
code,
|
|
180
|
+
redirect_uri: 'http://localhost:8765/callback',
|
|
181
|
+
});
|
|
182
|
+
if (instance.clientSecret)
|
|
183
|
+
tokenBody.set('client_secret', instance.clientSecret);
|
|
184
|
+
if (usePkce)
|
|
185
|
+
tokenBody.set('code_verifier', codeVerifier);
|
|
70
186
|
const resp = await fetch(`${instanceUrl}/oauth_token.do`, {
|
|
71
187
|
method: 'POST',
|
|
72
188
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
73
|
-
body:
|
|
74
|
-
grant_type: 'authorization_code',
|
|
75
|
-
client_id: instance.clientId,
|
|
76
|
-
client_secret: instance.clientSecret || '',
|
|
77
|
-
code,
|
|
78
|
-
redirect_uri: 'http://localhost:8765/callback',
|
|
79
|
-
}).toString(),
|
|
189
|
+
body: tokenBody.toString(),
|
|
80
190
|
});
|
|
81
191
|
if (!resp.ok) {
|
|
82
192
|
spinner.fail(chalk.red(`Token exchange failed: ${resp.status} ${resp.statusText}`));
|
|
193
|
+
// 400/401 here usually means the OAuth app is missing or misconfigured on this instance.
|
|
194
|
+
if (resp.status === 400 || resp.status === 401) {
|
|
195
|
+
const useBasic = await confirm({
|
|
196
|
+
message: 'The OAuth app may not be set up on this instance. Sign in with username and password instead?',
|
|
197
|
+
default: true,
|
|
198
|
+
});
|
|
199
|
+
if (useBasic)
|
|
200
|
+
return await basicAuthLogin(instanceUrl);
|
|
201
|
+
}
|
|
83
202
|
return;
|
|
84
203
|
}
|
|
85
204
|
const data = await resp.json();
|
|
86
|
-
//
|
|
87
|
-
|
|
205
|
+
// Identify the ServiceNow user this token belongs to via the current-user endpoint
|
|
206
|
+
// (the old sys_idINSTANCEOF query matched nothing → always "unknown").
|
|
207
|
+
const meResp = await fetch(`${instanceUrl}/api/now/ui/user/current_user`, {
|
|
88
208
|
headers: {
|
|
89
209
|
Authorization: `Bearer ${data.access_token}`,
|
|
90
210
|
Accept: 'application/json',
|
|
91
211
|
},
|
|
92
212
|
});
|
|
93
213
|
const meData = await meResp.json();
|
|
94
|
-
const
|
|
95
|
-
const
|
|
214
|
+
const snUser = meData.result?.user_name || meData.result?.name || 'unknown';
|
|
215
|
+
const snUserSysId = meData.result?.user_sys_id || meData.result?.sys_id || '';
|
|
96
216
|
const store = loadTokens();
|
|
97
217
|
store.tokens[tokenKey(instanceUrl)] = {
|
|
98
218
|
instanceUrl,
|
|
@@ -110,34 +230,44 @@ export async function authLogin() {
|
|
|
110
230
|
}
|
|
111
231
|
}
|
|
112
232
|
else {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
};
|
|
135
|
-
saveTokens(store);
|
|
136
|
-
spinner.succeed(chalk.green(`Saved credentials for ${username} on ${instanceUrl}`));
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
spinner.fail(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
233
|
+
await basicAuthLogin(instanceUrl);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Per-user basic-auth login — the fallback that needs NO OAuth app on the instance. The user enters
|
|
238
|
+
* their own ServiceNow username and password, so queries still run in their own permission context.
|
|
239
|
+
* Works only where the instance permits basic REST auth and the user has a local password; on
|
|
240
|
+
* SSO-only / MFA-enforced instances this is not available and the OAuth app (or Entra) is required.
|
|
241
|
+
*/
|
|
242
|
+
async function basicAuthLogin(instanceUrl) {
|
|
243
|
+
const username = await input({ message: 'Your ServiceNow username:' });
|
|
244
|
+
const pass = await password({ message: 'Your ServiceNow password:', mask: '•' });
|
|
245
|
+
const spinner = ora('Verifying credentials…').start();
|
|
246
|
+
try {
|
|
247
|
+
const creds = Buffer.from(`${username}:${pass}`).toString('base64');
|
|
248
|
+
const resp = await fetch(`${instanceUrl}/api/now/table/sys_user?sysparm_query=user_name=${encodeURIComponent(username)}&sysparm_limit=1`, { headers: { Authorization: `Basic ${creds}`, Accept: 'application/json' } });
|
|
249
|
+
if (!resp.ok) {
|
|
250
|
+
spinner.fail(chalk.red(`Auth failed: ${resp.status} ${resp.statusText}`));
|
|
251
|
+
if (resp.status === 401)
|
|
252
|
+
console.log(chalk.dim('If this instance is SSO-only or blocks basic REST auth, use the OAuth app path instead.'));
|
|
253
|
+
return;
|
|
140
254
|
}
|
|
255
|
+
const data = await resp.json();
|
|
256
|
+
const snUserSysId = data.result?.[0]?.sys_id?.value || '';
|
|
257
|
+
const store = loadTokens();
|
|
258
|
+
store.tokens[tokenKey(instanceUrl)] = {
|
|
259
|
+
instanceUrl,
|
|
260
|
+
accessToken: creds,
|
|
261
|
+
refreshToken: '',
|
|
262
|
+
expiresAt: Date.now() + 365 * 24 * 60 * 60 * 1000, // basic auth doesn't expire
|
|
263
|
+
snUser: username,
|
|
264
|
+
snUserSysId,
|
|
265
|
+
};
|
|
266
|
+
saveTokens(store);
|
|
267
|
+
spinner.succeed(chalk.green(`Saved credentials for ${username} on ${instanceUrl}`));
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
spinner.fail(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
141
271
|
}
|
|
142
272
|
}
|
|
143
273
|
export function authLogout(instanceUrl) {
|
|
@@ -176,4 +306,61 @@ export function getStoredToken(instanceUrl) {
|
|
|
176
306
|
const store = loadTokens();
|
|
177
307
|
return store.tokens[tokenKey(instanceUrl)];
|
|
178
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Return a currently-valid stored token for an instance, refreshing it first if it is expired (or
|
|
311
|
+
* within 60s of expiry) and a refresh token + OAuth client are available. Persists the rotated
|
|
312
|
+
* token. Returns undefined if there is no stored token. Never throws (falls back to the stale token
|
|
313
|
+
* so the caller can still try, and the client will refresh reactively on a 401).
|
|
314
|
+
*/
|
|
315
|
+
export async function getValidUserToken(instanceUrl) {
|
|
316
|
+
const store = loadTokens();
|
|
317
|
+
const key = tokenKey(instanceUrl);
|
|
318
|
+
const t = store.tokens[key];
|
|
319
|
+
if (!t)
|
|
320
|
+
return undefined;
|
|
321
|
+
// Basic-auth stored creds (no refresh token) or a token that is still fresh: use as-is.
|
|
322
|
+
if (!t.refreshToken || Date.now() < t.expiresAt - 60_000)
|
|
323
|
+
return t;
|
|
324
|
+
const inst = listInstances().find(i => i.instanceUrl === instanceUrl);
|
|
325
|
+
if (!inst?.clientId)
|
|
326
|
+
return t; // cannot refresh without the OAuth client id
|
|
327
|
+
try {
|
|
328
|
+
const body = new URLSearchParams({ grant_type: 'refresh_token', client_id: inst.clientId, refresh_token: t.refreshToken });
|
|
329
|
+
if (inst.clientSecret)
|
|
330
|
+
body.set('client_secret', inst.clientSecret);
|
|
331
|
+
const resp = await fetch(`${instanceUrl}/oauth_token.do`, {
|
|
332
|
+
method: 'POST',
|
|
333
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
334
|
+
body: body.toString(),
|
|
335
|
+
});
|
|
336
|
+
if (!resp.ok)
|
|
337
|
+
return t;
|
|
338
|
+
const data = await resp.json();
|
|
339
|
+
t.accessToken = data.access_token;
|
|
340
|
+
if (data.refresh_token)
|
|
341
|
+
t.refreshToken = data.refresh_token;
|
|
342
|
+
t.expiresAt = Date.now() + (data.expires_in ? data.expires_in * 1000 * 0.9 : 25 * 60 * 1000);
|
|
343
|
+
store.tokens[key] = t;
|
|
344
|
+
saveTokens(store);
|
|
345
|
+
return t;
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
return t;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/** Persist a refreshed per-user token (used as the client's onTokenRefreshed callback). */
|
|
352
|
+
export function persistRefreshedToken(instanceUrl, t) {
|
|
353
|
+
const store = loadTokens();
|
|
354
|
+
const key = tokenKey(instanceUrl);
|
|
355
|
+
const existing = store.tokens[key];
|
|
356
|
+
store.tokens[key] = {
|
|
357
|
+
instanceUrl,
|
|
358
|
+
accessToken: t.accessToken,
|
|
359
|
+
refreshToken: t.refreshToken,
|
|
360
|
+
expiresAt: t.expiresAt,
|
|
361
|
+
snUser: existing?.snUser || 'unknown',
|
|
362
|
+
snUserSysId: existing?.snUserSysId || '',
|
|
363
|
+
};
|
|
364
|
+
saveTokens(store);
|
|
365
|
+
}
|
|
179
366
|
//# sourceMappingURL=auth.js.map
|
package/dist/cli/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-clients.d.ts","sourceRoot":"","sources":["../../src/cli/detect-clients.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"detect-clients.d.ts","sourceRoot":"","sources":["../../src/cli/detect-clients.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuGD,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAiMhD"}
|
|
@@ -27,6 +27,34 @@ function appExists(macPath, winExe, linuxBin) {
|
|
|
27
27
|
}
|
|
28
28
|
return which(linuxBin);
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* VS Code's GLOBAL (user-profile) MCP config, which applies across every workspace — unlike the
|
|
32
|
+
* project-level .vscode/mcp.json. Path is platform-specific:
|
|
33
|
+
* macOS ~/Library/Application Support/Code/User/mcp.json
|
|
34
|
+
* Windows %APPDATA%\Code\User\mcp.json
|
|
35
|
+
* Linux ~/.config/Code/User/mcp.json
|
|
36
|
+
*/
|
|
37
|
+
function vscodeUserConfigPath() {
|
|
38
|
+
const p = process.platform;
|
|
39
|
+
if (p === 'darwin')
|
|
40
|
+
return join(homedir(), 'Library', 'Application Support', 'Code', 'User', 'mcp.json');
|
|
41
|
+
if (p === 'win32')
|
|
42
|
+
return join(process.env['APPDATA'] || join(homedir(), 'AppData', 'Roaming'), 'Code', 'User', 'mcp.json');
|
|
43
|
+
return join(homedir(), '.config', 'Code', 'User', 'mcp.json');
|
|
44
|
+
}
|
|
45
|
+
/** VS Code User directory (holds extension globalStorage), platform-specific. */
|
|
46
|
+
function vscodeUserDir() {
|
|
47
|
+
const p = process.platform;
|
|
48
|
+
if (p === 'darwin')
|
|
49
|
+
return join(homedir(), 'Library', 'Application Support', 'Code', 'User');
|
|
50
|
+
if (p === 'win32')
|
|
51
|
+
return join(process.env['APPDATA'] || join(homedir(), 'AppData', 'Roaming'), 'Code', 'User');
|
|
52
|
+
return join(homedir(), '.config', 'Code', 'User');
|
|
53
|
+
}
|
|
54
|
+
/** Cline stores MCP config in its VS Code extension globalStorage (uses the standard mcpServers key). */
|
|
55
|
+
function clineConfigPath() {
|
|
56
|
+
return join(vscodeUserDir(), 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
|
|
57
|
+
}
|
|
30
58
|
/**
|
|
31
59
|
* Robust Claude Desktop detection. The config file only appears once you've added an MCP server,
|
|
32
60
|
* so a fresh install shows nothing there. Check the config FOLDER (created on first launch), and on
|
|
@@ -124,11 +152,13 @@ export function detectClients() {
|
|
|
124
152
|
id: 'vscode',
|
|
125
153
|
name: 'VS Code (GitHub Copilot)',
|
|
126
154
|
detected: false,
|
|
127
|
-
|
|
155
|
+
// Global user config → works in every workspace (was project-only .vscode/mcp.json, which
|
|
156
|
+
// depended on where setup was run). Cross-platform via vscodeUserConfigPath().
|
|
157
|
+
configPath: vscodeUserConfigPath(),
|
|
128
158
|
configKey: 'servers',
|
|
129
159
|
writeMethod: 'json-servers',
|
|
130
160
|
requiresRestart: false,
|
|
131
|
-
note: 'VS Code
|
|
161
|
+
note: 'Written to your global VS Code MCP config (all workspaces). A project-level .vscode/mcp.json also works. Needs VS Code 1.102+ with MCP enabled.',
|
|
132
162
|
},
|
|
133
163
|
{
|
|
134
164
|
id: 'windsurf',
|
|
@@ -152,6 +182,38 @@ export function detectClients() {
|
|
|
152
182
|
requiresRestart: false,
|
|
153
183
|
note: 'Continue.dev will pick up the change automatically.',
|
|
154
184
|
},
|
|
185
|
+
{
|
|
186
|
+
id: 'antigravity',
|
|
187
|
+
name: 'Antigravity (Google)',
|
|
188
|
+
detected: false,
|
|
189
|
+
// Antigravity reads ~/.gemini/antigravity/mcp_config.json on every platform (standard format).
|
|
190
|
+
configPath: join(home, '.gemini', 'antigravity', 'mcp_config.json'),
|
|
191
|
+
configKey: 'mcpServers',
|
|
192
|
+
writeMethod: 'json-mcpServers',
|
|
193
|
+
requiresRestart: true,
|
|
194
|
+
note: 'Restart Antigravity (or Manage MCP Servers → reload) to activate.',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: 'cline',
|
|
198
|
+
name: 'Cline (VS Code)',
|
|
199
|
+
detected: false,
|
|
200
|
+
configPath: clineConfigPath(),
|
|
201
|
+
configKey: 'mcpServers',
|
|
202
|
+
writeMethod: 'json-mcpServers',
|
|
203
|
+
requiresRestart: false,
|
|
204
|
+
note: 'Cline picks up the change automatically. (VS Code Insiders/VSCodium use a different folder.)',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: 'gemini-cli',
|
|
208
|
+
name: 'Gemini CLI',
|
|
209
|
+
detected: false,
|
|
210
|
+
// Global settings ~/.gemini/settings.json (mcpServers). Project .gemini/settings.json also works.
|
|
211
|
+
configPath: join(home, '.gemini', 'settings.json'),
|
|
212
|
+
configKey: 'mcpServers',
|
|
213
|
+
writeMethod: 'json-mcpServers',
|
|
214
|
+
requiresRestart: true,
|
|
215
|
+
note: 'Restart the Gemini CLI session to load the server.',
|
|
216
|
+
},
|
|
155
217
|
{
|
|
156
218
|
id: 'claude-code',
|
|
157
219
|
name: 'Claude Code (CLI)',
|
|
@@ -210,6 +272,20 @@ export function detectClients() {
|
|
|
210
272
|
if (c.id === 'continue') {
|
|
211
273
|
return { ...c, detected: existsSync(c.configPath) };
|
|
212
274
|
}
|
|
275
|
+
if (c.id === 'antigravity') {
|
|
276
|
+
return {
|
|
277
|
+
...c,
|
|
278
|
+
detected: existsSync(c.configPath) || existsSync(dirname(c.configPath)) ||
|
|
279
|
+
appExists('/Applications/Antigravity.app', join('Programs', 'Antigravity', 'Antigravity.exe'), 'antigravity'),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
if (c.id === 'cline') {
|
|
283
|
+
// Detect via the extension's globalStorage folder (created once Cline runs).
|
|
284
|
+
return { ...c, detected: existsSync(c.configPath) || existsSync(dirname(c.configPath)) };
|
|
285
|
+
}
|
|
286
|
+
if (c.id === 'gemini-cli') {
|
|
287
|
+
return { ...c, detected: existsSync(c.configPath) || existsSync(dirname(c.configPath)) || which('gemini') };
|
|
288
|
+
}
|
|
213
289
|
if (c.id === 'claude-code') {
|
|
214
290
|
return { ...c, detected: which('claude') };
|
|
215
291
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/cli/detect-clients.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAkBzC,SAAS,KAAK,CAAC,GAAW;IACxB,IAAI,CAAC;QACH,0CAA0C;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;QAC3E,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB;IAClE,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,UAAkB;IAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3B,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,YAAY,CAAC;YAC1C,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC;YAC7C,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,CAAC;SACvD,CAAC;QACF,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,gFAAgF;QAChF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB;IAC5B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,wEAAwE;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3E,+EAA+E;QAC/E,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3E,mFAAmF;IACnF,MAAM,mBAAmB,GACvB,CAAC,KAAK,OAAO;QACX,CAAC,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC;QAClF,CAAC,CAAC,CAAC,KAAK,QAAQ;YAChB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC;YACtF,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAEpE,MAAM,OAAO,GAAqB;QAChC;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,mBAAmB;YAC/B,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,iBAAiB;YAC9B,eAAe,EAAE,IAAI;YACrB,IAAI,EAAE,kGAAkG;SACzG;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,2EAA2E;YAC3E,2DAA2D;YAC3D,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YAC7C,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,iBAAiB;YAC9B,eAAe,EAAE,IAAI;YACrB,IAAI,EAAE,sEAAsE;SAC7E;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"detect-clients.js","sourceRoot":"","sources":["../../src/cli/detect-clients.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AA8fA,wBAAsB,QAAQ,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA62B7E"}
|