saros-proxy 0.10.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +261 -78
  2. package/dist/cli/daemon.d.ts +38 -6
  3. package/dist/cli/daemon.js +524 -109
  4. package/dist/cli/daemon.js.map +1 -1
  5. package/dist/cli/dsh-config.js +34 -9
  6. package/dist/cli/dsh-config.js.map +1 -1
  7. package/dist/cli/help.js +3 -0
  8. package/dist/cli/help.js.map +1 -1
  9. package/dist/cli/key-state.d.ts +21 -0
  10. package/dist/cli/key-state.js +57 -0
  11. package/dist/cli/key-state.js.map +1 -0
  12. package/dist/cli/keys.d.ts +28 -0
  13. package/dist/cli/keys.js +185 -0
  14. package/dist/cli/keys.js.map +1 -0
  15. package/dist/cli/overview.js +6 -1
  16. package/dist/cli/overview.js.map +1 -1
  17. package/dist/cli/secret.d.ts +31 -0
  18. package/dist/cli/secret.js +89 -0
  19. package/dist/cli/secret.js.map +1 -0
  20. package/dist/cli/usage.js +20 -10
  21. package/dist/cli/usage.js.map +1 -1
  22. package/dist/config.d.ts +15 -1
  23. package/dist/config.js +98 -25
  24. package/dist/config.js.map +1 -1
  25. package/dist/constants.d.ts +2 -0
  26. package/dist/constants.js +2 -0
  27. package/dist/constants.js.map +1 -1
  28. package/dist/debug-buffer.d.ts +58 -0
  29. package/dist/debug-buffer.js +42 -0
  30. package/dist/debug-buffer.js.map +1 -0
  31. package/dist/index.js +30 -4
  32. package/dist/index.js.map +1 -1
  33. package/dist/log-redact.d.ts +18 -0
  34. package/dist/log-redact.js +41 -0
  35. package/dist/log-redact.js.map +1 -0
  36. package/dist/logger.d.ts +6 -0
  37. package/dist/logger.js +30 -0
  38. package/dist/logger.js.map +1 -1
  39. package/dist/models-fetcher.js +2 -0
  40. package/dist/models-fetcher.js.map +1 -1
  41. package/dist/providers/commandcode.d.ts +20 -5
  42. package/dist/providers/commandcode.js +115 -7
  43. package/dist/providers/commandcode.js.map +1 -1
  44. package/dist/providers/index.d.ts +2 -2
  45. package/dist/providers/index.js +2 -2
  46. package/dist/providers/index.js.map +1 -1
  47. package/dist/providers/infer.d.ts +11 -0
  48. package/dist/providers/infer.js.map +1 -1
  49. package/dist/providers/opencode-go.d.ts +8 -0
  50. package/dist/providers/opencode-go.js +35 -7
  51. package/dist/providers/opencode-go.js.map +1 -1
  52. package/dist/providers/types.d.ts +10 -2
  53. package/dist/proxy-logic.d.ts +101 -7
  54. package/dist/proxy-logic.js +197 -41
  55. package/dist/proxy-logic.js.map +1 -1
  56. package/dist/proxy.d.ts +33 -1
  57. package/dist/proxy.js +369 -67
  58. package/dist/proxy.js.map +1 -1
  59. package/dist/secrets/boot.d.ts +33 -0
  60. package/dist/secrets/boot.js +65 -0
  61. package/dist/secrets/boot.js.map +1 -0
  62. package/dist/secrets/envelope.d.ts +44 -0
  63. package/dist/secrets/envelope.js +132 -0
  64. package/dist/secrets/envelope.js.map +1 -0
  65. package/dist/secrets/source.d.ts +130 -0
  66. package/dist/secrets/source.js +332 -0
  67. package/dist/secrets/source.js.map +1 -0
  68. package/dist/token-usage.d.ts +9 -2
  69. package/dist/token-usage.js +20 -4
  70. package/dist/token-usage.js.map +1 -1
  71. package/dist/usage-client.d.ts +43 -13
  72. package/dist/usage-client.js +37 -54
  73. package/dist/usage-client.js.map +1 -1
  74. package/dist/validation.d.ts +3 -3
  75. package/dist/validation.js +3 -3
  76. package/dist/validation.js.map +1 -1
  77. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ /**
2
+ * secret.ts — `saros-proxy secret set|status`.
3
+ *
4
+ * `set` stores the envelope passphrase through the platform's own credential
5
+ * CLI, so the user never edits a file and the value is never echoed or logged.
6
+ * `status` reports which source would win and whether the store is populated;
7
+ * it prints no secret material.
8
+ */
9
+ import chalk from 'chalk';
10
+ import { resolveConfigPath } from '../config.js';
11
+ import { configHasEnvelopeKeys } from '../secrets/boot.js';
12
+ import { getSecretStatus, isInteractive, promptHidden, readStdinLine, storePassphrase, } from '../secrets/source.js';
13
+ function storeOptions(options) {
14
+ return {
15
+ env: options.env,
16
+ platform: options.platform,
17
+ username: options.username,
18
+ run: options.run,
19
+ dpapiPath: options.dpapiPath,
20
+ };
21
+ }
22
+ /** Prompt twice on a TTY; read one line when stdin is piped. */
23
+ export async function readNewPassphrase(options = {}) {
24
+ const input = options.input ?? process.stdin;
25
+ const output = options.output ?? process.stderr;
26
+ if (!isInteractive(input)) {
27
+ const line = await readStdinLine(input);
28
+ return line === null
29
+ ? { ok: false, reason: 'no passphrase on stdin (pipe one line or run in a terminal)' }
30
+ : { ok: true, value: line };
31
+ }
32
+ const first = await promptHidden({ input, output, question: 'New passphrase: ' });
33
+ if (first === null)
34
+ return { ok: false, reason: 'no passphrase entered' };
35
+ const second = await promptHidden({ input, output, question: 'Confirm passphrase: ' });
36
+ if (second !== first)
37
+ return { ok: false, reason: 'passphrases do not match' };
38
+ return { ok: true, value: first };
39
+ }
40
+ /** Below this length the passphrase is the weak link, not scrypt. */
41
+ export const MIN_PASSPHRASE_LENGTH = 12;
42
+ /** Store the passphrase in the OS store. Returns the process exit code. */
43
+ export async function runSecretSet(options = {}) {
44
+ const resolved = await readNewPassphrase(options);
45
+ if (!resolved.ok) {
46
+ console.error(chalk.red(`✗ ${resolved.reason}`));
47
+ return 1;
48
+ }
49
+ if (resolved.value.length < MIN_PASSPHRASE_LENGTH) {
50
+ console.error(chalk.yellow(`⚠ Passphrase is shorter than ${MIN_PASSPHRASE_LENGTH} characters. ` +
51
+ 'scrypt makes offline guessing expensive, but passphrase entropy is what protects the keys.'));
52
+ }
53
+ const stored = storePassphrase(resolved.value, storeOptions(options));
54
+ if (!stored.ok) {
55
+ console.error(chalk.red(`✗ Could not store the passphrase: ${stored.reason}`));
56
+ return 1;
57
+ }
58
+ console.log(chalk.green(`✓ Passphrase stored in ${stored.backend}.`));
59
+ console.log(chalk.dim('Resolution order: SAROS_PASSPHRASE > OS store > TTY prompt (foreground serve).'));
60
+ return 0;
61
+ }
62
+ /** Which source would be used, without printing any value. Exit code 0. */
63
+ export async function runSecretStatus(options = {}) {
64
+ const status = getSecretStatus({ ...storeOptions(options), input: options.input ?? process.stdin });
65
+ const configPath = options.configPath ?? resolveConfigPath();
66
+ const encryptedConfig = configHasEnvelopeKeys(configPath);
67
+ console.log(chalk.bold('Passphrase sources') + chalk.dim(' (first match wins)'));
68
+ console.log(` env SAROS_PASSPHRASE: ${status.env ? chalk.green('set') : 'not set'}`);
69
+ console.log(` store ${status.store.backend}: ` +
70
+ (status.store.populated
71
+ ? chalk.green('populated')
72
+ : chalk.yellow(`not populated — ${status.store.reason}`)));
73
+ console.log(` tty interactive prompt: ` +
74
+ (status.tty ? 'available (foreground serve only)' : 'not a TTY'));
75
+ console.log(`Config: ${encryptedConfig ? 'contains enc:v1 envelopes' : 'no enc:v1 envelopes'} ` +
76
+ chalk.dim(`(${configPath})`));
77
+ console.log(`Effective source: ${status.effective ?? 'none'}`);
78
+ return 0;
79
+ }
80
+ export async function runSecretCommand(args, options = {}) {
81
+ const subcommand = args[0];
82
+ if (subcommand === 'set')
83
+ return runSecretSet(options);
84
+ if (subcommand === 'status')
85
+ return runSecretStatus(options);
86
+ console.error('Usage: saros-proxy secret <set|status>');
87
+ return 1;
88
+ }
89
+ //# sourceMappingURL=secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/cli/secret.ts"],"names":[],"mappings":"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"}
package/dist/cli/usage.js CHANGED
@@ -13,6 +13,7 @@ import { fetchKeyUsage } from '../usage-client.js';
13
13
  import { getProvider, inferProvider } from '../providers/index.js';
