@r4security/cli 0.0.3 → 0.0.5

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/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/auth/login.ts","../src/lib/config.ts","../src/lib/output.ts","../src/lib/errors.ts","../src/lib/runtime-config.ts","../src/commands/auth/logout.ts","../src/commands/auth/status.ts","../src/commands/auth/whoami.ts","../src/commands/auth/index.ts","../src/commands/vault/list.ts","../src/lib/resolve-auth.ts","../src/commands/vault/get.ts","../src/commands/vault/items.ts","../src/commands/vault/search.ts","../src/commands/vault/index.ts","../src/commands/project/list.ts","../src/lib/client.ts","../src/commands/project/get.ts","../src/commands/project/create.ts","../src/commands/project/index.ts","../src/commands/run/index.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { registerAuthCommands } from './commands/auth/index.js'\nimport { registerVaultCommands } from './commands/vault/index.js'\nimport { registerProjectCommands } from './commands/project/index.js'\nimport { registerRunCommand } from './commands/run/index.js'\n\n/**\n * R4 CLI entry point.\n *\n * Sets up the commander program with global options and command groups:\n * - auth: Manage API key authentication\n * - vault: Manage vault secrets\n * - project: Manage projects\n * - run: Execute commands with vault secrets injected as env vars\n */\nconst program = new Command()\n\nprogram\n .name('r4')\n .description('R4 CLI — manage vaults, projects, and secrets from the terminal')\n .version('0.0.3')\n .option('--api-key <key>', 'API key (overrides R4_API_KEY env var and config file)')\n .option('--project-id <id>', 'Optional project ID filter (overrides R4_PROJECT_ID env var and config file)')\n .option('--dev', 'Use https://dev.r4.dev unless an explicit base URL override is set')\n .option('--base-url <url>', 'API base URL (default: https://r4.dev)')\n .option('--private-key-path <path>', 'Path to the agent private key PEM (overrides R4_PRIVATE_KEY_PATH env var and config file)')\n .option('--trust-store-path <path>', 'Path to the local signer trust-store JSON (overrides R4_TRUST_STORE_PATH env var and config file)')\n .option('--json', 'Output as JSON for scripting and piping', false)\n\nregisterAuthCommands(program)\nregisterVaultCommands(program)\nregisterProjectCommands(program)\nregisterRunCommand(program)\n\nprogram.parse()\n","import { Command } from 'commander'\nimport readline from 'node:readline'\nimport { loadConfig, saveConfig, getConfigPath } from '../../lib/config.js'\nimport { success, warn } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { applyGlobalRuntimeOptionsToConfig } from '../../lib/runtime-config.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * Prompt the user for input via stdin.\n * Used when no --api-key flag is provided.\n */\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.trim())\n })\n })\n}\n\n/** r4 auth login — Save runtime auth settings to the config file */\nexport function loginCommand(): Command {\n return new Command('login')\n .description('Save your API key and runtime key paths to the config file')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n\n let apiKey = globalOpts.apiKey || process.env.R4_API_KEY\n\n if (!apiKey) {\n apiKey = await prompt('Enter your R4 API key: ')\n }\n\n if (!apiKey) {\n throw new Error('No API key provided.')\n }\n\n if (!apiKey.includes('.')) {\n warn('API key format is usually {accessKey}.{secret}')\n }\n\n if (globalOpts.baseUrl && globalOpts.dev) {\n warn('--base-url takes precedence over --dev and will be saved as the active runtime URL.')\n }\n\n const config = applyGlobalRuntimeOptionsToConfig(loadConfig(), globalOpts)\n config.apiKey = apiKey\n\n saveConfig(config)\n success(`Runtime settings saved to ${getConfigPath()}`)\n }),\n )\n}\n","import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { R4ConfigFile } from '../types.js'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.r4')\nconst CONFIG_PATH = path.join(CONFIG_DIR, 'config.json')\n\n/**\n * Load the R4 config file from ~/.r4/config.json.\n * Returns an empty object if the file does not exist or is invalid.\n */\nexport function loadConfig(): R4ConfigFile {\n try {\n const raw = fs.readFileSync(CONFIG_PATH, 'utf8')\n return JSON.parse(raw) as R4ConfigFile\n } catch {\n return {}\n }\n}\n\n/**\n * Save the R4 config file to ~/.r4/config.json.\n * Creates the ~/.r4 directory if it does not exist.\n */\nexport function saveConfig(config: R4ConfigFile): void {\n fs.mkdirSync(CONFIG_DIR, { recursive: true })\n fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\\n', 'utf8')\n}\n\n/**\n * Remove the R4 config file.\n */\nexport function clearConfig(): void {\n try {\n fs.unlinkSync(CONFIG_PATH)\n } catch {\n // File doesn't exist, nothing to do\n }\n}\n\n/**\n * Get the path to the config file (for display purposes).\n */\nexport function getConfigPath(): string {\n return CONFIG_PATH\n}\n","import chalk from 'chalk'\nimport Table from 'cli-table3'\n\n/**\n * Print data as a formatted table, or as JSON if --json flag is set.\n */\nexport function printTable(\n headers: string[],\n rows: string[][],\n jsonMode: boolean,\n jsonData?: unknown,\n): void {\n if (jsonMode) {\n console.log(JSON.stringify(jsonData ?? rows, null, 2))\n return\n }\n\n const table = new Table({\n head: headers.map((h) => chalk.cyan(h)),\n style: { head: [], border: [] },\n })\n for (const row of rows) {\n table.push(row)\n }\n console.log(table.toString())\n}\n\n/**\n * Print a key-value detail view.\n */\nexport function printDetail(\n entries: [string, string | null | undefined][],\n jsonMode: boolean,\n jsonData?: unknown,\n): void {\n if (jsonMode) {\n console.log(JSON.stringify(jsonData, null, 2))\n return\n }\n\n const maxLen = Math.max(...entries.map(([k]) => k.length))\n for (const [key, value] of entries) {\n const label = chalk.gray(key.padEnd(maxLen))\n const val = value ?? chalk.dim('(empty)')\n console.log(` ${label} ${val}`)\n }\n}\n\n/** Print a success message */\nexport function success(message: string): void {\n console.log(chalk.green('✓') + ' ' + message)\n}\n\n/** Print a warning */\nexport function warn(message: string): void {\n console.log(chalk.yellow('!') + ' ' + message)\n}\n\n/** Print an error message to stderr */\nexport function printError(message: string): void {\n console.error(chalk.red('✗') + ' ' + message)\n}\n","import { printError } from './output.js'\n\n/**\n * Wrap a command handler to catch errors and exit with proper codes.\n * Formats R4 API errors and auth errors with helpful messages.\n */\nexport function withErrorHandler<T extends unknown[]>(\n fn: (...args: T) => Promise<void>,\n): (...args: T) => Promise<void> {\n return async (...args: T) => {\n try {\n await fn(...args)\n } catch (err) {\n if (err instanceof Error) {\n printError(err.message)\n } else {\n printError('An unexpected error occurred')\n }\n process.exit(1)\n }\n }\n}\n","import type { GlobalOptions, R4ConfigFile } from '../types.js'\n\nexport const R4_DEFAULT_API_BASE_URL = 'https://r4.dev'\nexport const R4_DEV_API_BASE_URL = 'https://dev.r4.dev'\n\ntype RuntimeModeSources = {\n cliBaseUrl?: string\n envBaseUrl?: string\n configBaseUrl?: string\n cliDev?: boolean\n envDev?: string\n configDev?: boolean\n}\n\nexport type ResolvedRuntimeMode = {\n baseUrl: string\n devMode: boolean\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '')\n}\n\nfunction isTruthyEnvFlag(value?: string): boolean {\n if (!value) {\n return false\n }\n\n return ['1', 'true', 'yes', 'on'].includes(value.trim().toLowerCase())\n}\n\n/**\n * Resolve the effective API base URL and dev-mode state.\n * Any explicit base URL override wins over dev mode.\n */\nexport function resolveRuntimeMode(sources: RuntimeModeSources): ResolvedRuntimeMode {\n const explicitBaseUrl = sources.cliBaseUrl || sources.envBaseUrl || sources.configBaseUrl\n\n if (explicitBaseUrl) {\n return {\n baseUrl: explicitBaseUrl,\n devMode: normalizeBaseUrl(explicitBaseUrl) === R4_DEV_API_BASE_URL,\n }\n }\n\n const devMode =\n sources.cliDev === true ||\n isTruthyEnvFlag(sources.envDev) ||\n sources.configDev === true\n\n return {\n baseUrl: devMode ? R4_DEV_API_BASE_URL : R4_DEFAULT_API_BASE_URL,\n devMode,\n }\n}\n\n/**\n * Resolve the effective runtime mode from CLI flags, env vars, and config file.\n */\nexport function resolveRuntimeModeFromCli(\n opts: GlobalOptions,\n config: R4ConfigFile,\n): ResolvedRuntimeMode {\n return resolveRuntimeMode({\n cliBaseUrl: opts.baseUrl,\n envBaseUrl: process.env.R4_BASE_URL,\n configBaseUrl: config.baseUrl,\n cliDev: opts.dev,\n envDev: process.env.R4_DEV,\n configDev: config.dev,\n })\n}\n\n/**\n * Apply runtime-related global options to the persisted CLI config.\n * Saving an explicit base URL clears persisted dev mode, and saving dev mode\n * clears any persisted base URL so the dev host actually takes effect.\n */\nexport function applyGlobalRuntimeOptionsToConfig(\n config: R4ConfigFile,\n opts: Pick<GlobalOptions, 'baseUrl' | 'dev' | 'projectId' | 'privateKeyPath' | 'trustStorePath'>,\n): R4ConfigFile {\n const nextConfig: R4ConfigFile = { ...config }\n\n if (opts.baseUrl) {\n nextConfig.baseUrl = opts.baseUrl\n delete nextConfig.dev\n } else if (opts.dev === true) {\n nextConfig.dev = true\n delete nextConfig.baseUrl\n }\n\n if (opts.projectId) {\n nextConfig.projectId = opts.projectId\n }\n\n if (opts.privateKeyPath) {\n nextConfig.privateKeyPath = opts.privateKeyPath\n }\n\n if (opts.trustStorePath) {\n nextConfig.trustStorePath = opts.trustStorePath\n }\n\n return nextConfig\n}\n","import { Command } from 'commander'\nimport { clearConfig, getConfigPath } from '../../lib/config.js'\nimport { success } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\n\n/** r4 auth logout — Remove saved credentials */\nexport function logoutCommand(): Command {\n return new Command('logout')\n .description('Remove saved API key from the config file')\n .action(\n withErrorHandler(async () => {\n clearConfig()\n success(`Config removed from ${getConfigPath()}`)\n }),\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { loadConfig, getConfigPath } from '../../lib/config.js'\nimport { printDetail } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { resolveRuntimeModeFromCli } from '../../lib/runtime-config.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** Mask an API key for display, showing only the first 8 characters */\nfunction maskKey(key: string): string {\n if (key.length <= 8) return key\n return key.substring(0, 8) + '...'\n}\n\n/** r4 auth status — Show current auth status */\nexport function statusCommand(): Command {\n return new Command('status')\n .description('Show current authentication status')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = loadConfig()\n const runtimeMode = resolveRuntimeModeFromCli(globalOpts, config)\n\n let source: string\n let apiKey: string | undefined\n const privateKeyPath =\n globalOpts.privateKeyPath ||\n process.env.R4_PRIVATE_KEY_PATH ||\n config.privateKeyPath\n const trustStorePath =\n globalOpts.trustStorePath ||\n process.env.R4_TRUST_STORE_PATH ||\n config.trustStorePath\n\n if (globalOpts.apiKey) {\n source = '--api-key flag'\n apiKey = globalOpts.apiKey\n } else if (process.env.R4_API_KEY) {\n source = 'R4_API_KEY env var'\n apiKey = process.env.R4_API_KEY\n } else if (config.apiKey) {\n source = `config file (${getConfigPath()})`\n apiKey = config.apiKey\n } else {\n source = 'none'\n }\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n authenticated: !!apiKey,\n source,\n apiKey: apiKey ? maskKey(apiKey) : null,\n baseUrl: runtimeMode.baseUrl,\n devMode: runtimeMode.devMode,\n privateKeyPath: privateKeyPath || null,\n trustStorePath: trustStorePath || null,\n },\n null,\n 2,\n ),\n )\n return\n }\n\n console.log()\n if (apiKey) {\n console.log(chalk.bold(' Authenticated'))\n console.log()\n printDetail(\n [\n ['Source', source],\n ['API Key', maskKey(apiKey)],\n ['Mode', runtimeMode.devMode ? 'dev' : 'prod'],\n ['Base URL', runtimeMode.baseUrl],\n ['Private Key', privateKeyPath || chalk.dim('(not set)')],\n ['Trust Store', trustStorePath || chalk.dim('(default beside key file)')],\n ],\n false,\n )\n } else {\n console.log(chalk.bold(' Not authenticated'))\n console.log()\n console.log(' Run ' + chalk.cyan('r4 auth login') + ' to save your API key.')\n }\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { loadConfig, getConfigPath } from '../../lib/config.js'\nimport { printDetail } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { resolveRuntimeModeFromCli } from '../../lib/runtime-config.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** Mask an API key for display, showing only the first 8 characters */\nfunction maskKey(key: string): string {\n if (key.length <= 8) return key\n return key.substring(0, 8) + '...'\n}\n\n/**\n * r4 auth whoami — Show the current authenticated identity.\n * Displays the resolved org context, project ID, and base URL\n * based on CLI flags, environment variables, and config file.\n */\nexport function whoamiCommand(): Command {\n return new Command('whoami')\n .description('Show current authenticated identity')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = loadConfig()\n const runtimeMode = resolveRuntimeModeFromCli(globalOpts, config)\n\n const apiKey = globalOpts.apiKey || process.env.R4_API_KEY || config.apiKey\n const projectId = globalOpts.projectId || process.env.R4_PROJECT_ID || config.projectId\n const privateKeyPath =\n globalOpts.privateKeyPath ||\n process.env.R4_PRIVATE_KEY_PATH ||\n config.privateKeyPath\n const trustStorePath =\n globalOpts.trustStorePath ||\n process.env.R4_TRUST_STORE_PATH ||\n config.trustStorePath\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n authenticated: !!apiKey,\n apiKey: apiKey ? maskKey(apiKey) : null,\n projectId: projectId || null,\n baseUrl: runtimeMode.baseUrl,\n devMode: runtimeMode.devMode,\n privateKeyPath: privateKeyPath || null,\n trustStorePath: trustStorePath || null,\n configPath: getConfigPath(),\n },\n null,\n 2,\n ),\n )\n return\n }\n\n console.log()\n if (!apiKey) {\n console.log(chalk.bold(' Not authenticated'))\n console.log()\n console.log(' Run ' + chalk.cyan('r4 auth login') + ' to save your API key.')\n console.log()\n return\n }\n\n console.log(chalk.bold(' Authenticated'))\n console.log()\n printDetail(\n [\n ['API Key', maskKey(apiKey)],\n ['Project ID', projectId || chalk.dim('(not set)')],\n ['Mode', runtimeMode.devMode ? 'dev' : 'prod'],\n ['Base URL', runtimeMode.baseUrl],\n ['Private Key', privateKeyPath || chalk.dim('(not set)')],\n ['Trust Store', trustStorePath || chalk.dim('(default beside key file)')],\n ['Config File', getConfigPath()],\n ],\n false,\n )\n console.log()\n }),\n )\n}\n","import type { Command } from 'commander'\nimport { loginCommand } from './login.js'\nimport { logoutCommand } from './logout.js'\nimport { statusCommand } from './status.js'\nimport { whoamiCommand } from './whoami.js'\n\n/** Register auth subcommands on the CLI program */\nexport function registerAuthCommands(program: Command): void {\n const auth = program.command('auth').description('Manage API key authentication')\n\n auth.addCommand(loginCommand())\n auth.addCommand(logoutCommand())\n auth.addCommand(statusCommand())\n auth.addCommand(whoamiCommand())\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 vault list — List all locally decrypted environment variables as a table.\n */\nexport function listCommand(): Command {\n return new Command('list')\n .description('List all locally decrypted environment variables')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Fetching environment variables...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const keys = Object.keys(env).sort()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(env, null, 2))\n return\n }\n\n if (keys.length === 0) {\n console.log('\\n No environment variables found.\\n')\n return\n }\n\n const rows = keys.map((key) => [key, env[key]])\n\n console.log()\n printTable(['Key', 'Value'], rows, false)\n console.log()\n }),\n )\n}\n","import type { R4Config } from 'r4-sdk'\nimport type { GlobalOptions } from '../types.js'\nimport { loadConfig } from './config.js'\nimport { resolveRuntimeModeFromCli } from './runtime-config.js'\n\n/**\n * Resolve R4 SDK configuration from CLI flags, environment variables, and config file.\n *\n * Precedence (highest to lowest):\n * 1. CLI flags (--api-key, --base-url, --dev, --project-id, --private-key-path, --trust-store-path)\n * 2. Environment variables (R4_API_KEY, R4_BASE_URL, R4_DEV, R4_PROJECT_ID, R4_PRIVATE_KEY_PATH, R4_TRUST_STORE_PATH)\n * 3. Config file (~/.r4/config.json)\n * 4. Defaults (baseUrl: https://r4.dev)\n *\n * Explicit baseUrl overrides dev mode. Throws if no API key or private-key\n * path is found from any source.\n */\nexport function resolveAuth(opts: GlobalOptions): R4Config {\n const config = loadConfig()\n const runtimeMode = resolveRuntimeModeFromCli(opts, config)\n\n const apiKey = opts.apiKey || process.env.R4_API_KEY || config.apiKey\n if (!apiKey) {\n throw new Error(\n 'No API key found. Provide one via:\\n' +\n ' --api-key <key> CLI flag\\n' +\n ' R4_API_KEY environment variable\\n' +\n ' r4 auth login save to config file',\n )\n }\n\n const privateKeyPath =\n opts.privateKeyPath ||\n process.env.R4_PRIVATE_KEY_PATH ||\n config.privateKeyPath\n\n if (!privateKeyPath) {\n throw new Error(\n 'No private key path found. Provide one via:\\n' +\n ' --private-key-path <path> CLI flag\\n' +\n ' R4_PRIVATE_KEY_PATH environment variable\\n' +\n ' ~/.r4/config.json config file (privateKeyPath field)',\n )\n }\n\n const projectId = opts.projectId || process.env.R4_PROJECT_ID || config.projectId\n const trustStorePath =\n opts.trustStorePath ||\n process.env.R4_TRUST_STORE_PATH ||\n config.trustStorePath\n\n return {\n apiKey,\n projectId,\n baseUrl: runtimeMode.baseUrl,\n dev: runtimeMode.devMode,\n privateKeyPath,\n trustStorePath,\n }\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 vault get <KEY> — Get a specific locally decrypted environment variable value.\n * Outputs the raw value, perfect for piping: r4 vault get PRODUCTION_DB_PASSWORD | pbcopy\n */\nexport function getCommand(): Command {\n return new Command('get')\n .description('Get a specific locally decrypted environment variable value')\n .argument('<key>', 'Environment variable key (SCREAMING_SNAKE_CASE)')\n .action(\n withErrorHandler(\n async (keyArg: string, _opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Fetching environment variables...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const key = keyArg.toUpperCase()\n const value = env[key]\n\n if (value === undefined) {\n const available = Object.keys(env).sort().join(', ') || '(none)'\n throw new Error(`Key \"${key}\" not found. Available keys: ${available}`)\n }\n\n if (globalOpts.json) {\n console.log(JSON.stringify({ key, value }, null, 2))\n return\n }\n\n // Raw output — perfect for piping: r4 vault get PRODUCTION_DB_PASSWORD | pbcopy\n process.stdout.write(value)\n },\n ),\n )\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * Represents a vault item derived from environment variable keys.\n * Groups related fields that share the same item name prefix.\n */\ninterface VaultItem {\n name: string\n fields: { name: string; key: string }[]\n}\n\n/**\n * Derive vault items from a flat env map.\n *\n * Env keys follow the pattern: ITEM_NAME_FIELD_NAME (SCREAMING_SNAKE_CASE).\n * Since we only have the flat map, we group by common prefix heuristic:\n * - Each unique env key is treated as a single-field item\n * - The full key is the item name\n *\n * This provides a useful overview of all available secrets.\n */\nfunction deriveItems(env: Record<string, string>): VaultItem[] {\n const keys = Object.keys(env).sort()\n return keys.map((key) => ({\n name: key,\n fields: [{ name: key, key }],\n }))\n}\n\n/**\n * r4 vault items — List all vault items with their field names and types.\n * Uses the zero-trust SDK env map and groups keys heuristically by item prefix.\n */\nexport function itemsCommand(): Command {\n return new Command('items')\n .description('List all vault items represented in the locally decrypted env map')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Fetching vault items...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const items = deriveItems(env)\n\n if (globalOpts.json) {\n console.log(JSON.stringify(items, null, 2))\n return\n }\n\n if (items.length === 0) {\n console.log('\\n No vault items found.\\n')\n return\n }\n\n const rows = items.map((item) => [\n item.name,\n 'secret',\n item.fields.map((f) => f.name).join(', '),\n ])\n\n console.log()\n printTable(['Name', 'Type', 'Fields'], rows, false)\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 vault search <query> — Search vault items by name (case-insensitive).\n * Matches locally decrypted env variable keys that contain the search query.\n * Useful for finding secrets when you know part of the name.\n */\nexport function searchCommand(): Command {\n return new Command('search')\n .description('Search vault items by name')\n .argument('<query>', 'Search query (case-insensitive match against key names)')\n .action(\n withErrorHandler(\n async (query: string, _opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Searching vault items...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const lowerQuery = query.toLowerCase()\n\n const matches = Object.keys(env)\n .filter((key) => key.toLowerCase().includes(lowerQuery))\n .sort()\n\n if (globalOpts.json) {\n const result = matches.map((key) => ({ key, value: env[key] }))\n console.log(JSON.stringify(result, null, 2))\n return\n }\n\n if (matches.length === 0) {\n console.log(`\\n No items matching \"${query}\" found.\\n`)\n return\n }\n\n const rows = matches.map((key) => [key, env[key]])\n\n console.log()\n printTable(['Key', 'Value'], rows, false)\n console.log()\n },\n ),\n )\n}\n","import type { Command } from 'commander'\nimport { listCommand } from './list.js'\nimport { getCommand } from './get.js'\nimport { itemsCommand } from './items.js'\nimport { searchCommand } from './search.js'\n\n/** Register vault subcommands on the CLI program */\nexport function registerVaultCommands(program: Command): void {\n const vault = program.command('vault').description('Manage vault secrets')\n\n vault.addCommand(listCommand())\n vault.addCommand(getCommand())\n vault.addCommand(itemsCommand())\n vault.addCommand(searchCommand())\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** r4 project list — List all projects as a table */\nexport function listCommand(): Command {\n return new Command('list')\n .description('List all projects')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n const client = new CliClient(config.apiKey, config.baseUrl || 'https://r4.dev')\n\n const spinner = ora('Fetching projects...').start()\n const response = await client.listProjects()\n spinner.stop()\n\n const rows = response.projects.map((p) => [\n p.id,\n p.name,\n p.externalId || '-',\n String(p.vaultsCount),\n String(p.licensesCount),\n String(p.licenseGroupsCount),\n ])\n\n console.log()\n printTable(\n ['ID', 'Name', 'External ID', 'Vaults', 'Licenses', 'License Groups'],\n rows,\n !!globalOpts.json,\n response.projects,\n )\n console.log()\n }),\n )\n}\n","import type {\n ProjectListResponse,\n ProjectDetail,\n CreateProjectRequest,\n CreateProjectResponse,\n} from '../types.js'\n\n/**\n * HTTP client for machine API endpoints not covered by the r4-sdk.\n * Follows the same fetch + X-API-Key pattern as the SDK's R4Client.\n */\nexport class CliClient {\n private apiKey: string\n private baseUrl: string\n\n constructor(apiKey: string, baseUrl: string) {\n this.apiKey = apiKey\n this.baseUrl = baseUrl.replace(/\\/$/, '')\n }\n\n /**\n * Make an authenticated request to the machine API.\n * Handles error responses consistently with the SDK pattern.\n */\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`\n\n const response = await fetch(url, {\n method,\n headers: {\n 'X-API-Key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n body: body ? JSON.stringify(body) : undefined,\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as Record<string, unknown>\n const error = errorBody?.error as Record<string, unknown> | undefined\n const errorMessage = error?.message || `HTTP ${response.status}: ${response.statusText}`\n throw new Error(`R4 API Error: ${errorMessage}`)\n }\n\n return response.json() as Promise<T>\n }\n\n /** List all projects. GET /api/v1/machine/project */\n async listProjects(): Promise<ProjectListResponse> {\n return this.request<ProjectListResponse>('GET', '/api/v1/machine/project')\n }\n\n /** Get project details. GET /api/v1/machine/project/:id */\n async getProject(id: string): Promise<ProjectDetail> {\n return this.request<ProjectDetail>('GET', `/api/v1/machine/project/${id}`)\n }\n\n /** Create a new project. POST /api/v1/machine/project */\n async createProject(data: CreateProjectRequest): Promise<CreateProjectResponse> {\n return this.request<CreateProjectResponse>('POST', '/api/v1/machine/project', data)\n }\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printDetail, printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** r4 project get <id> — Show project details with associated resources */\nexport function getCommand(): Command {\n return new Command('get')\n .description('Get project details')\n .argument('<id>', 'Project ID')\n .action(\n withErrorHandler(async (id: string, _opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n const client = new CliClient(config.apiKey, config.baseUrl || 'https://r4.dev')\n\n const spinner = ora('Fetching project...').start()\n const project = await client.getProject(id)\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(project, null, 2))\n return\n }\n\n console.log()\n console.log(chalk.bold(` ${project.name}`))\n console.log()\n\n printDetail(\n [\n ['ID', project.id],\n ['External ID', project.externalId],\n ['Description', project.description],\n ['Created At', project.createdAt],\n ['Vaults', String(project.vaultsCount)],\n ['Licenses', String(project.licensesCount)],\n ['License Groups', String(project.licenseGroupsCount)],\n ],\n false,\n )\n\n if (project.vaults.length > 0) {\n console.log()\n console.log(chalk.bold(' Vaults'))\n console.log()\n printTable(\n ['ID', 'Name', 'Encrypted'],\n project.vaults.map((v) => [v.id, v.name, v.isEncrypted ? 'Yes' : 'No']),\n false,\n )\n }\n\n if (project.licenses.length > 0) {\n console.log()\n console.log(chalk.bold(' Licenses'))\n console.log()\n printTable(\n ['ID', 'Name', 'Type'],\n project.licenses.map((l) => [l.id, l.name || '-', l.type]),\n false,\n )\n }\n\n if (project.licenseGroups.length > 0) {\n console.log()\n console.log(chalk.bold(' License Groups'))\n console.log()\n printTable(\n ['ID', 'Name'],\n project.licenseGroups.map((lg) => [lg.id, lg.name]),\n false,\n )\n }\n\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport readline from 'node:readline'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { success } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** Prompt the user for input via stdin */\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.trim())\n })\n })\n}\n\n/** r4 project create — Create a new project */\nexport function createCommand(): Command {\n return new Command('create')\n .description('Create a new project')\n .option('--name <name>', 'Project name')\n .option('--description <description>', 'Project description')\n .option('--external-id <externalId>', 'External identifier')\n .action(\n withErrorHandler(async (opts: { name?: string; description?: string; externalId?: string }, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n const client = new CliClient(config.apiKey, config.baseUrl || 'https://r4.dev')\n\n let name = opts.name\n if (!name) {\n name = await prompt('Project name: ')\n }\n if (!name) {\n throw new Error('Project name is required.')\n }\n\n const spinner = ora('Creating project...').start()\n const response = await client.createProject({\n name,\n description: opts.description,\n externalId: opts.externalId,\n })\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(response, null, 2))\n return\n }\n\n success(`Project created with ID: ${response.id}`)\n }),\n )\n}\n","import type { Command } from 'commander'\nimport { listCommand } from './list.js'\nimport { getCommand } from './get.js'\nimport { createCommand } from './create.js'\n\n/** Register project subcommands on the CLI program */\nexport function registerProjectCommands(program: Command): void {\n const project = program.command('project').description('Manage projects')\n\n project.addCommand(listCommand())\n project.addCommand(getCommand())\n project.addCommand(createCommand())\n}\n","import { Command } from 'commander'\nimport { spawn } from 'node:child_process'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 run <command...> — Run a command with vault secrets injected as environment variables.\n *\n * Env var naming: SCREAMING_SNAKE_CASE keys built from locally decrypted vault items.\n *\n * Examples:\n * r4 run --project-id abc123 node deploy.js\n * r4 run --prefix R4 -- docker compose up\n */\nexport function registerRunCommand(program: Command): void {\n program\n .command('run')\n .description('Run a command with vault secrets injected as environment variables')\n .argument('<command...>', 'Command and arguments to execute')\n .option('--prefix <prefix>', 'Add prefix to all injected env var names')\n .action(\n withErrorHandler(\n async (commandParts: string[], opts: { prefix?: string }, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n // 1. Fetch and locally decrypt env vars via the R4 SDK\n const spinner = ora('Loading vault secrets...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n\n // 2. Build environment variable map (optionally with prefix)\n const secretEnv: Record<string, string> = {}\n\n for (const key of Object.keys(env)) {\n const envName = opts.prefix\n ? `${opts.prefix.toUpperCase()}_${key}`\n : key\n secretEnv[envName] = env[key]\n }\n\n // 3. Spawn the child process with merged environment\n const [command, ...args] = commandParts\n const child = spawn(command, args, {\n stdio: 'inherit',\n env: { ...process.env, ...secretEnv },\n shell: true,\n })\n\n // 4. Forward the child's exit code\n child.on('close', (code) => {\n process.exit(code ?? 1)\n })\n\n child.on('error', (err) => {\n throw new Error(`Failed to execute command \"${command}\": ${err.message}`)\n })\n },\n ),\n )\n}\n"],"mappings":"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","names":["Command","Command","Command","Command","chalk","Command","chalk","Command","chalk","maskKey","Command","chalk","program","Command","Command","Command","ora","R4","Command","ora","R4","Command","ora","R4","Command","ora","R4","Command","ora","R4","Command","ora","R4","program","Command","ora","path","listCommand","Command","ora","Command","chalk","ora","getCommand","Command","ora","chalk","Command","readline","ora","prompt","readline","Command","ora","program","listCommand","getCommand","ora","R4","program","ora","R4","Command"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/agent/init.ts","../src/commands/doctor.ts","../src/lib/doctor.ts","../src/lib/client.ts","../src/lib/private-key.ts","../src/lib/output.ts","../src/lib/errors.ts","../src/lib/resolve-auth.ts","../src/lib/config.ts","../src/lib/runtime-config.ts","../src/lib/credentials-file.ts","../src/commands/agent/index.ts","../src/commands/auth/diagnose.ts","../src/commands/auth/login.ts","../src/commands/auth/logout.ts","../src/commands/auth/status.ts","../src/commands/auth/whoami.ts","../src/commands/auth/index.ts","../src/commands/profile/list.ts","../src/commands/profile/use.ts","../src/commands/profile/index.ts","../src/commands/vault/list.ts","../src/commands/vault/list-items.ts","../src/commands/vault/items.ts","../src/commands/vault/list-vaults.ts","../src/commands/vault/get.ts","../src/commands/vault/search.ts","../src/commands/vault/index.ts","../src/commands/project/list.ts","../src/commands/project/get.ts","../src/commands/project/create.ts","../src/commands/project/index.ts","../src/commands/run/index.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { registerAgentCommands } from './commands/agent/index.js'\nimport { registerAuthCommands } from './commands/auth/index.js'\nimport { doctorCommand } from './commands/doctor.js'\nimport { registerProfileCommands } from './commands/profile/index.js'\nimport { registerVaultCommands } from './commands/vault/index.js'\nimport { registerProjectCommands } from './commands/project/index.js'\nimport { registerRunCommand } from './commands/run/index.js'\n\n/**\n * R4 CLI entry point.\n *\n * Sets up the commander program with global options and command groups:\n * - auth: Manage API key authentication\n * - vault: Manage vault secrets\n * - project: Manage projects\n * - run: Execute commands with vault secrets injected as env vars\n */\nconst program = new Command()\n\nprogram\n .name('r4')\n .description('R4 CLI — manage vaults, projects, and secrets from the terminal')\n .version('0.0.5')\n .option('--api-key <key>', 'API key (overrides R4_API_KEY env var and config file)')\n .option('--profile <name>', 'CLI profile name (overrides R4_PROFILE and the saved current profile)')\n .option('--project-id <id>', 'Optional project ID filter (overrides R4_PROJECT_ID env var and config file)')\n .option('--dev', 'Use https://dev.r4.dev unless an explicit base URL override is set')\n .option('--base-url <url>', 'API base URL (default: https://r4.dev)')\n .option('--private-key-path <path>', 'Path to the agent private key PEM (overrides R4_PRIVATE_KEY_PATH env var and config file)')\n .option('--trust-store-path <path>', 'Path to the local signer trust-store JSON (overrides R4_TRUST_STORE_PATH env var and config file)')\n .option('--json', 'Output as JSON for scripting and piping', false)\n\nregisterAgentCommands(program)\nregisterAuthCommands(program)\nregisterProfileCommands(program)\nregisterVaultCommands(program)\nregisterProjectCommands(program)\nregisterRunCommand(program)\nprogram.addCommand(doctorCommand())\n\nprogram.parse()\n","import { Command } from 'commander'\nimport readline from 'node:readline'\nimport ora from 'ora'\nimport { printDoctorReport } from '../doctor.js'\nimport { CliClient } from '../../lib/client.js'\nimport {\n getProfileConfig,\n getSelectedProfileName,\n loadConfig,\n saveConfig,\n setCurrentProfile,\n updateProfile,\n} from '../../lib/config.js'\nimport { parseCredentialsFile } from '../../lib/credentials-file.js'\nimport { doctorHasFailures, runDoctorChecks } from '../../lib/doctor.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { success, warn } from '../../lib/output.js'\nimport {\n derivePublicKey,\n ensurePrivateKey,\n resolvePrivateKeyPath,\n} from '../../lib/private-key.js'\nimport {\n buildApiKeyFromParts,\n resolveConnection,\n} from '../../lib/resolve-auth.js'\nimport {\n applyGlobalRuntimeOptionsToProfile,\n resolveRuntimeModeFromCli,\n} from '../../lib/runtime-config.js'\nimport type {\n GlobalOptions,\n ParsedCredentialBundle,\n R4ProfileConfig,\n} from '../../types.js'\n\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.trim())\n })\n })\n}\n\nfunction getAgentId(bundle: {\n transparency?: {\n entries: Array<{ agentId: string }>\n } | null\n}): string | undefined {\n const entryCount = bundle.transparency?.entries.length ?? 0\n if (!bundle.transparency || entryCount === 0) {\n return undefined\n }\n\n return bundle.transparency.entries[entryCount - 1]?.agentId\n}\n\nfunction applyCredentialBundleToProfile(\n profile: R4ProfileConfig,\n bundle: ParsedCredentialBundle,\n globalOpts: GlobalOptions,\n privateKeyPath: string,\n): R4ProfileConfig {\n let nextProfile: R4ProfileConfig = { ...profile }\n\n if (!globalOpts.baseUrl && globalOpts.dev !== true) {\n if (bundle.baseUrl) {\n nextProfile.baseUrl = bundle.baseUrl\n delete nextProfile.dev\n } else if (bundle.dev === true) {\n nextProfile.dev = true\n delete nextProfile.baseUrl\n } else if (bundle.dev === false) {\n delete nextProfile.dev\n }\n }\n\n if (!globalOpts.projectId && bundle.projectId) {\n nextProfile.projectId = bundle.projectId\n }\n\n if (bundle.agentId) {\n nextProfile.agentId = bundle.agentId\n }\n\n if (bundle.agentName) {\n nextProfile.agentName = bundle.agentName\n }\n\n nextProfile.privateKeyPath = privateKeyPath\n\n nextProfile = applyGlobalRuntimeOptionsToProfile(nextProfile, globalOpts)\n return nextProfile\n}\n\n/** `r4 agent init` — bootstrap the local runtime in one shot. */\nexport function initCommand(): Command {\n return new Command('init')\n .description('Bootstrap local agent auth, key generation, public-key registration, and health checks')\n .option(\n '--credentials-file <path>',\n 'Read credentials from a CSV, .env, JSON, or plain-text handoff file',\n )\n .action(\n withErrorHandler(\n async (\n opts: {\n credentialsFile?: string\n },\n cmd: Command,\n ) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = loadConfig()\n const profileName = getSelectedProfileName(\n config,\n globalOpts.profile,\n process.env.R4_PROFILE,\n )\n const existingProfile = getProfileConfig(config, profileName)\n const bundle = opts.credentialsFile\n ? parseCredentialsFile(opts.credentialsFile)\n : {}\n\n let apiKey =\n globalOpts.apiKey ||\n process.env.R4_API_KEY ||\n buildApiKeyFromParts(\n process.env.R4_ACCESS_KEY,\n process.env.R4_SECRET_KEY,\n ) ||\n bundle.apiKey ||\n existingProfile.apiKey\n\n if (!apiKey) {\n apiKey = await prompt('Enter your R4 API key: ')\n }\n\n if (!apiKey) {\n throw new Error('No API key provided.')\n }\n\n if (!apiKey.includes('.')) {\n warn('API key format is usually {accessKey}.{secret}')\n }\n\n if (globalOpts.baseUrl && globalOpts.dev) {\n warn('--base-url takes precedence over --dev and will be saved as the active runtime URL.')\n }\n\n const privateKeyPath =\n resolvePrivateKeyPath({\n cliPath: globalOpts.privateKeyPath,\n envPath: process.env.R4_PRIVATE_KEY_PATH,\n profilePath: existingProfile.privateKeyPath,\n profileName,\n allowDefaultIfMissing: true,\n }).value\n\n if (!privateKeyPath) {\n throw new Error('Unable to resolve a local private-key path for agent bootstrap.')\n }\n\n const keySpinner = ora('Ensuring a local RSA private key exists...').start()\n const { privateKeyPem, created } = ensurePrivateKey(privateKeyPath)\n keySpinner.stop()\n\n const publicKeyPem = derivePublicKey(privateKeyPem)\n const nextProfile = applyCredentialBundleToProfile(\n existingProfile,\n bundle,\n globalOpts,\n privateKeyPath,\n )\n\n const runtimeMode = resolveRuntimeModeFromCli(globalOpts, nextProfile)\n const client = new CliClient(apiKey, runtimeMode.baseUrl)\n\n const registerSpinner = ora('Registering the local public key...').start()\n const registration = await client.registerAgentPublicKey({\n publicKey: publicKeyPem,\n })\n registerSpinner.stop()\n\n const savedProfile: R4ProfileConfig = {\n ...nextProfile,\n apiKey,\n agentId: getAgentId(registration) ?? nextProfile.agentId,\n }\n\n const savedConfig = setCurrentProfile(\n updateProfile(config, profileName, savedProfile),\n profileName,\n )\n saveConfig(savedConfig)\n\n success(\n created\n ? `Generated a private key at ${privateKeyPath}`\n : `Reused the existing private key at ${privateKeyPath}`,\n )\n success(`Saved profile \"${profileName}\" to the local CLI config`)\n\n const doctorConnection = resolveConnection(\n { ...globalOpts, profile: profileName },\n { requireApiKey: true, requirePrivateKey: true },\n )\n const doctorSpinner = ora('Running health checks...').start()\n const report = await runDoctorChecks(doctorConnection)\n doctorSpinner.stop()\n\n printDoctorReport(report)\n\n if (doctorHasFailures(report)) {\n throw new Error(\n 'Agent init saved your local profile, but the health check still has failures.',\n )\n }\n\n success(\n `Agent profile \"${profileName}\" is ready for ${runtimeMode.devMode ? 'dev' : 'prod'} use.`,\n )\n },\n ),\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport {\n doctorHasFailures,\n runDoctorChecks,\n type DoctorCheckStatus,\n type DoctorReport,\n} from '../lib/doctor.js'\nimport { withErrorHandler } from '../lib/errors.js'\nimport { printDetail, printTable } from '../lib/output.js'\nimport { resolveConnection } from '../lib/resolve-auth.js'\nimport type { GlobalOptions } from '../types.js'\n\nfunction renderStatus(status: DoctorCheckStatus): string {\n switch (status) {\n case 'pass':\n return chalk.green('PASS')\n case 'warn':\n return chalk.yellow('WARN')\n case 'fail':\n return chalk.red('FAIL')\n default:\n return chalk.gray('SKIP')\n }\n}\n\nexport function printDoctorReport(report: DoctorReport): void {\n console.log()\n console.log(chalk.bold(' R4 Doctor'))\n console.log()\n\n printDetail(\n [\n ['Profile', report.profileName],\n ['Base URL', report.baseUrl],\n ['Mode', report.dev ? 'dev' : 'prod'],\n ['Project ID', report.projectId || chalk.dim('(not set)')],\n ['Private Key', report.privateKeyPath || chalk.dim('(not set)')],\n ['Trust Store', report.trustStorePath || chalk.dim('(not set)')],\n ['Agent ID', report.agentId || report.agentName || chalk.dim('(unknown)')],\n ],\n false,\n )\n\n console.log()\n printTable(\n ['Check', 'Status', 'Detail'],\n report.checks.map((check) => [\n check.label,\n renderStatus(check.status),\n check.detail,\n ]),\n false,\n )\n\n if (report.vaults.length > 0) {\n console.log()\n console.log(chalk.bold(' Vaults'))\n console.log()\n printTable(\n ['Vault', 'Items', 'Wrapped Key', 'Detail'],\n report.vaults.map((vault) => [\n vault.name,\n String(vault.itemCount),\n vault.wrappedKeyStatus,\n vault.detail ?? '-',\n ]),\n false,\n )\n }\n\n console.log()\n}\n\n/**\n * Shared doctor command used by both `r4 doctor` and `r4 auth diagnose`.\n */\nexport function doctorCommand(\n commandName = 'doctor',\n description = 'Verify CLI auth, runtime key registration, vault access, and zero-trust health',\n): Command {\n return new Command(commandName)\n .description(description)\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts)\n\n const spinner = ora('Running CLI health checks...').start()\n const report = await runDoctorChecks(connection)\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(report, null, 2))\n if (doctorHasFailures(report)) {\n process.exitCode = 1\n }\n return\n }\n\n printDoctorReport(report)\n\n if (doctorHasFailures(report)) {\n process.exitCode = 1\n }\n }),\n )\n}\n","import R4 from '@r4security/sdk'\nimport { CliClient } from './client.js'\nimport { derivePublicKey, loadPrivateKey } from './private-key.js'\nimport type {\n MachineAgentPublicKeyResponse,\n MachineVaultSummary,\n} from '../types.js'\nimport type { ResolvedConnection } from './resolve-auth.js'\n\nexport type DoctorCheckStatus = 'pass' | 'warn' | 'fail' | 'skip'\n\nexport interface DoctorCheck {\n id: string\n label: string\n status: DoctorCheckStatus\n detail: string\n}\n\nexport interface DoctorVaultStatus {\n id: string\n name: string\n itemCount: number\n wrappedKeyStatus: 'present' | 'missing' | 'error' | 'skipped'\n detail?: string\n}\n\nexport interface DoctorReport {\n profileName: string\n baseUrl: string\n dev: boolean\n projectId?: string\n privateKeyPath?: string\n trustStorePath?: string\n agentId?: string\n agentName?: string\n registration?: {\n encryptionKeyId: string\n fingerprint: string\n }\n envKeyCount?: number\n checks: DoctorCheck[]\n vaults: DoctorVaultStatus[]\n}\n\nfunction getAgentIdFromRegistration(\n registration?: MachineAgentPublicKeyResponse,\n): string | undefined {\n const entryCount = registration?.transparency?.entries.length ?? 0\n if (!registration?.transparency || entryCount === 0) {\n return undefined\n }\n\n return registration.transparency.entries[entryCount - 1]?.agentId\n}\n\nfunction toDetailList(vaults: MachineVaultSummary[]): string {\n if (vaults.length === 0) {\n return '0 visible vaults.'\n }\n\n const visibleNames = vaults.slice(0, 5).map((vault) => vault.name)\n const suffix = vaults.length > visibleNames.length ? ', ...' : ''\n return `${vaults.length} visible vault${vaults.length === 1 ? '' : 's'}: ${visibleNames.join(', ')}${suffix}`\n}\n\nfunction isWrappedKeyMissing(error: unknown): boolean {\n return (\n error instanceof Error &&\n (error.message.includes('[wrapped_key_not_found]') ||\n error.message.includes('No wrapped key found for this agent and vault.'))\n )\n}\n\nexport function doctorHasFailures(report: DoctorReport): boolean {\n return report.checks.some((check) => check.status === 'fail')\n}\n\n/**\n * Run the CLI doctor checks without mutating local config.\n */\nexport async function runDoctorChecks(\n connection: ResolvedConnection,\n): Promise<DoctorReport> {\n const report: DoctorReport = {\n profileName: connection.profileName,\n baseUrl: connection.baseUrl,\n dev: connection.dev,\n projectId: connection.projectId,\n privateKeyPath: connection.privateKeyPath,\n trustStorePath: connection.trustStorePath,\n agentName: connection.profile.agentName,\n checks: [],\n vaults: [],\n }\n\n report.checks.push({\n id: 'base-url',\n label: 'Base URL',\n status: 'pass',\n detail: `${connection.baseUrl}${connection.dev ? ' (dev mode)' : ''}`,\n })\n\n if (!connection.apiKey) {\n report.checks.push({\n id: 'api-key',\n label: 'API Key',\n status: 'fail',\n detail: 'No API key is configured for the active profile.',\n })\n report.checks.push({\n id: 'project-filter',\n label: 'Project Filter',\n status: 'pass',\n detail: connection.projectId\n ? `Filtering to project ${connection.projectId}.`\n : 'No project filter is set.',\n })\n return report\n }\n\n report.checks.push({\n id: 'api-key',\n label: 'API Key',\n status: 'pass',\n detail: `Loaded from ${connection.apiKeySource}.`,\n })\n\n report.checks.push({\n id: 'project-filter',\n label: 'Project Filter',\n status: 'pass',\n detail: connection.projectId\n ? `Filtering vault reads to project ${connection.projectId}.`\n : 'No project filter is set.',\n })\n\n const client = new CliClient(connection.apiKey, connection.baseUrl)\n let registration: MachineAgentPublicKeyResponse | undefined\n\n if (!connection.privateKeyPath) {\n report.checks.push({\n id: 'private-key',\n label: 'Private Key',\n status: 'fail',\n detail: 'No local private-key path is configured, so zero-trust checks cannot run.',\n })\n report.checks.push({\n id: 'public-key',\n label: 'Public Key Registration',\n status: 'skip',\n detail: 'Skipped because no local private key is configured.',\n })\n report.checks.push({\n id: 'agent-identity',\n label: 'Agent Identity',\n status: 'skip',\n detail: 'Skipped because public-key registration could not run.',\n })\n } else {\n try {\n const privateKeyPem = loadPrivateKey(connection.privateKeyPath)\n const publicKeyPem = derivePublicKey(privateKeyPem)\n registration = await client.registerAgentPublicKey({ publicKey: publicKeyPem })\n report.agentId = getAgentIdFromRegistration(registration) ?? connection.profile.agentId\n report.registration = {\n encryptionKeyId: registration.encryptionKeyId,\n fingerprint: registration.fingerprint,\n }\n\n report.checks.push({\n id: 'private-key',\n label: 'Private Key',\n status: 'pass',\n detail: `Loaded ${connection.privateKeyPath}.`,\n })\n report.checks.push({\n id: 'public-key',\n label: 'Public Key Registration',\n status: 'pass',\n detail: `Registered encryption key ${registration.encryptionKeyId}.`,\n })\n report.checks.push({\n id: 'agent-identity',\n label: 'Agent Identity',\n status: report.agentId ? 'pass' : 'warn',\n detail: report.agentId\n ? `Agent ${report.agentId}${report.agentName ? ` (${report.agentName})` : ''}.`\n : 'The API returned no agent ID in the current registration proof.',\n })\n } catch (error) {\n report.checks.push({\n id: 'private-key',\n label: 'Private Key',\n status: 'pass',\n detail: `Configured at ${connection.privateKeyPath}.`,\n })\n report.checks.push({\n id: 'public-key',\n label: 'Public Key Registration',\n status: 'fail',\n detail: error instanceof Error ? error.message : String(error),\n })\n report.checks.push({\n id: 'agent-identity',\n label: 'Agent Identity',\n status: 'skip',\n detail: 'Skipped because public-key registration did not succeed.',\n })\n }\n }\n\n let vaults: MachineVaultSummary[] = []\n try {\n const response = await client.listVaults(connection.projectId)\n vaults = response.vaults\n report.checks.push({\n id: 'visible-vaults',\n label: 'Visible Vaults',\n status: 'pass',\n detail: toDetailList(vaults),\n })\n } catch (error) {\n report.checks.push({\n id: 'visible-vaults',\n label: 'Visible Vaults',\n status: 'fail',\n detail: error instanceof Error ? error.message : String(error),\n })\n report.checks.push({\n id: 'wrapped-keys',\n label: 'Wrapped Keys',\n status: 'skip',\n detail: 'Skipped because visible vaults could not be listed.',\n })\n report.checks.push({\n id: 'zero-trust',\n label: 'Trust & Decryption',\n status: 'skip',\n detail: 'Skipped because visible vaults could not be listed.',\n })\n return report\n }\n\n if (vaults.length === 0) {\n report.checks.push({\n id: 'wrapped-keys',\n label: 'Wrapped Keys',\n status: 'skip',\n detail: 'No visible vaults means there were no wrapped keys to verify.',\n })\n report.checks.push({\n id: 'zero-trust',\n label: 'Trust & Decryption',\n status: 'skip',\n detail: 'No visible vaults were returned, so no vault trust proof was exercised.',\n })\n return report\n }\n\n let missingWrappedKeys = 0\n let wrappedKeyErrors = 0\n\n for (const vault of vaults) {\n try {\n await client.getAgentWrappedKey(vault.id)\n report.vaults.push({\n id: vault.id,\n name: vault.name,\n itemCount: vault.itemCount,\n wrappedKeyStatus: 'present',\n })\n } catch (error) {\n if (isWrappedKeyMissing(error)) {\n missingWrappedKeys += 1\n report.vaults.push({\n id: vault.id,\n name: vault.name,\n itemCount: vault.itemCount,\n wrappedKeyStatus: 'missing',\n detail: error instanceof Error ? error.message : String(error),\n })\n continue\n }\n\n wrappedKeyErrors += 1\n report.vaults.push({\n id: vault.id,\n name: vault.name,\n itemCount: vault.itemCount,\n wrappedKeyStatus: 'error',\n detail: error instanceof Error ? error.message : String(error),\n })\n }\n }\n\n if (wrappedKeyErrors > 0) {\n report.checks.push({\n id: 'wrapped-keys',\n label: 'Wrapped Keys',\n status: 'fail',\n detail: `${wrappedKeyErrors} vault read${wrappedKeyErrors === 1 ? '' : 's'} hit an unexpected wrapped-key error.`,\n })\n } else if (missingWrappedKeys > 0) {\n report.checks.push({\n id: 'wrapped-keys',\n label: 'Wrapped Keys',\n status: 'warn',\n detail: `${missingWrappedKeys} of ${vaults.length} visible vault${vaults.length === 1 ? '' : 's'} do not have wrapped keys for this agent.`,\n })\n } else {\n report.checks.push({\n id: 'wrapped-keys',\n label: 'Wrapped Keys',\n status: 'pass',\n detail: `Wrapped keys are present for all ${vaults.length} visible vault${vaults.length === 1 ? '' : 's'}.`,\n })\n }\n\n if (!connection.privateKeyPath) {\n report.checks.push({\n id: 'zero-trust',\n label: 'Trust & Decryption',\n status: 'fail',\n detail: 'A local private key is required for end-to-end zero-trust verification.',\n })\n return report\n }\n\n try {\n const r4 = await R4.create({\n apiKey: connection.apiKey,\n baseUrl: connection.baseUrl,\n dev: connection.dev,\n projectId: connection.projectId,\n privateKeyPath: connection.privateKeyPath,\n trustStorePath: connection.trustStorePath,\n })\n report.envKeyCount = Object.keys(r4.env).length\n report.checks.push({\n id: 'zero-trust',\n label: 'Trust & Decryption',\n status: 'pass',\n detail: `Verified trust/transparency checks and decrypted ${report.envKeyCount} env key${report.envKeyCount === 1 ? '' : 's'} locally.`,\n })\n } catch (error) {\n report.checks.push({\n id: 'zero-trust',\n label: 'Trust & Decryption',\n status: 'fail',\n detail: error instanceof Error ? error.message : String(error),\n })\n }\n\n return report\n}\n","import type {\n ListMachineVaultItemsResponse,\n ListMachineVaultsResponse,\n ProjectListResponse,\n ProjectDetail,\n CreateProjectRequest,\n CreateProjectResponse,\n MachineAgentPublicKeyResponse,\n MachineWrappedKeyResponse,\n} from '../types.js'\n\n/**\n * Lightweight machine-API client for CLI commands that only need metadata or\n * direct machine endpoints without going through the zero-trust SDK runtime.\n */\nexport class CliClient {\n private apiKey: string\n private baseUrl: string\n\n constructor(apiKey: string, baseUrl: string) {\n this.apiKey = apiKey\n this.baseUrl = baseUrl.replace(/\\/$/, '')\n }\n\n /**\n * Make an authenticated request to the machine API.\n * Handles error responses consistently with the SDK pattern.\n */\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`\n\n const response = await fetch(url, {\n method,\n headers: {\n 'X-API-Key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n body: body ? JSON.stringify(body) : undefined,\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as Record<string, unknown>\n const error = errorBody?.error as Record<string, unknown> | undefined\n const errorMessage = error?.message || `HTTP ${response.status}: ${response.statusText}`\n const errorCode =\n typeof error?.code === 'string'\n ? ` [${error.code}]`\n : ''\n throw new Error(`R4 API Error${errorCode}: ${errorMessage}`)\n }\n\n return response.json() as Promise<T>\n }\n\n /** Register or re-confirm the local agent runtime public key. */\n async registerAgentPublicKey(body: {\n publicKey: string\n previousEncryptionKeyId?: string\n rotationSignature?: string\n }): Promise<MachineAgentPublicKeyResponse> {\n return this.request<MachineAgentPublicKeyResponse>(\n 'POST',\n '/api/v1/machine/vault/public-key',\n body,\n )\n }\n\n /** List all visible vaults for the authenticated machine principal. */\n async listVaults(projectId?: string): Promise<ListMachineVaultsResponse> {\n const search = projectId ? `?projectId=${encodeURIComponent(projectId)}` : ''\n return this.request<ListMachineVaultsResponse>('GET', `/api/v1/machine/vault${search}`)\n }\n\n /** Retrieve the active wrapped DEK for the current agent on a vault. */\n async getAgentWrappedKey(vaultId: string): Promise<MachineWrappedKeyResponse> {\n return this.request<MachineWrappedKeyResponse>(\n 'GET',\n `/api/v1/machine/vault/${encodeURIComponent(vaultId)}/wrapped-key`,\n )\n }\n\n /** List lightweight metadata for all items in a vault. */\n async listVaultItems(vaultId: string): Promise<ListMachineVaultItemsResponse> {\n return this.request<ListMachineVaultItemsResponse>(\n 'GET',\n `/api/v1/machine/vault/${encodeURIComponent(vaultId)}/items`,\n )\n }\n\n /** List all projects. GET /api/v1/machine/project */\n async listProjects(): Promise<ProjectListResponse> {\n return this.request<ProjectListResponse>('GET', '/api/v1/machine/project')\n }\n\n /** Get project details. GET /api/v1/machine/project/:id */\n async getProject(id: string): Promise<ProjectDetail> {\n return this.request<ProjectDetail>('GET', `/api/v1/machine/project/${id}`)\n }\n\n /** Create a new project. POST /api/v1/machine/project */\n async createProject(data: CreateProjectRequest): Promise<CreateProjectResponse> {\n return this.request<CreateProjectResponse>('POST', '/api/v1/machine/project', data)\n }\n}\n","import crypto from 'node:crypto'\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nconst DEFAULT_KEYS_DIR = path.join(os.homedir(), '.r4', 'keys')\n\n/**\n * Convert a profile name into a filesystem-safe filename fragment.\n */\nexport function sanitizeProfileName(profileName: string): string {\n const sanitized = profileName\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n\n return sanitized || 'default'\n}\n\n/**\n * Default private-key path for a named profile.\n */\nexport function getDefaultPrivateKeyPath(profileName: string): string {\n return path.join(DEFAULT_KEYS_DIR, `${sanitizeProfileName(profileName)}.pem`)\n}\n\n/**\n * Resolve the best private-key path for the active profile.\n */\nexport function resolvePrivateKeyPath(params: {\n cliPath?: string\n envPath?: string\n profilePath?: string\n profileName: string\n allowDefaultIfMissing?: boolean\n}): {\n value?: string\n source: string | null\n} {\n if (params.cliPath) {\n return { value: params.cliPath, source: '--private-key-path flag' }\n }\n\n if (params.envPath) {\n return { value: params.envPath, source: 'R4_PRIVATE_KEY_PATH env var' }\n }\n\n if (params.profilePath) {\n return { value: params.profilePath, source: 'profile config' }\n }\n\n const defaultPath = getDefaultPrivateKeyPath(params.profileName)\n if (fs.existsSync(defaultPath) || params.allowDefaultIfMissing === true) {\n return { value: defaultPath, source: 'default profile key path' }\n }\n\n return { value: undefined, source: null }\n}\n\n/**\n * Load a PEM-encoded private key from disk.\n */\nexport function loadPrivateKey(privateKeyPath: string): string {\n return fs.readFileSync(path.resolve(privateKeyPath), 'utf8').trim()\n}\n\n/**\n * Derive the matching PEM-encoded public key from a PEM private key.\n */\nexport function derivePublicKey(privateKeyPem: string): string {\n return crypto.createPublicKey(privateKeyPem).export({\n type: 'spki',\n format: 'pem',\n }).toString()\n}\n\n/**\n * Ensure a local RSA private key exists on disk for the agent runtime.\n */\nexport function ensurePrivateKey(privateKeyPath: string): {\n privateKeyPem: string\n created: boolean\n} {\n const resolvedPath = path.resolve(privateKeyPath)\n\n if (fs.existsSync(resolvedPath)) {\n return {\n privateKeyPem: loadPrivateKey(resolvedPath),\n created: false,\n }\n }\n\n const keyPair = crypto.generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem',\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem',\n },\n })\n\n fs.mkdirSync(path.dirname(resolvedPath), { recursive: true })\n fs.writeFileSync(resolvedPath, keyPair.privateKey.trim() + '\\n', {\n encoding: 'utf8',\n mode: 0o600,\n })\n\n return {\n privateKeyPem: keyPair.privateKey.trim(),\n created: true,\n }\n}\n","import chalk from 'chalk'\nimport Table from 'cli-table3'\n\n/**\n * Print data as a formatted table, or as JSON if --json flag is set.\n */\nexport function printTable(\n headers: string[],\n rows: string[][],\n jsonMode: boolean,\n jsonData?: unknown,\n): void {\n if (jsonMode) {\n console.log(JSON.stringify(jsonData ?? rows, null, 2))\n return\n }\n\n const table = new Table({\n head: headers.map((h) => chalk.cyan(h)),\n style: { head: [], border: [] },\n })\n for (const row of rows) {\n table.push(row)\n }\n console.log(table.toString())\n}\n\n/**\n * Print a key-value detail view.\n */\nexport function printDetail(\n entries: [string, string | null | undefined][],\n jsonMode: boolean,\n jsonData?: unknown,\n): void {\n if (jsonMode) {\n console.log(JSON.stringify(jsonData, null, 2))\n return\n }\n\n const maxLen = Math.max(...entries.map(([k]) => k.length))\n for (const [key, value] of entries) {\n const label = chalk.gray(key.padEnd(maxLen))\n const val = value ?? chalk.dim('(empty)')\n console.log(` ${label} ${val}`)\n }\n}\n\n/** Print a success message */\nexport function success(message: string): void {\n console.log(chalk.green('✓') + ' ' + message)\n}\n\n/** Print a warning */\nexport function warn(message: string): void {\n console.log(chalk.yellow('!') + ' ' + message)\n}\n\n/** Print an error message to stderr */\nexport function printError(message: string): void {\n console.error(chalk.red('✗') + ' ' + message)\n}\n","import { printError } from './output.js'\n\nfunction formatErrorMessage(message: string): string {\n if (\n message.includes('[wrapped_key_not_found]') ||\n message.includes('No wrapped key found for this agent and vault.')\n ) {\n return (\n `${message}\\n\\n` +\n 'Remediation:\\n' +\n ' - Make sure the vault or vault item is shared with this agent, one of its security groups, or one of its projects.\\n' +\n ' - If you just created or rotated the local runtime key, re-run `r4 agent init` and then re-wrap access for the agent.\\n' +\n ' - Run `r4 doctor` to see which visible vaults are missing wrapped keys.'\n )\n }\n\n if (message.includes('failed to register the local agent public key')) {\n return (\n `${message}\\n\\n` +\n 'Remediation:\\n' +\n ' - Use an AGENT-scoped API key.\\n' +\n ' - Point `--private-key-path` at the matching local PEM file, or run `r4 agent init` to generate and register one automatically.\\n' +\n ' - If you intentionally target a non-production environment, include `--dev` or set `R4_DEV=1`.'\n )\n }\n\n return message\n}\n\n/**\n * Wrap a command handler to catch errors and exit with proper codes.\n * Formats R4 API errors and auth errors with helpful messages.\n */\nexport function withErrorHandler<T extends unknown[]>(\n fn: (...args: T) => Promise<void>,\n): (...args: T) => Promise<void> {\n return async (...args: T) => {\n try {\n await fn(...args)\n } catch (err) {\n if (err instanceof Error) {\n printError(formatErrorMessage(err.message))\n } else {\n printError('An unexpected error occurred')\n }\n process.exit(1)\n }\n }\n}\n","import path from 'node:path'\nimport type { R4Config } from '@r4security/sdk'\nimport type {\n GlobalOptions,\n R4ConfigFile,\n R4ProfileConfig,\n} from '../types.js'\nimport {\n getProfileConfig,\n getSelectedProfileName,\n loadConfig,\n} from './config.js'\nimport {\n getDefaultPrivateKeyPath,\n resolvePrivateKeyPath,\n} from './private-key.js'\nimport { resolveRuntimeModeFromCli } from './runtime-config.js'\n\nexport type ResolvedConnection = {\n apiKey?: string\n apiKeySource: string\n baseUrl: string\n dev: boolean\n projectId?: string\n privateKeyPath?: string\n privateKeySource: string | null\n trustStorePath?: string\n trustStoreSource: string | null\n profileName: string\n profile: R4ProfileConfig\n configFile: R4ConfigFile\n}\n\nexport function buildApiKeyFromParts(\n accessKey?: string,\n secretKey?: string,\n): string | undefined {\n if (!accessKey || !secretKey) {\n return undefined\n }\n\n return `${accessKey}.${secretKey}`\n}\n\nfunction resolveApiKey(\n opts: GlobalOptions,\n profile: R4ProfileConfig,\n profileName: string,\n): { value?: string; source: string; incompleteSplitEnv: boolean } {\n if (opts.apiKey) {\n return {\n value: opts.apiKey,\n source: '--api-key flag',\n incompleteSplitEnv: false,\n }\n }\n\n if (process.env.R4_API_KEY) {\n return {\n value: process.env.R4_API_KEY,\n source: 'R4_API_KEY env var',\n incompleteSplitEnv: false,\n }\n }\n\n const splitEnvApiKey = buildApiKeyFromParts(\n process.env.R4_ACCESS_KEY,\n process.env.R4_SECRET_KEY,\n )\n if (splitEnvApiKey) {\n return {\n value: splitEnvApiKey,\n source: 'R4_ACCESS_KEY + R4_SECRET_KEY env vars',\n incompleteSplitEnv: false,\n }\n }\n\n if (profile.apiKey) {\n return {\n value: profile.apiKey,\n source: `profile \"${profileName}\"`,\n incompleteSplitEnv: false,\n }\n }\n\n return {\n value: undefined,\n source: 'none',\n incompleteSplitEnv: Boolean(process.env.R4_ACCESS_KEY || process.env.R4_SECRET_KEY),\n }\n}\n\nfunction resolveProjectId(\n opts: GlobalOptions,\n profile: R4ProfileConfig,\n): string | undefined {\n return opts.projectId || process.env.R4_PROJECT_ID || profile.projectId\n}\n\nfunction resolveTrustStorePath(\n opts: GlobalOptions,\n profile: R4ProfileConfig,\n privateKeyPath?: string,\n): {\n value?: string\n source: string | null\n} {\n if (opts.trustStorePath) {\n return { value: opts.trustStorePath, source: '--trust-store-path flag' }\n }\n\n if (process.env.R4_TRUST_STORE_PATH) {\n return { value: process.env.R4_TRUST_STORE_PATH, source: 'R4_TRUST_STORE_PATH env var' }\n }\n\n if (profile.trustStorePath) {\n return { value: profile.trustStorePath, source: 'profile config' }\n }\n\n if (privateKeyPath) {\n return {\n value: `${path.resolve(privateKeyPath)}.trust.json`,\n source: 'default beside private key',\n }\n }\n\n return { value: undefined, source: null }\n}\n\n/**\n * Resolve runtime settings from CLI flags, environment variables, and the\n * selected saved profile without requiring local decryption by default.\n */\nexport function resolveConnection(\n opts: GlobalOptions,\n params?: {\n requireApiKey?: boolean\n requirePrivateKey?: boolean\n },\n): ResolvedConnection {\n const configFile = loadConfig()\n const profileName = getSelectedProfileName(\n configFile,\n opts.profile,\n process.env.R4_PROFILE,\n )\n const profile = getProfileConfig(configFile, profileName)\n const runtimeMode = resolveRuntimeModeFromCli(opts, profile)\n\n const apiKey = resolveApiKey(opts, profile, profileName)\n const privateKey = resolvePrivateKeyPath({\n cliPath: opts.privateKeyPath,\n envPath: process.env.R4_PRIVATE_KEY_PATH,\n profilePath: profile.privateKeyPath,\n profileName,\n })\n const trustStorePath = resolveTrustStorePath(opts, profile, privateKey.value)\n\n if (params?.requireApiKey && !apiKey.value) {\n throw new Error(\n 'No API key found. Provide one via:\\n' +\n ' --api-key <key> CLI flag\\n' +\n ' R4_API_KEY environment variable\\n' +\n ' R4_ACCESS_KEY + R4_SECRET_KEY environment variables\\n' +\n ' r4 auth login save it to a profile\\n' +\n ' r4 agent init bootstrap the full first-run flow' +\n (apiKey.incompleteSplitEnv\n ? '\\n\\nBoth R4_ACCESS_KEY and R4_SECRET_KEY must be set together.'\n : ''),\n )\n }\n\n if (params?.requirePrivateKey && !privateKey.value) {\n throw new Error(\n 'No private key path found. Provide one via:\\n' +\n ' --private-key-path <path> CLI flag\\n' +\n ' R4_PRIVATE_KEY_PATH environment variable\\n' +\n ' profile config saved privateKeyPath\\n' +\n ` r4 agent init generate a key at ${getDefaultPrivateKeyPath(profileName)}`,\n )\n }\n\n return {\n apiKey: apiKey.value,\n apiKeySource: apiKey.source,\n baseUrl: runtimeMode.baseUrl,\n dev: runtimeMode.devMode,\n projectId: resolveProjectId(opts, profile),\n privateKeyPath: privateKey.value,\n privateKeySource: privateKey.source,\n trustStorePath: trustStorePath.value,\n trustStoreSource: trustStorePath.source,\n profileName,\n profile,\n configFile,\n }\n}\n\n/**\n * Resolve the SDK's zero-trust auth config for commands that decrypt locally.\n */\nexport function resolveAuth(opts: GlobalOptions): R4Config {\n const connection = resolveConnection(opts, {\n requireApiKey: true,\n requirePrivateKey: true,\n })\n\n return {\n apiKey: connection.apiKey!,\n projectId: connection.projectId,\n baseUrl: connection.baseUrl,\n dev: connection.dev,\n privateKeyPath: connection.privateKeyPath!,\n trustStorePath: connection.trustStorePath,\n }\n}\n","import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type {\n LegacyR4ConfigFile,\n R4ConfigFile,\n R4ProfileConfig,\n} from '../types.js'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.r4')\nconst CONFIG_PATH = path.join(CONFIG_DIR, 'config.json')\nexport const DEFAULT_PROFILE_NAME = 'default'\n\nfunction emptyConfig(): R4ConfigFile {\n return {\n version: 2,\n currentProfile: DEFAULT_PROFILE_NAME,\n profiles: {\n [DEFAULT_PROFILE_NAME]: {},\n },\n }\n}\n\nfunction sanitizeProfileConfig(profile: unknown): R4ProfileConfig {\n if (!profile || typeof profile !== 'object') {\n return {}\n }\n\n const value = profile as Partial<R4ProfileConfig>\n const nextProfile: R4ProfileConfig = {}\n\n if (typeof value.apiKey === 'string' && value.apiKey.trim()) {\n nextProfile.apiKey = value.apiKey.trim()\n }\n if (typeof value.baseUrl === 'string' && value.baseUrl.trim()) {\n nextProfile.baseUrl = value.baseUrl.trim()\n }\n if (typeof value.dev === 'boolean') {\n nextProfile.dev = value.dev\n }\n if (typeof value.projectId === 'string' && value.projectId.trim()) {\n nextProfile.projectId = value.projectId.trim()\n }\n if (typeof value.privateKeyPath === 'string' && value.privateKeyPath.trim()) {\n nextProfile.privateKeyPath = value.privateKeyPath.trim()\n }\n if (typeof value.trustStorePath === 'string' && value.trustStorePath.trim()) {\n nextProfile.trustStorePath = value.trustStorePath.trim()\n }\n if (typeof value.agentId === 'string' && value.agentId.trim()) {\n nextProfile.agentId = value.agentId.trim()\n }\n if (typeof value.agentName === 'string' && value.agentName.trim()) {\n nextProfile.agentName = value.agentName.trim()\n }\n\n return nextProfile\n}\n\nfunction hasLegacyTopLevelProfileFields(config: LegacyR4ConfigFile): boolean {\n return Boolean(\n config.apiKey ||\n config.baseUrl ||\n config.dev !== undefined ||\n config.projectId ||\n config.privateKeyPath ||\n config.trustStorePath ||\n config.agentId ||\n config.agentName,\n )\n}\n\nfunction normalizeConfig(raw: unknown): R4ConfigFile {\n if (!raw || typeof raw !== 'object') {\n return emptyConfig()\n }\n\n const parsed = raw as LegacyR4ConfigFile\n const nextConfig = emptyConfig()\n\n if (parsed.profiles && typeof parsed.profiles === 'object') {\n const entries = Object.entries(parsed.profiles)\n .filter(([name]) => typeof name === 'string' && name.trim().length > 0)\n .map(([name, profile]) => [name.trim(), sanitizeProfileConfig(profile)] as const)\n\n if (entries.length > 0) {\n nextConfig.profiles = Object.fromEntries(entries)\n }\n }\n\n if (hasLegacyTopLevelProfileFields(parsed)) {\n nextConfig.profiles[DEFAULT_PROFILE_NAME] = {\n ...nextConfig.profiles[DEFAULT_PROFILE_NAME],\n ...sanitizeProfileConfig(parsed),\n }\n }\n\n const configuredCurrentProfile =\n typeof parsed.currentProfile === 'string' && parsed.currentProfile.trim()\n ? parsed.currentProfile.trim()\n : DEFAULT_PROFILE_NAME\n\n nextConfig.currentProfile =\n nextConfig.profiles[configuredCurrentProfile] !== undefined\n ? configuredCurrentProfile\n : Object.keys(nextConfig.profiles)[0] ?? DEFAULT_PROFILE_NAME\n\n if (Object.keys(nextConfig.profiles).length === 0) {\n return emptyConfig()\n }\n\n return nextConfig\n}\n\n/**\n * Load the R4 config file from ~/.r4/config.json.\n * Returns an empty normalized config if the file does not exist or is invalid.\n */\nexport function loadConfig(): R4ConfigFile {\n try {\n const raw = fs.readFileSync(CONFIG_PATH, 'utf8')\n return normalizeConfig(JSON.parse(raw))\n } catch {\n return emptyConfig()\n }\n}\n\n/**\n * Save the R4 config file to ~/.r4/config.json.\n * Creates the ~/.r4 directory if it does not exist.\n */\nexport function saveConfig(config: R4ConfigFile): void {\n fs.mkdirSync(CONFIG_DIR, { recursive: true })\n fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\\n', 'utf8')\n}\n\n/**\n * Remove the R4 config file.\n */\nexport function clearConfig(): void {\n try {\n fs.unlinkSync(CONFIG_PATH)\n } catch {\n // File doesn't exist, nothing to do\n }\n}\n\n/**\n * Get the path to the config file (for display purposes).\n */\nexport function getConfigPath(): string {\n return CONFIG_PATH\n}\n\n/** Returns the configured profile names in deterministic order. */\nexport function getProfileNames(config: R4ConfigFile): string[] {\n return Object.keys(config.profiles).sort()\n}\n\n/** Returns the currently selected profile name. */\nexport function getCurrentProfileName(config: R4ConfigFile): string {\n return config.currentProfile\n}\n\n/** Resolve the effective profile name from CLI, env, and persisted config. */\nexport function getSelectedProfileName(\n config: R4ConfigFile,\n profileOverride?: string,\n envProfile?: string,\n): string {\n const selectedProfile = profileOverride || envProfile || config.currentProfile\n return selectedProfile?.trim() || DEFAULT_PROFILE_NAME\n}\n\n/** Return the saved settings for a single profile. */\nexport function getProfileConfig(\n config: R4ConfigFile,\n profileName: string,\n): R4ProfileConfig {\n return config.profiles[profileName] ?? {}\n}\n\n/** Upsert a single named profile while keeping the rest of the config intact. */\nexport function updateProfile(\n config: R4ConfigFile,\n profileName: string,\n profile: R4ProfileConfig,\n): R4ConfigFile {\n return {\n ...config,\n profiles: {\n ...config.profiles,\n [profileName]: profile,\n },\n }\n}\n\n/** Select the active profile for future commands. */\nexport function setCurrentProfile(\n config: R4ConfigFile,\n profileName: string,\n): R4ConfigFile {\n return {\n ...config,\n currentProfile: profileName,\n }\n}\n\n/** Remove a profile and fall back to the next available profile when needed. */\nexport function removeProfile(\n config: R4ConfigFile,\n profileName: string,\n): R4ConfigFile {\n const remainingProfiles = Object.fromEntries(\n Object.entries(config.profiles).filter(([name]) => name !== profileName),\n )\n\n if (Object.keys(remainingProfiles).length === 0) {\n return emptyConfig()\n }\n\n return {\n version: 2,\n currentProfile:\n config.currentProfile === profileName\n ? (Object.keys(remainingProfiles).sort()[0] ?? DEFAULT_PROFILE_NAME)\n : config.currentProfile,\n profiles: remainingProfiles,\n }\n}\n","import type { GlobalOptions, R4ProfileConfig } from '../types.js'\n\nexport const R4_DEFAULT_API_BASE_URL = 'https://r4.dev'\nexport const R4_DEV_API_BASE_URL = 'https://dev.r4.dev'\n\ntype RuntimeModeSources = {\n cliBaseUrl?: string\n envBaseUrl?: string\n configBaseUrl?: string\n cliDev?: boolean\n envDev?: string\n configDev?: boolean\n}\n\nexport type ResolvedRuntimeMode = {\n baseUrl: string\n devMode: boolean\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '')\n}\n\nfunction isTruthyEnvFlag(value?: string): boolean {\n if (!value) {\n return false\n }\n\n return ['1', 'true', 'yes', 'on'].includes(value.trim().toLowerCase())\n}\n\n/**\n * Resolve the effective API base URL and dev-mode state.\n * Any explicit base URL override wins over dev mode.\n */\nexport function resolveRuntimeMode(sources: RuntimeModeSources): ResolvedRuntimeMode {\n const explicitBaseUrl = sources.cliBaseUrl || sources.envBaseUrl || sources.configBaseUrl\n\n if (explicitBaseUrl) {\n return {\n baseUrl: explicitBaseUrl,\n devMode: normalizeBaseUrl(explicitBaseUrl) === R4_DEV_API_BASE_URL,\n }\n }\n\n const devMode =\n sources.cliDev === true ||\n isTruthyEnvFlag(sources.envDev) ||\n sources.configDev === true\n\n return {\n baseUrl: devMode ? R4_DEV_API_BASE_URL : R4_DEFAULT_API_BASE_URL,\n devMode,\n }\n}\n\n/**\n * Resolve the effective runtime mode from CLI flags, env vars, and config file.\n */\nexport function resolveRuntimeModeFromCli(\n opts: GlobalOptions,\n config: R4ProfileConfig,\n): ResolvedRuntimeMode {\n return resolveRuntimeMode({\n cliBaseUrl: opts.baseUrl,\n envBaseUrl: process.env.R4_BASE_URL,\n configBaseUrl: config.baseUrl,\n cliDev: opts.dev,\n envDev: process.env.R4_DEV,\n configDev: config.dev,\n })\n}\n\n/**\n * Apply runtime-related global options to a single persisted CLI profile.\n * Saving an explicit base URL clears saved dev mode, and saving dev mode\n * clears any saved base URL so the dev host actually takes effect.\n */\nexport function applyGlobalRuntimeOptionsToProfile(\n profile: R4ProfileConfig,\n opts: Pick<GlobalOptions, 'baseUrl' | 'dev' | 'projectId' | 'privateKeyPath' | 'trustStorePath'>,\n): R4ProfileConfig {\n const nextProfile: R4ProfileConfig = { ...profile }\n\n if (opts.baseUrl) {\n nextProfile.baseUrl = opts.baseUrl\n delete nextProfile.dev\n } else if (opts.dev === true) {\n nextProfile.dev = true\n delete nextProfile.baseUrl\n }\n\n if (opts.projectId) {\n nextProfile.projectId = opts.projectId\n }\n\n if (opts.privateKeyPath) {\n nextProfile.privateKeyPath = opts.privateKeyPath\n }\n\n if (opts.trustStorePath) {\n nextProfile.trustStorePath = opts.trustStorePath\n }\n\n return nextProfile\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { ParsedCredentialBundle } from '../types.js'\n\nfunction normalizeFieldName(fieldName: string): string {\n return fieldName.trim().toLowerCase().replace(/[^a-z0-9]+/g, '')\n}\n\nfunction stripWrappingQuotes(value: string): string {\n const trimmed = value.trim()\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1).trim()\n }\n return trimmed\n}\n\nfunction parseBooleanLike(value: string): boolean | undefined {\n const normalized = value.trim().toLowerCase()\n if (['1', 'true', 'yes', 'on', 'dev', 'development'].includes(normalized)) {\n return true\n }\n if (['0', 'false', 'no', 'off', 'prod', 'production'].includes(normalized)) {\n return false\n }\n return undefined\n}\n\nfunction applyField(\n bundle: ParsedCredentialBundle,\n fieldName: string,\n rawValue: string,\n): void {\n const value = stripWrappingQuotes(rawValue)\n if (!value) {\n return\n }\n\n const normalized = normalizeFieldName(fieldName)\n\n if (['apikey', 'r4apikey', 'machineapikey'].includes(normalized)) {\n bundle.apiKey = value\n return\n }\n\n if (['accesskey', 'r4accesskey', 'accesskeyid', 'access', 'keyid'].includes(normalized)) {\n bundle.accessKey = value\n return\n }\n\n if (['secretkey', 'r4secretkey', 'secret', 'accesssecret', 'secretaccesskey'].includes(normalized)) {\n bundle.secretKey = value\n return\n }\n\n if (['baseurl', 'r4baseurl', 'apiurl', 'apibaseurl', 'targetbaseurl', 'url'].includes(normalized)) {\n bundle.baseUrl = value\n return\n }\n\n if (['environment', 'env', 'targetenvironment'].includes(normalized)) {\n const dev = parseBooleanLike(value)\n if (dev !== undefined) {\n bundle.dev = dev\n }\n return\n }\n\n if (['projectid', 'r4projectid', 'project', 'projectscope', 'scopeprojectid'].includes(normalized)) {\n bundle.projectId = value\n return\n }\n\n if (['agentid', 'r4agentid', 'machineid'].includes(normalized)) {\n bundle.agentId = value\n return\n }\n\n if (['agentname', 'r4agentname', 'machinename'].includes(normalized)) {\n bundle.agentName = value\n }\n}\n\nfunction finalizeBundle(bundle: ParsedCredentialBundle): ParsedCredentialBundle {\n if (!bundle.apiKey && bundle.accessKey && bundle.secretKey) {\n bundle.apiKey = `${bundle.accessKey}.${bundle.secretKey}`\n }\n\n return bundle\n}\n\nfunction parseJsonContent(content: string): ParsedCredentialBundle {\n const parsed = JSON.parse(content) as Record<string, unknown>\n const bundle: ParsedCredentialBundle = {}\n\n const sources = [parsed]\n\n for (const key of ['credentials', 'profile']) {\n const nested = parsed[key]\n if (nested && typeof nested === 'object') {\n sources.push(nested as Record<string, unknown>)\n }\n }\n\n for (const source of sources) {\n for (const [key, value] of Object.entries(source)) {\n if (typeof value === 'string') {\n applyField(bundle, key, value)\n } else if (typeof value === 'boolean') {\n applyField(bundle, key, String(value))\n }\n }\n }\n\n return finalizeBundle(bundle)\n}\n\nfunction parseEnvContent(content: string): ParsedCredentialBundle {\n const bundle: ParsedCredentialBundle = {}\n for (const rawLine of content.split(/\\r?\\n/)) {\n const line = rawLine.trim()\n if (!line || line.startsWith('#')) {\n continue\n }\n\n const separatorIndex = line.indexOf('=')\n if (separatorIndex === -1) {\n continue\n }\n\n const key = line.slice(0, separatorIndex).trim()\n const value = line.slice(separatorIndex + 1).trim()\n applyField(bundle, key, value)\n }\n\n return finalizeBundle(bundle)\n}\n\nfunction splitCsvLine(line: string): string[] {\n const cells: string[] = []\n let current = ''\n let inQuotes = false\n\n for (let index = 0; index < line.length; index += 1) {\n const character = line[index]\n\n if (character === '\"') {\n const nextCharacter = line[index + 1]\n if (inQuotes && nextCharacter === '\"') {\n current += '\"'\n index += 1\n } else {\n inQuotes = !inQuotes\n }\n continue\n }\n\n if (character === ',' && !inQuotes) {\n cells.push(current.trim())\n current = ''\n continue\n }\n\n current += character\n }\n\n cells.push(current.trim())\n return cells\n}\n\nfunction parseHeaderlessCsvRow(values: string[]): ParsedCredentialBundle {\n const bundle: ParsedCredentialBundle = {}\n\n if (values.length >= 1) {\n bundle.accessKey = stripWrappingQuotes(values[0] ?? '')\n }\n if (values.length >= 2) {\n bundle.secretKey = stripWrappingQuotes(values[1] ?? '')\n }\n if (values.length >= 3) {\n const thirdValue = stripWrappingQuotes(values[2] ?? '')\n if (thirdValue.startsWith('http://') || thirdValue.startsWith('https://')) {\n bundle.baseUrl = thirdValue\n } else if (thirdValue) {\n bundle.projectId = thirdValue\n }\n }\n if (values.length >= 4) {\n const fourthValue = stripWrappingQuotes(values[3] ?? '')\n if (!bundle.projectId) {\n bundle.projectId = fourthValue\n } else if (!bundle.baseUrl) {\n bundle.baseUrl = fourthValue\n }\n }\n\n return finalizeBundle(bundle)\n}\n\nfunction parseCsvContent(content: string): ParsedCredentialBundle {\n const lines = content\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n\n if (lines.length === 0) {\n return {}\n }\n\n const firstRow = splitCsvLine(lines[0] ?? '')\n const firstHeaders = firstRow.map(normalizeFieldName)\n const looksLikeHeader = firstHeaders.some((header) =>\n [\n 'apikey',\n 'accesskey',\n 'secretkey',\n 'baseurl',\n 'environment',\n 'projectid',\n 'agentid',\n 'agentname',\n ].includes(header),\n )\n\n if (!looksLikeHeader) {\n return parseHeaderlessCsvRow(firstRow)\n }\n\n const dataRow = lines.slice(1).find((line) => line.trim().length > 0)\n if (!dataRow) {\n return {}\n }\n\n const values = splitCsvLine(dataRow)\n const bundle: ParsedCredentialBundle = {}\n\n for (const [index, header] of firstRow.entries()) {\n applyField(bundle, header, values[index] ?? '')\n }\n\n return finalizeBundle(bundle)\n}\n\nfunction parsePlainTextContent(content: string): ParsedCredentialBundle {\n const trimmed = content.trim()\n if (!trimmed) {\n return {}\n }\n\n if (trimmed.includes('.') && !/\\s/.test(trimmed)) {\n return { apiKey: trimmed }\n }\n\n const commaValues = splitCsvLine(trimmed)\n if (commaValues.length >= 2) {\n return parseHeaderlessCsvRow(commaValues)\n }\n\n return {}\n}\n\n/**\n * Parse a credentials handoff file from disk.\n *\n * Supported formats:\n * - JSON objects\n * - .env / KEY=value files\n * - CSV with or without a header row\n * - Plain text API keys\n */\nexport function parseCredentialsFile(credentialsFilePath: string): ParsedCredentialBundle {\n const resolvedPath = path.resolve(credentialsFilePath)\n const content = fs.readFileSync(resolvedPath, 'utf8')\n const extension = path.extname(resolvedPath).toLowerCase()\n\n if (extension === '.json') {\n return parseJsonContent(content)\n }\n\n if (extension === '.env') {\n return parseEnvContent(content)\n }\n\n if (extension === '.csv') {\n return parseCsvContent(content)\n }\n\n if (content.includes('=') && !content.trim().startsWith('{')) {\n return parseEnvContent(content)\n }\n\n if (content.includes(',') || content.includes('\\n')) {\n const csvBundle = parseCsvContent(content)\n if (csvBundle.apiKey || csvBundle.accessKey || csvBundle.secretKey) {\n return csvBundle\n }\n }\n\n if (content.trim().startsWith('{')) {\n return parseJsonContent(content)\n }\n\n return parsePlainTextContent(content)\n}\n","import type { Command } from 'commander'\nimport { initCommand } from './init.js'\n\n/** Register agent bootstrap commands on the CLI program. */\nexport function registerAgentCommands(program: Command): void {\n const agent = program.command('agent').description('Bootstrap and manage local agent runtime setup')\n\n agent.addCommand(initCommand())\n}\n","import { doctorCommand } from '../doctor.js'\n\n/** `r4 auth diagnose` — alias for the root doctor command. */\nexport function diagnoseCommand() {\n return doctorCommand(\n 'diagnose',\n 'Verify auth, public-key registration, vault access, and zero-trust health',\n )\n}\n","import { Command } from 'commander'\nimport readline from 'node:readline'\nimport {\n getConfigPath,\n getProfileConfig,\n getSelectedProfileName,\n loadConfig,\n saveConfig,\n setCurrentProfile,\n updateProfile,\n} from '../../lib/config.js'\nimport { parseCredentialsFile } from '../../lib/credentials-file.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { success, warn } from '../../lib/output.js'\nimport { buildApiKeyFromParts } from '../../lib/resolve-auth.js'\nimport { applyGlobalRuntimeOptionsToProfile } from '../../lib/runtime-config.js'\nimport type { GlobalOptions, ParsedCredentialBundle, R4ProfileConfig } from '../../types.js'\n\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.trim())\n })\n })\n}\n\nfunction applyCredentialBundleToProfile(\n profile: R4ProfileConfig,\n bundle: ParsedCredentialBundle,\n globalOpts: GlobalOptions,\n): R4ProfileConfig {\n let nextProfile = { ...profile }\n\n if (!globalOpts.baseUrl && globalOpts.dev !== true) {\n if (bundle.baseUrl) {\n nextProfile.baseUrl = bundle.baseUrl\n delete nextProfile.dev\n } else if (bundle.dev === true) {\n nextProfile.dev = true\n delete nextProfile.baseUrl\n } else if (bundle.dev === false) {\n delete nextProfile.dev\n }\n }\n\n if (!globalOpts.projectId && bundle.projectId) {\n nextProfile.projectId = bundle.projectId\n }\n\n if (bundle.agentId) {\n nextProfile.agentId = bundle.agentId\n }\n\n if (bundle.agentName) {\n nextProfile.agentName = bundle.agentName\n }\n\n return applyGlobalRuntimeOptionsToProfile(nextProfile, globalOpts)\n}\n\n/** `r4 auth login` — save auth/runtime settings to a named CLI profile. */\nexport function loginCommand(): Command {\n return new Command('login')\n .description('Save your API key and runtime settings to the active CLI profile')\n .option(\n '--credentials-file <path>',\n 'Read credentials from a CSV, .env, JSON, or plain-text handoff file',\n )\n .addHelpText(\n 'after',\n `\nFirst run:\n r4 agent init --credentials-file ./agent-creds.csv --dev\n\nThat bootstrap flow can read the credentials bundle, generate a local RSA key if\nneeded, register the public key with the machine API, save the profile, and run\n\\`r4 doctor\\`.\n\nManual save-only flow:\n r4 auth login --profile loom-dev --credentials-file ./agent-creds.csv --dev\n r4 doctor --profile loom-dev\n`,\n )\n .action(\n withErrorHandler(\n async (\n opts: {\n credentialsFile?: string\n },\n cmd: Command,\n ) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = loadConfig()\n const profileName = getSelectedProfileName(\n config,\n globalOpts.profile,\n process.env.R4_PROFILE,\n )\n const existingProfile = getProfileConfig(config, profileName)\n const bundle = opts.credentialsFile\n ? parseCredentialsFile(opts.credentialsFile)\n : {}\n\n let apiKey =\n globalOpts.apiKey ||\n process.env.R4_API_KEY ||\n buildApiKeyFromParts(\n process.env.R4_ACCESS_KEY,\n process.env.R4_SECRET_KEY,\n ) ||\n bundle.apiKey ||\n existingProfile.apiKey\n\n if (!apiKey) {\n apiKey = await prompt('Enter your R4 API key: ')\n }\n\n if (!apiKey) {\n throw new Error('No API key provided.')\n }\n\n if (!apiKey.includes('.')) {\n warn('API key format is usually {accessKey}.{secret}')\n }\n\n if (globalOpts.baseUrl && globalOpts.dev) {\n warn('--base-url takes precedence over --dev and will be saved as the active runtime URL.')\n }\n\n const nextProfile = applyCredentialBundleToProfile(\n existingProfile,\n bundle,\n globalOpts,\n )\n\n const savedConfig = setCurrentProfile(\n updateProfile(config, profileName, {\n ...nextProfile,\n apiKey,\n }),\n profileName,\n )\n\n saveConfig(savedConfig)\n success(`Saved profile \"${profileName}\" to ${getConfigPath()}`)\n },\n ),\n )\n}\n","import { Command } from 'commander'\nimport {\n clearConfig,\n getConfigPath,\n getSelectedProfileName,\n loadConfig,\n removeProfile,\n saveConfig,\n} from '../../lib/config.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { success } from '../../lib/output.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** `r4 auth logout` — remove saved credentials from the active profile. */\nexport function logoutCommand(): Command {\n return new Command('logout')\n .description('Remove saved credentials from the active profile')\n .option('--all', 'Remove every saved profile and delete the config file')\n .action(\n withErrorHandler(async (opts: { all?: boolean }, cmd: Command) => {\n if (opts.all) {\n clearConfig()\n success(`Removed all saved profiles from ${getConfigPath()}`)\n return\n }\n\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = loadConfig()\n const profileName = getSelectedProfileName(\n config,\n globalOpts.profile,\n process.env.R4_PROFILE,\n )\n\n if (!config.profiles[profileName]) {\n throw new Error(`Profile \"${profileName}\" does not exist.`)\n }\n\n if (Object.keys(config.profiles).length === 1) {\n clearConfig()\n } else {\n const nextConfig = removeProfile(config, profileName)\n saveConfig(nextConfig)\n }\n\n success(`Removed profile \"${profileName}\" from ${getConfigPath()}`)\n }),\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { getConfigPath } from '../../lib/config.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { printDetail } from '../../lib/output.js'\nimport { resolveConnection } from '../../lib/resolve-auth.js'\nimport type { GlobalOptions } from '../../types.js'\n\nfunction maskKey(key: string): string {\n if (key.length <= 8) {\n return key\n }\n return `${key.substring(0, 8)}...`\n}\n\n/** `r4 auth status` — show the currently resolved auth state. */\nexport function statusCommand(): Command {\n return new Command('status')\n .description('Show current authentication and profile status')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts)\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n authenticated: Boolean(connection.apiKey),\n profile: connection.profileName,\n source: connection.apiKeySource,\n apiKey: connection.apiKey ? maskKey(connection.apiKey) : null,\n agentId: connection.profile.agentId || null,\n agentName: connection.profile.agentName || null,\n baseUrl: connection.baseUrl,\n devMode: connection.dev,\n projectId: connection.projectId || null,\n privateKeyPath: connection.privateKeyPath || null,\n trustStorePath: connection.trustStorePath || null,\n configPath: getConfigPath(),\n },\n null,\n 2,\n ),\n )\n return\n }\n\n console.log()\n\n if (!connection.apiKey) {\n console.log(chalk.bold(' Not authenticated'))\n console.log()\n console.log(` Active profile: ${chalk.cyan(connection.profileName)}`)\n console.log(' Run ' + chalk.cyan('r4 auth login') + ' or ' + chalk.cyan('r4 agent init') + ' to save credentials.')\n console.log()\n return\n }\n\n console.log(chalk.bold(' Authenticated'))\n console.log()\n printDetail(\n [\n ['Profile', connection.profileName],\n ['Source', connection.apiKeySource],\n ['API Key', maskKey(connection.apiKey)],\n ['Agent', connection.profile.agentName || connection.profile.agentId || chalk.dim('(unknown)')],\n ['Mode', connection.dev ? 'dev' : 'prod'],\n ['Base URL', connection.baseUrl],\n ['Project ID', connection.projectId || chalk.dim('(not set)')],\n ['Private Key', connection.privateKeyPath || chalk.dim('(not set)')],\n ['Trust Store', connection.trustStorePath || chalk.dim('(not set)')],\n ['Config File', getConfigPath()],\n ],\n false,\n )\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport { getConfigPath } from '../../lib/config.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { printDetail } from '../../lib/output.js'\nimport { resolveConnection } from '../../lib/resolve-auth.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** `r4 auth whoami` — show the currently selected profile identity. */\nexport function whoamiCommand(): Command {\n return new Command('whoami')\n .description('Show the current profile, agent identity, and runtime target')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts)\n const agentIdentity =\n connection.profile.agentName || connection.profile.agentId || null\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n profile: connection.profileName,\n authenticated: Boolean(connection.apiKey),\n agent: {\n id: connection.profile.agentId || null,\n name: connection.profile.agentName || null,\n },\n baseUrl: connection.baseUrl,\n devMode: connection.dev,\n projectId: connection.projectId || null,\n privateKeyPath: connection.privateKeyPath || null,\n trustStorePath: connection.trustStorePath || null,\n configPath: getConfigPath(),\n },\n null,\n 2,\n ),\n )\n return\n }\n\n console.log()\n console.log(chalk.bold(connection.apiKey ? ' Current Identity' : ' Current Profile'))\n console.log()\n printDetail(\n [\n ['Profile', connection.profileName],\n ['Authenticated', connection.apiKey ? 'yes' : 'no'],\n ['Agent', agentIdentity || chalk.dim('(unknown)')],\n ['Base URL', connection.baseUrl],\n ['Mode', connection.dev ? 'dev' : 'prod'],\n ['Project ID', connection.projectId || chalk.dim('(not set)')],\n ['Private Key', connection.privateKeyPath || chalk.dim('(not set)')],\n ['Trust Store', connection.trustStorePath || chalk.dim('(not set)')],\n ['Config File', getConfigPath()],\n ],\n false,\n )\n console.log()\n }),\n )\n}\n","import type { Command } from 'commander'\nimport { diagnoseCommand } from './diagnose.js'\nimport { loginCommand } from './login.js'\nimport { logoutCommand } from './logout.js'\nimport { statusCommand } from './status.js'\nimport { whoamiCommand } from './whoami.js'\n\n/** Register auth subcommands on the CLI program */\nexport function registerAuthCommands(program: Command): void {\n const auth = program.command('auth').description('Manage API key authentication')\n\n auth.addCommand(loginCommand())\n auth.addCommand(logoutCommand())\n auth.addCommand(statusCommand())\n auth.addCommand(whoamiCommand())\n auth.addCommand(diagnoseCommand())\n}\n","import { Command } from 'commander'\nimport { getCurrentProfileName, getProfileNames, loadConfig } from '../../lib/config.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** `r4 profile list` — show saved CLI profiles. */\nexport function listCommand(): Command {\n return new Command('list')\n .description('List saved CLI profiles')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = loadConfig()\n const currentProfile = getCurrentProfileName(config)\n const rows = getProfileNames(config).map((profileName) => {\n const profile = config.profiles[profileName] ?? {}\n return [\n profileName,\n profileName === currentProfile ? 'yes' : '',\n profile.baseUrl || (profile.dev ? 'https://dev.r4.dev' : '(default)'),\n profile.projectId || '-',\n profile.agentId || profile.agentName || '-',\n ]\n })\n\n console.log()\n printTable(\n ['Name', 'Current', 'Base URL', 'Project ID', 'Agent'],\n rows,\n !!globalOpts.json,\n rows.map(([name, current, baseUrl, projectId, agent]) => ({\n name,\n current: current === 'yes',\n baseUrl,\n projectId: projectId === '-' ? null : projectId,\n agent: agent === '-' ? null : agent,\n })),\n )\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport {\n getProfileConfig,\n loadConfig,\n saveConfig,\n setCurrentProfile,\n} from '../../lib/config.js'\nimport { success } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\n\n/** `r4 profile use <name>` — switch the active CLI profile. */\nexport function useCommand(): Command {\n return new Command('use')\n .description('Switch the active CLI profile')\n .argument('<name>', 'Profile name')\n .action(\n withErrorHandler(async (profileName: string) => {\n const config = loadConfig()\n const profile = getProfileConfig(config, profileName)\n\n if (Object.keys(profile).length === 0 && !config.profiles[profileName]) {\n throw new Error(`Profile \"${profileName}\" does not exist.`)\n }\n\n saveConfig(setCurrentProfile(config, profileName))\n success(`Now using profile \"${profileName}\"`)\n }),\n )\n}\n","import type { Command } from 'commander'\nimport { listCommand } from './list.js'\nimport { useCommand } from './use.js'\n\n/** Register CLI profile commands. */\nexport function registerProfileCommands(program: Command): void {\n const profile = program.command('profile').description('Manage saved CLI profiles')\n\n profile.addCommand(listCommand())\n profile.addCommand(useCommand())\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 vault list — List all locally decrypted environment variables as a table.\n */\nexport function listCommand(): Command {\n return new Command('list')\n .description('List all locally decrypted environment variables')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Fetching environment variables...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const keys = Object.keys(env).sort()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(env, null, 2))\n return\n }\n\n if (keys.length === 0) {\n console.log('\\n No environment variables found.\\n')\n return\n }\n\n const rows = keys.map((key) => [key, env[key]])\n\n console.log()\n printTable(['Key', 'Value'], rows, false)\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport { renderVaultMetadataRows } from './items.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** `r4 vault list-items` — list vault metadata without local decryption. */\nexport function listItemsCommand(): Command {\n return new Command('list-items')\n .description('List vault item metadata only, without requiring local decryption')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n await renderVaultMetadataRows(globalOpts)\n }),\n )\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveAuth, resolveConnection } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * Represents a vault item derived from environment variable keys.\n * Groups related fields that share the same item name prefix.\n */\ninterface VaultItem {\n name: string\n fields: { name: string; key: string }[]\n}\n\ninterface MetadataRow {\n vaultId: string\n vaultName: string\n itemId: string\n itemName: string\n type: string | null\n fieldCount: number\n groupName: string | null\n websites: string[]\n}\n\n/**\n * Derive vault items from a flat env map.\n *\n * Env keys follow the pattern: ITEM_NAME_FIELD_NAME (SCREAMING_SNAKE_CASE).\n * Since we only have the flat map, we group by common prefix heuristic:\n * - Each unique env key is treated as a single-field item\n * - The full key is the item name\n *\n * This provides a useful overview of all available secrets.\n */\nfunction deriveItems(env: Record<string, string>): VaultItem[] {\n const keys = Object.keys(env).sort()\n return keys.map((key) => ({\n name: key,\n fields: [{ name: key, key }],\n }))\n}\n\n/**\n * Load item metadata directly from the machine API without decrypting values.\n */\nexport async function loadVaultMetadataRows(\n globalOpts: GlobalOptions,\n): Promise<MetadataRow[]> {\n const connection = resolveConnection(globalOpts, { requireApiKey: true })\n const client = new CliClient(connection.apiKey!, connection.baseUrl)\n const { vaults } = await client.listVaults(connection.projectId)\n const rows: MetadataRow[] = []\n\n for (const vault of vaults) {\n const response = await client.listVaultItems(vault.id)\n const groupNames = Object.fromEntries(\n response.vaultItemGroups.map((group) => [group.id, group.name] as const),\n )\n\n for (const item of response.items) {\n rows.push({\n vaultId: vault.id,\n vaultName: vault.name,\n itemId: item.id,\n itemName: item.name,\n type: item.type,\n fieldCount: item.fieldCount,\n groupName: item.groupId ? (groupNames[item.groupId] ?? item.groupId) : null,\n websites: item.websites,\n })\n }\n }\n\n return rows.sort((left, right) => {\n const vaultCompare = left.vaultName.localeCompare(right.vaultName)\n return vaultCompare !== 0\n ? vaultCompare\n : left.itemName.localeCompare(right.itemName)\n })\n}\n\n/**\n * Render metadata-only vault items for commands that do not need decryption.\n */\nexport async function renderVaultMetadataRows(\n globalOpts: GlobalOptions,\n): Promise<void> {\n const spinner = ora('Fetching vault item metadata...').start()\n const rows = await loadVaultMetadataRows(globalOpts)\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(rows, null, 2))\n return\n }\n\n if (rows.length === 0) {\n console.log('\\n No vault items found.\\n')\n return\n }\n\n console.log()\n printTable(\n ['Vault', 'Item', 'Type', 'Fields', 'Group', 'Websites'],\n rows.map((row) => [\n row.vaultName,\n row.itemName,\n row.type || '-',\n String(row.fieldCount),\n row.groupName || '-',\n row.websites.join(', ') || '-',\n ]),\n false,\n )\n console.log()\n}\n\n/**\n * r4 vault items — List all vault items with their field names and types.\n * Uses the zero-trust SDK env map and groups keys heuristically by item prefix.\n */\nexport function itemsCommand(): Command {\n return new Command('items')\n .description('List vault items from the decrypted env map, or use --metadata-only for raw machine metadata')\n .option('--metadata-only', 'List item metadata without local decryption')\n .action(\n withErrorHandler(async (opts: { metadataOnly?: boolean }, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n\n if (opts.metadataOnly) {\n await renderVaultMetadataRows(globalOpts)\n return\n }\n\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Fetching vault items...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const items = deriveItems(env)\n\n if (globalOpts.json) {\n console.log(JSON.stringify(items, null, 2))\n return\n }\n\n if (items.length === 0) {\n console.log('\\n No vault items found.\\n')\n return\n }\n\n const rows = items.map((item) => [\n item.name,\n 'secret',\n item.fields.map((f) => f.name).join(', '),\n ])\n\n console.log()\n printTable(['Name', 'Type', 'Fields'], rows, false)\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport { printTable } from '../../lib/output.js'\nimport { resolveConnection } from '../../lib/resolve-auth.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** `r4 vault list-vaults` — list visible vault metadata without decryption. */\nexport function listVaultsCommand(): Command {\n return new Command('list-vaults')\n .description('List visible vaults without requiring local decryption')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts, { requireApiKey: true })\n const client = new CliClient(connection.apiKey!, connection.baseUrl)\n\n const spinner = ora('Fetching visible vaults...').start()\n const response = await client.listVaults(connection.projectId)\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(response.vaults, null, 2))\n return\n }\n\n if (response.vaults.length === 0) {\n console.log('\\n No visible vaults found.\\n')\n return\n }\n\n console.log()\n printTable(\n ['ID', 'Name', 'Classification', 'Items', 'Created At'],\n response.vaults.map((vault) => [\n vault.id,\n vault.name,\n vault.dataClassification || '-',\n String(vault.itemCount),\n vault.createdAt,\n ]),\n false,\n )\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 vault get <KEY> — Get a specific locally decrypted environment variable value.\n * Outputs the raw value, perfect for piping: r4 vault get PRODUCTION_DB_PASSWORD | pbcopy\n */\nexport function getCommand(): Command {\n return new Command('get')\n .description('Get a specific locally decrypted environment variable value')\n .argument('<key>', 'Environment variable key (SCREAMING_SNAKE_CASE)')\n .action(\n withErrorHandler(\n async (keyArg: string, _opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Fetching environment variables...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const key = keyArg.toUpperCase()\n const value = env[key]\n\n if (value === undefined) {\n const available = Object.keys(env).sort().join(', ') || '(none)'\n throw new Error(`Key \"${key}\" not found. Available keys: ${available}`)\n }\n\n if (globalOpts.json) {\n console.log(JSON.stringify({ key, value }, null, 2))\n return\n }\n\n // Raw output — perfect for piping: r4 vault get PRODUCTION_DB_PASSWORD | pbcopy\n process.stdout.write(value)\n },\n ),\n )\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 vault search <query> — Search vault items by name (case-insensitive).\n * Matches locally decrypted env variable keys that contain the search query.\n * Useful for finding secrets when you know part of the name.\n */\nexport function searchCommand(): Command {\n return new Command('search')\n .description('Search vault items by name')\n .argument('<query>', 'Search query (case-insensitive match against key names)')\n .action(\n withErrorHandler(\n async (query: string, _opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n const spinner = ora('Searching vault items...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n const lowerQuery = query.toLowerCase()\n\n const matches = Object.keys(env)\n .filter((key) => key.toLowerCase().includes(lowerQuery))\n .sort()\n\n if (globalOpts.json) {\n const result = matches.map((key) => ({ key, value: env[key] }))\n console.log(JSON.stringify(result, null, 2))\n return\n }\n\n if (matches.length === 0) {\n console.log(`\\n No items matching \"${query}\" found.\\n`)\n return\n }\n\n const rows = matches.map((key) => [key, env[key]])\n\n console.log()\n printTable(['Key', 'Value'], rows, false)\n console.log()\n },\n ),\n )\n}\n","import type { Command } from 'commander'\nimport { listCommand } from './list.js'\nimport { listItemsCommand } from './list-items.js'\nimport { listVaultsCommand } from './list-vaults.js'\nimport { getCommand } from './get.js'\nimport { itemsCommand } from './items.js'\nimport { searchCommand } from './search.js'\n\n/** Register vault subcommands on the CLI program */\nexport function registerVaultCommands(program: Command): void {\n const vault = program.command('vault').description('Manage vault secrets')\n\n vault.addCommand(listCommand())\n vault.addCommand(listVaultsCommand())\n vault.addCommand(listItemsCommand())\n vault.addCommand(getCommand())\n vault.addCommand(itemsCommand())\n vault.addCommand(searchCommand())\n}\n","import { Command } from 'commander'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveConnection } from '../../lib/resolve-auth.js'\nimport { printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** r4 project list — List all projects as a table */\nexport function listCommand(): Command {\n return new Command('list')\n .description('List all projects')\n .action(\n withErrorHandler(async (_opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts, { requireApiKey: true })\n const client = new CliClient(connection.apiKey!, connection.baseUrl)\n\n const spinner = ora('Fetching projects...').start()\n const response = await client.listProjects()\n spinner.stop()\n\n const rows = response.projects.map((p) => [\n p.id,\n p.name,\n p.externalId || '-',\n String(p.vaultsCount),\n String(p.licensesCount),\n String(p.licenseGroupsCount),\n ])\n\n console.log()\n printTable(\n ['ID', 'Name', 'External ID', 'Vaults', 'Licenses', 'License Groups'],\n rows,\n !!globalOpts.json,\n response.projects,\n )\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveConnection } from '../../lib/resolve-auth.js'\nimport { printDetail, printTable } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** r4 project get <id> — Show project details with associated resources */\nexport function getCommand(): Command {\n return new Command('get')\n .description('Get project details')\n .argument('<id>', 'Project ID')\n .action(\n withErrorHandler(async (id: string, _opts: unknown, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts, { requireApiKey: true })\n const client = new CliClient(connection.apiKey!, connection.baseUrl)\n\n const spinner = ora('Fetching project...').start()\n const project = await client.getProject(id)\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(project, null, 2))\n return\n }\n\n console.log()\n console.log(chalk.bold(` ${project.name}`))\n console.log()\n\n printDetail(\n [\n ['ID', project.id],\n ['External ID', project.externalId],\n ['Description', project.description],\n ['Created At', project.createdAt],\n ['Vaults', String(project.vaultsCount)],\n ['Licenses', String(project.licensesCount)],\n ['License Groups', String(project.licenseGroupsCount)],\n ],\n false,\n )\n\n if (project.vaults.length > 0) {\n console.log()\n console.log(chalk.bold(' Vaults'))\n console.log()\n printTable(\n ['ID', 'Name', 'Encrypted'],\n project.vaults.map((v) => [v.id, v.name, v.isEncrypted ? 'Yes' : 'No']),\n false,\n )\n }\n\n if (project.licenses.length > 0) {\n console.log()\n console.log(chalk.bold(' Licenses'))\n console.log()\n printTable(\n ['ID', 'Name', 'Type'],\n project.licenses.map((l) => [l.id, l.name || '-', l.type]),\n false,\n )\n }\n\n if (project.licenseGroups.length > 0) {\n console.log()\n console.log(chalk.bold(' License Groups'))\n console.log()\n printTable(\n ['ID', 'Name'],\n project.licenseGroups.map((lg) => [lg.id, lg.name]),\n false,\n )\n }\n\n console.log()\n }),\n )\n}\n","import { Command } from 'commander'\nimport readline from 'node:readline'\nimport ora from 'ora'\nimport { CliClient } from '../../lib/client.js'\nimport { resolveConnection } from '../../lib/resolve-auth.js'\nimport { success } from '../../lib/output.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/** Prompt the user for input via stdin */\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.trim())\n })\n })\n}\n\n/** r4 project create — Create a new project */\nexport function createCommand(): Command {\n return new Command('create')\n .description('Create a new project')\n .option('--name <name>', 'Project name')\n .option('--description <description>', 'Project description')\n .option('--external-id <externalId>', 'External identifier')\n .action(\n withErrorHandler(async (opts: { name?: string; description?: string; externalId?: string }, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const connection = resolveConnection(globalOpts, { requireApiKey: true })\n const client = new CliClient(connection.apiKey!, connection.baseUrl)\n\n let name = opts.name\n if (!name) {\n name = await prompt('Project name: ')\n }\n if (!name) {\n throw new Error('Project name is required.')\n }\n\n const spinner = ora('Creating project...').start()\n const response = await client.createProject({\n name,\n description: opts.description,\n externalId: opts.externalId,\n })\n spinner.stop()\n\n if (globalOpts.json) {\n console.log(JSON.stringify(response, null, 2))\n return\n }\n\n success(`Project created with ID: ${response.id}`)\n }),\n )\n}\n","import type { Command } from 'commander'\nimport { listCommand } from './list.js'\nimport { getCommand } from './get.js'\nimport { createCommand } from './create.js'\n\n/** Register project subcommands on the CLI program */\nexport function registerProjectCommands(program: Command): void {\n const project = program.command('project').description('Manage projects')\n\n project.addCommand(listCommand())\n project.addCommand(getCommand())\n project.addCommand(createCommand())\n}\n","import { Command } from 'commander'\nimport { spawn } from 'node:child_process'\nimport ora from 'ora'\nimport R4 from '@r4security/sdk'\nimport { resolveAuth } from '../../lib/resolve-auth.js'\nimport { withErrorHandler } from '../../lib/errors.js'\nimport type { GlobalOptions } from '../../types.js'\n\n/**\n * r4 run <command...> — Run a command with vault secrets injected as environment variables.\n *\n * Env var naming: SCREAMING_SNAKE_CASE keys built from locally decrypted vault items.\n *\n * Examples:\n * r4 run --project-id abc123 node deploy.js\n * r4 run --prefix R4 -- docker compose up\n */\nexport function registerRunCommand(program: Command): void {\n program\n .command('run')\n .description('Run a command with vault secrets injected as environment variables')\n .argument('<command...>', 'Command and arguments to execute')\n .option('--prefix <prefix>', 'Add prefix to all injected env var names')\n .action(\n withErrorHandler(\n async (commandParts: string[], opts: { prefix?: string }, cmd: Command) => {\n const globalOpts = cmd.optsWithGlobals<GlobalOptions>()\n const config = resolveAuth(globalOpts)\n\n // 1. Fetch and locally decrypt env vars via the R4 SDK\n const spinner = ora('Loading vault secrets...').start()\n const r4 = await R4.create(config)\n spinner.stop()\n\n const env = r4.env\n\n // 2. Build environment variable map (optionally with prefix)\n const secretEnv: Record<string, string> = {}\n\n for (const key of Object.keys(env)) {\n const envName = opts.prefix\n ? `${opts.prefix.toUpperCase()}_${key}`\n : key\n secretEnv[envName] = env[key]\n }\n\n // 3. Spawn the child process with merged environment\n const [command, ...args] = commandParts\n const child = spawn(command, args, {\n stdio: 'inherit',\n env: { ...process.env, ...secretEnv },\n shell: true,\n })\n\n // 4. Forward the child's exit code\n child.on('close', (code) => {\n process.exit(code ?? 1)\n })\n\n child.on('error', (err) => {\n throw new Error(`Failed to execute command \"${command}\": ${err.message}`)\n })\n },\n ),\n )\n}\n"],"mappings":"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","names":["Command","Command","ora","chalk","path","path","fs","os","path","path","chalk","fs","path","Command","ora","program","Command","readline","prompt","readline","applyCredentialBundleToProfile","Command","Command","Command","Command","chalk","Command","chalk","Command","chalk","Command","chalk","program","Command","Command","Command","Command","program","Command","ora","R4","listCommand","Command","ora","R4","Command","Command","ora","R4","ora","Command","R4","Command","Command","ora","Command","ora","Command","ora","R4","Command","ora","R4","Command","ora","R4","Command","ora","R4","program","listCommand","Command","ora","listCommand","Command","ora","Command","chalk","ora","getCommand","Command","ora","chalk","Command","readline","ora","prompt","readline","Command","ora","program","listCommand","getCommand","ora","R4","program","ora","R4","Command"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@r4security/cli",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "Official R4 CLI — manage vaults, projects, and secrets from the terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,7 +26,7 @@
26
26
  "node": ">=18.0.0"
27
27
  },
28
28
  "dependencies": {
29
- "@r4security/sdk": "0.0.3",
29
+ "@r4security/sdk": "0.0.5",
30
30
  "commander": "^12.0.0",
31
31
  "chalk": "^5.3.0",
32
32
  "cli-table3": "^0.6.4",
@@ -42,6 +42,7 @@
42
42
  "build": "tsup",
43
43
  "clean": "rm -rf lib",
44
44
  "dev": "tsup --watch",
45
- "test": "tsx --test src/**/*.test.ts"
45
+ "test": "tsx --test test/**/*.test.ts",
46
+ "test:pack": "tsx --test test/package.smoke.ts"
46
47
  }
47
48
  }