offrouter-core 0.5.0 → 0.6.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/audit.d.ts +51 -2
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +60 -3
- package/dist/audit.js.map +1 -1
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +160 -1
- package/dist/config.js.map +1 -1
- package/dist/delegation.d.ts +40 -0
- package/dist/delegation.d.ts.map +1 -1
- package/dist/delegation.js +169 -8
- package/dist/delegation.js.map +1 -1
- package/dist/index.d.ts +27 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/llm-judge.d.ts +41 -0
- package/dist/llm-judge.d.ts.map +1 -0
- package/dist/llm-judge.js +159 -0
- package/dist/llm-judge.js.map +1 -0
- package/dist/policy.d.ts +77 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +81 -0
- package/dist/policy.js.map +1 -1
- package/dist/provider-health.d.ts +129 -0
- package/dist/provider-health.d.ts.map +1 -0
- package/dist/provider-health.js +423 -0
- package/dist/provider-health.js.map +1 -0
- package/dist/providers/catalog-data.d.ts +7 -0
- package/dist/providers/catalog-data.d.ts.map +1 -1
- package/dist/providers/catalog-data.js +140 -53
- package/dist/providers/catalog-data.js.map +1 -1
- package/dist/providers/catalog.d.ts +3 -3
- package/dist/providers/catalog.d.ts.map +1 -1
- package/dist/providers/catalog.js +1 -0
- package/dist/providers/catalog.js.map +1 -1
- package/dist/proxy/anthropic-mapper.d.ts +585 -0
- package/dist/proxy/anthropic-mapper.d.ts.map +1 -0
- package/dist/proxy/anthropic-mapper.js +539 -0
- package/dist/proxy/anthropic-mapper.js.map +1 -0
- package/dist/proxy/anthropic-server.d.ts +24 -0
- package/dist/proxy/anthropic-server.d.ts.map +1 -0
- package/dist/proxy/anthropic-server.js +606 -0
- package/dist/proxy/anthropic-server.js.map +1 -0
- package/dist/proxy/classify.d.ts +17 -0
- package/dist/proxy/classify.d.ts.map +1 -0
- package/dist/proxy/classify.js +65 -0
- package/dist/proxy/classify.js.map +1 -0
- package/dist/proxy/responses-mapper.d.ts +15 -0
- package/dist/proxy/responses-mapper.d.ts.map +1 -1
- package/dist/proxy/responses-mapper.js +9 -2
- package/dist/proxy/responses-mapper.js.map +1 -1
- package/dist/proxy/responses-server.d.ts.map +1 -1
- package/dist/proxy/responses-server.js +14 -1
- package/dist/proxy/responses-server.js.map +1 -1
- package/dist/router.d.ts +36 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +158 -23
- package/dist/router.js.map +1 -1
- package/dist/schemas.d.ts +115 -34
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +35 -0
- package/dist/schemas.js.map +1 -1
- package/dist/secret-scan.d.ts +40 -0
- package/dist/secret-scan.d.ts.map +1 -0
- package/dist/secret-scan.js +125 -0
- package/dist/secret-scan.js.map +1 -0
- package/dist/secrets.d.ts +77 -6
- package/dist/secrets.d.ts.map +1 -1
- package/dist/secrets.js +356 -32
- package/dist/secrets.js.map +1 -1
- package/dist/spend.d.ts +122 -0
- package/dist/spend.d.ts.map +1 -0
- package/dist/spend.js +279 -0
- package/dist/spend.js.map +1 -0
- package/dist/task-classifier.d.ts +45 -0
- package/dist/task-classifier.d.ts.map +1 -0
- package/dist/task-classifier.js +153 -0
- package/dist/task-classifier.js.map +1 -0
- package/dist/types.d.ts +46 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/usage-file.d.ts +2 -6
- package/dist/usage-file.d.ts.map +1 -1
- package/dist/usage-file.js +64 -6
- package/dist/usage-file.js.map +1 -1
- package/dist/usage.d.ts +64 -10
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +79 -5
- package/dist/usage.js.map +1 -1
- package/package.json +1 -1
package/dist/secrets.js
CHANGED
|
@@ -3,37 +3,63 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Secrets are stored only by OffRouter under user control:
|
|
5
5
|
* - FileSecretStore: `secrets.json` fallback (chmod 0600 on POSIX)
|
|
6
|
-
* - KeychainSecretStore:
|
|
6
|
+
* - KeychainSecretStore: macOS Keychain via `/usr/bin/security` (darwin only)
|
|
7
7
|
*
|
|
8
8
|
* Never scrapes, copies, or reverse-engineers credentials from other CLIs.
|
|
9
9
|
* No network access. No live credential discovery.
|
|
10
10
|
*/
|
|
11
11
|
import { readFileSync } from "node:fs";
|
|
12
12
|
import { mkdir, readFile, rename, unlink, writeFile, chmod, } from "node:fs/promises";
|
|
13
|
-
import { dirname } from "node:path";
|
|
13
|
+
import { dirname, join } from "node:path";
|
|
14
14
|
import { randomBytes } from "node:crypto";
|
|
15
|
-
|
|
15
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
16
|
+
import { promisify } from "node:util";
|
|
17
|
+
import { homedir as osHomedir } from "node:os";
|
|
18
|
+
const execFileAsync = promisify(execFileCallback);
|
|
16
19
|
/** Placeholder substituted for secret material in log-safe strings. */
|
|
17
20
|
export const REDACTED = "[REDACTED]";
|
|
18
21
|
const DEFAULT_KEYCHAIN_SERVICE = "offrouter";
|
|
22
|
+
const DEFAULT_KEYCHAIN_SCOPE = "default";
|
|
19
23
|
const DEFAULT_ACCOUNT_PREFIX = "provider:";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const DEFAULT_SECURITY_PATH = "/usr/bin/security";
|
|
25
|
+
/** security(1) exit status when a generic-password item is not found. */
|
|
26
|
+
const SECURITY_ERR_SEC_ITEM_NOT_FOUND = 44;
|
|
27
|
+
const KEYCHAIN_UNAVAILABLE_MESSAGE = "OS keychain backend is not wired in this OffRouter build. " +
|
|
28
|
+
"OffRouter will not scrape other CLI credential stores. Use FileSecretStore for tests, or approve an " +
|
|
29
|
+
"explicit file fallback for real runs when keychain is unavailable.";
|
|
30
|
+
export const SECRET_PATTERNS = [
|
|
26
31
|
// Anthropic: sk-ant-...
|
|
27
|
-
/\bsk-ant-[a-zA-Z0-9_-]{16,}\b/g,
|
|
28
|
-
// OpenAI /
|
|
29
|
-
/\bsk-[a-zA-Z0-9_-]{16,}\b/g,
|
|
32
|
+
{ name: "anthropic_api_key", pattern: /\bsk-ant-[a-zA-Z0-9_-]{16,}\b/g },
|
|
33
|
+
// OpenAI project / service-account style (before generic sk-)
|
|
34
|
+
{ name: "openai_project_key", pattern: /\bsk-proj-[a-zA-Z0-9_-]{16,}\b/g },
|
|
35
|
+
// OpenAI / OpenRouter-style: sk-... (including sk-live-, etc.)
|
|
36
|
+
{ name: "openai_api_key", pattern: /\bsk-[a-zA-Z0-9_-]{16,}\b/g },
|
|
30
37
|
// Google API keys
|
|
31
|
-
/\bAIza[0-9A-Za-z_-]{20,}\b/g,
|
|
38
|
+
{ name: "google_api_key", pattern: /\bAIza[0-9A-Za-z_-]{20,}\b/g },
|
|
32
39
|
// Bearer tokens in Authorization headers / log lines
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
{
|
|
41
|
+
name: "bearer_token",
|
|
42
|
+
pattern: /\bBearer\s+[A-Za-z0-9._\-+=/]{16,}\b/gi,
|
|
43
|
+
},
|
|
44
|
+
// Slack bot tokens
|
|
45
|
+
{ name: "slack_bot_token", pattern: /\bxoxb-[0-9A-Za-z-]{10,}\b/g },
|
|
46
|
+
// GitHub personal access tokens (classic)
|
|
47
|
+
{ name: "github_pat", pattern: /\bghp_[A-Za-z0-9]{20,}\b/g },
|
|
48
|
+
// AWS access key IDs
|
|
49
|
+
{ name: "aws_access_key_id", pattern: /\bAKIA[0-9A-Z]{16}\b/g },
|
|
50
|
+
// PEM private key headers
|
|
51
|
+
{
|
|
52
|
+
name: "pem_private_key",
|
|
53
|
+
pattern: /-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/g,
|
|
54
|
+
},
|
|
55
|
+
// Generic key=value / key: value where the key name looks secret-ish
|
|
56
|
+
{
|
|
57
|
+
name: "generic_secret_assignment",
|
|
58
|
+
pattern: /\b(?:api[_-]?key|secret[_-]?key|access[_-]?token|auth[_-]?token|private[_-]?key|client[_-]?secret)\b\s*[=:]\s*["']?[^\s"']{8,}/gi,
|
|
59
|
+
},
|
|
36
60
|
];
|
|
61
|
+
/** Flat list used by redact() — same patterns, name discarded. */
|
|
62
|
+
const API_KEY_PATTERNS = SECRET_PATTERNS.map((p) => p.pattern);
|
|
37
63
|
function assertProviderId(providerId) {
|
|
38
64
|
if (typeof providerId !== "string" || providerId.trim() === "") {
|
|
39
65
|
throw new TypeError("providerId must be a non-empty string");
|
|
@@ -216,57 +242,355 @@ export class KeychainUnavailableError extends Error {
|
|
|
216
242
|
this.name = "KeychainUnavailableError";
|
|
217
243
|
}
|
|
218
244
|
}
|
|
245
|
+
function defaultKeychainIndexPath() {
|
|
246
|
+
const override = process.env.OFFROUTER_HOME?.trim();
|
|
247
|
+
const home = override && override.length > 0 ? override : join(osHomedir(), ".offrouter");
|
|
248
|
+
return join(home, "keychain-index.json");
|
|
249
|
+
}
|
|
250
|
+
function asExecError(err) {
|
|
251
|
+
if (err && typeof err === "object") {
|
|
252
|
+
return err;
|
|
253
|
+
}
|
|
254
|
+
return { message: String(err) };
|
|
255
|
+
}
|
|
256
|
+
function bufferToString(value) {
|
|
257
|
+
if (value == null)
|
|
258
|
+
return "";
|
|
259
|
+
return typeof value === "string" ? value : value.toString("utf8");
|
|
260
|
+
}
|
|
261
|
+
/** Encode utf8 bytes as lowercase hex for `security ... -X`. */
|
|
262
|
+
function toHexUtf8(value) {
|
|
263
|
+
return Buffer.from(value, "utf8").toString("hex");
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Escape a token for a single-line `security -i` command so account/service
|
|
267
|
+
* ids with spaces or quotes cannot break the interactive command line.
|
|
268
|
+
* Hex passwords (`-X`) are [0-9a-f] only and need no further escaping.
|
|
269
|
+
*/
|
|
270
|
+
function securityInteractiveToken(value) {
|
|
271
|
+
// Reject control chars / newlines that would break the -i command stream.
|
|
272
|
+
if (value.includes("\r") || value.includes("\n") || value.includes("\0")) {
|
|
273
|
+
throw new TypeError("keychain attribute must not contain CR, LF, or NUL");
|
|
274
|
+
}
|
|
275
|
+
if (/^[A-Za-z0-9_.:@/+-]+$/.test(value)) {
|
|
276
|
+
return value;
|
|
277
|
+
}
|
|
278
|
+
// Double-quote and escape embedded quotes/backslashes.
|
|
279
|
+
const escaped = value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
280
|
+
return `"${escaped}"`;
|
|
281
|
+
}
|
|
219
282
|
/**
|
|
220
|
-
*
|
|
283
|
+
* macOS Keychain-backed secret store.
|
|
221
284
|
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
285
|
+
* Uses `/usr/bin/security` via `child_process.execFile` (argv only — never a
|
|
286
|
+
* shell). OffRouter only reads entries it wrote under the namespaced service
|
|
287
|
+
* `${service}:${scope}` (default `offrouter:default`). Account names are
|
|
288
|
+
* `${accountPrefix}${providerId}` (default `provider:<id>`).
|
|
289
|
+
*
|
|
290
|
+
* Secret values are written via `security -i` (interactive command mode):
|
|
291
|
+
* a single `add-generic-password ... -U -X <hex>` line is sent on stdin. The
|
|
292
|
+
* process argv is only `security -i`, so the secret never appears in `ps`.
|
|
293
|
+
* (Bare `security add-generic-password -w` without a value reads `/dev/tty`,
|
|
294
|
+
* not a pipe — that path is intentionally avoided.)
|
|
295
|
+
*
|
|
296
|
+
* Listing cannot be done safely via `security dump-keychain` (it dumps the
|
|
297
|
+
* entire keychain). Instead, a non-secret index of provider ids is maintained
|
|
298
|
+
* at `indexPath` (default `$OFFROUTER_HOME/keychain-index.json`). The index
|
|
299
|
+
* never contains secret values and is written with mode 0600.
|
|
300
|
+
*
|
|
301
|
+
* Non-darwin platforms throw KeychainUnavailableError with the same message
|
|
302
|
+
* shape historical callers expect (`OS keychain backend is not wired...`).
|
|
303
|
+
* Tests must inject `execFile` and must never touch the real keychain.
|
|
226
304
|
*/
|
|
227
305
|
export class KeychainSecretStore {
|
|
228
306
|
service;
|
|
229
307
|
accountPrefix;
|
|
308
|
+
scope;
|
|
309
|
+
indexPath;
|
|
310
|
+
securityPath;
|
|
311
|
+
#platform;
|
|
312
|
+
#execFile;
|
|
313
|
+
#fs;
|
|
314
|
+
#available;
|
|
315
|
+
/** In-process cache of secrets known to this instance (for redact only). */
|
|
316
|
+
#knownSecrets = new Map();
|
|
230
317
|
constructor(options = {}) {
|
|
231
318
|
this.service = options.service?.trim() || DEFAULT_KEYCHAIN_SERVICE;
|
|
232
319
|
this.accountPrefix =
|
|
233
320
|
options.accountPrefix === undefined
|
|
234
321
|
? DEFAULT_ACCOUNT_PREFIX
|
|
235
322
|
: options.accountPrefix;
|
|
323
|
+
this.scope = options.scope?.trim() || DEFAULT_KEYCHAIN_SCOPE;
|
|
324
|
+
this.indexPath = options.indexPath ?? defaultKeychainIndexPath();
|
|
325
|
+
this.securityPath = options.securityPath ?? DEFAULT_SECURITY_PATH;
|
|
326
|
+
this.#platform = options.platform ?? process.platform;
|
|
327
|
+
this.#execFile = options.execFile ?? execFileAsync;
|
|
328
|
+
this.#fs = {
|
|
329
|
+
mkdir,
|
|
330
|
+
readFile,
|
|
331
|
+
rename,
|
|
332
|
+
unlink,
|
|
333
|
+
writeFile,
|
|
334
|
+
chmod,
|
|
335
|
+
...options.fileSystem,
|
|
336
|
+
};
|
|
337
|
+
this.#available = this.#platform === "darwin";
|
|
338
|
+
}
|
|
339
|
+
/** security(1) `-s` service string: `offrouter:<scope>`. */
|
|
340
|
+
get securityService() {
|
|
341
|
+
return `${this.service}:${this.scope}`;
|
|
236
342
|
}
|
|
237
343
|
async get(providerId) {
|
|
238
344
|
assertProviderId(providerId);
|
|
239
|
-
this.#
|
|
345
|
+
this.#ensureAvailable("get");
|
|
346
|
+
const account = this.#accountName(providerId);
|
|
347
|
+
try {
|
|
348
|
+
const { stdout } = await this.#runSecurity(["find-generic-password", "-a", account, "-s", this.securityService, "-w"], { secretForScrub: undefined });
|
|
349
|
+
// security -w prints the password followed by a trailing newline.
|
|
350
|
+
const value = bufferToString(stdout).replace(/\r?\n$/, "");
|
|
351
|
+
if (value.length === 0) {
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
this.#knownSecrets.set(providerId, value);
|
|
355
|
+
return value;
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
if (this.#isNotFound(err)) {
|
|
359
|
+
return undefined;
|
|
360
|
+
}
|
|
361
|
+
throw this.#wrapSecurityError("get", err);
|
|
362
|
+
}
|
|
240
363
|
}
|
|
241
364
|
async set(providerId, secret) {
|
|
242
365
|
assertProviderId(providerId);
|
|
243
366
|
assertSecret(secret);
|
|
244
|
-
this.#
|
|
367
|
+
this.#ensureAvailable("set");
|
|
368
|
+
const account = this.#accountName(providerId);
|
|
369
|
+
// security -i reads commands from stdin. Password is hex-encoded via -X so
|
|
370
|
+
// the raw secret never lands in process argv (visible to `ps`). Bare
|
|
371
|
+
// `add-generic-password -w` without a value reads /dev/tty, not a pipe.
|
|
372
|
+
const hex = toHexUtf8(secret);
|
|
373
|
+
const command = [
|
|
374
|
+
"add-generic-password",
|
|
375
|
+
"-a",
|
|
376
|
+
securityInteractiveToken(account),
|
|
377
|
+
"-s",
|
|
378
|
+
securityInteractiveToken(this.securityService),
|
|
379
|
+
"-U",
|
|
380
|
+
"-X",
|
|
381
|
+
hex,
|
|
382
|
+
].join(" ") + "\n";
|
|
383
|
+
try {
|
|
384
|
+
await this.#runSecurity(["-i"], {
|
|
385
|
+
input: command,
|
|
386
|
+
secretForScrub: secret,
|
|
387
|
+
extraScrub: [hex],
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
throw this.#wrapSecurityError("set", err, secret, [hex]);
|
|
392
|
+
}
|
|
393
|
+
this.#knownSecrets.set(providerId, secret);
|
|
394
|
+
await this.#indexAdd(providerId);
|
|
245
395
|
}
|
|
246
396
|
async delete(providerId) {
|
|
247
397
|
assertProviderId(providerId);
|
|
248
|
-
this.#
|
|
398
|
+
this.#ensureAvailable("delete");
|
|
399
|
+
const account = this.#accountName(providerId);
|
|
400
|
+
try {
|
|
401
|
+
await this.#runSecurity(["delete-generic-password", "-a", account, "-s", this.securityService], { secretForScrub: this.#knownSecrets.get(providerId) });
|
|
402
|
+
}
|
|
403
|
+
catch (err) {
|
|
404
|
+
if (this.#isNotFound(err)) {
|
|
405
|
+
// Match FileSecretStore: delete of missing id is a no-op.
|
|
406
|
+
this.#knownSecrets.delete(providerId);
|
|
407
|
+
await this.#indexRemove(providerId);
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
throw this.#wrapSecurityError("delete", err, this.#knownSecrets.get(providerId));
|
|
411
|
+
}
|
|
412
|
+
this.#knownSecrets.delete(providerId);
|
|
413
|
+
await this.#indexRemove(providerId);
|
|
249
414
|
}
|
|
250
415
|
async listProviders() {
|
|
251
|
-
this.#
|
|
416
|
+
this.#ensureAvailable("listProviders");
|
|
417
|
+
const doc = await this.#loadIndex();
|
|
418
|
+
return [...doc.providers].sort((a, b) => a.localeCompare(b));
|
|
252
419
|
}
|
|
253
420
|
redact(value) {
|
|
254
|
-
|
|
255
|
-
return redact(value);
|
|
421
|
+
return redact(value, this.#knownSecrets.values());
|
|
256
422
|
}
|
|
257
423
|
toJSON() {
|
|
258
424
|
return {
|
|
259
425
|
kind: "keychain",
|
|
260
426
|
service: this.service,
|
|
261
427
|
accountPrefix: this.accountPrefix,
|
|
262
|
-
|
|
428
|
+
scope: this.scope,
|
|
429
|
+
securityService: this.securityService,
|
|
430
|
+
indexPath: this.indexPath,
|
|
431
|
+
available: this.#available,
|
|
432
|
+
// Never include secret values. Provider ids come from the non-secret index
|
|
433
|
+
// only when already loaded into #knownSecrets keys + index is not re-read
|
|
434
|
+
// synchronously here (toJSON must not throw / hit the network/keychain).
|
|
435
|
+
providers: [...this.#knownSecrets.keys()].sort((a, b) => a.localeCompare(b)),
|
|
263
436
|
};
|
|
264
437
|
}
|
|
265
|
-
#
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
438
|
+
#accountName(providerId) {
|
|
439
|
+
return `${this.accountPrefix}${providerId}`;
|
|
440
|
+
}
|
|
441
|
+
#ensureAvailable(operation) {
|
|
442
|
+
if (!this.#available) {
|
|
443
|
+
throw new KeychainUnavailableError(`KeychainSecretStore.${operation} is unavailable: ${KEYCHAIN_UNAVAILABLE_MESSAGE}`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
#isNotFound(err) {
|
|
447
|
+
const e = asExecError(err);
|
|
448
|
+
// Node sets err.code to the numeric exit status for execFile failures.
|
|
449
|
+
const status = typeof e.code === "number"
|
|
450
|
+
? e.code
|
|
451
|
+
: typeof e.status === "number"
|
|
452
|
+
? e.status
|
|
453
|
+
: undefined;
|
|
454
|
+
return status === SECURITY_ERR_SEC_ITEM_NOT_FOUND;
|
|
455
|
+
}
|
|
456
|
+
async #runSecurity(args, options) {
|
|
457
|
+
const execOptions = {
|
|
458
|
+
// Never invoke via a shell — args stay as argv.
|
|
459
|
+
shell: false,
|
|
460
|
+
maxBuffer: 1024 * 1024,
|
|
461
|
+
encoding: "utf8",
|
|
462
|
+
};
|
|
463
|
+
if (options.input !== undefined) {
|
|
464
|
+
execOptions.input = options.input;
|
|
465
|
+
}
|
|
466
|
+
try {
|
|
467
|
+
return await this.#execFile(this.securityPath, args, execOptions);
|
|
468
|
+
}
|
|
469
|
+
catch (err) {
|
|
470
|
+
const scrubList = [
|
|
471
|
+
...(options.secretForScrub ? [options.secretForScrub] : []),
|
|
472
|
+
...(options.extraScrub ?? []),
|
|
473
|
+
].filter((s) => s.length > 0);
|
|
474
|
+
if (scrubList.length === 0) {
|
|
475
|
+
throw err;
|
|
476
|
+
}
|
|
477
|
+
const e = asExecError(err);
|
|
478
|
+
const rawMessage = typeof e.message === "string" ? e.message : String(err);
|
|
479
|
+
const rawStderr = bufferToString(e.stderr);
|
|
480
|
+
const needsScrub = scrubList.some((s) => rawMessage.includes(s) || rawStderr.includes(s));
|
|
481
|
+
if (!needsScrub) {
|
|
482
|
+
throw err;
|
|
483
|
+
}
|
|
484
|
+
const scrubbed = new Error(redact(rawMessage, scrubList));
|
|
485
|
+
scrubbed.code = e.code;
|
|
486
|
+
scrubbed.status = e.status;
|
|
487
|
+
scrubbed.stdout = e.stdout;
|
|
488
|
+
scrubbed.stderr = redact(rawStderr, scrubList);
|
|
489
|
+
throw scrubbed;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
#wrapSecurityError(operation, err, secret, extraScrub = []) {
|
|
493
|
+
const e = asExecError(err);
|
|
494
|
+
const rawStderr = bufferToString(e.stderr);
|
|
495
|
+
const rawMessage = typeof e.message === "string" ? e.message : String(err);
|
|
496
|
+
const known = [
|
|
497
|
+
...(secret ? [secret] : []),
|
|
498
|
+
...extraScrub,
|
|
499
|
+
...this.#knownSecrets.values(),
|
|
500
|
+
];
|
|
501
|
+
const safeStderr = redact(rawStderr, known);
|
|
502
|
+
const safeMessage = redact(rawMessage, known);
|
|
503
|
+
const detail = safeStderr.trim() || safeMessage;
|
|
504
|
+
const wrapped = new Error(`KeychainSecretStore.${operation} failed via security(1): ${detail}`);
|
|
505
|
+
// Never attach the original err as cause if it might embed the secret;
|
|
506
|
+
// preserve exit status only.
|
|
507
|
+
wrapped.exitCode =
|
|
508
|
+
typeof e.code === "number" || typeof e.code === "string" ? e.code : e.status;
|
|
509
|
+
return wrapped;
|
|
510
|
+
}
|
|
511
|
+
async #loadIndex() {
|
|
512
|
+
try {
|
|
513
|
+
const raw = await this.#fs.readFile(this.indexPath, "utf8");
|
|
514
|
+
return parseKeychainIndex(raw, this.indexPath);
|
|
515
|
+
}
|
|
516
|
+
catch (err) {
|
|
517
|
+
if (err &&
|
|
518
|
+
typeof err === "object" &&
|
|
519
|
+
"code" in err &&
|
|
520
|
+
err.code === "ENOENT") {
|
|
521
|
+
return { version: 1, providers: [] };
|
|
522
|
+
}
|
|
523
|
+
throw err;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
async #persistIndex(doc) {
|
|
527
|
+
await this.#fs.mkdir(dirname(this.indexPath), { recursive: true });
|
|
528
|
+
const payload = `${JSON.stringify({
|
|
529
|
+
version: 1,
|
|
530
|
+
providers: [...doc.providers].sort((a, b) => a.localeCompare(b)),
|
|
531
|
+
}, null, 2)}\n`;
|
|
532
|
+
const tmp = `${this.indexPath}.${randomBytes(8).toString("hex")}.tmp`;
|
|
533
|
+
try {
|
|
534
|
+
await this.#fs.writeFile(tmp, payload, { encoding: "utf8", mode: 0o600 });
|
|
535
|
+
await this.#fs.chmod(tmp, 0o600);
|
|
536
|
+
await this.#fs.rename(tmp, this.indexPath);
|
|
537
|
+
await this.#fs.chmod(this.indexPath, 0o600);
|
|
538
|
+
}
|
|
539
|
+
catch (err) {
|
|
540
|
+
await this.#fs.unlink(tmp).catch((unlinkErr) => {
|
|
541
|
+
if (unlinkErr &&
|
|
542
|
+
typeof unlinkErr === "object" &&
|
|
543
|
+
"code" in unlinkErr &&
|
|
544
|
+
unlinkErr.code === "ENOENT") {
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
throw unlinkErr;
|
|
548
|
+
});
|
|
549
|
+
throw err;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
async #indexAdd(providerId) {
|
|
553
|
+
const doc = await this.#loadIndex();
|
|
554
|
+
if (!doc.providers.includes(providerId)) {
|
|
555
|
+
doc.providers.push(providerId);
|
|
556
|
+
await this.#persistIndex(doc);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
async #indexRemove(providerId) {
|
|
560
|
+
const doc = await this.#loadIndex();
|
|
561
|
+
const next = doc.providers.filter((id) => id !== providerId);
|
|
562
|
+
if (next.length !== doc.providers.length) {
|
|
563
|
+
await this.#persistIndex({ version: 1, providers: next });
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
function parseKeychainIndex(raw, filePath) {
|
|
568
|
+
let parsed;
|
|
569
|
+
try {
|
|
570
|
+
parsed = JSON.parse(raw);
|
|
571
|
+
}
|
|
572
|
+
catch (err) {
|
|
573
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
574
|
+
throw new Error(`Invalid keychain index ${filePath}: ${message}`, {
|
|
575
|
+
cause: err,
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
579
|
+
throw new Error(`Invalid keychain index ${filePath}: expected a JSON object`);
|
|
580
|
+
}
|
|
581
|
+
const record = parsed;
|
|
582
|
+
const providersRaw = record.providers;
|
|
583
|
+
if (!Array.isArray(providersRaw)) {
|
|
584
|
+
throw new Error(`Invalid keychain index ${filePath}: missing array field "providers"`);
|
|
585
|
+
}
|
|
586
|
+
const providers = [];
|
|
587
|
+
for (const entry of providersRaw) {
|
|
588
|
+
if (typeof entry !== "string" || entry.trim() === "") {
|
|
589
|
+
throw new Error(`Invalid keychain index ${filePath}: providers must be non-empty strings`);
|
|
590
|
+
}
|
|
591
|
+
providers.push(entry);
|
|
269
592
|
}
|
|
593
|
+
return { version: 1, providers };
|
|
270
594
|
}
|
|
271
595
|
/**
|
|
272
596
|
* Retrieve a provider token from the secret store.
|
package/dist/secrets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,GACN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAwB,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAElD,uEAAuE;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAqB,CAAC;AAgG9C,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAC7C,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACzC,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAC3C,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,yEAAyE;AACzE,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAC3C,MAAM,4BAA4B,GAChC,4DAA4D;IAC5D,sGAAsG;IACtG,oEAAoE,CAAC;AAiBvE,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC1D,wBAAwB;IACxB,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,gCAAgC,EAAE;IACxE,8DAA8D;IAC9D,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC1E,+DAA+D;IAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,4BAA4B,EAAE;IACjE,kBAAkB;IAClB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,6BAA6B,EAAE;IAClE,qDAAqD;IACrD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,wCAAwC;KAClD;IACD,mBAAmB;IACnB,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACnE,0CAA0C;IAC1C,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC5D,qBAAqB;IACrB,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,uBAAuB,EAAE;IAC/D,0BAA0B;IAC1B;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,oDAAoD;KAC9D;IACD,qEAAqE;IACrE;QACE,IAAI,EAAE,2BAA2B;QACjC,OAAO,EACL,kIAAkI;KACrI;CACO,CAAC;AAEX,kEAAkE;AAClE,MAAM,gBAAgB,GAAsB,eAAe,CAAC,GAAG,CAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACjB,CAAC;AAEF,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,eAAiC,EAAE;IAEnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,GAAG,GAAG,KAAK,CAAC;IAEhB,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAEvC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACpC,wEAAwE;QACxE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,0DAA0D;QAC1D,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,eAAe;IACjB,QAAQ,CAAS;IACjB,GAAG,CAA4B;IACxC,MAAM,GAA8B,IAAI,CAAC;IACzC,wEAAwE;IACxE,YAAY,GAAa,EAAE,CAAC;IAE5B,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/D,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,GAAG,GAAG;YACT,KAAK;YACL,QAAQ;YACR,MAAM;YACN,MAAM;YACN,SAAS;YACT,KAAK;YACL,GAAG,OAAO,CAAC,UAAU;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAkB;QAC1B,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAkB,EAAE,MAAc;QAC1C,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7B,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;QACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;YACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,2EAA2E;YAC3E,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;SAC7B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IACE,GAAG;gBACH,OAAO,GAAG,KAAK,QAAQ;gBACvB,MAAM,IAAI,GAAG;gBACZ,GAAyB,CAAC,IAAI,KAAK,QAAQ,EAC5C,CAAC;gBACD,MAAM,KAAK,GAAuB,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAuB;QACpC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAC/B,EAAE,OAAO,EAAE,CAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAC7C,IAAI,EACJ,CAAC,CACF,IAAI,CAAC;QAEN,yEAAyE;QACzE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,6EAA6E;YAC7E,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,uEAAuE;YACvE,yDAAyD;YACzD,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,SAAkB,EAAE,EAAE;gBACtD,IACE,SAAS;oBACT,OAAO,SAAS,KAAK,QAAQ;oBAC7B,MAAM,IAAI,SAAS;oBAClB,SAA+B,CAAC,IAAI,KAAK,QAAQ,EAClD,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,MAAM,SAAS,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAuB;QAC/B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACzD,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,CAAC;IACJ,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,GAAG,sBAA+B,CAAC;IAEhD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAOD,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAO/B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,GAMN,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,KAAkC;IACxD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpE,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,KAAa;IAC7C,0EAA0E;IAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,uDAAuD;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,IAAI,OAAO,GAAG,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,mBAAmB;IACrB,OAAO,CAAS;IAChB,aAAa,CAAS;IACtB,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,SAAS,CAAkB;IAC3B,SAAS,CAAmB;IAC5B,GAAG,CAA4B;IAC/B,UAAU,CAAU;IAC7B,4EAA4E;IAC5E,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,wBAAwB,CAAC;QACnE,IAAI,CAAC,aAAa;YAChB,OAAO,CAAC,aAAa,KAAK,SAAS;gBACjC,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,sBAAsB,CAAC;QAC7D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,wBAAwB,EAAE,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC;QACnD,IAAI,CAAC,GAAG,GAAG;YACT,KAAK;YACL,QAAQ;YACR,MAAM;YACN,MAAM;YACN,SAAS;YACT,KAAK;YACL,GAAG,OAAO,CAAC,UAAU;SACtB,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC;IAChD,CAAC;IAED,4DAA4D;IAC5D,IAAI,eAAe;QACjB,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAkB;QAC1B,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CACxC,CAAC,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,EAC1E,EAAE,cAAc,EAAE,SAAS,EAAE,CAC9B,CAAC;YACF,kEAAkE;YAClE,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAkB,EAAE,MAAc;QAC1C,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7B,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9C,2EAA2E;QAC3E,qEAAqE;QACrE,wEAAwE;QACxE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,OAAO,GACX;YACE,sBAAsB;YACtB,IAAI;YACJ,wBAAwB,CAAC,OAAO,CAAC;YACjC,IAAI;YACJ,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC;YAC9C,IAAI;YACJ,IAAI;YACJ,GAAG;SACJ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC9B,KAAK,EAAE,OAAO;gBACd,cAAc,EAAE,MAAM;gBACtB,UAAU,EAAE,CAAC,GAAG,CAAC;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CACrB,CAAC,yBAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EACtE,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACvD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,0DAA0D;gBAC1D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,kBAAkB,CAC3B,QAAQ,EACR,GAAG,EACH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,2EAA2E;YAC3E,0EAA0E;YAC1E,yEAAyE;YACzE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtD,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB;SACF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,UAAU,EAAE,CAAC;IAC9C,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,wBAAwB,CAChC,uBAAuB,SAAS,oBAAoB,4BAA4B,EAAE,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,WAAW,CAAC,GAAY;QACtB,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,uEAAuE;QACvE,MAAM,MAAM,GACV,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YACxB,CAAC,CAAC,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAC5B,CAAC,CAAC,CAAC,CAAC,MAAM;gBACV,CAAC,CAAC,SAAS,CAAC;QAClB,OAAO,MAAM,KAAK,+BAA+B,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,IAAc,EACd,OAIC;QAED,MAAM,WAAW,GAAyC;YACxD,gDAAgD;YAChD,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,IAAI,GAAG,IAAI;YACtB,QAAQ,EAAE,MAAM;SACjB,CAAC;QACF,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GAAG;gBAChB,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;aAC9B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,UAAU,GACd,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,UAAU,GACd,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAKvD,CAAC;YACF,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YAC3B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YAC3B,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/C,MAAM,QAAQ,CAAC;QACjB,CAAC;IACH,CAAC;IAED,kBAAkB,CAChB,SAAiB,EACjB,GAAY,EACZ,MAAe,EACf,aAAuB,EAAE;QAEzB,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,GAAG,UAAU;YACb,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;SAC/B,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,uBAAuB,SAAS,4BAA4B,MAAM,EAAE,CACrE,CAAC;QACF,uEAAuE;QACvE,6BAA6B;QAC5B,OAAyD,CAAC,QAAQ;YACjE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5D,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IACE,GAAG;gBACH,OAAO,GAAG,KAAK,QAAQ;gBACvB,MAAM,IAAI,GAAG;gBACZ,GAAyB,CAAC,IAAI,KAAK,QAAQ,EAC5C,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YACvC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAA0B;QAC5C,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAC/B;YACE,OAAO,EAAE,CAAU;YACnB,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACjE,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CAAC;QACN,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,SAAkB,EAAE,EAAE;gBACtD,IACE,SAAS;oBACT,OAAO,SAAS,KAAK,QAAQ;oBAC7B,MAAM,IAAI,SAAS;oBAClB,SAA+B,CAAC,IAAI,KAAK,QAAQ,EAClD,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,MAAM,SAAS,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,QAAgB;IACvD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,KAAK,OAAO,EAAE,EAAE;YAChE,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,0BAA0B,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,mCAAmC,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,uCAAuC,CAC1E,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,KAAkB;IAElB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,KAAa,EACb,KAAkB;IAElB,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAW,EACX,QAAgB;IAEhB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,KAAK,OAAO,EAAE,EAAE;YAC9D,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IAED,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACrB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,0BAA0B,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;IAClC,IACE,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,KAAK,IAAI;QACnB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,kCAAkC,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,UAAqC,CACtC,EAAE,CAAC;QACF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,iBAAiB,GAAG,oBAAoB,CACzE,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/spend.d.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estimated paid API-key spend rollup for hard spend caps and `status --costs`.
|
|
3
|
+
*
|
|
4
|
+
* Extends the near-limit mechanism: near-limit warns on subscription quota,
|
|
5
|
+
* spend caps hard-block paid API-key candidates. Both read the same usage
|
|
6
|
+
* store; subscription and local tiers are never blocked by spend caps.
|
|
7
|
+
*
|
|
8
|
+
* Accounting window: the usage store today models a single cumulative window
|
|
9
|
+
* (per-account token totals persisted in usage.json; no time bucketing), so
|
|
10
|
+
* rollups cover everything recorded since the usage file was last reset.
|
|
11
|
+
*
|
|
12
|
+
* Spend estimation: per-account usage records (`used` = total tokens, keyed
|
|
13
|
+
* by providerId + accountId, which the delegation runtime sets to the model
|
|
14
|
+
* id) priced with the catalog PricingHint. When a per-model input/output
|
|
15
|
+
* breakdown is present, tokens are priced exactly (input rate × input +
|
|
16
|
+
* output rate × output). The unattributed remainder
|
|
17
|
+
* (`used - sum(model tokens)`) keeps the conservative max(input, output)
|
|
18
|
+
* rate treatment and flags costsIncomplete. Where pricing is unknown the
|
|
19
|
+
* contribution is not guessed: zero for cap math + costsIncomplete. Local
|
|
20
|
+
* runtimes are known-zero (no paid spend by definition).
|
|
21
|
+
*/
|
|
22
|
+
import { type PricingHint } from "./providers/catalog-data.js";
|
|
23
|
+
import type { AccountUsageSnapshot, UsageStore } from "./usage.js";
|
|
24
|
+
/** Identifier for the accounting window the usage store currently models. */
|
|
25
|
+
export declare const SPEND_ACCOUNTING_WINDOW = "cumulative";
|
|
26
|
+
/** Hard spend caps in USD. Per-provider overrides beat the global cap. */
|
|
27
|
+
export interface SpendCaps {
|
|
28
|
+
globalUsd?: number;
|
|
29
|
+
perProviderUsd?: Record<string, number>;
|
|
30
|
+
}
|
|
31
|
+
export interface ModelSpendLine {
|
|
32
|
+
providerId: string;
|
|
33
|
+
/** Model id (the accountId dimension usage records are keyed by). */
|
|
34
|
+
modelId: string;
|
|
35
|
+
totalTokens: number;
|
|
36
|
+
/** Input tokens when a breakdown was recorded; undefined for legacy totals. */
|
|
37
|
+
inputTokens?: number;
|
|
38
|
+
/** Output tokens when a breakdown was recorded; undefined for legacy totals. */
|
|
39
|
+
outputTokens?: number;
|
|
40
|
+
/** Estimated USD; 0 when pricing is unknown (see costsIncomplete). */
|
|
41
|
+
estimatedUsd: number;
|
|
42
|
+
/** False when no pricing hint exists; estimate is then a lower bound of 0. */
|
|
43
|
+
pricingKnown: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* True when this line was priced from an exact input/output split.
|
|
46
|
+
* False when the conservative max-rate treatment (or zero) was used.
|
|
47
|
+
*/
|
|
48
|
+
exactPricing: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ProviderSpendLine {
|
|
51
|
+
providerId: string;
|
|
52
|
+
totalTokens: number;
|
|
53
|
+
estimatedUsd: number;
|
|
54
|
+
/** True when any model usage for this provider had unknown pricing. */
|
|
55
|
+
costsIncomplete: boolean;
|
|
56
|
+
/** Applicable cap (per-provider override beats global), when configured. */
|
|
57
|
+
capUsd?: number;
|
|
58
|
+
/** max(0, cap - spend) when a cap is configured. */
|
|
59
|
+
remainingUsd?: number;
|
|
60
|
+
/** True when a cap is configured and spend meets/exceeds it. */
|
|
61
|
+
capExceeded: boolean;
|
|
62
|
+
models: ModelSpendLine[];
|
|
63
|
+
}
|
|
64
|
+
export interface SpendRollup {
|
|
65
|
+
/** Accounting window identifier (see SPEND_ACCOUNTING_WINDOW). */
|
|
66
|
+
window: string;
|
|
67
|
+
totalUsd: number;
|
|
68
|
+
/** True when any usage had unknown pricing; totals are then a lower bound. */
|
|
69
|
+
costsIncomplete: boolean;
|
|
70
|
+
/** Global cap, when configured. */
|
|
71
|
+
capUsd?: number;
|
|
72
|
+
/** max(0, global cap - total) when a global cap is configured. */
|
|
73
|
+
remainingUsd?: number;
|
|
74
|
+
/** True when a global cap is configured and the total meets/exceeds it. */
|
|
75
|
+
capExceeded: boolean;
|
|
76
|
+
providers: ProviderSpendLine[];
|
|
77
|
+
}
|
|
78
|
+
export interface BuildSpendRollupOptions {
|
|
79
|
+
caps?: SpendCaps;
|
|
80
|
+
/**
|
|
81
|
+
* Pricing lookup override for tests/custom catalogs. Defaults to the
|
|
82
|
+
* built-in catalog. Return undefined for unknown pricing.
|
|
83
|
+
*/
|
|
84
|
+
pricing?: (providerId: string, modelId: string) => PricingHint | undefined;
|
|
85
|
+
}
|
|
86
|
+
/** Catalog pricing hint for a provider/model pair, when documented. */
|
|
87
|
+
export declare function pricingHintForModel(providerId: string, modelId: string): PricingHint | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Estimate USD for a token total under a pricing hint using the higher of
|
|
90
|
+
* the input/output rates (conservative upper bound). Used for unattributed
|
|
91
|
+
* remainder / legacy totals where the input/output split is unknown.
|
|
92
|
+
* Returns undefined when the hint carries no usable rate — unknown pricing
|
|
93
|
+
* is never guessed.
|
|
94
|
+
*/
|
|
95
|
+
export declare function estimateTokensCostUsd(totalTokens: number, hint: PricingHint | undefined): number | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* Estimate USD from an exact input/output split. Falls back to the
|
|
98
|
+
* single documented rate when only one side is known. Returns undefined
|
|
99
|
+
* when the hint carries no usable rate.
|
|
100
|
+
*/
|
|
101
|
+
export declare function estimateSplitTokensCostUsd(inputTokens: number, outputTokens: number, hint: PricingHint | undefined): number | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Build a spend rollup from per-account usage records. Pure and
|
|
104
|
+
* deterministic; providers and models are sorted by id like the usage stores.
|
|
105
|
+
*
|
|
106
|
+
* Only API-key usage counts toward paid spend. Subscription and local tiers
|
|
107
|
+
* are recorded as known-zero. Legacy records with no authTier are counted
|
|
108
|
+
* conservatively (as paid) but always mark the rollup costsIncomplete.
|
|
109
|
+
*
|
|
110
|
+
* When a per-model input/output breakdown is present, those tokens are priced
|
|
111
|
+
* exactly. Any unattributed remainder (aggregate `used` minus attributed
|
|
112
|
+
* tokens) is priced at the conservative max rate under the accountId model
|
|
113
|
+
* and flags costsIncomplete for that remainder.
|
|
114
|
+
*/
|
|
115
|
+
export declare function buildSpendRollup(accounts: readonly AccountUsageSnapshot[], options?: BuildSpendRollupOptions): SpendRollup;
|
|
116
|
+
/**
|
|
117
|
+
* Build the `currentSpendByProviderUsd` map that PolicyConfig expects from a
|
|
118
|
+
* usage store. Non-fatal on the caller side: this helper throws when the
|
|
119
|
+
* store cannot be read so the caller can decide whether to swallow the error.
|
|
120
|
+
*/
|
|
121
|
+
export declare function buildCurrentSpendByProviderUsd(store: UsageStore, options?: Pick<BuildSpendRollupOptions, "pricing">): Promise<Record<string, number>>;
|
|
122
|
+
//# sourceMappingURL=spend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend.d.ts","sourceRoot":"","sources":["../src/spend.ts"],"names":[],"mappings":"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"}
|