14
14
  import { getModelStatsPath } from '../model-stats.js';
15
15
  import { getTokenUsagePath } from '../token-usage.js';
16
+ import { SecretSourceError } from '../secrets/source.js';
16
17
  /**
17
18
  * Read the token totals the proxy persisted (the CLI is a separate process,
18
19
  * so this file is the only shared state). Corrupt/missing files read as empty.
@@ -59,11 +60,14 @@ function formatTokenTotals(usage) {
59
60
  + ` ${usage.requests} requests)`;
60
61
  }
61
62
  function formatWindow(percent) {
62
- if (percent >= 90)
63
- return chalk.red(`${percent}%`);
64
- if (percent >= 70)
65
- return chalk.yellow(`${percent}%`);
66
- return chalk.green(`${percent}%`);
63
+ // Provider ratios can be fractional (CommandCode reports used/cap); the
64
+ // console shows whole percents.
65
+ const rounded = Math.round(percent);
66
+ if (rounded >= 90)
67
+ return chalk.red(`${rounded}%`);
68
+ if (rounded >= 70)
69
+ return chalk.yellow(`${rounded}%`);
70
+ return chalk.green(`${rounded}%`);
67
71
  }
68
72
  function formatResetsAt(resetsAt) {
69
73
  if (!resetsAt)
@@ -121,6 +125,12 @@ export async function runUsageCommand() {
121
125
  config = loadConfig();
122
126
  }
123
127
  catch (err) {
128
+ if (err instanceof SecretSourceError) {
129
+ console.log(chalk.yellow('· Encrypted keys need a passphrase; showing local token totals only.'));
130
+ console.log(chalk.dim(' Set SAROS_PASSPHRASE, run `saros-proxy secret set`, or run `saros-proxy serve` in a terminal.'));
131
+ printModelStats();
132
+ return 0;
133
+ }
124
134
  console.error('Failed to load config:', err instanceof Error ? err.message : String(err));
125
135
  return 1;
126
136
  }
@@ -136,12 +146,12 @@ export async function runUsageCommand() {
136
146
  const results = await Promise.all(config.keys.map(async ({ label, key, provider }) => {
137
147
  const providerId = provider ?? inferProvider({ label, key });
138
148
  const p = getProvider(providerId);
139
- // Providers without a queryable usage API report 'n/a' instead of an error.
149
+ // Providers without a usage endpoint report 'n/a' instead of an error.
140
150
  if (!p || !p.usagePath()) {
141
151
  return { label, provider: providerId, usage: null, noEntitlement: false, noUsageApi: true };
142
152
  }
143
153
  const base = config.upstreams?.[p.id] ?? (p.id === 'opencode-go' ? config.upstreamBaseUrl : p.baseUrl);
144
- const result = await fetchKeyUsage(base, key, p.usagePath());
154
+ const result = await fetchKeyUsage(base, key, p);
145
155
  return {
146
156
  label,
147
157
  provider: providerId,
@@ -155,8 +165,8 @@ export async function runUsageCommand() {
155
165
  const totals = formatTokenTotals(tokenUsage.keys[label]);
156
166
  if (noUsageApi) {
157
167
  console.log(` ${chalk.yellow('·')} ${label.padEnd(16)}${chalk.dim(` (${provider})`)}`
158
- // CommandCode exposes no quota API; token totals recorded from the
159
- // upstream's usage chunks are the only consumption signal available.
168
+ // Reached only for a provider without a usage endpoint; token totals
169
+ // recorded from usage chunks are then the only consumption signal.
160
170
  + chalk.dim(totals ? ` usage: n/a — ${totals}` : ' usage: n/a — provider has no queryable usage API'));
161
171
  continue;
162
172
  }
@@ -172,7 +182,7 @@ export async function runUsageCommand() {
172
182
  }
173
183
  console.log(` ${chalk.green('•')} ${label.padEnd(16)}${chalk.dim(` (${provider})`)} 5h: ${formatWindow(usage.rollingPercent)}`
174
184
  + ` Weekly: ${formatWindow(usage.weeklyPercent)}`
175
- + ` Monthly: ${formatWindow(usage.monthlyPercent)}`
185
+ + ` Monthly: ${usage.monthlyAvailable ? formatWindow(usage.monthlyPercent) : chalk.dim('n/a')}`
176
186
  + chalk.dim(` (tightest resets ${earliestReset(usage)})`)
177
187
  + (totals ? chalk.dim(` · ${totals}`) : ''));
178
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -17,6 +17,14 @@ export interface ProxyConfig {
17
17
  requestTimeoutMs: number;
18
18
  allowedOrigins: string[];
19
19
  }
20
+ export interface LoadConfigOptions {
21
+ /**
22
+ * Passphrase already resolved by a foreground `serve` (which may have used
23
+ * the TTY prompt). When absent, loading uses SAROS_PASSPHRASE, then the OS
24
+ * store; it never prompts, so reporting commands cannot hang.
25
+ */
26
+ passphrase?: string;
27
+ }
20
28
  /**
21
29
  * Return the OS-native user config directory path for saros.
22
30
  *
@@ -43,4 +51,10 @@ export declare function validateConfig(config: Partial<ProxyConfig>): ProxyConfi
43
51
  * 3. Environment variables
44
52
  * 4. Hardcoded defaults
45
53
  */
46
- export declare function loadConfig(configPath?: string): ProxyConfig;
54
+ export declare function loadConfig(configPath?: string, options?: LoadConfigOptions): ProxyConfig;
55
+ /**
56
+ * The path `loadConfig` would read, honouring `--config` and falling back to
57
+ * the OS config directory (or ./config.yaml when that is all that exists).
58
+ * Exported so `keys encrypt` rewrites the same file the proxy reads.
59
+ */
60
+ export declare function resolveConfigPath(explicitPath?: string): string;
package/dist/config.js CHANGED
@@ -6,7 +6,10 @@ import { homedir } from 'node:os';
6
6
  import { join, dirname } from 'node:path';
7
7
  import { parse as parseYaml } from 'yaml';
8
8
  import { logger, maskKey } from './logger.js';
9
+ import { redactErrorMessage } from './log-redact.js';
9
10
  import { decryptKey, isEncryptedKey } from './key-encryption.js';
11
+ import { decryptValue, isEnvelope } from './secrets/envelope.js';
12
+ import { NO_SOURCE_MESSAGE, SecretSourceError, decryptFailureMessage, readEnvPassphrase, readStorePassphrase, } from './secrets/source.js';
10
13
  import { DEFAULT_PORT, DEFAULT_HOST, DEFAULT_UPSTREAM_URL, DEFAULT_CIRCUIT_BREAKER_COOLDOWN_MS, DEFAULT_REQUEST_TIMEOUT_MS, } from './constants.js';
11
14
  import { isValidPort, isValidHttpsUrl, isValidApiKey } from './validation.js';
12
15
  import { inferProvider } from './providers/infer.js';
@@ -56,6 +59,21 @@ function parseCliArgs() {
56
59
  }
57
60
  return args;
58
61
  }
62
+ /**
63
+ * Normalize one key entry: resolve its provider and drop a malformed `enabled`.
64
+ * A non-boolean `enabled` is a config typo, not a retirement order — warning and
65
+ * keeping the key enabled beats silently taking a credential out of rotation.
66
+ */
67
+ function normalizeKeyEntry(entry) {
68
+ const provider = inferProvider(entry);
69
+ if (entry.enabled === undefined)
70
+ return { ...entry, provider };
71
+ if (typeof entry.enabled !== 'boolean') {
72
+ logger.warn('Key "%s": "enabled" must be true or false — ignoring it', entry.label);
73
+ return { ...entry, enabled: undefined, provider };
74
+ }
75
+ return { ...entry, provider };
76
+ }
59
77
  /**
60
78
  * Validate and normalize a partial config object.
61
79
  * Logs warnings for invalid values that fall back to defaults.
@@ -137,7 +155,7 @@ export function validateConfig(config) {
137
155
  return {
138
156
  port,
139
157
  host,
140
- keys: validKeys.map((k) => ({ ...k, provider: inferProvider(k) })),
158
+ keys: validKeys.map(normalizeKeyEntry),
141
159
  circuitBreakerThreshold,
142
160
  circuitBreakerCooldownMs,
143
161
  upstreamBaseUrl,
@@ -155,21 +173,17 @@ export function validateConfig(config) {
155
173
  * 3. Environment variables
156
174
  * 4. Hardcoded defaults
157
175
  */
158
- export function loadConfig(configPath) {
176
+ export function loadConfig(configPath, options = {}) {
159
177
  const cliArgs = parseCliArgs();
160
178
  const config = getBaseConfig();
161
179
  applyEnvConfig(config);
162
- const yamlPath = resolveYamlPath(cliArgs.config, configPath);
180
+ const yamlPath = resolveConfigPath(configPath);
163
181
  const yaml = loadYamlOverrides(yamlPath);
164
- if (yaml)
182
+ if (yaml) {
165
183
  applyYamlConfig(config, yaml);
166
- const encryptionKey = process.env.OPENCODE_GO_ENCRYPTION_KEY;
167
- if (encryptionKey) {
168
- decryptConfigSecrets(config, encryptionKey);
169
- }
170
- else {
171
- assertNoEncryptedSecrets(config);
184
+ warnPlaintextKeys(yaml, yamlPath);
172
185
  }
186
+ resolveEncryptedKeys(config, options.passphrase);
173
187
  applyCliOverrides(config, cliArgs);
174
188
  return validateConfig(config);
175
189
  }
@@ -225,6 +239,14 @@ function resolveYamlPath(cliConfigArg, explicitPath) {
225
239
  }
226
240
  return defaultPath;
227
241
  }
242
+ /**
243
+ * The path `loadConfig` would read, honouring `--config` and falling back to
244
+ * the OS config directory (or ./config.yaml when that is all that exists).
245
+ * Exported so `keys encrypt` rewrites the same file the proxy reads.
246
+ */
247
+ export function resolveConfigPath(explicitPath) {
248
+ return resolveYamlPath(parseCliArgs().config, explicitPath);
249
+ }
228
250
  function loadYamlOverrides(yamlPath) {
229
251
  if (!existsSync(yamlPath)) {
230
252
  logger.info('No config file found at %s, using env/defaults', yamlPath);
@@ -237,7 +259,8 @@ function loadYamlOverrides(yamlPath) {
237
259
  return yaml;
238
260
  }
239
261
  catch (err) {
240
- logger.error({ err }, 'Failed to parse config file %s', yamlPath);
262
+ // YAMLParseError.message embeds the offending line — possibly a key.
263
+ logger.error('Failed to parse config file %s: %s', yamlPath, redactErrorMessage(err));
241
264
  return null;
242
265
  }
243
266
  }
@@ -261,26 +284,76 @@ function applyYamlConfig(config, yaml) {
261
284
  if (yaml.keys && yaml.keys.length > 0)
262
285
  config.keys = yaml.keys;
263
286
  }
264
- function decryptConfigSecrets(config, encryptionKey) {
265
- config.keys = config.keys.map((k) => decryptApiKeyIfNeeded(k, encryptionKey));
287
+ /**
288
+ * Warn once at load time when the YAML file still holds plaintext credentials.
289
+ * Env-provided keys (`OPENCODE_GO_KEYS`) are plaintext by design and are not
290
+ * part of this warning.
291
+ */
292
+ function warnPlaintextKeys(yaml, yamlPath) {
293
+ if (!Array.isArray(yaml.keys))
294
+ return;
295
+ const hasPlaintext = yaml.keys.some((entry) => typeof entry?.key === 'string' && !isEnvelope(entry.key) && !isEncryptedKey(entry.key));
296
+ if (!hasPlaintext)
297
+ return;
298
+ logger.warn({ evt: 'security.plaintext-keys' }, 'API keys are stored in plaintext in %s — run `saros-proxy keys encrypt` to encrypt them', yamlPath);
299
+ }
300
+ /** Plaintext entries must not be able to claim `encrypted: true` in YAML. */
301
+ function withoutEncryptedFlag(entry) {
302
+ const copy = { ...entry };
303
+ delete copy.encrypted;
304
+ return copy;
266
305
  }
267
- function decryptApiKeyIfNeeded(entry, encryptionKey) {
268
- if (!isEncryptedKey(entry.key))
269
- return entry;
306
+ /** Resolve every `enc:` entry before validation; a failure aborts boot. */
307
+ function resolveEncryptedKeys(config, explicitPassphrase) {
308
+ const hasEnvelopes = config.keys.some((key) => isEnvelope(key.key));
309
+ const passphrase = hasEnvelopes ? resolveEnvelopePassphrase(explicitPassphrase) : '';
310
+ config.keys = config.keys.map((entry) => {
311
+ if (isEnvelope(entry.key))
312
+ return decryptEnvelopeEntry(entry, passphrase);
313
+ if (typeof entry.key === 'string' && isEncryptedKey(entry.key)) {
314
+ return { ...entry, key: decryptLegacyEntry(entry), encrypted: true };
315
+ }
316
+ return withoutEncryptedFlag(entry);
317
+ });
318
+ }
319
+ /**
320
+ * Envelope passphrase: the value already resolved by `serve`, then the env
321
+ * var, then the OS store. Deliberately never prompts — reporting commands and
322
+ * the daemon child must not block on a terminal that is not there.
323
+ */
324
+ function resolveEnvelopePassphrase(explicitPassphrase) {
325
+ if (explicitPassphrase !== undefined && explicitPassphrase.length > 0)
326
+ return explicitPassphrase;
327
+ const env = readEnvPassphrase();
328
+ if (env.ok)
329
+ return env.value;
330
+ const store = readStorePassphrase();
331
+ if (store.ok)
332
+ return store.value;
333
+ throw new SecretSourceError(`${NO_SOURCE_MESSAGE}\nStore: ${store.reason}`);
334
+ }
335
+ function decryptEnvelopeEntry(entry, passphrase) {
336
+ const result = decryptValue(entry.key, passphrase, entry.label);
337
+ if (!result.ok) {
338
+ throw new SecretSourceError(decryptFailureMessage(entry.label, result.error.message));
339
+ }
340
+ return { ...entry, key: result.value, encrypted: true };
341
+ }
342
+ /** `enc:scrypt:` values predate the v1 envelope; keep them readable. */
343
+ function decryptLegacyEntry(entry) {
344
+ const legacyKey = process.env.OPENCODE_GO_ENCRYPTION_KEY;
345
+ if (!legacyKey) {
346
+ throw new Error('Found encrypted API key(s) but OPENCODE_GO_ENCRYPTION_KEY environment variable is not set');
347
+ }
270
348
  try {
271
- return { ...entry, key: decryptKey(entry.key, encryptionKey) };
349
+ const plaintext = decryptKey(entry.key, legacyKey);
350
+ logger.warn({ evt: 'security.legacy-encryption' }, 'Key "%s" uses legacy enc:scrypt encryption with OPENCODE_GO_ENCRYPTION_KEY — replace it with plaintext and run `saros-proxy keys encrypt` to migrate', entry.label);
351
+ return plaintext;
272
352
  }
273
- catch (err) {
274
- logger.error('Failed to decrypt key "%s": %s', entry.label, err instanceof Error ? err.message : String(err));
353
+ catch {
275
354
  throw new Error(`Failed to decrypt API key "${entry.label}" — check OPENCODE_GO_ENCRYPTION_KEY`);
276
355
  }
277
356
  }
278
- function assertNoEncryptedSecrets(config) {
279
- const encryptedKeys = config.keys.filter((k) => isEncryptedKey(k.key));
280
- if (encryptedKeys.length > 0) {
281
- throw new Error(`Found ${encryptedKeys.length} encrypted API key(s) but OPENCODE_GO_ENCRYPTION_KEY environment variable is not set`);
282
- }
283
- }
284
357
  function applyCliOverrides(config, cliArgs) {
285
358
  if (cliArgs.port) {
286
359
  config.port = Number.parseInt(cliArgs.port, 10);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export declare const RATE_LIMIT_WINDOW_MS = 60000;
21
21
  export declare const RATE_LIMIT_MAX = 100;
22
22
  export declare const FORCE_SHUTDOWN_TIMEOUT_MS = 5000;
23
23
  export declare const MAX_STREAMING_BUFFER = 10000;
24
+ /** `GET /debug/recent` keeps this many proxied requests in memory. */
25
+ export declare const RECENT_REQUESTS_CAPACITY = 200;
24
26
  export declare const MODELS_FETCH_TIMEOUT_MS = 5000;
25
27
  export declare const MODELS_WARM_BUFFER_MS = 60000;
26
28
  export declare const USAGE_REFRESH_TTL_MS = 60000;
package/dist/constants.js CHANGED
@@ -23,6 +23,8 @@ export const RATE_LIMIT_WINDOW_MS = 60_000;
23
23
  export const RATE_LIMIT_MAX = 100;
24
24
  export const FORCE_SHUTDOWN_TIMEOUT_MS = 5_000;
25
25
  export const MAX_STREAMING_BUFFER = 10_000;
26
+ /** `GET /debug/recent` keeps this many proxied requests in memory. */
27
+ export const RECENT_REQUESTS_CAPACITY = 200;
26
28
  export const MODELS_FETCH_TIMEOUT_MS = 5_000;
27
29
  export const MODELS_WARM_BUFFER_MS = 60_000;
28
30
  // Per-key usage tracking (upstream usage API + weighted rotation)
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AACpC,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,sEAAsE;AACtE,oEAAoE;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,0CAA0C;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAE7C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAC/C,YAAY,EAAE,MAAM,EAAE,mBAAmB;IACzC,aAAa,EAAE,mBAAmB;CAC1B,CAAC;AAEX,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,8CAA8C,CAAC;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AACpC,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,sEAAsE;AACtE,oEAAoE;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,0CAA0C;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAE7C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAC/C,YAAY,EAAE,MAAM,EAAE,mBAAmB;IACzC,aAAa,EAAE,mBAAmB;CAC1B,CAAC;AAEX,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,8CAA8C,CAAC;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * debug-buffer.ts — In-memory ring buffer of the last proxied requests.
3
+ *
4
+ * Pure state: no Hono, no I/O. The proxy app owns one instance and pushes
5
+ * from the same place it emits `evt:"request.complete"`, so `GET /debug/recent`
6
+ * and the access log cannot drift.
7
+ *
8
+ * Never store credentials, headers or bodies — only the public key label.
9
+ */
10
+ /** One proxied request, exactly as it appears in the access log. */
11
+ export interface RecentRequestEntry {
12
+ requestId: string;
13
+ /**
14
+ * ISO timestamp of when the downstream response was produced (for a stream,
15
+ * its headers — not the end of the stream). Same instant as the
16
+ * `request.complete` line.
17
+ */
18
+ at: string;
19
+ method: string;
20
+ path: string;
21
+ /** Raw model id from the request body (`model@provider` keeps the suffix). */
22
+ model: string | null;
23
+ /** Provider of the key that served (or last tried) the request. */
24
+ provider: string | null;
25
+ /**
26
+ * Public key label — never the credential. The serving key, or the last key
27
+ * tried when the proxy answers 502 or a 503 raised after keys were tried;
28
+ * null only when no key was ever selected.
29
+ */
30
+ keyLabel: string | null;
31
+ status: number;
32
+ durationMs: number;
33
+ stream: boolean;
34
+ /** One-based attempt number. */
35
+ attempt: number;
36
+ }
37
+ export interface RecentRequestsSnapshot {
38
+ capacity: number;
39
+ count: number;
40
+ /** Oldest first (append order). */
41
+ entries: RecentRequestEntry[];
42
+ }
43
+ export interface RecentRequestBuffer {
44
+ readonly capacity: number;
45
+ push(entry: RecentRequestEntry): void;
46
+ snapshot(): RecentRequestsSnapshot;
47
+ }
48
+ /**
49
+ * `SAROS_DEBUG_BUFFER=0` disables the buffer (endpoint answers 404 and nothing
50
+ * is stored). Any other value, or unset, keeps it enabled.
51
+ */
52
+ export declare function isDebugBufferEnabled(env?: NodeJS.ProcessEnv): boolean;
53
+ /**
54
+ * Fixed-capacity buffer: once full, each push evicts the oldest entry.
55
+ * 200 entries of a dozen small fields is a few tens of KB — not worth a
56
+ * head-index ring; `shift()` on a 200-element array is noise.
57
+ */
58
+ export declare function createRecentRequestBuffer(capacity?: number): RecentRequestBuffer;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * debug-buffer.ts — In-memory ring buffer of the last proxied requests.
3
+ *
4
+ * Pure state: no Hono, no I/O. The proxy app owns one instance and pushes
5
+ * from the same place it emits `evt:"request.complete"`, so `GET /debug/recent`
6
+ * and the access log cannot drift.
7
+ *
8
+ * Never store credentials, headers or bodies — only the public key label.
9
+ */
10
+ import { RECENT_REQUESTS_CAPACITY } from './constants.js';
11
+ /**
12
+ * `SAROS_DEBUG_BUFFER=0` disables the buffer (endpoint answers 404 and nothing
13
+ * is stored). Any other value, or unset, keeps it enabled.
14
+ */
15
+ export function isDebugBufferEnabled(env = process.env) {
16
+ return env.SAROS_DEBUG_BUFFER !== '0';
17
+ }
18
+ /**
19
+ * Fixed-capacity buffer: once full, each push evicts the oldest entry.
20
+ * 200 entries of a dozen small fields is a few tens of KB — not worth a
21
+ * head-index ring; `shift()` on a 200-element array is noise.
22
+ */
23
+ export function createRecentRequestBuffer(capacity = RECENT_REQUESTS_CAPACITY) {
24
+ const entries = [];
25
+ return {
26
+ capacity,
27
+ push(entry) {
28
+ entries.push(entry);
29
+ if (entries.length > capacity)
30
+ entries.shift();
31
+ },
32
+ snapshot() {
33
+ return {
34
+ capacity,
35
+ count: entries.length,
36
+ // Detached copies: a caller must not mutate the buffer.
37
+ entries: entries.map((entry) => ({ ...entry })),
38
+ };
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=debug-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-buffer.js","sourceRoot":"","sources":["../src/debug-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AA2C1D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACvE,OAAO,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAQ,GAAW,wBAAwB;IAE3C,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,OAAO;QACL,QAAQ;QACR,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QACjD,CAAC;QACD,QAAQ;YACN,OAAO;gBACL,QAAQ;gBACR,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,wDAAwD;gBACxD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;aAChD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}