@01.software/cli 0.15.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/client.ts","../src/lib/credentials.ts","../src/lib/output.ts","../../errors/src/admin-error.ts","../src/lib/admin-error.ts","../src/lib/i18n.ts","../src/commands/crud.ts","../src/lib/collections.ts","../src/lib/parse.ts","../../contracts/src/tenant/index.ts","../../contracts/src/ecommerce/index.ts","../../contracts/src/ecommerce/product-upsert.ts","../src/commands/order.ts","../src/commands/return.ts","../src/commands/cart.ts","../src/commands/stock.ts","../src/commands/transaction.ts","../src/commands/product.ts","../src/commands/discount.ts","../src/commands/shipping.ts","../src/commands/auth.ts","../src/commands/schema.ts","../src/commands/feature.ts","../src/commands/agent.ts","../src/lib/agent-output.ts","../src/lib/agent-plan-allowlist.ts","../src/lib/agent-plan-auth.ts","../src/lib/agent-plan-store.ts","../src/lib/agent-plan-hash.ts","../src/lib/agent-plan-id.ts","../src/lib/agent-plan-stale.ts","../src/lib/agent-plan-confirm.ts","../src/lib/agent-plan-payload.ts","../src/lib/agent-plan-secrets.ts","../src/lib/agent-plan-token.ts","../src/commands/agent-plan.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport { Command } from 'commander'\nimport { resolveClient, resolveClientOrThrow } from './lib/client.js'\nimport { exitWithError } from './lib/output.js'\nimport { setLocale, type Locale } from './lib/i18n.js'\nimport { registerCrudCommands } from './commands/crud.js'\nimport { registerOrderCommands } from './commands/order.js'\nimport { registerReturnCommands } from './commands/return.js'\nimport { registerCartCommands } from './commands/cart.js'\nimport { registerStockCommands } from './commands/stock.js'\nimport { registerTransactionCommands } from './commands/transaction.js'\nimport { registerProductCommands } from './commands/product.js'\nimport { registerDiscountCommands } from './commands/discount.js'\nimport { registerShippingCommands } from './commands/shipping.js'\nimport { registerAuthCommands } from './commands/auth.js'\nimport { registerSchemaCommands } from './commands/schema.js'\nimport { registerFeatureCommands } from './commands/feature.js'\nimport { registerAgentCommands } from './commands/agent.js'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\nconst program = new Command()\n\nprogram\n .name('01')\n .description('CLI for the 01.software platform')\n .version(version)\n .option('--api-key <key>', 'API key (sk01_... or pat01_... token)')\n .option('--format <format>', 'Output format: json, table, or ndjson')\n .option('--lang <locale>', 'Force locale (ko or en)')\n\nconst getFormat = () =>\n (program.opts().format ?? process.env.OUTPUT_FORMAT ?? 'json') as string\n\n// Surface the explicit `--lang` flag (when supplied) so the i18n table\n// detection in `lib/i18n.ts` honours it before falling back to LC_ALL/LANG.\n// Also pin OUTPUT_FORMAT into the env so `exitWithError(e)` calls inside\n// command bodies pick up the format without threading it through every\n// call site.\nprogram.hook('preAction', () => {\n const lang = program.opts().lang as string | undefined\n if (lang === 'ko' || lang === 'en') setLocale(lang as Locale)\n process.env.OUTPUT_FORMAT = getFormat()\n})\n\nprocess.on('unhandledRejection', (err) => {\n exitWithError(err, { format: getFormat() })\n})\n\nconst getClient = () =>\n resolveClient(program.opts().apiKey as string | undefined)\nconst getAgentClient = () =>\n resolveClientOrThrow(program.opts().apiKey as string | undefined)\n\nregisterAgentCommands(program, getAgentClient)\nregisterCrudCommands(program, getClient, getFormat)\nregisterOrderCommands(program, getClient, getFormat)\nregisterReturnCommands(program, getClient, getFormat)\nregisterCartCommands(program, getClient, getFormat)\nregisterStockCommands(program, getClient, getFormat)\nregisterTransactionCommands(program, getClient, getFormat)\nregisterProductCommands(program, getClient, getFormat)\nregisterDiscountCommands(program, getClient, getFormat)\nregisterShippingCommands(program, getClient, getFormat)\nregisterSchemaCommands(program, getClient, getFormat)\nregisterFeatureCommands(program, getClient, getFormat)\nregisterAuthCommands(program)\n\nprogram.parse()\n","import {\n ServerCollectionClient,\n ServerCommerceClient,\n TenantIntrospectionApi,\n type TenantIntrospectionClient,\n} from '@01.software/sdk/server'\nimport { loadCredentials, loadLocalCredentials } from './credentials.js'\nimport { exitWithError } from './output.js'\nimport { t } from './i18n.js'\nimport type { AdminError } from './admin-error.js'\n\nexport interface ResolvedClient {\n collections: ServerCollectionClient\n commerce: ServerCommerceClient\n tenant: TenantIntrospectionClient\n publishableKey: string\n secretKey: string\n}\n\ninterface ResolvedCredentials {\n publishableKey: string\n secretKey: string\n}\n\n/**\n * Accepted opaque bearer token prefixes.\n * - `sk01_` = tenant-level API key (created in Console > Settings > API Keys)\n * - `pat01_` = user-level Personal Access Token\n * Hex HMAC secrets from the pre-2026-04 auth system are rejected.\n */\nfunction isValidBearerToken(secret: string): boolean {\n return secret.startsWith('sk01_') || secret.startsWith('pat01_')\n}\n\nfunction credentialError(detail: Record<string, unknown>): AdminError {\n return {\n type: 'permission',\n code: 'credential_invalid',\n detail,\n }\n}\n\n/**\n * Resolve credentials in priority order:\n * 1. `--api-key <token>` flag (overrides secretKey only; publishableKey still\n * comes from env/credentials)\n * 2. `SOFTWARE_PUBLISHABLE_KEY` + `SOFTWARE_SECRET_KEY` env vars\n * 3. Local project credentials (`./01software/credentials.json`)\n * 4. Global user credentials (`~/.01software/credentials.json`)\n */\nfunction resolveClientCredentials(apiKeyFlag?: string): ResolvedCredentials {\n let publishableKey: string | undefined = process.env.SOFTWARE_PUBLISHABLE_KEY\n let secretKey: string | undefined =\n apiKeyFlag ?? process.env.SOFTWARE_SECRET_KEY\n\n if (!publishableKey || !secretKey) {\n const local = loadLocalCredentials()\n if (local) {\n publishableKey = publishableKey ?? local.publishableKey\n secretKey = secretKey ?? local.secretKey\n }\n }\n\n if (!publishableKey || !secretKey) {\n const stored = loadCredentials()\n if (stored) {\n publishableKey = publishableKey ?? stored.publishableKey\n secretKey = secretKey ?? stored.secretKey\n }\n }\n\n if (!publishableKey || !secretKey) {\n throw credentialError({\n message: t('AuthenticationRequired'),\n steps: [t('RunLoginToAuthenticate'), t('PassApiKey'), t('SetEnvVars')],\n })\n }\n\n if (!isValidBearerToken(secretKey)) {\n throw credentialError({\n message: t('InvalidApiKeyFormat'),\n suggestion: t('RetiredHexCredentialsRejected'),\n })\n }\n\n return { publishableKey, secretKey }\n}\n\nexport function resolveClientOrThrow(apiKeyFlag?: string): ResolvedClient {\n const { publishableKey, secretKey } = resolveClientCredentials(apiKeyFlag)\n const serverOptions = { publishableKey, secretKey }\n\n return {\n collections: new ServerCollectionClient(\n publishableKey,\n secretKey,\n undefined,\n undefined,\n undefined,\n ),\n commerce: new ServerCommerceClient(serverOptions),\n tenant: new TenantIntrospectionApi(serverOptions),\n publishableKey,\n secretKey,\n }\n}\n\nexport function resolveClient(apiKeyFlag?: string): ResolvedClient {\n try {\n return resolveClientOrThrow(apiKeyFlag)\n } catch (error) {\n exitWithError(error)\n }\n}\n","import {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n unlinkSync,\n appendFileSync,\n} from 'node:fs'\nimport { join } from 'node:path'\nimport { homedir } from 'node:os'\n\nexport interface StoredCredentials {\n publishableKey: string\n /** Opaque bearer token — tenant API key (sk01_...) or PAT (pat01_...) */\n secretKey: string\n tenantId?: string\n tenantName: string\n storedAt: string\n}\n\nexport interface TenantInfo {\n id: string\n name: string\n}\n\nconst DIR_NAME = '.01software'\nconst FILE_NAME = 'credentials.json'\nconst TENANTS_FILE = 'tenants.json'\n\n// ---------------------------------------------------------------------------\n// Global credentials (~/.01software/credentials.json)\n// ---------------------------------------------------------------------------\n\nexport function getCredentialsPath(): string {\n return join(homedir(), DIR_NAME, FILE_NAME)\n}\n\nexport function loadCredentials(): StoredCredentials | null {\n return loadCredentialsFrom(getCredentialsPath())\n}\n\nexport function saveCredentials(\n creds: Omit<StoredCredentials, 'storedAt'>,\n): void {\n const dir = join(homedir(), DIR_NAME)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n\n const filePath = getCredentialsPath()\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeFileSync(filePath, JSON.stringify(data, null, 2), {\n encoding: 'utf-8',\n mode: 0o600,\n })\n}\n\nexport function deleteCredentials(): boolean {\n const filePath = getCredentialsPath()\n if (!existsSync(filePath)) return false\n\n unlinkSync(filePath)\n return true\n}\n\n// ---------------------------------------------------------------------------\n// Local credentials (./01software/credentials.json)\n// ---------------------------------------------------------------------------\n\nexport function getLocalCredentialsPath(): string {\n return join(process.cwd(), DIR_NAME, FILE_NAME)\n}\n\nexport function loadLocalCredentials(): StoredCredentials | null {\n return loadCredentialsFrom(getLocalCredentialsPath())\n}\n\nexport function saveLocalCredentials(\n creds: Omit<StoredCredentials, 'storedAt'>,\n): void {\n const dir = join(process.cwd(), DIR_NAME)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n\n const filePath = getLocalCredentialsPath()\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeFileSync(filePath, JSON.stringify(data, null, 2), {\n encoding: 'utf-8',\n mode: 0o600,\n })\n\n // Ensure .01software/ is in .gitignore\n ensureGitignore()\n}\n\n// ---------------------------------------------------------------------------\n// Tenant list cache (~/.01software/tenants.json)\n// ---------------------------------------------------------------------------\n\nexport function saveTenantList(tenants: TenantInfo[]): void {\n const dir = join(homedir(), DIR_NAME)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n\n const filePath = join(homedir(), DIR_NAME, TENANTS_FILE)\n writeFileSync(filePath, JSON.stringify(tenants, null, 2), {\n encoding: 'utf-8',\n mode: 0o600,\n })\n}\n\nexport function loadTenantList(): TenantInfo[] | null {\n const filePath = join(homedir(), DIR_NAME, TENANTS_FILE)\n if (!existsSync(filePath)) return null\n\n try {\n const raw = readFileSync(filePath, 'utf-8')\n const data = JSON.parse(raw)\n if (!Array.isArray(data)) return null\n const valid = data.filter(\n (t): t is TenantInfo =>\n typeof t?.id === 'string' && typeof t?.name === 'string',\n )\n return valid.length > 0 ? valid : null\n } catch {\n return null\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction loadCredentialsFrom(filePath: string): StoredCredentials | null {\n if (!existsSync(filePath)) return null\n\n try {\n const raw = readFileSync(filePath, 'utf-8')\n const data = JSON.parse(raw) as StoredCredentials\n if (!data.publishableKey || !data.secretKey) return null\n return data\n } catch {\n return null\n }\n}\n\nfunction ensureGitignore(): void {\n const gitignorePath = join(process.cwd(), '.gitignore')\n const entry = '.01software/'\n\n if (existsSync(gitignorePath)) {\n const content = readFileSync(gitignorePath, 'utf-8')\n if (content.includes(entry)) return\n appendFileSync(gitignorePath, `\\n${entry}\\n`, 'utf-8')\n } else {\n writeFileSync(gitignorePath, `${entry}\\n`, 'utf-8')\n }\n}\n","import pc from 'picocolors'\nimport {\n type AdminError,\n classifyError,\n adminErrorExitCode,\n} from './admin-error.js'\nimport { CLI_I18N_KO, t } from './i18n.js'\n\n// Build a Set of valid i18n keys for fast lookup when localizing AdminError\n// codes. Reused below to choose between localized and fallback rendering.\nconst CLI_I18N_KEYS: readonly string[] = Object.keys(CLI_I18N_KO)\n\nexport function printJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2))\n}\n\nexport function printTable(data: unknown): void {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log(pc.dim(t('Empty')))\n return\n }\n const keys = Object.keys(data[0] as Record<string, unknown>)\n const widths = keys.map((k) =>\n Math.max(\n k.length,\n ...data.map(\n (row) => String((row as Record<string, unknown>)[k] ?? '').length,\n ),\n ),\n )\n\n // Header\n console.log(keys.map((k, i) => k.padEnd(widths[i]!)).join(' '))\n console.log(keys.map((_, i) => '-'.repeat(widths[i]!)).join(' '))\n\n // Rows\n for (const row of data) {\n console.log(\n keys\n .map((k, i) =>\n String((row as Record<string, unknown>)[k] ?? '').padEnd(\n widths[i]!,\n ),\n )\n .join(' '),\n )\n }\n } else if (data && typeof data === 'object') {\n const entries = Object.entries(data as Record<string, unknown>)\n const maxKey = Math.max(...entries.map(([k]) => k.length))\n for (const [key, value] of entries) {\n const display =\n typeof value === 'object' ? JSON.stringify(value) : String(value)\n console.log(`${pc.bold(key.padEnd(maxKey))} ${display}`)\n }\n } else {\n console.log(String(data))\n }\n}\n\nfunction printNdjson(data: unknown): void {\n if (Array.isArray(data)) {\n data.forEach((item) => console.log(JSON.stringify(item)))\n } else if (\n data &&\n typeof data === 'object' &&\n 'docs' in (data as Record<string, unknown>)\n ) {\n const { docs, ...meta } = data as {\n docs: unknown[]\n [key: string]: unknown\n }\n ;(docs as unknown[]).forEach((doc) => console.log(JSON.stringify(doc)))\n if (Object.keys(meta).length > 0)\n console.log(JSON.stringify({ _meta: meta }))\n } else {\n console.log(JSON.stringify(data))\n }\n}\n\nexport function printResult(data: unknown, format: string): void {\n if (format === 'ndjson') {\n printNdjson(data)\n } else if (format === 'table') {\n // For find responses with docs array, print the docs as table\n if (\n data &&\n typeof data === 'object' &&\n 'docs' in (data as Record<string, unknown>)\n ) {\n const resp = data as {\n docs: unknown[]\n totalDocs: number\n page: number\n totalPages: number\n }\n printTable(resp.docs)\n console.log(\n pc.dim(\n `\\n${t('Total', { n: resp.totalDocs })} | ${t('PageOf', {\n page: resp.page,\n total: resp.totalPages,\n })}`,\n ),\n )\n return\n }\n printTable(data)\n } else {\n printJson(data)\n }\n}\n\n/**\n * Map an unknown error → CLI exit code per `docs/packages/cli-exit-codes.md`.\n *\n * Routes through `classifyError()` (the AdminError discriminated union is\n * the canonical source). The SDK-error-name + HTTP-status heuristic lives\n * inside `classifyError` so existing thrown values keep their mapping.\n * The `unknown` code → exit 1 fallback is encoded in\n * `adminErrorExitCode` itself.\n */\nexport function getExitCode(error: unknown): number {\n return adminErrorExitCode(classifyError(error))\n}\n\nexport interface ErrorPrintOptions {\n format?: string\n}\n\n/**\n * Resolve the active output format. The entry point (`index.ts`) sets\n * `process.env.OUTPUT_FORMAT` from `--format` / fallback so command bodies\n * can call `exitWithError(e)` without threading the format through every\n * call site. Explicit `options.format` always wins.\n */\nfunction resolveFormat(options: ErrorPrintOptions): string {\n return options.format ?? process.env.OUTPUT_FORMAT ?? 'json'\n}\n\n/**\n * Render an error to the user. With `--format json` (or\n * `OUTPUT_FORMAT=json`), serialize the AdminError discriminated union to\n * stdout per the contract in `docs/packages/cli-exit-codes.md`. Otherwise\n * print a localized one-line message + supporting metadata to stderr.\n */\nexport function printError(\n error: unknown,\n options: ErrorPrintOptions = {},\n): void {\n const adminError = classifyError(error)\n\n // Per docs/packages/cli-exit-codes.md: ALWAYS emit a one-line human\n // message on stderr before exiting non-zero. Under `--format json` the\n // AdminError JSON is ALSO serialized to stdout so scripts can parse it.\n const knownKey = CLI_I18N_KEYS.includes(adminError.code)\n ? (adminError.code as Parameters<typeof t>[0])\n : null\n const localized = knownKey ? t(knownKey) : null\n const rawErr =\n error && typeof error === 'object'\n ? (error as Record<string, unknown>)\n : null\n const rawMessage =\n rawErr && typeof rawErr.message === 'string' ? rawErr.message : ''\n const stringErr = typeof error === 'string' ? error : ''\n const detailMessage =\n rawErr &&\n rawErr.detail &&\n typeof rawErr.detail === 'object' &&\n typeof (rawErr.detail as Record<string, unknown>).message === 'string'\n ? String((rawErr.detail as Record<string, unknown>).message)\n : ''\n // Headline: prefer the most specific human-readable text on hand —\n // raw `message` (most common SDK shape), then a string-error directly,\n // then `detail.message`, then the localized AdminError-code translation,\n // then the bare code.\n const headline =\n rawMessage || stringErr || detailMessage || localized || adminError.code\n\n console.error(pc.red(`Error: ${headline}`))\n // Surface the raw `code`/`status` (when present and distinct) so callers\n // who throw SDK errors with proprietary codes don't lose them in the\n // human-readable rendering. The AdminError type/code is always emitted\n // — that's the canonical contract.\n if (\n rawErr &&\n typeof rawErr.code === 'string' &&\n rawErr.code !== adminError.code\n ) {\n console.error(pc.dim(`Code: ${rawErr.code}`))\n } else {\n console.error(pc.dim(`Code: ${adminError.code}`))\n }\n if (rawErr && typeof rawErr.status === 'number') {\n console.error(pc.dim(`Status: ${rawErr.status}`))\n }\n console.error(pc.dim(`Type: ${adminError.type}`))\n\n if (\n adminError.type === 'degraded' &&\n typeof adminError.retryAfter === 'number'\n ) {\n console.error(pc.yellow(`Retry after: ${adminError.retryAfter}s`))\n }\n if (rawErr && typeof rawErr.suggestion === 'string') {\n console.error(pc.yellow(rawErr.suggestion))\n }\n\n if (resolveFormat(options) === 'json') {\n console.log(JSON.stringify(adminError))\n }\n}\n\nexport function exitWithError(\n error: unknown,\n options: ErrorPrintOptions = {},\n): never {\n printError(error, options)\n process.exit(getExitCode(error))\n}\n","export type ValidationCode = string\n\nexport type PermissionCode =\n | 'tenant_mismatch'\n | 'account_suspended'\n | 'feature_disabled'\n | 'role_denied'\n | 'credential_invalid'\n | 'pat_tenant_unpinned'\n | 'publishable_key_mismatch'\n | 'scope_denied'\n\nexport type DegradedCode =\n | 'redis_unavailable'\n | 'provider_unavailable'\n | 'rate_limited'\n\nexport type NetworkCode = 'upstream_timeout' | 'upstream_5xx' | 'dns_failure'\n\nexport type AdminErrorCode =\n | PermissionCode\n | DegradedCode\n | NetworkCode\n | ValidationCode\n\nexport type AdminError =\n | {\n type: 'validation'\n code: ValidationCode\n field?: string\n detail?: Record<string, unknown>\n }\n | {\n type: 'permission'\n code: PermissionCode\n detail?: Record<string, unknown>\n }\n | {\n type: 'degraded'\n code: DegradedCode\n retryAfter?: number\n detail?: Record<string, unknown>\n }\n | {\n type: 'network'\n code: NetworkCode\n detail?: Record<string, unknown>\n }\n\nexport const ADMIN_ERROR_CODES = {\n permission: [\n 'tenant_mismatch',\n 'account_suspended',\n 'feature_disabled',\n 'role_denied',\n 'credential_invalid',\n 'pat_tenant_unpinned',\n 'publishable_key_mismatch',\n 'scope_denied',\n ] as const satisfies readonly PermissionCode[],\n degraded: [\n 'redis_unavailable',\n 'provider_unavailable',\n 'rate_limited',\n ] as const satisfies readonly DegradedCode[],\n network: [\n 'upstream_timeout',\n 'upstream_5xx',\n 'dns_failure',\n ] as const satisfies readonly NetworkCode[],\n} as const\n\nconst PERMISSION_CODES = ADMIN_ERROR_CODES.permission\nconst DEGRADED_CODES = ADMIN_ERROR_CODES.degraded\nconst NETWORK_CODES = ADMIN_ERROR_CODES.network\n\nfunction isPermissionCode(code: string): code is PermissionCode {\n return (PERMISSION_CODES as readonly string[]).includes(code)\n}\n\nfunction isDegradedCode(code: string): code is DegradedCode {\n return (DEGRADED_CODES as readonly string[]).includes(code)\n}\n\nfunction isNetworkCode(code: string): code is NetworkCode {\n return (NETWORK_CODES as readonly string[]).includes(code)\n}\n\nexport function isUnknownAdminError(err: AdminError): boolean {\n return err.type === 'validation' && err.code === 'unknown'\n}\n\n/**\n * Shared AdminError classifier for literal codes and explicit validation shapes.\n * Surfaces that need SDK/HTTP heuristics wrap this and handle `unknown` locally.\n */\nexport function classifyAdminError(err: unknown): AdminError {\n if (err && typeof err === 'object') {\n const obj = err as Record<string, unknown>\n\n if (typeof obj.code === 'string') {\n const code = obj.code\n if (isPermissionCode(code)) {\n return { type: 'permission', code }\n }\n if (isDegradedCode(code)) {\n const out: AdminError = { type: 'degraded', code }\n if (typeof obj.retryAfter === 'number') {\n out.retryAfter = obj.retryAfter\n }\n return out\n }\n if (isNetworkCode(code)) {\n return { type: 'network', code }\n }\n }\n\n if (obj.type === 'validation' && typeof obj.code === 'string') {\n const out: AdminError = { type: 'validation', code: obj.code }\n if (typeof obj.field === 'string') out.field = obj.field\n if (obj.detail && typeof obj.detail === 'object') {\n out.detail = obj.detail as Record<string, unknown>\n }\n return out\n }\n }\n\n return {\n type: 'validation',\n code: 'unknown',\n detail: { message: err instanceof Error ? err.message : String(err) },\n }\n}\n","// CLI AdminError surface. Shared taxonomy and core classifier live in\n// `@01.software/errors`. Locale copy stays in `packages/cli/src/lib/i18n.ts`.\n// Drift is enforced by `pnpm verify:i18n-parity`.\n\nimport {\n ADMIN_ERROR_CODES,\n classifyAdminError,\n isUnknownAdminError,\n type AdminError,\n type AdminErrorCode,\n type DegradedCode,\n type NetworkCode,\n type PermissionCode,\n type ValidationCode,\n} from '@01.software/errors'\n\nexport type {\n AdminError,\n AdminErrorCode,\n DegradedCode,\n NetworkCode,\n PermissionCode,\n ValidationCode,\n}\n\nexport { ADMIN_ERROR_CODES }\n\nfunction classifyCliExtensions(err: unknown): AdminError | null {\n if (!err || typeof err !== 'object') return null\n\n const obj = err as Record<string, unknown>\n\n if (obj.code === 'auth_error' || obj.code === 'permission_error') {\n return { type: 'permission', code: 'credential_invalid' }\n }\n\n const name = typeof obj.name === 'string' ? obj.name : undefined\n const status = typeof obj.status === 'number' ? obj.status : undefined\n if (\n name === 'ConfigError' ||\n name === 'AuthError' ||\n name === 'PermissionError' ||\n status === 401 ||\n status === 403\n ) {\n return { type: 'permission', code: 'credential_invalid' }\n }\n if (\n name === 'NetworkError' ||\n name === 'TimeoutError' ||\n status === 408 ||\n status === 503\n ) {\n return { type: 'network', code: 'upstream_timeout' }\n }\n if (name === 'GoneError' || status === 404) {\n return {\n type: 'validation',\n code: 'not_found',\n detail:\n typeof obj.message === 'string' ? { message: obj.message } : undefined,\n }\n }\n if (name === 'UsageLimitError' || status === 429) {\n const out: AdminError = { type: 'degraded', code: 'rate_limited' }\n if (typeof obj.retryAfter === 'number') out.retryAfter = obj.retryAfter\n return out\n }\n if (name === 'ValidationError' || status === 400 || status === 422) {\n return {\n type: 'validation',\n code: 'invalid_argument',\n detail:\n typeof obj.message === 'string' ? { message: obj.message } : undefined,\n }\n }\n\n return null\n}\n\n/**\n * Classify an unknown thrown / rejected value into the AdminError union.\n * Applies shared taxonomy first, then CLI-only SDK/HTTP fallbacks.\n */\nexport function classifyError(err: unknown): AdminError {\n const classified = classifyAdminError(err)\n if (!isUnknownAdminError(classified)) return classified\n return classifyCliExtensions(err) ?? classified\n}\n\n/**\n * Map AdminError → CLI exit code per `docs/packages/cli-exit-codes.md`.\n */\nexport function adminErrorExitCode(err: AdminError): number {\n if (err.code === 'unknown') return 1\n switch (err.type) {\n case 'permission':\n return 2\n case 'validation':\n return err.code === 'not_found' ? 5 : 3\n case 'network':\n return 4\n case 'degraded':\n return err.code === 'rate_limited' ? 6 : 4\n }\n}\n","// CLI i18n table — mirrors `apps/console/src/lib/i18n/admin.ts` AdminError\n// code coverage so a single check (`apps/console/scripts/check-i18n-parity.ts`)\n// can verify the CLI carries every code with both KO and EN translations.\n//\n// Locale resolution:\n// 1. CLI `--lang <ko|en>` (resolved by the entry point and exported via\n// `setLocale`).\n// 2. `LANG` / `LC_ALL` environment variables — anything starting with\n// `ko` (`ko_KR.UTF-8`, `ko-KR`, …) → ko; else en.\n// 3. Default `en`.\n\nexport const CLI_I18N_KO = {\n // CLI-surface microcopy\n AuthenticationRequired: '인증이 필요합니다',\n RunLoginToAuthenticate: '`01 login` 명령으로 브라우저 인증을 진행하거나,',\n PassApiKey: '`--api-key <token>` 옵션을 전달하거나,',\n SetEnvVars:\n '`SOFTWARE_PUBLISHABLE_KEY` / `SOFTWARE_SECRET_KEY` 환경 변수를 설정하세요.',\n InvalidApiKeyFormat:\n 'API 키 형식이 올바르지 않습니다. `sk01_` 또는 `pat01_` 토큰이 필요합니다.',\n RetiredHexCredentialsRejected:\n '이전 hex 자격 증명은 더 이상 허용되지 않습니다 — `01 login`으로 다시 인증하세요.',\n InvalidJsonObject: '`--{{label}}` 인자는 JSON 객체여야 합니다.',\n InvalidJsonArray: '`--{{label}}` 인자는 JSON 배열이어야 합니다.',\n InvalidJsonValue: '`--{{label}}` 인자의 JSON 형식이 올바르지 않습니다: {{value}}',\n Empty: '(없음)',\n Total: '총 {{n}}개',\n PageOf: '{{page}} / {{total}} 페이지',\n\n // AdminError code translations (mirrors apps/console admin.ts).\n tenant_mismatch: '권한이 없는 테넌트',\n account_suspended: '계정이 정지되었습니다',\n feature_disabled: '이 기능이 비활성화되었습니다',\n role_denied: '권한이 부족합니다',\n credential_invalid: '자격 증명이 유효하지 않습니다',\n pat_tenant_unpinned: 'PAT 토큰의 테넌트가 고정되지 않았습니다',\n publishable_key_mismatch: '공개 키가 일치하지 않습니다',\n scope_denied: '범위 권한이 없습니다',\n redis_unavailable: '캐시가 일시적으로 사용 불가합니다',\n provider_unavailable: '외부 공급자가 응답하지 않습니다',\n rate_limited: '요청이 너무 많습니다 — 잠시 후 다시 시도하세요',\n upstream_timeout: '응답 시간이 초과되었습니다',\n upstream_5xx: '외부 서비스 오류',\n dns_failure: '네트워크 연결 오류',\n not_found: '리소스를 찾을 수 없습니다',\n invalid_argument: '인자가 올바르지 않습니다',\n unknown: '알 수 없는 오류',\n} as const\n\nexport type CliI18nKey = keyof typeof CLI_I18N_KO\n\nexport const CLI_I18N_EN: Record<CliI18nKey, string> = {\n AuthenticationRequired: 'Authentication required',\n RunLoginToAuthenticate:\n 'Run `01 login` to authenticate via browser, or',\n PassApiKey: 'pass `--api-key <token>`, or',\n SetEnvVars:\n 'set `SOFTWARE_PUBLISHABLE_KEY` and `SOFTWARE_SECRET_KEY` environment variables.',\n InvalidApiKeyFormat:\n 'Invalid API key format. Expected `sk01_` or `pat01_` token.',\n RetiredHexCredentialsRejected:\n 'Retired hex credentials are no longer accepted — run `01 login` to re-authenticate.',\n InvalidJsonObject: '--{{label}} must be a JSON object.',\n InvalidJsonArray: '--{{label}} must be a JSON array.',\n InvalidJsonValue: 'Invalid JSON for --{{label}}: {{value}}',\n Empty: '(empty)',\n Total: '{{n}} total',\n PageOf: 'page {{page}}/{{total}}',\n\n tenant_mismatch: 'Tenant access denied',\n account_suspended: 'Your account has been suspended',\n feature_disabled: 'This feature is disabled',\n role_denied: 'Insufficient role permissions',\n credential_invalid: 'Invalid credentials',\n pat_tenant_unpinned: 'PAT token tenant is not pinned',\n publishable_key_mismatch: 'Publishable key mismatch',\n scope_denied: 'Scope permission denied',\n redis_unavailable: 'Cache temporarily unavailable',\n provider_unavailable: 'Upstream provider unavailable',\n rate_limited: 'Too many requests — please try again shortly',\n upstream_timeout: 'Upstream request timed out',\n upstream_5xx: 'Upstream service error',\n dns_failure: 'Network connection error',\n not_found: 'Resource not found',\n invalid_argument: 'Invalid argument',\n unknown: 'Unknown error',\n}\n\nexport type Locale = 'ko' | 'en'\n\nlet activeLocale: Locale | null = null\n\nexport function detectLocale(): Locale {\n if (activeLocale) return activeLocale\n const raw =\n process.env.LC_ALL ?? process.env.LANG ?? process.env.LANGUAGE ?? ''\n return raw.toLowerCase().startsWith('ko') ? 'ko' : 'en'\n}\n\nexport function setLocale(locale: Locale | null | undefined): void {\n activeLocale = locale ?? null\n}\n\nexport function t(\n key: CliI18nKey,\n vars?: Record<string, string | number>,\n): string {\n const table = detectLocale() === 'ko' ? CLI_I18N_KO : CLI_I18N_EN\n let s: string = table[key]\n if (vars) {\n for (const [k, v] of Object.entries(vars)) {\n // Use a global regex (escape user-supplied key) instead of\n // String.prototype.replaceAll so we keep working on tsconfig\n // targets older than ES2021. Keys are statically declared above so\n // metacharacter escaping is defense-in-depth.\n const escaped = k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n s = s.replace(new RegExp(`\\\\{\\\\{${escaped}\\\\}\\\\}`, 'g'), String(v))\n }\n }\n return s\n}\n","import { readFileSync } from 'node:fs'\nimport { basename } from 'node:path'\nimport { Command } from 'commander'\nimport type { ApiQueryOptions } from '@01.software/sdk'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { parseSelect, validateCollection } from '../lib/collections.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJson } from '../lib/parse.js'\n\nfunction readFileAsBlob(filePath: string): { blob: Blob; filename: string } {\n const buffer = readFileSync(filePath)\n return { blob: new Blob([buffer]), filename: basename(filePath) }\n}\n\nexport function registerCrudCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n program\n .command('query <collection>')\n .description('Query documents from a collection')\n .option('--where <json>', 'Filter conditions (JSON)')\n .option('--limit <n>', 'Max results', (v: string) => parseInt(v, 10))\n .option('--page <n>', 'Page number', (v: string) => parseInt(v, 10))\n .option('--sort <field>', 'Sort field (prefix with - for descending)')\n .option(\n '--depth <n>',\n 'Relationship depth (0 = no population)',\n (v: string) => parseInt(v, 10),\n )\n .option('--select <fields>', 'Comma-separated fields to select')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const client = getClient()\n const options: Record<string, unknown> = {}\n if (opts.where) options.where = parseJson(opts.where, 'where')\n if (opts.limit) options.limit = opts.limit\n if (opts.page) options.page = opts.page\n if (opts.sort) options.sort = opts.sort\n if (opts.depth != null) options.depth = opts.depth\n if (opts.select) options.select = parseSelect(opts.select)\n const result = await client.collections.from(col).find(options)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('get <collection> <id>')\n .description('Get a document by ID')\n .option(\n '--depth <n>',\n 'Relationship depth (0 = no population)',\n (v: string) => parseInt(v, 10),\n )\n .option('--select <fields>', 'Comma-separated fields to select')\n .action(async (collection: string, id: string, opts) => {\n try {\n const col = validateCollection(collection)\n const client = getClient()\n const options: Record<string, unknown> = {}\n if (opts.depth != null) options.depth = opts.depth\n if (opts.select) options.select = parseSelect(opts.select)\n const result = await client.collections.from(col).findById(id, options)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('create <collection>')\n .description('Create a new document')\n .requiredOption('--data <json>', 'Document data (JSON)')\n .option('--file <path>', 'File to upload (for upload collections)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const data = parseJson(opts.data, 'data')\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'create',\n collection: col,\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n let fileOpts: { file: Blob; filename: string } | undefined\n if (opts.file) {\n const { blob, filename } = readFileAsBlob(opts.file)\n fileOpts = { file: blob, filename }\n }\n const result = await client.collections.from(col).create(data, fileOpts)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('update <collection> <id>')\n .description('Update a document by ID')\n .requiredOption('--data <json>', 'Document data (JSON)')\n .option('--file <path>', 'File to upload (for upload collections)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, id: string, opts) => {\n try {\n const col = validateCollection(collection)\n const data = parseJson(opts.data, 'data')\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'update',\n collection: col,\n id,\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n let fileOpts: { file: Blob; filename: string } | undefined\n if (opts.file) {\n const { blob, filename } = readFileAsBlob(opts.file)\n fileOpts = { file: blob, filename }\n }\n const result = await client.collections\n .from(col)\n .update(id, data, fileOpts)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('delete <collection> <id>')\n .description('Delete a document by ID')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, id: string, opts) => {\n try {\n const col = validateCollection(collection)\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'delete',\n collection: col,\n id,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.collections.from(col).remove(id)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('update-many <collection>')\n .description('Update multiple documents matching a filter')\n .requiredOption('--where <json>', 'Filter conditions (JSON)')\n .requiredOption('--data <json>', 'Update data (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const where = parseJson(opts.where, 'where') as ApiQueryOptions['where']\n const data = parseJson(opts.data, 'data')\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'update-many',\n collection: col,\n where,\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.collections\n .from(col)\n .updateMany(where, data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('delete-many <collection>')\n .description('Delete multiple documents matching a filter')\n .requiredOption('--where <json>', 'Filter conditions (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const where = parseJson(opts.where, 'where') as ApiQueryOptions['where']\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'delete-many',\n collection: col,\n where,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.collections.from(col).removeMany(where)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { SERVER_COLLECTIONS } from '@01.software/sdk'\n\nexport type CliCollection = (typeof SERVER_COLLECTIONS)[number]\n\nexport function validateCollection(name: string): CliCollection {\n if ((SERVER_COLLECTIONS as readonly string[]).includes(name)) {\n return name as CliCollection\n }\n\n const normalized = name.replace(/-/g, '').toLowerCase()\n const suggestions = (SERVER_COLLECTIONS as readonly string[])\n .filter((collection) => {\n const candidate = collection.replace(/-/g, '').toLowerCase()\n return (\n candidate.startsWith(normalized) ||\n normalized.startsWith(candidate) ||\n (normalized.length >= 3 && candidate.includes(normalized))\n )\n })\n .slice(0, 5)\n\n const hint =\n suggestions.length > 0\n ? `Did you mean: ${suggestions.join(', ')}?`\n : 'Run \"01 --help\" for available collections.'\n\n throw new Error(`Unknown collection \"${name}\". ${hint}`)\n}\n\nexport function parseSelect(input: string): Record<string, boolean> {\n return Object.fromEntries(\n input\n .split(',')\n .map((field) => field.trim())\n .map((field) => [field, true]),\n )\n}\n","import { exitWithError } from './output.js'\nimport { t } from './i18n.js'\nimport type { z } from 'zod'\n\n/**\n * Throw an AdminError-shaped object so `exitWithError` can render it correctly\n * under `--format json` and exit with code 3 (validation). The `code` literal\n * `invalid_argument` is already in the validation bucket per `admin-error.ts`.\n */\nfunction failArg(\n label: string,\n value: string,\n expectedKind: 'object' | 'array' | 'value',\n): never {\n const message =\n expectedKind === 'object'\n ? t('InvalidJsonObject', { label })\n : expectedKind === 'array'\n ? t('InvalidJsonArray', { label })\n : t('InvalidJsonValue', { label, value })\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n // `message` is read by `printError` for the stderr headline so the\n // user sees the label/value in the one-line summary; `detail` carries\n // the structured fields for `--format json` consumers.\n message,\n detail: { message, value, field: label },\n })\n}\n\nfunction stringifyValue(value: unknown): string {\n try {\n return JSON.stringify(value)\n } catch {\n return String(value)\n }\n}\n\nfunction formatSchemaIssues(\n label: string,\n issues: readonly { path: readonly string[]; message: string }[],\n): string {\n return issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : label\n return `${path}: ${issue.message}`\n })\n .join('; ')\n}\n\nexport function parseWithSchema<T>(\n value: unknown,\n label: string,\n schema: z.ZodType<T>,\n): T {\n const parsed = schema.safeParse(value)\n if (parsed.success) return parsed.data\n\n const issues = parsed.error.issues.map((issue) => ({\n path: issue.path.map(String),\n message: issue.message,\n }))\n const message = `Invalid value for --${label}: ${formatSchemaIssues(label, issues)}`\n\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n message,\n detail: {\n message,\n value: stringifyValue(value),\n field: label,\n issues,\n },\n })\n}\n\nexport function parseJson(\n value: string,\n label: string,\n options: { format?: string } = {},\n): Record<string, unknown> {\n let parsed: unknown\n try {\n parsed = JSON.parse(value)\n } catch {\n return failArg(label, value, 'value')\n }\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n return failArg(label, value, 'object')\n }\n void options\n return parsed as Record<string, unknown>\n}\n\nexport function parseJsonArray(\n value: string,\n label: string,\n options: { format?: string } = {},\n): unknown[] {\n let parsed: unknown\n try {\n parsed = JSON.parse(value)\n } catch {\n return failArg(label, value, 'value')\n }\n if (!Array.isArray(parsed)) {\n return failArg(label, value, 'array')\n }\n void options\n return parsed\n}\n","import { z } from 'zod'\n\nexport const tenantFieldConfigStateSchema = z\n .object({\n hiddenFields: z.array(z.string()),\n isHidden: z.boolean(),\n })\n .strict()\n\nexport const tenantContextQuerySchema = z\n .object({\n counts: z.literal('true').optional(),\n })\n .strict()\n\nexport const tenantContextToolInputSchema = z\n .object({\n includeCounts: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Include per-collection document counts and config status (bypasses cache, slower)',\n ),\n })\n .strict()\n\nexport const tenantContextResponseSchema = z\n .object({\n tenant: z\n .object({\n id: z.string(),\n name: z.string(),\n plan: z.string(),\n planSource: z.string().optional(),\n authoritative: z.boolean().optional(),\n capabilityVersion: z.string().optional(),\n })\n .strict(),\n features: z.array(z.string()),\n collections: z\n .object({\n active: z.array(z.string()),\n inactive: z.array(z.string()),\n })\n .strict(),\n fieldConfigs: z.record(z.string(), tenantFieldConfigStateSchema),\n counts: z.record(z.string(), z.number()).optional(),\n config: z\n .object({\n webhookConfigured: z.boolean(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const tenantFeatureProgressFeatureSchema = z.enum(['ecommerce'])\n\nexport const tenantFeatureProgressInputSchema = z\n .object({\n feature: tenantFeatureProgressFeatureSchema.describe(\n 'Feature to inspect for tenant implementation readiness',\n ),\n includeEvidence: z\n .boolean()\n .optional()\n .default(false)\n .describe('Include sanitized counts and static surface evidence'),\n })\n .strict()\n\nexport const tenantFeatureProgressStatusSchema = z.enum([\n 'ready',\n 'attention',\n 'blocked',\n])\n\nexport const tenantFeatureProgressItemStateSchema = z.enum([\n 'complete',\n 'incomplete',\n 'blocked',\n 'attention',\n 'optional',\n 'unknown',\n 'manual',\n 'not-applicable',\n])\n\nexport const tenantFeatureProgressSeveritySchema = z.enum([\n 'required',\n 'recommended',\n 'optional',\n])\n\nexport const tenantFeatureProgressEvidenceValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n])\n\nexport const tenantFeatureProgressItemSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n state: tenantFeatureProgressItemStateSchema,\n severity: tenantFeatureProgressSeveritySchema,\n summary: z.string(),\n evidence: z\n .record(z.string(), tenantFeatureProgressEvidenceValueSchema)\n .optional(),\n })\n .strict()\n\nexport const tenantFeatureProgressGroupSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n summary: z.string().optional(),\n items: z.array(tenantFeatureProgressItemSchema),\n })\n .strict()\n\nexport const tenantFeatureProgressResponseSchema = z\n .object({\n schemaVersion: z.literal(1),\n feature: tenantFeatureProgressFeatureSchema,\n status: tenantFeatureProgressStatusSchema,\n generatedAt: z.string(),\n tenant: z\n .object({\n id: z.string(),\n name: z.string(),\n plan: z.string(),\n })\n .strict(),\n capability: z\n .object({\n effectiveFeatures: z.array(z.string()),\n planBlocked: z.array(z.string()),\n closureAdded: z.array(z.string()),\n })\n .strict(),\n summary: z\n .object({\n complete: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n blocking: z.number().int().nonnegative(),\n manual: z.number().int().nonnegative(),\n unknown: z.number().int().nonnegative(),\n })\n .strict(),\n groups: z.array(tenantFeatureProgressGroupSchema),\n })\n .strict()\n\nexport const COLLECTION_SCHEMA_CONTRACT_VERSION = 1\n\nexport const collectionSchemaEndpointParamsSchema = z\n .object({\n collectionSlug: z.string().min(1, 'collectionSlug is required'),\n })\n .strict()\n\nexport function createCollectionSchemaToolInputSchema<\n const T extends readonly [string, ...string[]],\n>(collections: T) {\n return z\n .object({\n collection: z.enum(collections).describe('Collection name (required)'),\n })\n .strict()\n}\n\nexport const collectionFieldOptionSchema = z\n .object({\n label: z.string(),\n value: z.string(),\n })\n .strict()\n\nexport interface CollectionFieldSchema {\n name: string\n path: string\n type: string\n required?: true\n unique?: true\n hasMany?: true\n relationTo?: string | string[]\n options?: Array<{ label: string; value: string }>\n hidden?: true\n systemManaged?: true\n writable?: boolean\n fields?: CollectionFieldSchema[]\n}\n\nexport const collectionFieldSchema: z.ZodType<CollectionFieldSchema> = z.lazy(\n () =>\n z\n .object({\n name: z.string(),\n path: z.string(),\n type: z.string(),\n required: z.literal(true).optional(),\n unique: z.literal(true).optional(),\n hasMany: z.literal(true).optional(),\n relationTo: z.union([z.string(), z.array(z.string())]).optional(),\n options: z.array(collectionFieldOptionSchema).optional(),\n hidden: z.literal(true).optional(),\n systemManaged: z.literal(true).optional(),\n writable: z.boolean().optional(),\n fields: z.array(collectionFieldSchema).optional(),\n })\n .strict(),\n)\n\nexport const collectionSchemaResponseSchema = z\n .object({\n contractVersion: z.literal(COLLECTION_SCHEMA_CONTRACT_VERSION),\n mode: z.literal('effective'),\n collection: z\n .object({\n slug: z.string(),\n timestamps: z.boolean(),\n alwaysActive: z.boolean(),\n feature: z.string().nullable(),\n systemFields: z.array(z.string()),\n visibility: z\n .object({\n collectionHidden: z.boolean(),\n hiddenFields: z.array(z.string()),\n })\n .strict(),\n fields: z.array(collectionFieldSchema),\n })\n .strict(),\n })\n .strict()\n\nexport type TenantFieldConfigState = z.infer<\n typeof tenantFieldConfigStateSchema\n>\nexport type TenantContextQuery = z.input<typeof tenantContextQuerySchema>\nexport type TenantContextToolInput = z.infer<\n typeof tenantContextToolInputSchema\n>\nexport type TenantContextResponse = z.infer<typeof tenantContextResponseSchema>\nexport type TenantFeatureProgressFeature = z.infer<\n typeof tenantFeatureProgressFeatureSchema\n>\nexport type TenantFeatureProgressInput = z.infer<\n typeof tenantFeatureProgressInputSchema\n>\n/**\n * Raw feature-progress request input before schema defaults are applied.\n * `TenantFeatureProgressInput` is the parsed/effective shape.\n */\nexport type TenantFeatureProgressRequestInput = z.input<\n typeof tenantFeatureProgressInputSchema\n>\nexport type TenantFeatureProgressStatus = z.infer<\n typeof tenantFeatureProgressStatusSchema\n>\nexport type TenantFeatureProgressItemState = z.infer<\n typeof tenantFeatureProgressItemStateSchema\n>\nexport type TenantFeatureProgressSeverity = z.infer<\n typeof tenantFeatureProgressSeveritySchema\n>\nexport type TenantFeatureProgressEvidenceValue = z.infer<\n typeof tenantFeatureProgressEvidenceValueSchema\n>\nexport type TenantFeatureProgressItem = z.infer<\n typeof tenantFeatureProgressItemSchema\n>\nexport type TenantFeatureProgressGroup = z.infer<\n typeof tenantFeatureProgressGroupSchema\n>\nexport type TenantFeatureProgressResponse = z.infer<\n typeof tenantFeatureProgressResponseSchema\n>\nexport type CollectionSchemaEndpointParams = z.infer<\n typeof collectionSchemaEndpointParamsSchema\n>\nexport type CollectionFieldOption = z.infer<typeof collectionFieldOptionSchema>\nexport type CollectionSchemaResponse = z.infer<\n typeof collectionSchemaResponseSchema\n>\n","import { z } from 'zod'\n\nexport * from './product-detail'\nexport * from './product-patch'\nexport * from './product-catalog'\nexport * from './product-upsert'\nexport * from './product-options'\nexport * from './product-media'\nexport * from './product-selection-media'\nexport * from './product-gallery'\nexport * from './stock-snapshot'\nexport * from './cart-merge'\nexport * from './cart-mine'\n\nexport const transactionStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'failed',\n 'canceled',\n 'refunded',\n])\n\n// Order-level statuses carry no `failed`: payment failure is recorded as a\n// Transaction outcome (`Transaction.status = failed`) while the order stays\n// `pending`, and permanent abandonment uses cancellation. Transaction and\n// shipment `failed` remain supported below.\nexport const financialStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'canceled',\n 'partially_refunded',\n 'refunded',\n])\n\nexport const orderDisplayFinancialStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'partially_refunded',\n 'refunded',\n 'voided',\n])\n\nexport const confirmationStatusSchema = z.enum(['unconfirmed', 'confirmed'])\n\nexport const fulfillmentOrderStatusSchema = z.enum([\n 'open',\n 'in_progress',\n 'on_hold',\n 'canceled',\n 'closed',\n])\n\nexport const shipmentStatusSchema = z.enum([\n 'pending',\n 'shipped',\n 'delivered',\n 'canceled',\n 'failed',\n])\n\nexport const orderDisplayFulfillmentStatusSchema = z.enum([\n 'unfulfilled',\n 'in_progress',\n 'on_hold',\n 'partially_fulfilled',\n 'shipped',\n 'fulfilled',\n 'canceled',\n])\n\nexport const orderReturnStatusSchema = z.enum([\n 'no_return',\n 'return_requested',\n 'in_progress',\n 'returned',\n])\n\nexport type FinancialStatusValue = z.infer<typeof financialStatusSchema>\nexport type OrderDisplayFinancialStatusValue = z.infer<\n typeof orderDisplayFinancialStatusSchema\n>\nexport type ConfirmationStatusValue = z.infer<typeof confirmationStatusSchema>\nexport type FulfillmentOrderStatusValue = z.infer<\n typeof fulfillmentOrderStatusSchema\n>\nexport type ShipmentStatusValue = z.infer<typeof shipmentStatusSchema>\nexport type OrderDisplayFulfillmentStatusValue = z.infer<\n typeof orderDisplayFulfillmentStatusSchema\n>\nexport type OrderReturnStatusValue = z.infer<typeof orderReturnStatusSchema>\n\n/**\n * @deprecated This is a display-status compatibility alias for one release.\n * Do not use it as a mutation target; update financial, confirmation,\n * fulfillment-order, or shipment state through their explicit contracts.\n */\nexport const orderStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'canceled',\n 'refunded',\n 'preparing',\n 'shipped',\n 'delivered',\n 'confirmed',\n 'return_requested',\n 'return_processing',\n 'returned',\n])\n\nexport const orderDisplayStatusSchema = orderStatusSchema\nexport type OrderDisplayStatusValue = z.infer<typeof orderDisplayStatusSchema>\n/** @deprecated Use OrderDisplayStatusValue for read-side display state. */\nexport type OrderStatusValue = z.infer<typeof orderStatusSchema>\n\nconst entityIdSchema = z\n .union([z.string().min(1), z.number()])\n .transform(String)\n\nexport const createOrderItemSchema = z\n .object({\n // `product` and `option` are storefront-optional: the create-order\n // endpoint derives the product from the variant's parent and snapshots\n // option selection from the variant.\n product: entityIdSchema.optional(),\n variant: entityIdSchema,\n option: entityIdSchema.optional(),\n quantity: z.number().int().positive('quantity must be a positive integer'),\n unitPrice: z.number().optional(),\n totalPrice: z.number().optional(),\n })\n .strict()\n\nexport const createOrderSchema = z\n .object({\n pgPaymentId: z.string().min(1).optional(),\n orderNumber: z.string().min(1, 'orderNumber is required'),\n customer: entityIdSchema.optional(),\n customerSnapshot: z\n .object({\n name: z.string().optional(),\n email: z.string().email('Invalid email format'),\n phone: z.string().optional(),\n })\n .strict(),\n shippingAddress: z\n .object({\n postalCode: z.string().optional(),\n address: z.string().optional(),\n detailAddress: z.string().optional(),\n deliveryMessage: z.string().optional(),\n recipientName: z.string().optional(),\n phone: z.string().optional(),\n })\n .strict()\n .optional(),\n orderItems: z\n .array(createOrderItemSchema)\n .min(1, 'At least one order item is required')\n .max(100, 'Maximum 100 items per order'),\n totalAmount: z.number().nonnegative('totalAmount must be non-negative'),\n shippingAmount: z.number().min(0).optional(),\n discountCode: z.string().optional(),\n })\n .strict()\n\nexport const CreateOrderSchema = createOrderSchema\n\nexport const updateTransactionSchema = z\n .object({\n pgPaymentId: z\n .string()\n .min(1, 'pgPaymentId is required')\n .describe('PG payment ID (required)'),\n status: transactionStatusSchema.describe(\n 'New transaction status (required)',\n ),\n paymentMethod: z.string().optional().describe('Payment method (optional)'),\n receiptUrl: z.string().optional().describe('Receipt URL (optional)'),\n paymentKey: z\n .string()\n .min(1)\n .optional()\n .describe('Provider payment key for verified paid confirmation'),\n amount: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Provider-confirmed amount for verified paid confirmation'),\n })\n .strict()\n\nexport const UpdateTransactionSchema = updateTransactionSchema\n\nconst providerSlugSchema = z\n .string()\n .trim()\n .regex(/^[a-z0-9][a-z0-9_-]{0,63}$/, 'pgProvider must be lowercase slug')\n\nexport const confirmPaymentSchema = z\n .object({\n orderNumber: z.string().min(1).optional(),\n pgPaymentId: z\n .string()\n .min(1, 'pgPaymentId is required')\n .describe('Provider payment identifier stored on the transaction'),\n pgProvider: providerSlugSchema.describe(\n 'Payment provider slug, e.g. toss, portone, stripe',\n ),\n pgOrderId: z.string().min(1).optional(),\n amount: z\n .number()\n .int()\n .nonnegative('amount must be non-negative')\n .describe('Provider-confirmed amount in minor units'),\n currency: z.string().min(1).optional(),\n paymentMethod: z.string().optional(),\n receiptUrl: z.string().url().optional(),\n approvedAt: z.string().optional(),\n providerStatus: z.string().optional(),\n providerEventId: z.string().min(1).optional(),\n confirmationSource: z\n .enum([\n 'provider_webhook',\n 'provider_lookup',\n 'provider_api_confirm',\n 'manual_server',\n ])\n .optional(),\n paymentKey: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Optional provider payment key from the client confirm handshake; stored for BFF/provider refund workflows (also accepted as metadata.tossPaymentKey). Local cancel does not read this field.',\n ),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const ConfirmPaymentSchema = confirmPaymentSchema\n\n/**\n * Single-source `confirmPayment` response shape. Console\n * (`FinalizeProviderPaymentResult`) aliases this and the SDK hand-type\n * (`ConfirmPaymentResponse`) is locked to it by a bidirectional parity\n * `test-d`, so the wire response has one owner.\n */\nexport const confirmPaymentResponseSchema = z\n .object({\n orderId: z.string().min(1),\n transactionId: z.string().min(1),\n status: z.literal('paid'),\n alreadyConfirmed: z.boolean().optional(),\n })\n .strict()\n\nexport const ConfirmPaymentResponseSchema = confirmPaymentResponseSchema\n\n/**\n * Machine-readable return reason codes. Console label maps and the SDK\n * `ReturnReason` union derive from this single source (parity-tested), mirroring\n * the product-upsert reason-code precedent.\n */\nexport const RETURN_REASON_CODES = [\n 'change_of_mind',\n 'defective',\n 'wrong_delivery',\n 'damaged',\n 'other',\n] as const\n\nexport const returnReasonSchema = z.enum(RETURN_REASON_CODES)\n\nexport const restockActionSchema = z.enum(['return_to_stock', 'discard'])\n\nexport const returnWithRefundItemSchema = z\n .object({\n orderItem: z.union([z.string().min(1), z.number()]).transform(String),\n quantity: z.number().int().positive('quantity must be a positive integer'),\n restockAction: restockActionSchema.default('return_to_stock'),\n restockingFee: z\n .number()\n .min(0, 'restockingFee must be non-negative')\n .optional()\n .describe('Restocking fee charged for this line (ADR 0005 §Gap 1)'),\n })\n .strict()\n\nexport const returnWithRefundSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number (required)'),\n reason: returnReasonSchema.optional().describe('Return reason (optional)'),\n reasonDetail: z\n .string()\n .optional()\n .describe('Detailed reason text (optional)'),\n returnItems: z\n .array(returnWithRefundItemSchema)\n .min(1, 'At least one return item is required')\n .max(100, 'Too many return items')\n .describe('Array of products to return (required)'),\n refundAmount: z\n .number()\n .min(0, 'refundAmount must be non-negative')\n .describe('Refund amount (required, min 0)'),\n returnShippingFee: z\n .number()\n .min(0, 'returnShippingFee must be non-negative')\n .optional()\n .describe(\n 'Return shipping fee charged to the customer (ADR 0005 §Gap 1)',\n ),\n initialShippingRefundAmount: z\n .number()\n .min(0, 'initialShippingRefundAmount must be non-negative')\n .optional()\n .describe('Initial order shipping amount refunded to the customer'),\n initialShippingRefundOverrideNote: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Operator audit note required when overriding policy suggestion',\n ),\n pgPaymentId: z\n .string()\n .min(1, 'pgPaymentId is required')\n .describe('PG payment ID for refund (required)'),\n paymentKey: z\n .string()\n .min(1)\n .optional()\n .describe('Provider payment key for verified refund'),\n refundReceiptUrl: z\n .string()\n .optional()\n .describe('Refund receipt URL (optional)'),\n })\n .strict()\n\nexport const createReturnSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number (required)'),\n reason: returnReasonSchema.optional().describe('Return reason (optional)'),\n reasonDetail: z\n .string()\n .optional()\n .describe('Detailed reason text (optional)'),\n returnItems: z\n .array(returnWithRefundItemSchema)\n .min(1, 'At least one return item is required')\n .max(100, 'Too many return items')\n .describe('Array of products to return (required)'),\n refundAmount: z\n .number()\n .min(0, 'refundAmount must be non-negative')\n .describe(\n 'Line refund amount before initial shipping refund (required, min 0)',\n ),\n returnShippingFee: z\n .number()\n .min(0, 'returnShippingFee must be non-negative')\n .optional()\n .describe('Return shipping fee charged to the customer'),\n initialShippingRefundAmount: z\n .number()\n .min(0, 'initialShippingRefundAmount must be non-negative')\n .optional()\n .describe('Initial order shipping amount refunded to the customer'),\n initialShippingRefundOverrideNote: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Operator audit note required when overriding policy suggestion',\n ),\n })\n .strict()\n\nexport const CreateReturnSchema = createReturnSchema\nexport const ReturnWithRefundSchema = returnWithRefundSchema\n\n/**\n * Machine-readable order cancellation reason codes. Console label maps and the\n * SDK `CancelReasonCode` union derive from this single source (parity-tested).\n */\nexport const CANCEL_REASON_CODES = [\n 'customer',\n 'inventory',\n 'fraud',\n 'declined',\n 'staff',\n 'other',\n] as const\n\nexport const cancelReasonCodeSchema = z.enum(CANCEL_REASON_CODES)\n\n/**\n * Machine-readable operator force-resolution reason codes (operational return /\n * fulfillment-mistake corrections). Single source for Console's\n * `forceResolveOrderMistake` reason union.\n */\nexport const FORCE_RESOLUTION_REASON_CODES = [\n 'staff_error',\n 'wrong_fulfillment',\n 'other',\n] as const\n\nexport const forceResolutionReasonCodeSchema = z.enum(\n FORCE_RESOLUTION_REASON_CODES,\n)\n\nexport const idempotencyKeySchema = z\n .string()\n .trim()\n .min(1, 'idempotencyKey is required')\n .max(255, 'idempotencyKey must be 255 characters or fewer')\n .regex(\n /^[\\x21-\\x7E]+$/,\n 'idempotencyKey must contain only printable header-safe characters',\n )\n\nexport const cancelOrderSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number to cancel'),\n reasonCode: cancelReasonCodeSchema\n .default('other')\n .describe('Operator-selected cancel reason code'),\n reasonDetail: z\n .string()\n .trim()\n .max(2000, 'reasonDetail must be 2000 characters or fewer')\n .optional()\n .describe('Internal cancellation detail stored on the order'),\n })\n .strict()\n\nexport const CancelOrderSchema = cancelOrderSchema\n\nconst cancelOrderResponseBaseSchema = {\n orderId: z.string().min(1),\n} satisfies z.ZodRawShape\n\nconst unpaidLocalCancelCommittedResponseFields = {\n refundedAmount: z.literal(0),\n providerRefunded: z.literal(false),\n} satisfies z.ZodRawShape\n\nconst paidLocalCancelCommittedResponseFields = {\n transactionId: z.string().min(1),\n refundedAmount: z.literal(0),\n providerRefunded: z.literal(false),\n refundPending: z.literal(true),\n} satisfies z.ZodRawShape\n\nconst legacyProviderRefundResponseFields = {\n transactionId: z.string().min(1),\n refundedAmount: z.number().int().positive(),\n refundSeq: z.number().int().positive(),\n providerRefunded: z.literal(true),\n} satisfies z.ZodRawShape\n\nconst alreadyCanceledResponseFields = {\n refundedAmount: z.number().int().nonnegative(),\n providerRefunded: z.literal(false),\n} satisfies z.ZodRawShape\n\nconst alreadyCanceledRefundPendingResponseFields = {\n transactionId: z.string().min(1),\n refundedAmount: z.number().int().nonnegative(),\n providerRefunded: z.literal(false),\n refundPending: z.literal(true),\n} satisfies z.ZodRawShape\n\n/** @deprecated Inline PG cancel reconciliation removed; retained for type migration only. */\nexport const cancelOrderReconciliationStatusSchema = z.enum([\n 'paid',\n 'preparing',\n 'shipped',\n 'delivered',\n 'confirmed',\n 'return_requested',\n 'return_processing',\n 'returned',\n 'refunded',\n])\n\nexport const cancelOrderResponseSchema = z.union([\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...paidLocalCancelCommittedResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...unpaidLocalCancelCommittedResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...alreadyCanceledResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(false),\n alreadyCanceled: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...alreadyCanceledRefundPendingResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(false),\n alreadyCanceled: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...legacyProviderRefundResponseFields,\n status: cancelOrderReconciliationStatusSchema,\n cancelCommitted: z.literal(false),\n reconciliationRequired: z.literal(true),\n })\n .strict(),\n])\n\nexport const CancelOrderResponseSchema = cancelOrderResponseSchema\n\nexport const resolveCancelRefundOutcomeSchema = z.enum(['succeeded', 'failed'])\n\nexport const resolveCancelRefundSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number whose pending cancel refund is being resolved'),\n idempotencyKey: idempotencyKeySchema.describe(\n 'Stable key for this PG refund result report',\n ),\n outcome: resolveCancelRefundOutcomeSchema.describe(\n 'PG refund result reported by the storefront or BFF',\n ),\n refundedAmount: z\n .number()\n .int('refundedAmount must be an integer minor-unit amount')\n .nonnegative('refundedAmount must be nonnegative'),\n pgProvider: z\n .string()\n .trim()\n .min(1, 'pgProvider is required')\n .regex(\n /^[a-z0-9][a-z0-9_-]*$/,\n 'pgProvider must be a lowercase provider slug',\n ),\n pgRefundId: z.string().trim().min(1).optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.outcome === 'succeeded' && value.refundedAmount <= 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['refundedAmount'],\n message: 'refundedAmount must be positive when outcome is succeeded',\n })\n }\n\n if (value.outcome === 'succeeded' && !value.pgRefundId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['pgRefundId'],\n message: 'pgRefundId is required when outcome is succeeded',\n })\n }\n\n if (value.outcome === 'failed' && value.refundedAmount !== 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['refundedAmount'],\n message: 'refundedAmount must be 0 when outcome is failed',\n })\n }\n })\n\nexport const ResolveCancelRefundSchema = resolveCancelRefundSchema\n\nexport const resolveCancelRefundResponseSchema = z.union([\n z\n .object({\n orderId: z.string().min(1),\n transactionId: z.string().min(1),\n refundTransactionId: z.string().min(1),\n refundedAmount: z.number().int().positive(),\n refundStatus: z.literal('succeeded'),\n transactionStatus: z.literal('refunded'),\n })\n .strict(),\n z\n .object({\n orderId: z.string().min(1),\n transactionId: z.string().min(1),\n refundTransactionId: z.string().min(1),\n refundedAmount: z.literal(0),\n refundStatus: z.literal('failed'),\n transactionStatus: z.literal('paid'),\n })\n .strict(),\n])\n\nexport const ResolveCancelRefundResponseSchema =\n resolveCancelRefundResponseSchema\n\nexport type TransactionStatus = z.infer<typeof transactionStatusSchema>\nexport type UpdateTransactionParams = z.input<typeof UpdateTransactionSchema>\nexport type ParsedUpdateTransactionParams = z.output<\n typeof UpdateTransactionSchema\n>\nexport type CreateOrderParams = z.input<typeof CreateOrderSchema>\nexport type ParsedCreateOrderParams = z.output<typeof CreateOrderSchema>\nexport type CreateOrderItemParams = z.input<typeof createOrderItemSchema>\nexport type ParsedCreateOrderItemParams = z.output<typeof createOrderItemSchema>\nexport type ConfirmPaymentParams = z.input<typeof ConfirmPaymentSchema>\nexport type ParsedConfirmPaymentParams = z.output<typeof ConfirmPaymentSchema>\nexport type ConfirmPaymentResponse = z.output<\n typeof confirmPaymentResponseSchema\n>\nexport type ReturnReason = z.infer<typeof returnReasonSchema>\nexport type RestockAction = z.infer<typeof restockActionSchema>\nexport type ReturnWithRefundItem = z.input<typeof returnWithRefundItemSchema>\nexport type ParsedReturnWithRefundItem = z.output<\n typeof returnWithRefundItemSchema\n>\nexport type ReturnWithRefundParams = z.input<typeof ReturnWithRefundSchema>\nexport type ParsedReturnWithRefundParams = z.output<\n typeof ReturnWithRefundSchema\n>\nexport type CreateReturnParams = z.input<typeof CreateReturnSchema>\nexport type ParsedCreateReturnParams = z.output<typeof CreateReturnSchema>\nexport type CancelReasonCode = z.infer<typeof cancelReasonCodeSchema>\nexport type ForceResolutionReasonCode = z.infer<\n typeof forceResolutionReasonCodeSchema\n>\nexport type IdempotencyKey = z.infer<typeof idempotencyKeySchema>\nexport type CancelOrderReconciliationStatus = z.infer<\n typeof cancelOrderReconciliationStatusSchema\n>\nexport type CancelOrderParams = z.input<typeof CancelOrderSchema>\nexport type ParsedCancelOrderParams = z.output<typeof CancelOrderSchema>\nexport type CancelOrderRequestParams = {\n orderNumber: string\n reasonCode?: CancelReasonCode\n reasonDetail?: string\n idempotencyKey?: IdempotencyKey\n}\nexport type CancelOrderResponse = z.output<typeof CancelOrderResponseSchema>\nexport type ResolveCancelRefundOutcome = z.infer<\n typeof resolveCancelRefundOutcomeSchema\n>\nexport type ResolveCancelRefundParams = z.input<\n typeof ResolveCancelRefundSchema\n>\nexport type ParsedResolveCancelRefundParams = z.output<\n typeof ResolveCancelRefundSchema\n>\nexport type ResolveCancelRefundSucceededRequestParams = Omit<\n ResolveCancelRefundParams,\n 'outcome' | 'refundedAmount' | 'pgRefundId'\n> & {\n outcome: 'succeeded'\n refundedAmount: number\n pgRefundId: string\n}\nexport type ResolveCancelRefundFailedRequestParams = Omit<\n ResolveCancelRefundParams,\n 'outcome' | 'refundedAmount'\n> & {\n outcome: 'failed'\n refundedAmount: 0\n}\nexport type ResolveCancelRefundRequestParams =\n | ResolveCancelRefundSucceededRequestParams\n | ResolveCancelRefundFailedRequestParams\nexport type ResolveCancelRefundResponse = z.output<\n typeof ResolveCancelRefundResponseSchema\n>\n","import { z } from 'zod'\n\nconst IdSchema = z.union([z.string(), z.number()]).transform(String)\nconst RemovedLegacyMediaFieldSchema = z.unknown().optional()\n\nexport const PRODUCT_UPSERT_UNKNOWN_FIELD_REASON = 'unknown_field' as const\nexport const PRODUCT_UPSERT_READONLY_FIELD_REASON =\n 'product_field_readonly' as const\nexport const PRODUCT_GRAPH_CONFLICT_REASON = 'graph_conflict' as const\nexport const PRODUCT_GRAPH_REVISION_REQUIRED_REASON =\n 'graph_revision_required' as const\n\nexport const PRODUCT_READONLY_FIELDS = [\n 'isSoldOut',\n '_order',\n 'tenant',\n] as const\n\nconst productFieldShape = {\n id: IdSchema.optional(),\n title: z.string().min(1).optional(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n status: z.string().optional(),\n slug: z.string().optional(),\n images: z.array(IdSchema).optional(),\n mediaSets: RemovedLegacyMediaFieldSchema,\n vendor: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n brand: IdSchema.optional().nullable(),\n shippingPolicy: IdSchema.optional().nullable(),\n weight: z.number().int().min(0).optional().nullable(),\n minOrderQuantity: z.number().int().min(1).optional().nullable(),\n maxOrderQuantity: z.number().int().min(1).optional().nullable(),\n isFeatured: z.boolean().optional(),\n publishedAt: z.string().optional().nullable(),\n categories: z.array(IdSchema).optional(),\n tags: z.array(IdSchema).optional(),\n metadata: z.unknown().optional(),\n} as const\n\nexport const PRODUCT_UPSERT_PRODUCT_FIELDS = Object.keys(\n productFieldShape,\n) as (keyof typeof productFieldShape)[]\n\nexport const PRODUCT_UPSERT_EDIT_PRODUCT_FIELDS = ['id'] as const\n\nconst ProductFieldsSchema = z\n .object(productFieldShape)\n .passthrough()\n .superRefine((value, ctx) => {\n for (const field of ['primaryMediaItemId', 'thumbnail'] as const) {\n if (Object.prototype.hasOwnProperty.call(value, field)) {\n ctx.addIssue({\n code: 'custom',\n message:\n 'Product media is ordered like Shopify. Use product.images and put the featured image first.',\n path: [field],\n })\n }\n }\n })\n\n/**\n * Base option-value object shape. Exported so strict consumers (e.g. the MCP\n * product-upsert tool) can reject unknown keys via `.strict()` without\n * duplicating the field list. The runtime `OptionValueInputSchema` keeps its\n * passthrough + legacy-`swatchColor` rejection semantics.\n */\nexport const OptionValueObjectSchema = z.object({\n id: IdSchema.optional(),\n value: z.string().min(1, 'Option value `value` is required'),\n slug: z.string().optional(),\n swatch: z\n .object({\n type: z.enum(['color', 'media']).optional().nullable(),\n color: z.string().optional().nullable(),\n mediaItemId: IdSchema.optional().nullable(),\n })\n .optional()\n .nullable(),\n thumbnail: RemovedLegacyMediaFieldSchema,\n images: RemovedLegacyMediaFieldSchema,\n metadata: z.unknown().optional(),\n})\n\nconst OptionValueInputSchema =\n OptionValueObjectSchema.passthrough().superRefine((value, ctx) => {\n if (Object.prototype.hasOwnProperty.call(value, 'swatchColor')) {\n ctx.addIssue({\n code: 'custom',\n message:\n 'Option value field `swatchColor` was removed. Use nested `swatch.color` instead.',\n path: ['swatchColor'],\n })\n }\n })\n\nexport const OptionInputSchema = z.object({\n id: IdSchema.optional(),\n title: z.string().min(1, 'Option `title` is required'),\n slug: z.string().optional(),\n values: z\n .array(OptionValueInputSchema)\n .min(1, 'Each option must have at least one value'),\n})\n\nconst VariantOptionValueObjectSchema = z\n .object({\n valueSlug: z.string().optional(),\n valueId: IdSchema.optional(),\n value: z.string().optional(),\n })\n .refine((data) => Boolean(data.valueSlug ?? data.valueId ?? data.value), {\n message:\n 'Variant option value object requires valueSlug, valueId, or value',\n })\n\nexport const VariantInputSchema = z.object({\n id: IdSchema.optional(),\n optionValues: z\n .union([\n z.record(\n z.string(),\n z.union([z.string(), VariantOptionValueObjectSchema]),\n ),\n z.array(IdSchema),\n ])\n .optional(),\n sku: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n price: z.number().min(0),\n compareAtPrice: z.number().min(0).optional().nullable(),\n stock: z.number().int().min(0).optional(),\n isUnlimited: z.boolean().optional(),\n inventoryPolicy: z.enum(['deny', 'continue']).optional(),\n weight: z.number().int().min(0).optional().nullable(),\n requiresShipping: z.boolean().optional(),\n barcode: z.string().optional().nullable(),\n externalId: z.string().optional().nullable(),\n isActive: z.boolean().optional(),\n images: z.array(IdSchema).optional(),\n thumbnail: RemovedLegacyMediaFieldSchema,\n featuredMediaItemId: RemovedLegacyMediaFieldSchema,\n metadata: z.unknown().optional(),\n})\n\n/** Base object schema for `.shape` consumers (MCP tool fields). */\nexport const ProductUpsertObjectSchema = z.object({\n /** Required on graph edit when the server graph is non-empty (`productId` set); optional for first seed on an empty graph. */\n graphRevision: z.string().optional(),\n productId: IdSchema.optional(),\n product: ProductFieldsSchema.optional(),\n options: z.array(OptionInputSchema).max(10).optional().default([]),\n variants: z.array(VariantInputSchema).max(500).optional().default([]),\n})\n\nexport const ProductUpsertSchema = ProductUpsertObjectSchema.superRefine(\n (data, ctx) => {\n const nestedProductId = data.product?.id\n if (\n data.productId != null &&\n nestedProductId != null &&\n String(data.productId) !== String(nestedProductId)\n ) {\n ctx.addIssue({\n code: 'custom',\n message:\n 'productId must match product.id when both are set on graph upsert.',\n path: ['productId'],\n })\n }\n\n const productId = data.productId ?? nestedProductId\n const isEdit = productId != null\n\n if (!isEdit && data.productId != null) {\n ctx.addIssue({\n code: 'custom',\n message: 'productId is not allowed when creating a product.',\n path: ['productId'],\n })\n }\n\n if (!isEdit && !data.product?.title) {\n ctx.addIssue({\n code: 'custom',\n message: 'Product `title` is required when creating a new product.',\n path: ['product', 'title'],\n })\n }\n\n if (isEdit && data.product) {\n for (const key of Object.keys(data.product)) {\n if (key !== 'id') {\n ctx.addIssue({\n code: 'custom',\n message:\n 'Existing product graph upsert accepts only product identity. Save document fields through Payload.',\n path: ['product', key],\n })\n }\n }\n }\n },\n)\n\n/** Create: `product.title` required; no `productId`. */\nexport type ProductUpsertCreateInput = {\n graphRevision?: string\n product: ProductFieldsInput & { title: string }\n options?: OptionInput[]\n variants?: VariantInput[]\n}\n\n/** Edit: graph-only; document fields via Payload / Admin save. */\nexport type ProductUpsertEditInput = {\n graphRevision?: string\n productId: string\n options?: OptionInput[]\n variants?: VariantInput[]\n}\n\n/** Edit (legacy carrier): `product: { id }` only — prefer `productId`. */\nexport type ProductUpsertEditNestedIdInput = {\n graphRevision?: string\n product: { id: string }\n options?: OptionInput[]\n variants?: VariantInput[]\n}\n\n/** Parsed upsert body (Zod defaults + refine). Prefer this at API boundaries. */\nexport type ProductUpsertInput = z.infer<typeof ProductUpsertSchema>\n\nexport type ProductFieldsInput = z.infer<typeof ProductFieldsSchema>\nexport type OptionInput = z.infer<typeof OptionInputSchema>\nexport type OptionValueInput = z.infer<typeof OptionValueInputSchema>\nexport type VariantInput = z.infer<typeof VariantInputSchema>\n","import { Command } from 'commander'\nimport { createOrderSchema, cancelOrderSchema } from '@01.software/contracts'\nimport { z } from 'zod'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJson, parseJsonArray, parseWithSchema } from '../lib/parse.js'\n\nconst idSchema = z.union([z.string().min(1), z.number()]).transform(String)\n\nconst customerSnapshotSchema = z\n .object({\n email: z.string().email('Invalid email format'),\n name: z.string().optional(),\n phone: z.string().optional(),\n })\n .strict()\n\nconst orderStatusSchema = z.enum(['confirmed'])\n\nconst fulfillmentStatusSchema = z.enum(['shipped', 'delivered', 'failed'])\n\nconst updateFulfillmentSchema = z\n .object({\n fulfillmentId: idSchema,\n status: fulfillmentStatusSchema.optional(),\n carrier: z.string().min(1).optional(),\n trackingNumber: z.string().min(1).optional(),\n })\n .refine(\n (value) =>\n value.status !== undefined ||\n value.carrier !== undefined ||\n value.trackingNumber !== undefined,\n {\n message: 'status, carrier, or trackingNumber is required',\n },\n )\n\nconst fulfillmentItemsSchema = z\n .array(\n z\n .object({\n orderItem: idSchema,\n quantity: z\n .number()\n .int()\n .positive('quantity must be a positive integer'),\n })\n .strict(),\n )\n .min(1, 'At least one fulfillment item is required')\n .max(100, 'Maximum 100 items per fulfillment')\n\nexport function registerOrderCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const order = program.command('order').description('Order management')\n\n order\n .command('create')\n .description('Create a new order')\n .option('--payment-id <id>', 'Payment ID')\n .requiredOption('--order-number <num>', 'Order number')\n .requiredOption('--email <email>', 'Customer email')\n .option('--customer <id>', 'Customer ID')\n .option('--name <name>', 'Customer name')\n .option('--phone <phone>', 'Customer phone')\n .requiredOption('--shipping-address <json>', 'Shipping address (JSON)')\n .requiredOption('--products <json>', 'Order products array (JSON)')\n .requiredOption('--total-amount <n>', 'Total amount', parseFloat)\n .option('--shipping-amount <n>', 'Shipping amount', parseFloat)\n .option('--discount-code <code>', 'Discount code')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n {\n pgPaymentId: opts.paymentId,\n orderNumber: opts.orderNumber,\n customerSnapshot: {\n email: opts.email,\n name: opts.name,\n phone: opts.phone,\n },\n customer: opts.customer,\n shippingAddress: parseJson(\n opts.shippingAddress,\n 'shipping-address',\n ),\n orderItems: parseJsonArray(opts.products, 'products'),\n totalAmount: opts.totalAmount,\n shippingAmount: opts.shippingAmount,\n discountCode: opts.discountCode,\n },\n 'order',\n createOrderSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order create', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.create(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('get <orderNumber>')\n .description('Get an order by order number')\n .action(async (orderNumber: string) => {\n try {\n const client = getClient()\n const {\n docs: [order],\n } = await client.collections\n .from('orders')\n .find({\n where: { orderNumber: { equals: orderNumber } },\n limit: 1,\n depth: 1,\n })\n if (!order) throw new Error('Order not found')\n printResult(order, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('update <orderNumber>')\n .description('Confirm a delivered order purchase')\n .requiredOption('--status <status>', 'New status (confirmed only)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const status = parseWithSchema(opts.status, 'status', orderStatusSchema)\n const data = { orderNumber, status }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.update(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('cancel <orderNumber>')\n .description('Cancel an eligible order')\n .option(\n '--reason-code <code>',\n 'Cancel reason (customer, inventory, fraud, declined, staff, other)',\n )\n .option('--reason-detail <text>', 'Internal cancellation detail')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n orderNumber,\n ...(opts.reasonCode ? { reasonCode: opts.reasonCode } : {}),\n ...(opts.reasonDetail ? { reasonDetail: opts.reasonDetail } : {}),\n },\n 'cancel',\n cancelOrderSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order cancel', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.cancelOrder(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('checkout')\n .description('Convert a cart to an order')\n .requiredOption('--cart-id <id>', 'Cart ID')\n .option('--payment-id <id>', 'Payment ID (optional for free orders)')\n .requiredOption('--order-number <num>', 'Order number')\n .requiredOption('--customer <json>', 'Customer snapshot (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const customerSnapshot = parseWithSchema(\n parseJson(opts.customer, 'customer'),\n 'customer',\n customerSnapshotSchema,\n )\n const data = {\n cartId: opts.cartId,\n pgPaymentId: opts.paymentId,\n orderNumber: opts.orderNumber,\n customerSnapshot,\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order checkout', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.checkout({\n ...data,\n customerSnapshot: customerSnapshot as Parameters<\n typeof client.commerce.orders.checkout\n >[0]['customerSnapshot'],\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('prepare <orderNumber>')\n .description('Move paid order fulfillment work to preparation')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = { orderNumber }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order prepare', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result =\n await client.commerce.orders.prepareFulfillmentOrder(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('fulfill <orderNumber>')\n .description('Create a shipment for a prepared order')\n .option('--items <json>', 'Fulfillment items array (JSON)')\n .option('--carrier <name>', 'Shipping carrier')\n .option('--tracking-number <num>', 'Tracking number')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const items = opts.items\n ? parseWithSchema(\n parseJsonArray(opts.items, 'items'),\n 'items',\n fulfillmentItemsSchema,\n )\n : undefined\n const data = {\n orderNumber,\n ...(opts.carrier ? { carrier: opts.carrier } : {}),\n ...(opts.trackingNumber\n ? { trackingNumber: opts.trackingNumber }\n : {}),\n ...(items ? { items } : {}),\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order fulfill', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.createFulfillment({\n ...data,\n ...(items\n ? {\n items: items as Parameters<\n typeof client.commerce.orders.createFulfillment\n >[0]['items'],\n }\n : {}),\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('update-fulfillment <fulfillmentId>')\n .description('Update shipment status or tracking information')\n .option('--status <status>', 'Shipment status (shipped, delivered, failed)')\n .option('--carrier <name>', 'Shipping carrier')\n .option('--tracking-number <num>', 'Tracking number')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (fulfillmentId: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n fulfillmentId,\n ...(opts.status ? { status: opts.status } : {}),\n ...(opts.carrier ? { carrier: opts.carrier } : {}),\n ...(opts.trackingNumber\n ? { trackingNumber: opts.trackingNumber }\n : {}),\n },\n 'fulfillment',\n updateFulfillmentSchema,\n )\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'order update-fulfillment',\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.updateFulfillment(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport {\n createReturnSchema,\n returnWithRefundSchema,\n} from '@01.software/contracts'\nimport { z } from 'zod'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJsonArray, parseWithSchema } from '../lib/parse.js'\n\nconst returnStatusSchema = z.enum([\n 'processing',\n 'approved',\n 'rejected',\n 'completed',\n])\n\nexport function registerReturnCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const ret = program.command('return').description('Return management')\n\n ret\n .command('create <orderNumber>')\n .description('Create a return request')\n .requiredOption('--products <json>', 'Return products array (JSON)')\n .requiredOption('--refund-amount <n>', 'Refund amount', parseFloat)\n .option(\n '--return-shipping-fee <n>',\n 'Return shipping fee charged to the customer',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-amount <n>',\n 'Initial order shipping refund amount',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-note <text>',\n 'Audit note for manual initial shipping refund override',\n )\n .option(\n '--reason <reason>',\n 'Return reason (change_of_mind, defective, wrong_delivery, damaged, other)',\n )\n .option('--reason-detail <text>', 'Detailed reason')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n orderNumber,\n returnItems: parseJsonArray(opts.products, 'products'),\n refundAmount: opts.refundAmount,\n returnShippingFee: opts.returnShippingFee,\n reason: opts.reason,\n reasonDetail: opts.reasonDetail,\n initialShippingRefundAmount: opts.initialShippingRefundAmount,\n initialShippingRefundOverrideNote: opts.initialShippingRefundNote,\n },\n 'return',\n createReturnSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'return create', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.createReturn({\n ...data,\n returnItems: data.returnItems as Parameters<\n typeof client.commerce.orders.createReturn\n >[0]['returnItems'],\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n ret\n .command('update <returnId>')\n .description('Update return status')\n .requiredOption(\n '--status <status>',\n 'New status (processing, approved, rejected, completed)',\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (returnId: string, opts) => {\n try {\n const status = parseWithSchema(\n opts.status,\n 'status',\n returnStatusSchema,\n )\n const data = { returnId, status }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'return update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.updateReturn(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n ret\n .command('refund <orderNumber>')\n .description('Return with refund')\n .requiredOption('--products <json>', 'Return products array (JSON)')\n .requiredOption('--refund-amount <n>', 'Refund amount', parseFloat)\n .requiredOption('--payment-id <id>', 'Payment ID')\n .option(\n '--return-shipping-fee <n>',\n 'Return shipping fee charged to the customer',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-amount <n>',\n 'Initial order shipping refund amount',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-note <text>',\n 'Audit note for manual initial shipping refund override',\n )\n .option('--reason <reason>', 'Return reason')\n .option('--reason-detail <text>', 'Detailed reason')\n .option('--refund-receipt-url <url>', 'Refund receipt URL')\n .option('--payment-key <key>', 'Provider payment key')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n orderNumber,\n returnItems: parseJsonArray(opts.products, 'products'),\n refundAmount: opts.refundAmount,\n returnShippingFee: opts.returnShippingFee,\n pgPaymentId: opts.paymentId,\n reason: opts.reason,\n reasonDetail: opts.reasonDetail,\n refundReceiptUrl: opts.refundReceiptUrl,\n paymentKey: opts.paymentKey,\n initialShippingRefundAmount: opts.initialShippingRefundAmount,\n initialShippingRefundOverrideNote: opts.initialShippingRefundNote,\n },\n 'return',\n returnWithRefundSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'return refund', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.returnWithRefund({\n ...data,\n returnItems: data.returnItems as Parameters<\n typeof client.commerce.orders.returnWithRefund\n >[0]['returnItems'],\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerCartCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const cart = program.command('cart').description('Cart management')\n\n cart\n .command('create')\n .description('Create a cart and print its cartToken handle')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart create', data: {} },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.create()\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('add <cartToken>')\n .description('Add an item to a cart (addressed by its cartToken)')\n .requiredOption('--product <id>', 'Product ID')\n .requiredOption('--variant <id>', 'Variant ID')\n .requiredOption('--option <id>', 'Option ID')\n .requiredOption('--quantity <n>', 'Quantity', (v: string) =>\n parseInt(v, 10),\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n const data = {\n cartToken,\n product: opts.product,\n variant: opts.variant,\n option: opts.option,\n quantity: opts.quantity,\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart add', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.addItem(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('update <cartItemId>')\n .description('Update cart item quantity')\n .requiredOption('--cart-token <token>', 'Cart token (cart handle)')\n .requiredOption('--quantity <n>', 'New quantity', (v: string) =>\n parseInt(v, 10),\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartItemId: string, opts) => {\n try {\n const data = {\n cartToken: opts.cartToken,\n cartItemId,\n quantity: opts.quantity,\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.updateItem(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('remove <cartItemId>')\n .description('Remove an item from a cart')\n .requiredOption('--cart-token <token>', 'Cart token (cart handle)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartItemId: string, opts) => {\n try {\n const data = { cartToken: opts.cartToken, cartItemId }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart remove', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.removeItem(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('clear <cartToken>')\n .description('Remove all items from a cart')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart clear', data: { cartToken } },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.clear({ cartToken })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('apply-discount <cartToken>')\n .description('Apply a discount code to a cart')\n .requiredOption('--code <code>', 'Discount code')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n const data = { cartToken, discountCode: opts.code }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart apply-discount', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.applyDiscount(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('remove-discount <cartToken>')\n .description('Remove the discount from a cart')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'cart remove-discount',\n data: { cartToken },\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.removeDiscount({ cartToken })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJsonArray } from '../lib/parse.js'\n\nexport function registerStockCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const stock = program.command('stock').description('Stock management')\n\n stock\n .command('check')\n .description('Check stock availability')\n .requiredOption(\n '--items <json>',\n 'Items to check (JSON array of { optionId, quantity })',\n )\n .action(async (opts) => {\n try {\n const client = getClient()\n const items = parseJsonArray(opts.items, 'items') as Parameters<\n typeof client.commerce.product.stockCheck\n >[0]['items']\n const result = await client.commerce.product.stockCheck({ items })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport {\n updateTransactionSchema,\n confirmPaymentSchema,\n idempotencyKeySchema,\n} from '@01.software/contracts'\nimport { z } from 'zod'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseWithSchema } from '../lib/parse.js'\n\nconst transactionAmountSchema = z.object({\n amount: z\n .string()\n .regex(/^[1-9]\\d*$/, 'amount must be a positive integer')\n .transform(Number),\n})\nconst confirmPaymentAmountSchema = z.object({\n amount: z\n .string()\n .regex(/^(0|[1-9]\\d*)$/, 'amount must be a non-negative integer')\n .transform(Number),\n})\nconst idempotencyKeyOptionSchema = z.object({\n idempotencyKey: idempotencyKeySchema,\n})\n\nfunction parseTransactionAmount(value: string | undefined) {\n if (value === undefined) return undefined\n return parseWithSchema({ amount: value }, 'amount', transactionAmountSchema)\n .amount\n}\n\nfunction parseConfirmPaymentAmount(value: string) {\n return parseWithSchema({ amount: value }, 'amount', confirmPaymentAmountSchema)\n .amount\n}\n\nfunction parseIdempotencyKey(value: string | undefined) {\n if (value === undefined) return undefined\n return parseWithSchema(\n { idempotencyKey: value },\n 'idempotencyKey',\n idempotencyKeyOptionSchema,\n ).idempotencyKey\n}\n\nexport function registerTransactionCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const tx = program\n .command('transaction')\n .description('Transaction management')\n\n tx.command('update')\n .description('Update transaction status')\n .requiredOption('--payment-id <id>', 'Payment ID')\n .requiredOption(\n '--status <status>',\n 'New status (pending, paid, failed, canceled, refunded)',\n )\n .option('--payment-method <method>', 'Payment method')\n .option('--receipt-url <url>', 'Receipt URL')\n .option('--payment-key <key>', 'Provider payment key')\n .option('--amount <n>', 'Provider-confirmed amount')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n {\n pgPaymentId: opts.paymentId,\n status: opts.status,\n paymentMethod: opts.paymentMethod,\n receiptUrl: opts.receiptUrl,\n paymentKey: opts.paymentKey,\n amount: parseTransactionAmount(opts.amount),\n },\n 'transaction',\n updateTransactionSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'transaction update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.updateTransaction(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n tx.command('confirm-payment')\n .description('Confirm a provider-verified payment for an order')\n .requiredOption('--payment-id <id>', 'Provider payment identifier (pgPaymentId)')\n .requiredOption(\n '--provider <slug>',\n 'Payment provider slug (toss, portone, stripe, ...)',\n )\n .requiredOption(\n '--amount <n>',\n 'Provider-confirmed amount in minor units',\n )\n .option('--order-number <num>', 'Order number')\n .option('--pg-order-id <id>', 'Provider order id')\n .option('--currency <code>', 'Currency code')\n .option('--payment-method <method>', 'Payment method')\n .option('--receipt-url <url>', 'Receipt URL')\n .option('--approved-at <ts>', 'Provider approval timestamp')\n .option('--provider-status <status>', 'Provider status')\n .option('--provider-event-id <id>', 'Provider event id (idempotency)')\n .option('--idempotency-key <key>', 'Idempotency key header override')\n .option(\n '--confirmation-source <src>',\n 'provider_webhook | provider_lookup | provider_api_confirm | manual_server',\n )\n .option('--payment-key <key>', 'Provider payment key')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n {\n pgPaymentId: opts.paymentId,\n pgProvider: opts.provider,\n amount: parseConfirmPaymentAmount(opts.amount),\n ...(opts.orderNumber ? { orderNumber: opts.orderNumber } : {}),\n ...(opts.pgOrderId ? { pgOrderId: opts.pgOrderId } : {}),\n ...(opts.currency ? { currency: opts.currency } : {}),\n ...(opts.paymentMethod\n ? { paymentMethod: opts.paymentMethod }\n : {}),\n ...(opts.receiptUrl ? { receiptUrl: opts.receiptUrl } : {}),\n ...(opts.approvedAt ? { approvedAt: opts.approvedAt } : {}),\n ...(opts.providerStatus\n ? { providerStatus: opts.providerStatus }\n : {}),\n ...(opts.providerEventId\n ? { providerEventId: opts.providerEventId }\n : {}),\n ...(opts.confirmationSource\n ? { confirmationSource: opts.confirmationSource }\n : {}),\n ...(opts.paymentKey ? { paymentKey: opts.paymentKey } : {}),\n },\n 'confirm-payment',\n confirmPaymentSchema,\n )\n const sdkParams = {\n ...data,\n ...(opts.idempotencyKey !== undefined\n ? { idempotencyKey: parseIdempotencyKey(opts.idempotencyKey) }\n : {}),\n }\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'transaction confirm-payment',\n data: sdkParams,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.confirmPayment(\n sdkParams as Parameters<typeof client.commerce.orders.confirmPayment>[0],\n )\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport { ProductUpsertSchema } from '@01.software/contracts'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJson, parseWithSchema } from '../lib/parse.js'\n\nexport function registerProductCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const product = program.command('product').description('Product management')\n\n product\n .command('upsert')\n .description('Create or update a product graph (options, values, variants)')\n .requiredOption('--input <json>', 'Product upsert input (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n parseJson(opts.input, 'input'),\n 'input',\n ProductUpsertSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'product upsert', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.product.upsert(\n data as Parameters<typeof client.commerce.product.upsert>[0],\n )\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerDiscountCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const discount = program\n .command('discount')\n .description('Discount management')\n\n discount\n .command('validate')\n .description('Validate a discount code against an order amount')\n .requiredOption('--code <code>', 'Discount code')\n .requiredOption('--order-amount <n>', 'Order amount', (v: string) =>\n parseInt(v, 10),\n )\n .action(async (opts) => {\n try {\n const client = getClient()\n const result = await client.commerce.discounts.validate({\n code: opts.code,\n orderAmount: opts.orderAmount,\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerShippingCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const shipping = program\n .command('shipping')\n .description('Shipping calculation')\n\n shipping\n .command('calculate')\n .description('Calculate shipping for an order amount')\n .requiredOption('--order-amount <n>', 'Order amount', (v: string) =>\n parseInt(v, 10),\n )\n .option('--shipping-policy-id <id>', 'Shipping policy ID')\n .option('--postal-code <code>', 'Destination postal code')\n .action(async (opts) => {\n try {\n const client = getClient()\n const result = await client.commerce.shipping.calculate({\n orderAmount: opts.orderAmount,\n ...(opts.shippingPolicyId\n ? { shippingPolicyId: opts.shippingPolicyId }\n : {}),\n ...(opts.postalCode ? { postalCode: opts.postalCode } : {}),\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { randomBytes } from 'node:crypto'\nimport { createServer } from 'node:http'\nimport { execFile, exec } from 'node:child_process'\nimport { platform } from 'node:os'\nimport { URL } from 'node:url'\nimport type { Command } from 'commander'\nimport pc from 'picocolors'\nimport {\n loadCredentials,\n saveCredentials,\n deleteCredentials,\n getCredentialsPath,\n loadLocalCredentials,\n saveLocalCredentials,\n getLocalCredentialsPath,\n loadTenantList,\n saveTenantList,\n type TenantInfo,\n} from '../lib/credentials.js'\n\nconst WEB_URL = process.env.SOFTWARE_WEB_URL || 'https://01.software'\nconst TIMEOUT_MS = 3 * 60 * 1000 // 3 minutes\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n\nfunction openBrowser(url: string): void {\n const os = platform()\n\n const onError = () => {\n console.log(\n pc.yellow(\n `Could not open browser automatically. Open this URL manually:\\n${url}`,\n ),\n )\n }\n\n if (os === 'win32') {\n exec(`start \"\" \"${url}\"`, (err) => {\n if (err) onError()\n })\n } else {\n const cmd = os === 'darwin' ? 'open' : 'xdg-open'\n execFile(cmd, [url], (err) => {\n if (err) onError()\n })\n }\n}\n\nconst PAGE_STYLE = `*{margin:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;display:flex;justify-content:center;align-items:center;min-height:100vh;background:#fff;color:#252525}\n@media(prefers-color-scheme:dark){body{background:#252525;color:#f5f5f5}}\n.card{text-align:center;padding:2rem 2.5rem;border-radius:10px;max-width:380px;width:100%}\n.icon{width:40px;height:40px;margin:0 auto 1rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.25rem}\n.icon.ok{background:rgba(0,0,0,.05);color:#252525}\n.icon.err{background:rgba(220,38,38,.08);color:#dc2626}\n@media(prefers-color-scheme:dark){.icon.ok{background:rgba(255,255,255,.08);color:#f5f5f5}}\nh1{font-size:.875rem;font-weight:600;margin-bottom:.375rem}\np{font-size:.75rem;color:#737373;line-height:1.5}`\n\nconst SUCCESS_HTML = `<!DOCTYPE html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width\"><title>CLI Login</title>\n<style>${PAGE_STYLE}</style>\n</head><body><div class=\"card\"><div class=\"icon ok\">\\u2713</div><h1>Authenticated</h1><p>You can close this tab and return to the terminal.</p></div></body></html>`\n\nconst ERROR_HTML = (msg: string) => `<!DOCTYPE html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width\"><title>CLI Login Error</title>\n<style>${PAGE_STYLE}</style>\n</head><body><div class=\"card\"><div class=\"icon err\">!</div><h1>Authentication failed</h1><p>${escapeHtml(msg)}</p></div></body></html>`\n\ninterface ExchangeResponse {\n publishableKey: string\n secretKey: string\n tenantName: string\n tenantId: string\n tenants?: TenantInfo[]\n}\n\nasync function exchangeCode(code: string): Promise<ExchangeResponse | null> {\n const url = `${WEB_URL}/api/cli/exchange`\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code }),\n })\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n console.error(\n pc.red(\n `Exchange failed: HTTP ${res.status} from ${url}${body ? ` — ${body.slice(0, 200)}` : ''}`,\n ),\n )\n return null\n }\n const data = (await res.json()) as Partial<ExchangeResponse>\n if (\n typeof data.publishableKey !== 'string' ||\n typeof data.secretKey !== 'string' ||\n typeof data.tenantName !== 'string' ||\n typeof data.tenantId !== 'string'\n ) {\n console.error(pc.red(`Exchange failed: malformed response from ${url}`))\n return null\n }\n return {\n publishableKey: data.publishableKey,\n secretKey: data.secretKey,\n tenantName: data.tenantName,\n tenantId: data.tenantId,\n tenants: Array.isArray(data.tenants)\n ? data.tenants.filter(\n (t): t is TenantInfo =>\n typeof (t as TenantInfo)?.id === 'string' &&\n typeof (t as TenantInfo)?.name === 'string',\n )\n : undefined,\n }\n } catch (err) {\n console.error(\n pc.red(\n `Exchange request to ${url} failed: ${err instanceof Error ? err.message : String(err)}`,\n ),\n )\n return null\n }\n}\n\n/**\n * Start a local HTTP server that receives the OAuth-style redirect callback\n * from the browser. The browser top-level-navigates to\n * http://127.0.0.1:{port}/callback?code={encryptedCode}&state={state}\n * and the CLI exchanges the opaque code with the web API to receive the\n * actual credentials server-to-server. This path has no CORS or PNA\n * preflight because the browser never issues a subresource fetch.\n */\nfunction startAuthServer(options: {\n state: string\n saveFn: (creds: {\n publishableKey: string\n secretKey: string\n tenantId?: string\n tenantName: string\n }) => void\n}): Promise<{ port: number; cleanup: (exitCode?: number) => void }> {\n return new Promise((resolve, reject) => {\n const server = createServer((req, res) => {\n if (!req.url) {\n res.writeHead(400).end()\n return\n }\n\n const url = new URL(req.url, `http://localhost`)\n\n if (url.pathname !== '/callback' || req.method !== 'GET') {\n res.writeHead(404).end()\n return\n }\n\n const error = url.searchParams.get('error')\n if (error) {\n res\n .writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML(error))\n console.error(pc.red(`Login failed: ${error}`))\n cleanup(2)\n return\n }\n\n const code = url.searchParams.get('code')\n const receivedState = url.searchParams.get('state')\n\n if (!code || !receivedState) {\n res\n .writeHead(400, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML('Missing code or state. Start over with \"01 login\".'))\n cleanup(2)\n return\n }\n\n if (receivedState !== options.state) {\n res\n .writeHead(403, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML('State mismatch. Start over with \"01 login\".'))\n console.error(pc.red('Login failed: state mismatch.'))\n cleanup(2)\n return\n }\n\n exchangeCode(code).then((creds) => {\n if (!creds) {\n res\n .writeHead(400, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML('Invalid or expired code. Start over with \"01 login\".'))\n console.error(pc.red('Login failed: code exchange failed.'))\n cleanup(2)\n return\n }\n\n options.saveFn({\n publishableKey: creds.publishableKey,\n secretKey: creds.secretKey,\n tenantId: creds.tenantId,\n tenantName: creds.tenantName,\n })\n\n if (creds.tenants && creds.tenants.length > 0) {\n saveTenantList(creds.tenants)\n }\n\n console.log(pc.green(`\\nLogged in successfully!`))\n console.log(pc.dim(`Tenant: ${creds.tenantName}`))\n\n res\n .writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(SUCCESS_HTML)\n cleanup(0)\n })\n })\n\n let timeout: ReturnType<typeof setTimeout>\n let completed = false\n\n function cleanup(exitCode = 0) {\n if (completed) return\n completed = true\n clearTimeout(timeout)\n server.closeAllConnections?.()\n server.close(() => process.exit(exitCode))\n }\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address()\n if (!addr || typeof addr === 'string') {\n reject(new Error('Failed to start local server.'))\n return\n }\n\n timeout = setTimeout(() => {\n console.error(\n pc.red('\\nLogin timed out (3 minutes). Please try again.'),\n )\n cleanup(4)\n }, TIMEOUT_MS)\n\n resolve({ port: addr.port, cleanup })\n })\n\n server.on('error', (err) => {\n reject(err)\n })\n })\n}\n\nexport function registerAuthCommands(program: Command): void {\n program\n .command('login')\n .description('Login via browser and store credentials')\n .action(async () => {\n const state = randomBytes(32).toString('hex')\n\n try {\n const { port } = await startAuthServer({\n state,\n saveFn: (creds) => {\n saveCredentials(creds)\n console.log(pc.dim(`Credentials saved to ${getCredentialsPath()}`))\n },\n })\n\n const params = new URLSearchParams({ port: String(port), state })\n const loginUrl = `${WEB_URL}/cli-auth?${params.toString()}`\n\n console.log(pc.dim('Opening browser for login...'))\n console.log(pc.dim(`If the browser does not open, visit:\\n${loginUrl}`))\n openBrowser(loginUrl)\n } catch (err) {\n console.error(\n pc.red(\n `Server error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n )\n process.exit(4)\n }\n })\n\n program\n .command('logout')\n .description('Remove stored credentials')\n .action(() => {\n const deleted = deleteCredentials()\n if (deleted) {\n console.log(pc.green('Logged out. Credentials removed.'))\n } else {\n console.log(pc.dim('No stored credentials found.'))\n }\n })\n\n program\n .command('whoami')\n .description('Show current authentication status')\n .action(() => {\n // Check local credentials first\n const localCreds = loadLocalCredentials()\n const globalCreds = loadCredentials()\n const creds = localCreds || globalCreds\n const isLocal = !!localCreds\n\n if (!creds) {\n console.log(pc.dim('Not logged in. Run \"01 login\" to authenticate.'))\n return\n }\n\n const masked =\n creds.publishableKey.length > 8\n ? creds.publishableKey.slice(0, 4) + '...' + creds.publishableKey.slice(-4)\n : '****'\n\n const scope = isLocal ? pc.cyan(' (local)') : ''\n console.log(`Tenant: ${pc.bold(creds.tenantName)}${scope}`)\n console.log(`Publishable Key: ${pc.dim(masked)}`)\n console.log(`Stored at: ${pc.dim(creds.storedAt)}`)\n console.log(\n `File: ${pc.dim(isLocal ? getLocalCredentialsPath() : getCredentialsPath())}`,\n )\n })\n\n // -------------------------------------------------------------------------\n // tenant subcommands\n // -------------------------------------------------------------------------\n const tenant = program\n .command('tenant')\n .description('Manage tenant switching')\n\n tenant\n .command('list')\n .description('Show cached tenant list')\n .action(() => {\n const tenants = loadTenantList()\n if (!tenants || tenants.length === 0) {\n console.log(pc.dim('No cached tenants. Run \"01 login\" first.'))\n return\n }\n\n // Determine active tenant\n const localCreds = loadLocalCredentials()\n const globalCreds = loadCredentials()\n const activeCreds = localCreds || globalCreds\n const activeId = activeCreds?.tenantId\n const activeName = activeCreds?.tenantName\n\n console.log(pc.bold('Cached tenants:\\n'))\n for (const t of tenants) {\n const active = (activeId ? t.id === activeId : t.name === activeName)\n ? pc.green(' *')\n : ''\n console.log(` ${t.name}${active}`)\n }\n console.log()\n if (activeName) {\n const scope = localCreds ? '(local)' : '(global)'\n console.log(pc.dim(`* active ${scope}`))\n }\n })\n\n tenant\n .command('use <name>')\n .description('Switch to a different tenant via browser')\n .option('--local', 'Save credentials locally in the current project')\n .action(async (name: string, opts: { local?: boolean }) => {\n const tenants = loadTenantList()\n if (!tenants || tenants.length === 0) {\n console.error(pc.red('No cached tenants. Run \"01 login\" first.'))\n process.exit(2)\n }\n\n const match = tenants.find(\n (t) => t.name.toLowerCase() === name.toLowerCase(),\n )\n if (!match) {\n console.error(pc.red(`Tenant \"${name}\" not found in cache.`))\n console.error(\n pc.dim(`Available: ${tenants.map((t) => t.name).join(', ')}`),\n )\n process.exit(3)\n }\n\n const state = randomBytes(32).toString('hex')\n const isLocal = !!opts.local\n\n try {\n const { port } = await startAuthServer({\n state,\n saveFn: (creds) => {\n if (isLocal) {\n saveLocalCredentials(creds)\n console.log(\n pc.dim(`Credentials saved to ${getLocalCredentialsPath()}`),\n )\n } else {\n saveCredentials(creds)\n console.log(\n pc.dim(`Credentials saved to ${getCredentialsPath()}`),\n )\n }\n },\n })\n\n const params = new URLSearchParams({\n port: String(port),\n state,\n tenantId: match.id,\n })\n const loginUrl = `${WEB_URL}/cli-auth?${params.toString()}`\n\n console.log(pc.dim(`Switching to tenant \"${match.name}\"...`))\n console.log(pc.dim(`If the browser does not open, visit:\\n${loginUrl}`))\n openBrowser(loginUrl)\n } catch (err) {\n console.error(\n pc.red(\n `Server error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n )\n process.exit(4)\n }\n })\n}\n","import { Command } from 'commander'\nimport { SERVER_COLLECTIONS } from '@01.software/sdk'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { validateCollection } from '../lib/collections.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerSchemaCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const schema = program\n .command('schema')\n .description('Collection schema introspection')\n\n schema\n .command('list')\n .description('List available collections')\n .action(() => {\n printResult(SERVER_COLLECTIONS, getFormat())\n })\n\n schema\n .command('show <collection>')\n .description('Show collection field schema')\n .action(async (collection: string) => {\n try {\n const col = validateCollection(collection)\n const client = getClient()\n const result = await client.tenant.collectionSchema(col)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport {\n tenantFeatureProgressInputSchema,\n tenantFeatureProgressResponseSchema,\n type TenantFeatureProgressResponse,\n} from '@01.software/contracts'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseWithSchema } from '../lib/parse.js'\n\nfunction flattenProgress(progress: TenantFeatureProgressResponse) {\n return progress.groups.flatMap((group) =>\n group.items.map((item) => ({\n group: group.title,\n item: item.title,\n state: item.state,\n severity: item.severity,\n summary: item.summary,\n })),\n )\n}\n\nexport function registerFeatureCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const feature = program\n .command('feature')\n .description('Feature implementation progress checks')\n\n feature\n .command('check <feature>')\n .description('Check tenant implementation progress for a feature')\n .option('--evidence', 'Include sanitized evidence counts and surface flags')\n .action(async (featureName: string, options: { evidence?: boolean }) => {\n try {\n const input = parseWithSchema(\n {\n feature: featureName,\n includeEvidence: Boolean(options.evidence),\n },\n 'feature',\n tenantFeatureProgressInputSchema,\n )\n const client = getClient()\n const result = tenantFeatureProgressResponseSchema.parse(\n await client.tenant.featureProgress(input),\n )\n const format = getFormat()\n printResult(\n format === 'table' ? flattenProgress(result) : result,\n format,\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n}\n","import { Command, type CommanderError } from 'commander'\nimport { SERVER_COLLECTIONS } from '@01.software/sdk'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { isAgentPlanCollection } from '../lib/agent-plan-allowlist.js'\nimport { exitWithAgentError, printAgentSuccess } from '../lib/agent-output.js'\nimport {\n parseSelect,\n validateCollection,\n type CliCollection,\n} from '../lib/collections.js'\nimport { registerAgentPlanCommands } from './agent-plan.js'\n\nconst AGENT_PROTOCOL_VERSION = '1'\n\ntype AgentReadOperation = 'query' | 'get'\ntype AgentPlanOperationName = 'plan:create' | 'plan:update' | 'plan:delete'\ntype AgentOperation = AgentReadOperation | AgentPlanOperationName\n\ntype AgentFieldName = 'id' | 'createdAt' | 'updatedAt'\n\ninterface AgentFieldMetadata {\n type: 'string'\n queryable: boolean\n}\n\ntype AgentFieldMap = Record<AgentFieldName, AgentFieldMetadata>\n\nexport interface AgentManifest {\n version: typeof AGENT_PROTOCOL_VERSION\n collections: Record<\n CliCollection,\n {\n operations: readonly AgentOperation[]\n fields: AgentFieldMap\n }\n >\n}\n\nfunction buildStableAgentFields(): AgentFieldMap {\n return {\n id: { type: 'string', queryable: true },\n createdAt: { type: 'string', queryable: true },\n updatedAt: { type: 'string', queryable: true },\n }\n}\n\nfunction invalidInput(message: string, field: string, value?: unknown): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: 'invalid_argument',\n field,\n detail: { message, value, field },\n })\n return error\n}\n\nfunction parsePositiveInteger(\n value: string | undefined,\n field: 'limit' | 'page',\n): number | undefined {\n if (value == null) return undefined\n if (/^[1-9]\\d*$/.test(value)) return Number(value)\n throw invalidInput(`--${field} must be a positive integer`, field, value)\n}\n\nfunction handleCommanderError(error: CommanderError): never {\n if (error.code === 'commander.helpDisplayed') {\n process.exit(error.exitCode)\n }\n\n exitWithAgentError(invalidInput(error.message, 'command'))\n}\n\nfunction configureAgentParser(command: Command): Command {\n command.configureOutput({\n writeErr: () => {},\n writeOut: (str) => {\n process.stdout.write(str)\n },\n })\n command.exitOverride(handleCommanderError)\n return command\n}\n\nfunction parseWhere(\n value: string | undefined,\n): Record<string, unknown> | undefined {\n if (value == null) return undefined\n\n try {\n const parsed: unknown = JSON.parse(value)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>\n }\n } catch {\n throw invalidInput('--where must be a JSON object', 'where', value)\n }\n\n throw invalidInput('--where must be a JSON object', 'where', value)\n}\n\nconst AGENT_READ_OPERATIONS = [\n 'query',\n 'get',\n] as const satisfies readonly AgentReadOperation[]\nconst AGENT_PLAN_OPERATIONS = [\n 'plan:create',\n 'plan:update',\n 'plan:delete',\n] as const satisfies readonly AgentPlanOperationName[]\n\nexport function buildAgentManifest(): AgentManifest {\n const collections = {} as AgentManifest['collections']\n for (const collection of SERVER_COLLECTIONS) {\n const operations: AgentOperation[] = isAgentPlanCollection(collection)\n ? [...AGENT_READ_OPERATIONS, ...AGENT_PLAN_OPERATIONS]\n : [...AGENT_READ_OPERATIONS]\n collections[collection] = {\n operations,\n fields: buildStableAgentFields(),\n }\n }\n\n return {\n version: AGENT_PROTOCOL_VERSION,\n collections,\n }\n}\n\nfunction validateAgentCollection(collection: string): CliCollection {\n try {\n return validateCollection(collection)\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : `Unknown collection \"${collection}\".`\n throw invalidInput(message, 'collection', collection)\n }\n}\n\nexport function registerAgentCommands(\n program: Command,\n getClient: () => ResolvedClient,\n): void {\n const agent = configureAgentParser(\n program\n .command('agent')\n .description('Machine-stable CLI namespace for coding agents')\n .addHelpText(\n 'after',\n '\\nContract: docs/agent-cli-contract.md\\nJSON only on stdout; no TTY effects.',\n ),\n )\n\n configureAgentParser(\n agent\n .command('manifest')\n .description('Print the Agent CLI protocol manifest')\n .option('--pretty', 'Print 2-space indented JSON')\n .action((opts: { pretty?: boolean }) => {\n printAgentSuccess(buildAgentManifest(), {\n pretty: Boolean(opts.pretty),\n })\n }),\n )\n\n configureAgentParser(\n agent\n .command('query <collection>')\n .description('Query documents from a collection')\n .option('--where <json>', 'Filter conditions as a JSON object')\n .option('--limit <n>', 'Max results')\n .option('--page <n>', 'Page number')\n .option('--sort <field>', 'Sort field; prefix with - for descending')\n .option('--select <fields>', 'Comma-separated fields to select')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n opts: {\n where?: string\n limit?: string\n page?: string\n sort?: string\n select?: string\n pretty?: boolean\n },\n ) => {\n try {\n const col = validateAgentCollection(collection)\n const options: Record<string, unknown> = {}\n const where = parseWhere(opts.where)\n const limit = parsePositiveInteger(opts.limit, 'limit')\n const page = parsePositiveInteger(opts.page, 'page')\n\n if (where) options.where = where\n if (limit != null) options.limit = limit\n if (page != null) options.page = page\n if (opts.sort) options.sort = opts.sort\n if (opts.select) options.select = parseSelect(opts.select)\n\n const client = getClient()\n const result = await client.collections.from(col).find(options)\n printAgentSuccess(result, { pretty: Boolean(opts.pretty) })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n agent\n .command('get <collection> [id]')\n .description('Get a document by ID')\n .option('--select <fields>', 'Comma-separated fields to select')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n id: string | undefined,\n opts: { select?: string; pretty?: boolean },\n ) => {\n try {\n const col = validateAgentCollection(collection)\n if (!id) {\n throw invalidInput('Missing required argument: id', 'id')\n }\n\n const options: Record<string, unknown> = {}\n if (opts.select) options.select = parseSelect(opts.select)\n\n const client = getClient()\n const result = await client.collections\n .from(col)\n .findById(id, options)\n printAgentSuccess(result, { pretty: Boolean(opts.pretty) })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n registerAgentPlanCommands(agent, getClient)\n}\n","import { classifyError } from './admin-error.js'\n\nexport type AgentErrorCode =\n | 'INVALID_INPUT'\n | 'AUTH_FAILED'\n | 'NOT_FOUND'\n | 'INTERNAL'\n | 'PLAN_EXPIRED'\n | 'PLAN_MISMATCH'\n | 'PLAN_STALE'\n | 'UNSUPPORTED_OPERATION'\n\nconst PLAN_AGENT_ERROR_CODES: ReadonlySet<AgentErrorCode> = new Set([\n 'PLAN_EXPIRED',\n 'PLAN_MISMATCH',\n 'PLAN_STALE',\n 'UNSUPPORTED_OPERATION',\n])\n\nexport function agentPlanError(\n code:\n | 'PLAN_EXPIRED'\n | 'PLAN_MISMATCH'\n | 'PLAN_STALE'\n | 'UNSUPPORTED_OPERATION'\n | 'INVALID_INPUT',\n message: string,\n): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: code.toLowerCase(),\n agentCode: code,\n detail: { message, agentCode: code },\n })\n return error\n}\n\nexport interface AgentErrorEnvelope {\n error: {\n code: AgentErrorCode\n message: string\n }\n}\n\nexport interface AgentPrintOptions {\n pretty?: boolean\n}\n\nfunction stringifyAgentJson(\n data: unknown,\n options: AgentPrintOptions = {},\n): string {\n return options.pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data)\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : null\n}\n\nfunction errorMessage(error: unknown): string {\n const raw = asRecord(error)\n if (raw) {\n if (typeof raw.message === 'string' && raw.message.length > 0) {\n return raw.message\n }\n if (\n raw.detail &&\n typeof raw.detail === 'object' &&\n typeof (raw.detail as Record<string, unknown>).message === 'string'\n ) {\n return String((raw.detail as Record<string, unknown>).message)\n }\n }\n if (error instanceof Error && error.message.length > 0) {\n return error.message\n }\n if (typeof error === 'string' && error.length > 0) {\n return error\n }\n return 'Internal error'\n}\n\nfunction isRawNotFound(error: unknown): boolean {\n const raw = asRecord(error)\n return (\n raw?.status === 404 ||\n raw?.code === 'not_found' ||\n raw?.name === 'GoneError'\n )\n}\n\nexport function agentErrorExitCode(code: AgentErrorCode): number {\n switch (code) {\n case 'INVALID_INPUT':\n case 'PLAN_EXPIRED':\n case 'PLAN_MISMATCH':\n case 'PLAN_STALE':\n case 'UNSUPPORTED_OPERATION':\n return 2\n case 'AUTH_FAILED':\n return 3\n case 'NOT_FOUND':\n return 4\n case 'INTERNAL':\n return 1\n }\n}\n\nexport function classifyAgentError(error: unknown): AgentErrorEnvelope {\n const raw = asRecord(error)\n const message = errorMessage(error)\n const detail = raw?.detail\n const detailRecord =\n detail && typeof detail === 'object'\n ? (detail as Record<string, unknown>)\n : null\n const agentCode = raw?.agentCode ?? detailRecord?.agentCode\n if (\n typeof agentCode === 'string' &&\n PLAN_AGENT_ERROR_CODES.has(agentCode as AgentErrorCode)\n ) {\n return { error: { code: agentCode as AgentErrorCode, message } }\n }\n\n const adminError = classifyError(error)\n\n if (isRawNotFound(error) || adminError.code === 'not_found') {\n return { error: { code: 'NOT_FOUND', message } }\n }\n\n if (adminError.type === 'permission') {\n return { error: { code: 'AUTH_FAILED', message } }\n }\n\n if (adminError.type === 'validation' && adminError.code !== 'unknown') {\n return { error: { code: 'INVALID_INPUT', message } }\n }\n\n return { error: { code: 'INTERNAL', message } }\n}\n\nexport function printAgentSuccess(\n data: unknown,\n options: AgentPrintOptions = {},\n): void {\n console.log(stringifyAgentJson(data, options))\n}\n\nexport function printAgentError(\n error: unknown,\n options: AgentPrintOptions = {},\n): AgentErrorEnvelope {\n const envelope = classifyAgentError(error)\n console.log(stringifyAgentJson(envelope, options))\n return envelope\n}\n\nexport function exitWithAgentError(\n error: unknown,\n options: AgentPrintOptions = {},\n): never {\n const envelope = printAgentError(error, options)\n process.exit(agentErrorExitCode(envelope.error.code))\n}\n","import { agentPlanError } from './agent-output.js'\n\nexport const AGENT_PLAN_COLLECTIONS = [\n 'articles',\n 'article-categories',\n 'article-tags',\n 'links',\n 'link-categories',\n 'link-tags',\n] as const\n\nexport type AgentPlanCollection = (typeof AGENT_PLAN_COLLECTIONS)[number]\nexport type AgentPlanOperation = 'create' | 'update' | 'delete'\n\nconst AGENT_PLAN_COLLECTION_SET = new Set<string>(AGENT_PLAN_COLLECTIONS)\n\nexport function isAgentPlanCollection(\n collection: string,\n): collection is AgentPlanCollection {\n return AGENT_PLAN_COLLECTION_SET.has(collection)\n}\n\nexport function assertAgentPlanCollection(collection: string): AgentPlanCollection {\n if (isAgentPlanCollection(collection)) {\n return collection\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Collection \"${collection}\" is not supported for agent plan mutations.`,\n )\n}\n\nexport function assertAgentPlanOperation(\n operation: string,\n): AgentPlanOperation {\n if (operation === 'create' || operation === 'update' || operation === 'delete') {\n return operation\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Operation \"${operation}\" is not supported for agent plan mutations.`,\n )\n}\n","import { createHash } from 'node:crypto'\n\nexport function buildAuthContextFingerprint(input: {\n publishableKey: string\n secretKey: string\n apiUrl?: string\n tenantId?: string\n}): string {\n const apiUrl =\n input.apiUrl ??\n process.env.SOFTWARE_API_URL ??\n process.env.NEXT_PUBLIC_SOFTWARE_API_URL ??\n ''\n const tenantId = input.tenantId ?? process.env.SOFTWARE_TENANT_ID ?? ''\n const secretDigest = createHash('sha256').update(input.secretKey).digest('hex')\n const material = [input.publishableKey, secretDigest, apiUrl, tenantId].join('\\n')\n return createHash('sha256').update(material).digest('hex')\n}\n","import { mkdir, open, readFile, unlink, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport {\n isAgentPlanCollection,\n type AgentPlanCollection,\n type AgentPlanOperation,\n} from './agent-plan-allowlist.js'\nimport { hashAgentPlanEnvelope } from './agent-plan-hash.js'\nimport { assertValidPlanId, safePlanPath } from './agent-plan-id.js'\nimport { agentPlanError } from './agent-output.js'\n\nexport const AGENT_PLAN_TTL_MS = 15 * 60 * 1000\n\nexport type AgentPlanStatus = 'pending' | 'claimed' | 'consumed'\n\nexport interface StoredAgentPlan {\n planId: string\n planHash: string\n operation: AgentPlanOperation\n collection: AgentPlanCollection\n documentId?: string\n payload?: Record<string, unknown>\n baseUpdatedAt?: string\n authFingerprint: string\n createdAt: string\n expiresAt: string\n status: AgentPlanStatus\n}\n\nexport function resolveAgentPlanDir(): string {\n const override = process.env.SOFTWARE_AGENT_PLAN_DIR?.trim()\n if (override) {\n return override\n }\n return join(homedir(), '.01software', 'agent-plans')\n}\n\nfunction parseExpiresAtMs(expiresAt: string): number {\n const ms = Date.parse(expiresAt)\n if (!Number.isFinite(ms)) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has invalid expiresAt.')\n }\n return ms\n}\n\nfunction parseStoredAgentPlan(raw: unknown, planId: string): StoredAgentPlan {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan is corrupted.')\n }\n const record = raw as Record<string, unknown>\n if (record.planId !== planId) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan id does not match token.')\n }\n if (\n typeof record.planHash !== 'string' ||\n typeof record.operation !== 'string' ||\n typeof record.collection !== 'string' ||\n typeof record.authFingerprint !== 'string' ||\n typeof record.createdAt !== 'string' ||\n typeof record.expiresAt !== 'string' ||\n typeof record.status !== 'string'\n ) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan is missing required fields.')\n }\n if (\n record.status !== 'pending' &&\n record.status !== 'claimed' &&\n record.status !== 'consumed'\n ) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has invalid status.')\n }\n\n if (!isAgentPlanCollection(record.collection)) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has unsupported collection.')\n }\n const collection = record.collection\n const operation = record.operation\n if (operation !== 'create' && operation !== 'update' && operation !== 'delete') {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has invalid operation.')\n }\n\n const payload =\n record.payload == null\n ? undefined\n : typeof record.payload === 'object' && !Array.isArray(record.payload)\n ? (record.payload as Record<string, unknown>)\n : (() => {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan payload is invalid.')\n })()\n\n const documentId =\n record.documentId == null\n ? undefined\n : typeof record.documentId === 'string'\n ? record.documentId\n : (() => {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan documentId is invalid.')\n })()\n\n const baseUpdatedAt =\n record.baseUpdatedAt == null\n ? undefined\n : typeof record.baseUpdatedAt === 'string'\n ? record.baseUpdatedAt\n : (() => {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan baseUpdatedAt is invalid.')\n })()\n\n return {\n planId,\n planHash: record.planHash,\n operation,\n collection,\n documentId,\n payload,\n baseUpdatedAt,\n authFingerprint: record.authFingerprint,\n createdAt: record.createdAt,\n expiresAt: record.expiresAt,\n status: record.status,\n }\n}\n\nexport function assertStoredPlanHashMatches(plan: StoredAgentPlan): void {\n const expected = hashAgentPlanEnvelope({\n operation: plan.operation,\n collection: plan.collection,\n documentId: plan.documentId,\n payload: plan.payload,\n })\n if (plan.planHash !== expected) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan hash does not match plan contents.')\n }\n}\n\nfunction assertPlanNotExpired(plan: StoredAgentPlan): void {\n if (Date.now() > parseExpiresAtMs(plan.expiresAt)) {\n throw agentPlanError('PLAN_EXPIRED', 'Plan expired.')\n }\n}\n\nasync function readAgentPlanFile(\n planDir: string,\n planId: string,\n): Promise<StoredAgentPlan> {\n assertValidPlanId(planId)\n let raw: string\n try {\n raw = await readFile(safePlanPath(planDir, planId), 'utf8')\n } catch {\n throw agentPlanError('PLAN_MISMATCH', 'Plan not found.')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan is corrupted.')\n }\n\n return parseStoredAgentPlan(parsed, planId)\n}\n\nasync function writeAgentPlanFile(\n planDir: string,\n plan: StoredAgentPlan,\n): Promise<void> {\n await writeFile(safePlanPath(planDir, plan.planId), JSON.stringify(plan), {\n encoding: 'utf8',\n mode: 0o600,\n })\n}\n\nexport async function writeAgentPlan(input: {\n planDir: string\n record: Omit<StoredAgentPlan, 'planId' | 'status'> & { planId?: string }\n}): Promise<StoredAgentPlan> {\n await mkdir(input.planDir, { recursive: true, mode: 0o700 })\n const planId = input.record.planId ?? randomUUID()\n assertValidPlanId(planId)\n const plan: StoredAgentPlan = {\n ...input.record,\n planId,\n status: 'pending',\n }\n assertStoredPlanHashMatches(plan)\n await writeAgentPlanFile(input.planDir, plan)\n return plan\n}\n\nexport async function claimAgentPlan(input: {\n planDir: string\n planId: string\n planHash: string\n authFingerprint: string\n}): Promise<StoredAgentPlan> {\n assertValidPlanId(input.planId)\n const planPath = safePlanPath(input.planDir, input.planId)\n const lockPath = `${planPath}.lock`\n let lockHandle: Awaited<ReturnType<typeof open>> | undefined\n\n try {\n lockHandle = await open(lockPath, 'wx', 0o600)\n } catch {\n throw agentPlanError('PLAN_MISMATCH', 'Plan was already claimed or consumed.')\n }\n\n try {\n const plan = await readAgentPlanFile(input.planDir, input.planId)\n assertPlanNotExpired(plan)\n assertStoredPlanHashMatches(plan)\n\n if (plan.planHash !== input.planHash) {\n throw agentPlanError('PLAN_MISMATCH', 'Plan hash does not match stored plan.')\n }\n\n if (plan.authFingerprint !== input.authFingerprint) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Plan auth context does not match current credentials.',\n )\n }\n\n if (plan.status !== 'pending') {\n throw agentPlanError('PLAN_MISMATCH', 'Plan was already claimed or consumed.')\n }\n\n const claimed: StoredAgentPlan = { ...plan, status: 'claimed' }\n await writeAgentPlanFile(input.planDir, claimed)\n return claimed\n } finally {\n if (lockHandle) {\n await lockHandle.close().catch(() => {})\n }\n await unlink(lockPath).catch(() => {})\n }\n}\n\nexport async function releaseAgentPlanClaim(input: {\n planDir: string\n planId: string\n}): Promise<void> {\n const plan = await readAgentPlanFile(input.planDir, input.planId)\n if (plan.status !== 'claimed') {\n return\n }\n await writeAgentPlanFile(input.planDir, { ...plan, status: 'pending' })\n}\n\nexport async function markAgentPlanConsumed(input: {\n planDir: string\n planId: string\n}): Promise<void> {\n const plan = await readAgentPlanFile(input.planDir, input.planId)\n await writeAgentPlanFile(input.planDir, { ...plan, status: 'consumed' })\n}\n","import { createHash } from 'node:crypto'\nimport type {\n AgentPlanCollection,\n AgentPlanOperation,\n} from './agent-plan-allowlist.js'\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortKeys)\n }\n if (value && typeof value === 'object') {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = sortKeys((value as Record<string, unknown>)[key])\n return acc\n }, {})\n }\n return value\n}\n\nexport function hashPlanPayload(payload: unknown): string {\n const canonical = JSON.stringify(sortKeys(payload))\n return createHash('sha256').update(canonical).digest('hex')\n}\n\nexport interface AgentPlanHashInput {\n operation: AgentPlanOperation\n collection: AgentPlanCollection\n documentId?: string\n payload?: Record<string, unknown>\n}\n\nexport function hashAgentPlanEnvelope(input: AgentPlanHashInput): string {\n return hashPlanPayload({\n operation: input.operation,\n collection: input.collection,\n documentId: input.documentId,\n payload: input.payload,\n })\n}\n","import { resolve, sep } from 'node:path'\nimport { agentPlanError } from './agent-output.js'\n\nconst PLAN_ID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\nexport function assertValidPlanId(planId: string): void {\n if (!PLAN_ID_PATTERN.test(planId)) {\n throw agentPlanError('INVALID_INPUT', 'Invalid plan token.')\n }\n}\n\nexport function safePlanPath(planDir: string, planId: string): string {\n assertValidPlanId(planId)\n const resolvedDir = resolve(planDir)\n const resolvedPath = resolve(resolvedDir, `${planId}.json`)\n if (\n resolvedPath !== resolvedDir &&\n !resolvedPath.startsWith(`${resolvedDir}${sep}`)\n ) {\n throw agentPlanError('INVALID_INPUT', 'Invalid plan token.')\n }\n return resolvedPath\n}\n","import type { AgentPlanOperation } from './agent-plan-allowlist.js'\nimport { agentPlanError } from './agent-output.js'\n\nexport function readDocumentUpdatedAt(doc: unknown): string | undefined {\n if (!doc || typeof doc !== 'object') {\n return undefined\n }\n const updatedAt = (doc as Record<string, unknown>).updatedAt\n return typeof updatedAt === 'string' && updatedAt.length > 0\n ? updatedAt\n : undefined\n}\n\nexport function assertPlanBaseUpdatedAt(\n operation: AgentPlanOperation,\n baseUpdatedAt: string | undefined,\n): void {\n if (operation === 'create') {\n return\n }\n if (!baseUpdatedAt) {\n throw agentPlanError(\n 'INVALID_INPUT',\n 'Document is missing updatedAt; cannot plan update or delete.',\n )\n }\n}\n\nexport async function assertPlanNotStale(input: {\n operation: AgentPlanOperation\n baseUpdatedAt?: string\n currentUpdatedAt?: string\n}): Promise<void> {\n if (input.operation === 'create') {\n return\n }\n if (!input.baseUpdatedAt || !input.currentUpdatedAt) {\n throw agentPlanError(\n 'PLAN_STALE',\n 'Document is missing updatedAt for stale check.',\n )\n }\n if (input.baseUpdatedAt !== input.currentUpdatedAt) {\n throw agentPlanError(\n 'PLAN_STALE',\n 'Document changed since the plan was created.',\n )\n }\n}\n","import type { ResolvedClient } from './client.js'\nimport { agentPlanError } from './agent-output.js'\nimport type { StoredAgentPlan } from './agent-plan-store.js'\nimport {\n markAgentPlanConsumed,\n resolveAgentPlanDir,\n} from './agent-plan-store.js'\nimport {\n assertPlanNotStale,\n readDocumentUpdatedAt,\n} from './agent-plan-stale.js'\n\nexport async function executeAgentPlanMutation(\n client: ResolvedClient,\n plan: StoredAgentPlan,\n): Promise<unknown> {\n const collection = client.collections.from(plan.collection)\n\n if (plan.operation === 'create') {\n const response = await collection.create(plan.payload ?? {})\n return response.doc\n }\n\n if (!plan.documentId) {\n throw agentPlanError('PLAN_MISMATCH', 'Plan is missing document id.')\n }\n\n if (plan.operation === 'update') {\n const current = await collection.findById(plan.documentId)\n await assertPlanNotStale({\n operation: plan.operation,\n baseUpdatedAt: plan.baseUpdatedAt,\n currentUpdatedAt: readDocumentUpdatedAt(current),\n })\n const response = await collection.update(plan.documentId, plan.payload ?? {})\n return response.doc\n }\n\n const current = await collection.findById(plan.documentId)\n await assertPlanNotStale({\n operation: plan.operation,\n baseUpdatedAt: plan.baseUpdatedAt,\n currentUpdatedAt: readDocumentUpdatedAt(current),\n })\n return collection.remove(plan.documentId)\n}\n\nexport async function finalizeAgentPlan(plan: StoredAgentPlan): Promise<void> {\n await markAgentPlanConsumed({\n planDir: resolveAgentPlanDir(),\n planId: plan.planId,\n })\n}\n","import { readFileSync } from 'node:fs'\nimport { stdin } from 'node:process'\nimport { agentPlanError } from './agent-output.js'\n\nasync function readStdinUtf8(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n return Buffer.concat(chunks).toString('utf8')\n}\n\nexport async function readAgentPlanPayload(opts: {\n dataStdin?: boolean\n dataFile?: string\n}): Promise<Record<string, unknown>> {\n const sourceCount = [opts.dataStdin, opts.dataFile].filter(Boolean).length\n if (sourceCount !== 1) {\n throw agentPlanError(\n 'INVALID_INPUT',\n 'Exactly one of --data-stdin or --data-file is required.',\n )\n }\n\n let raw: string\n try {\n raw = opts.dataStdin\n ? await readStdinUtf8()\n : readFileSync(opts.dataFile!, 'utf8')\n } catch {\n throw agentPlanError(\n 'INVALID_INPUT',\n 'Mutation data file could not be read.',\n )\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw agentPlanError('INVALID_INPUT', 'Mutation data must be valid JSON.')\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw agentPlanError('INVALID_INPUT', 'Mutation data must be a JSON object.')\n }\n\n return parsed as Record<string, unknown>\n}\n","import { agentPlanError } from './agent-output.js'\n\nconst SECRET_KEY =\n /(?:^|_)(?:secret|password|token|api[_-]?key|private[_-]?key|credential)(?:$|_)/i\n\nfunction isSecretFieldName(key: string): boolean {\n if (SECRET_KEY.test(key)) {\n return true\n }\n const snake = key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase()\n return SECRET_KEY.test(snake)\n}\n\nexport function assertNoSecretFields(value: unknown, path = ''): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n assertNoSecretFields(item, `${path}[${index}]`)\n })\n return\n }\n\n if (!value || typeof value !== 'object') {\n return\n }\n\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n const fieldPath = path ? `${path}.${key}` : key\n if (isSecretFieldName(key)) {\n throw agentPlanError(\n 'INVALID_INPUT',\n `Secret-looking field \"${fieldPath}\" is not allowed in agent mutation payloads.`,\n )\n }\n assertNoSecretFields(child, fieldPath)\n }\n}\n","import { assertValidPlanId } from './agent-plan-id.js'\nimport { agentPlanError } from './agent-output.js'\n\nexport interface AgentPlanToken {\n planId: string\n planHash: string\n expiresAt: string\n}\n\nexport function encodePlanToken(token: AgentPlanToken): string {\n return Buffer.from(JSON.stringify(token), 'utf8').toString('base64url')\n}\n\nexport function decodePlanToken(raw: string): AgentPlanToken {\n try {\n const parsed: unknown = JSON.parse(\n Buffer.from(raw, 'base64url').toString('utf8'),\n )\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('invalid token')\n }\n const record = parsed as Record<string, unknown>\n if (\n typeof record.planId !== 'string' ||\n typeof record.planHash !== 'string' ||\n typeof record.expiresAt !== 'string'\n ) {\n throw new Error('invalid token fields')\n }\n assertValidPlanId(record.planId)\n return {\n planId: record.planId,\n planHash: record.planHash,\n expiresAt: record.expiresAt,\n }\n } catch {\n throw agentPlanError('INVALID_INPUT', 'Invalid plan token.')\n }\n}\n\nexport function buildConfirmCommand(planToken: string, planHash: string): string {\n return `01 agent confirm ${planToken} --hash ${planHash}`\n}\n","import { Command, type CommanderError } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport {\n assertAgentPlanCollection,\n type AgentPlanOperation,\n} from '../lib/agent-plan-allowlist.js'\nimport { buildAuthContextFingerprint } from '../lib/agent-plan-auth.js'\nimport {\n executeAgentPlanMutation,\n finalizeAgentPlan,\n} from '../lib/agent-plan-confirm.js'\nimport { hashAgentPlanEnvelope } from '../lib/agent-plan-hash.js'\nimport { readAgentPlanPayload } from '../lib/agent-plan-payload.js'\nimport { assertNoSecretFields } from '../lib/agent-plan-secrets.js'\nimport {\n AGENT_PLAN_TTL_MS,\n claimAgentPlan,\n releaseAgentPlanClaim,\n resolveAgentPlanDir,\n writeAgentPlan,\n} from '../lib/agent-plan-store.js'\nimport {\n assertPlanBaseUpdatedAt,\n readDocumentUpdatedAt,\n} from '../lib/agent-plan-stale.js'\nimport {\n buildConfirmCommand,\n decodePlanToken,\n encodePlanToken,\n} from '../lib/agent-plan-token.js'\nimport {\n agentPlanError,\n exitWithAgentError,\n printAgentSuccess,\n} from '../lib/agent-output.js'\n\nfunction invalidInput(message: string, field: string): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: 'invalid_argument',\n field,\n detail: { message, field },\n })\n return error\n}\n\nfunction handleCommanderError(error: CommanderError): never {\n if (error.code === 'commander.helpDisplayed') {\n process.exit(error.exitCode)\n }\n exitWithAgentError(invalidInput(error.message, 'command'))\n}\n\nfunction configureAgentParser(command: Command): Command {\n command.configureOutput({\n writeErr: () => {},\n writeOut: (str) => {\n process.stdout.write(str)\n },\n })\n command.exitOverride(handleCommanderError)\n return command\n}\n\nasync function captureBaseUpdatedAt(\n client: ResolvedClient,\n collection: ReturnType<typeof assertAgentPlanCollection>,\n documentId: string,\n): Promise<string | undefined> {\n const doc = await client.collections.from(collection).findById(documentId)\n return readDocumentUpdatedAt(doc)\n}\n\nasync function runPlanAction(input: {\n operation: AgentPlanOperation\n collection: string\n documentId?: string\n dataStdin?: boolean\n dataFile?: string\n pretty?: boolean\n getClient: () => ResolvedClient\n}): Promise<void> {\n const collection = assertAgentPlanCollection(input.collection)\n\n if (input.operation !== 'create' && !input.documentId) {\n throw invalidInput('Missing required argument: id', 'id')\n }\n\n let payload: Record<string, unknown> | undefined\n if (input.operation === 'create' || input.operation === 'update') {\n payload = await readAgentPlanPayload({\n dataStdin: input.dataStdin,\n dataFile: input.dataFile,\n })\n assertNoSecretFields(payload)\n }\n\n const client = input.getClient()\n const authFingerprint = buildAuthContextFingerprint({\n publishableKey: client.publishableKey,\n secretKey: client.secretKey,\n })\n\n let baseUpdatedAt: string | undefined\n if (input.operation !== 'create' && input.documentId) {\n baseUpdatedAt = await captureBaseUpdatedAt(\n client,\n collection,\n input.documentId,\n )\n assertPlanBaseUpdatedAt(input.operation, baseUpdatedAt)\n }\n\n const planHash = hashAgentPlanEnvelope({\n operation: input.operation,\n collection,\n documentId: input.documentId,\n payload,\n })\n\n const createdAt = new Date()\n const expiresAt = new Date(createdAt.getTime() + AGENT_PLAN_TTL_MS)\n\n const stored = await writeAgentPlan({\n planDir: resolveAgentPlanDir(),\n record: {\n planHash,\n operation: input.operation,\n collection,\n documentId: input.documentId,\n payload,\n baseUpdatedAt,\n authFingerprint,\n createdAt: createdAt.toISOString(),\n expiresAt: expiresAt.toISOString(),\n },\n })\n\n const planToken = encodePlanToken({\n planId: stored.planId,\n planHash: stored.planHash,\n expiresAt: stored.expiresAt,\n })\n\n printAgentSuccess(\n {\n planToken,\n planHash: stored.planHash,\n planId: stored.planId,\n expiresAt: stored.expiresAt,\n operation: stored.operation,\n collection: stored.collection,\n documentId: stored.documentId,\n confirmCommand: buildConfirmCommand(planToken, stored.planHash),\n },\n { pretty: Boolean(input.pretty) },\n )\n}\n\nexport function registerAgentPlanCommands(\n agent: Command,\n getClient: () => ResolvedClient,\n): void {\n const plan = configureAgentParser(\n agent.command('plan').description('Plan a mutation without executing'),\n )\n\n configureAgentParser(\n plan\n .command('create <collection>')\n .description('Plan a document create')\n .option('--data-stdin', 'Read mutation JSON from stdin')\n .option('--data-file <path>', 'Read mutation JSON from file')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n ) => {\n try {\n await runPlanAction({\n operation: 'create',\n collection,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n pretty: opts.pretty,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n plan\n .command('update <collection> <id>')\n .description('Plan a document update')\n .option('--data-stdin', 'Read mutation JSON from stdin')\n .option('--data-file <path>', 'Read mutation JSON from file')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n id: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n ) => {\n try {\n await runPlanAction({\n operation: 'update',\n collection,\n documentId: id,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n pretty: opts.pretty,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n plan\n .command('delete <collection> <id>')\n .description('Plan a document delete')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n id: string,\n opts: { pretty?: boolean },\n ) => {\n try {\n await runPlanAction({\n operation: 'delete',\n collection,\n documentId: id,\n pretty: opts.pretty,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n agent\n .command('confirm <planToken>')\n .description('Execute a previously planned mutation')\n .requiredOption('--hash <planHash>', 'Plan hash from plan output')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n planTokenRaw: string,\n opts: { hash: string; pretty?: boolean },\n ) => {\n try {\n const token = decodePlanToken(planTokenRaw)\n if (token.planHash !== opts.hash) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Plan token does not match --hash.',\n )\n }\n\n const client = getClient()\n const authFingerprint = buildAuthContextFingerprint({\n publishableKey: client.publishableKey,\n secretKey: client.secretKey,\n })\n\n const planDir = resolveAgentPlanDir()\n const plan = await claimAgentPlan({\n planDir,\n planId: token.planId,\n planHash: opts.hash,\n authFingerprint,\n })\n\n if (token.planId !== plan.planId) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Plan token does not match stored plan.',\n )\n }\n\n let doc: unknown\n try {\n doc = await executeAgentPlanMutation(client, plan)\n } catch (mutationError) {\n await releaseAgentPlanClaim({\n planDir,\n planId: plan.planId,\n }).catch(() => {})\n throw mutationError\n }\n\n await finalizeAgentPlan(plan)\n\n printAgentSuccess(\n {\n applied: true,\n operation: plan.operation,\n collection: plan.collection,\n id:\n doc && typeof doc === 'object' && 'id' in doc\n ? String((doc as Record<string, unknown>).id)\n : plan.documentId,\n doc,\n },\n { pretty: Boolean(opts.pretty) },\n )\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n}\n"],"mappings":"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","names":["t","readFileSync","readFileSync","program","getClient","getFormat","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","orderStatusSchema","program","getClient","getFormat","order","z","z","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","z","z","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","pc","pc","t","resolve","program","SERVER_COLLECTIONS","program","getClient","getFormat","SERVER_COLLECTIONS","program","getClient","getFormat","SERVER_COLLECTIONS","homedir","join","createHash","join","homedir","current","readFileSync","readFileSync","getClient","plan","invalidInput","handleCommanderError","configureAgentParser","SERVER_COLLECTIONS","program","getClient","require"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/client.ts","../src/lib/credentials.ts","../src/lib/output.ts","../../errors/src/admin-error.ts","../src/lib/admin-error.ts","../src/lib/i18n.ts","../src/commands/crud.ts","../src/lib/collections.ts","../src/lib/parse.ts","../../contracts/src/tenant/index.ts","../../contracts/src/ecommerce/index.ts","../../contracts/src/ecommerce/product-upsert.ts","../src/commands/order.ts","../src/commands/return.ts","../src/commands/cart.ts","../src/commands/stock.ts","../src/commands/transaction.ts","../src/commands/product.ts","../src/commands/discount.ts","../src/commands/shipping.ts","../src/commands/auth.ts","../src/commands/schema.ts","../src/commands/feature.ts","../src/commands/agent.ts","../src/lib/agent-output.ts","../src/lib/agent-plan-allowlist.ts","../src/lib/agent-plan-auth.ts","../src/lib/agent-plan-store.ts","../src/lib/agent-plan-hash.ts","../src/lib/agent-plan-id.ts","../src/lib/agent-plan-stale.ts","../src/lib/agent-plan-confirm.ts","../src/lib/agent-plan-payload.ts","../src/lib/agent-plan-secrets.ts","../src/lib/agent-plan-token.ts","../src/commands/agent-plan.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport { Command } from 'commander'\nimport { resolveClient, resolveClientOrThrow } from './lib/client.js'\nimport { exitWithError } from './lib/output.js'\nimport { setLocale, type Locale } from './lib/i18n.js'\nimport { registerCrudCommands } from './commands/crud.js'\nimport { registerOrderCommands } from './commands/order.js'\nimport { registerReturnCommands } from './commands/return.js'\nimport { registerCartCommands } from './commands/cart.js'\nimport { registerStockCommands } from './commands/stock.js'\nimport { registerTransactionCommands } from './commands/transaction.js'\nimport { registerProductCommands } from './commands/product.js'\nimport { registerDiscountCommands } from './commands/discount.js'\nimport { registerShippingCommands } from './commands/shipping.js'\nimport { registerAuthCommands } from './commands/auth.js'\nimport { registerSchemaCommands } from './commands/schema.js'\nimport { registerFeatureCommands } from './commands/feature.js'\nimport { registerAgentCommands } from './commands/agent.js'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\nconst program = new Command()\n\nprogram\n .name('01')\n .description('CLI for the 01.software platform')\n .version(version)\n .option('--api-key <key>', 'API key (sk01_... or pat01_... token)')\n .option('--format <format>', 'Output format: json, table, or ndjson')\n .option('--lang <locale>', 'Force locale (ko or en)')\n\nconst getFormat = () =>\n (program.opts().format ?? process.env.OUTPUT_FORMAT ?? 'json') as string\n\n// Surface the explicit `--lang` flag (when supplied) so the i18n table\n// detection in `lib/i18n.ts` honours it before falling back to LC_ALL/LANG.\n// Also pin OUTPUT_FORMAT into the env so `exitWithError(e)` calls inside\n// command bodies pick up the format without threading it through every\n// call site.\nprogram.hook('preAction', () => {\n const lang = program.opts().lang as string | undefined\n if (lang === 'ko' || lang === 'en') setLocale(lang as Locale)\n process.env.OUTPUT_FORMAT = getFormat()\n})\n\nprocess.on('unhandledRejection', (err) => {\n exitWithError(err, { format: getFormat() })\n})\n\nconst getClient = () =>\n resolveClient(program.opts().apiKey as string | undefined)\nconst getAgentClient = () =>\n resolveClientOrThrow(program.opts().apiKey as string | undefined)\n\nregisterAgentCommands(program, getAgentClient)\nregisterCrudCommands(program, getClient, getFormat)\nregisterOrderCommands(program, getClient, getFormat)\nregisterReturnCommands(program, getClient, getFormat)\nregisterCartCommands(program, getClient, getFormat)\nregisterStockCommands(program, getClient, getFormat)\nregisterTransactionCommands(program, getClient, getFormat)\nregisterProductCommands(program, getClient, getFormat)\nregisterDiscountCommands(program, getClient, getFormat)\nregisterShippingCommands(program, getClient, getFormat)\nregisterSchemaCommands(program, getClient, getFormat)\nregisterFeatureCommands(program, getClient, getFormat)\nregisterAuthCommands(program)\n\nprogram.parse()\n","import {\n ServerCollectionClient,\n ServerCommerceClient,\n TenantIntrospectionApi,\n type TenantIntrospectionClient,\n} from '@01.software/sdk/server'\nimport { loadCredentials, loadLocalCredentials } from './credentials.js'\nimport { exitWithError } from './output.js'\nimport { t } from './i18n.js'\nimport type { AdminError } from './admin-error.js'\n\nexport interface ResolvedClient {\n collections: ServerCollectionClient\n commerce: ServerCommerceClient\n tenant: TenantIntrospectionClient\n publishableKey: string\n secretKey: string\n}\n\ninterface ResolvedCredentials {\n publishableKey: string\n secretKey: string\n}\n\n/**\n * Accepted opaque bearer token prefixes.\n * - `sk01_` = tenant-level API key (created in Console > Settings > API Keys)\n * - `pat01_` = user-level Personal Access Token\n * Hex HMAC secrets from the pre-2026-04 auth system are rejected.\n */\nfunction isValidBearerToken(secret: string): boolean {\n return secret.startsWith('sk01_') || secret.startsWith('pat01_')\n}\n\nfunction credentialError(detail: Record<string, unknown>): AdminError {\n return {\n type: 'permission',\n code: 'credential_invalid',\n detail,\n }\n}\n\n/**\n * Resolve credentials in priority order:\n * 1. `--api-key <token>` flag (overrides secretKey only; publishableKey still\n * comes from env/credentials)\n * 2. `SOFTWARE_PUBLISHABLE_KEY` + `SOFTWARE_SECRET_KEY` env vars\n * 3. Local project credentials (`./01software/credentials.json`)\n * 4. Global user credentials (`~/.01software/credentials.json`)\n */\nfunction resolveClientCredentials(apiKeyFlag?: string): ResolvedCredentials {\n let publishableKey: string | undefined = process.env.SOFTWARE_PUBLISHABLE_KEY\n let secretKey: string | undefined =\n apiKeyFlag ?? process.env.SOFTWARE_SECRET_KEY\n\n if (!publishableKey || !secretKey) {\n const local = loadLocalCredentials()\n if (local) {\n publishableKey = publishableKey ?? local.publishableKey\n secretKey = secretKey ?? local.secretKey\n }\n }\n\n if (!publishableKey || !secretKey) {\n const stored = loadCredentials()\n if (stored) {\n publishableKey = publishableKey ?? stored.publishableKey\n secretKey = secretKey ?? stored.secretKey\n }\n }\n\n if (!publishableKey || !secretKey) {\n throw credentialError({\n message: t('AuthenticationRequired'),\n steps: [t('RunLoginToAuthenticate'), t('PassApiKey'), t('SetEnvVars')],\n })\n }\n\n if (!isValidBearerToken(secretKey)) {\n throw credentialError({\n message: t('InvalidApiKeyFormat'),\n suggestion: t('RetiredHexCredentialsRejected'),\n })\n }\n\n return { publishableKey, secretKey }\n}\n\nexport function resolveClientOrThrow(apiKeyFlag?: string): ResolvedClient {\n const { publishableKey, secretKey } = resolveClientCredentials(apiKeyFlag)\n const serverOptions = { publishableKey, secretKey }\n\n return {\n collections: new ServerCollectionClient(\n publishableKey,\n secretKey,\n undefined,\n undefined,\n undefined,\n ),\n commerce: new ServerCommerceClient(serverOptions),\n tenant: new TenantIntrospectionApi(serverOptions),\n publishableKey,\n secretKey,\n }\n}\n\nexport function resolveClient(apiKeyFlag?: string): ResolvedClient {\n try {\n return resolveClientOrThrow(apiKeyFlag)\n } catch (error) {\n exitWithError(error)\n }\n}\n","import {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n unlinkSync,\n appendFileSync,\n} from 'node:fs'\nimport { join } from 'node:path'\nimport { homedir } from 'node:os'\n\nexport interface StoredCredentials {\n publishableKey: string\n /** Opaque bearer token — tenant API key (sk01_...) or PAT (pat01_...) */\n secretKey: string\n tenantId?: string\n tenantName: string\n storedAt: string\n}\n\nexport interface TenantInfo {\n id: string\n name: string\n}\n\nconst DIR_NAME = '.01software'\nconst FILE_NAME = 'credentials.json'\nconst TENANTS_FILE = 'tenants.json'\n\n// ---------------------------------------------------------------------------\n// Global credentials (~/.01software/credentials.json)\n// ---------------------------------------------------------------------------\n\nexport function getCredentialsPath(): string {\n return join(homedir(), DIR_NAME, FILE_NAME)\n}\n\nexport function loadCredentials(): StoredCredentials | null {\n return loadCredentialsFrom(getCredentialsPath())\n}\n\nexport function saveCredentials(\n creds: Omit<StoredCredentials, 'storedAt'>,\n): void {\n const dir = join(homedir(), DIR_NAME)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n\n const filePath = getCredentialsPath()\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeFileSync(filePath, JSON.stringify(data, null, 2), {\n encoding: 'utf-8',\n mode: 0o600,\n })\n}\n\nexport function deleteCredentials(): boolean {\n const filePath = getCredentialsPath()\n if (!existsSync(filePath)) return false\n\n unlinkSync(filePath)\n return true\n}\n\n// ---------------------------------------------------------------------------\n// Local credentials (./01software/credentials.json)\n// ---------------------------------------------------------------------------\n\nexport function getLocalCredentialsPath(): string {\n return join(process.cwd(), DIR_NAME, FILE_NAME)\n}\n\nexport function loadLocalCredentials(): StoredCredentials | null {\n return loadCredentialsFrom(getLocalCredentialsPath())\n}\n\nexport function saveLocalCredentials(\n creds: Omit<StoredCredentials, 'storedAt'>,\n): void {\n const dir = join(process.cwd(), DIR_NAME)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n\n const filePath = getLocalCredentialsPath()\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeFileSync(filePath, JSON.stringify(data, null, 2), {\n encoding: 'utf-8',\n mode: 0o600,\n })\n\n // Ensure .01software/ is in .gitignore\n ensureGitignore()\n}\n\n// ---------------------------------------------------------------------------\n// Tenant list cache (~/.01software/tenants.json)\n// ---------------------------------------------------------------------------\n\nexport function saveTenantList(tenants: TenantInfo[]): void {\n const dir = join(homedir(), DIR_NAME)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n\n const filePath = join(homedir(), DIR_NAME, TENANTS_FILE)\n writeFileSync(filePath, JSON.stringify(tenants, null, 2), {\n encoding: 'utf-8',\n mode: 0o600,\n })\n}\n\nexport function loadTenantList(): TenantInfo[] | null {\n const filePath = join(homedir(), DIR_NAME, TENANTS_FILE)\n if (!existsSync(filePath)) return null\n\n try {\n const raw = readFileSync(filePath, 'utf-8')\n const data = JSON.parse(raw)\n if (!Array.isArray(data)) return null\n const valid = data.filter(\n (t): t is TenantInfo =>\n typeof t?.id === 'string' && typeof t?.name === 'string',\n )\n return valid.length > 0 ? valid : null\n } catch {\n return null\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction loadCredentialsFrom(filePath: string): StoredCredentials | null {\n if (!existsSync(filePath)) return null\n\n try {\n const raw = readFileSync(filePath, 'utf-8')\n const data = JSON.parse(raw) as StoredCredentials\n if (!data.publishableKey || !data.secretKey) return null\n return data\n } catch {\n return null\n }\n}\n\nfunction ensureGitignore(): void {\n const gitignorePath = join(process.cwd(), '.gitignore')\n const entry = '.01software/'\n\n if (existsSync(gitignorePath)) {\n const content = readFileSync(gitignorePath, 'utf-8')\n if (content.includes(entry)) return\n appendFileSync(gitignorePath, `\\n${entry}\\n`, 'utf-8')\n } else {\n writeFileSync(gitignorePath, `${entry}\\n`, 'utf-8')\n }\n}\n","import pc from 'picocolors'\nimport {\n type AdminError,\n classifyError,\n adminErrorExitCode,\n} from './admin-error.js'\nimport { CLI_I18N_KO, t } from './i18n.js'\n\n// Build a Set of valid i18n keys for fast lookup when localizing AdminError\n// codes. Reused below to choose between localized and fallback rendering.\nconst CLI_I18N_KEYS: readonly string[] = Object.keys(CLI_I18N_KO)\n\nexport function printJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2))\n}\n\nexport function printTable(data: unknown): void {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log(pc.dim(t('Empty')))\n return\n }\n const keys = Object.keys(data[0] as Record<string, unknown>)\n const widths = keys.map((k) =>\n Math.max(\n k.length,\n ...data.map(\n (row) => String((row as Record<string, unknown>)[k] ?? '').length,\n ),\n ),\n )\n\n // Header\n console.log(keys.map((k, i) => k.padEnd(widths[i]!)).join(' '))\n console.log(keys.map((_, i) => '-'.repeat(widths[i]!)).join(' '))\n\n // Rows\n for (const row of data) {\n console.log(\n keys\n .map((k, i) =>\n String((row as Record<string, unknown>)[k] ?? '').padEnd(\n widths[i]!,\n ),\n )\n .join(' '),\n )\n }\n } else if (data && typeof data === 'object') {\n const entries = Object.entries(data as Record<string, unknown>)\n const maxKey = Math.max(...entries.map(([k]) => k.length))\n for (const [key, value] of entries) {\n const display =\n typeof value === 'object' ? JSON.stringify(value) : String(value)\n console.log(`${pc.bold(key.padEnd(maxKey))} ${display}`)\n }\n } else {\n console.log(String(data))\n }\n}\n\nfunction printNdjson(data: unknown): void {\n if (Array.isArray(data)) {\n data.forEach((item) => console.log(JSON.stringify(item)))\n } else if (\n data &&\n typeof data === 'object' &&\n 'docs' in (data as Record<string, unknown>)\n ) {\n const { docs, ...meta } = data as {\n docs: unknown[]\n [key: string]: unknown\n }\n ;(docs as unknown[]).forEach((doc) => console.log(JSON.stringify(doc)))\n if (Object.keys(meta).length > 0)\n console.log(JSON.stringify({ _meta: meta }))\n } else {\n console.log(JSON.stringify(data))\n }\n}\n\nexport function printResult(data: unknown, format: string): void {\n if (format === 'ndjson') {\n printNdjson(data)\n } else if (format === 'table') {\n // For find responses with docs array, print the docs as table\n if (\n data &&\n typeof data === 'object' &&\n 'docs' in (data as Record<string, unknown>)\n ) {\n const resp = data as {\n docs: unknown[]\n totalDocs: number\n page: number\n totalPages: number\n }\n printTable(resp.docs)\n console.log(\n pc.dim(\n `\\n${t('Total', { n: resp.totalDocs })} | ${t('PageOf', {\n page: resp.page,\n total: resp.totalPages,\n })}`,\n ),\n )\n return\n }\n printTable(data)\n } else {\n printJson(data)\n }\n}\n\n/**\n * Map an unknown error → CLI exit code per `docs/packages/cli-exit-codes.md`.\n *\n * Routes through `classifyError()` (the AdminError discriminated union is\n * the canonical source). The SDK-error-name + HTTP-status heuristic lives\n * inside `classifyError` so existing thrown values keep their mapping.\n * The `unknown` code → exit 1 fallback is encoded in\n * `adminErrorExitCode` itself.\n */\nexport function getExitCode(error: unknown): number {\n return adminErrorExitCode(classifyError(error))\n}\n\nexport interface ErrorPrintOptions {\n format?: string\n}\n\n/**\n * Resolve the active output format. The entry point (`index.ts`) sets\n * `process.env.OUTPUT_FORMAT` from `--format` / fallback so command bodies\n * can call `exitWithError(e)` without threading the format through every\n * call site. Explicit `options.format` always wins.\n */\nfunction resolveFormat(options: ErrorPrintOptions): string {\n return options.format ?? process.env.OUTPUT_FORMAT ?? 'json'\n}\n\n/**\n * Render an error to the user. With `--format json` (or\n * `OUTPUT_FORMAT=json`), serialize the AdminError discriminated union to\n * stdout per the contract in `docs/packages/cli-exit-codes.md`. Otherwise\n * print a localized one-line message + supporting metadata to stderr.\n */\nexport function printError(\n error: unknown,\n options: ErrorPrintOptions = {},\n): void {\n const adminError = classifyError(error)\n\n // Per docs/packages/cli-exit-codes.md: ALWAYS emit a one-line human\n // message on stderr before exiting non-zero. Under `--format json` the\n // AdminError JSON is ALSO serialized to stdout so scripts can parse it.\n const knownKey = CLI_I18N_KEYS.includes(adminError.code)\n ? (adminError.code as Parameters<typeof t>[0])\n : null\n const localized = knownKey ? t(knownKey) : null\n const rawErr =\n error && typeof error === 'object'\n ? (error as Record<string, unknown>)\n : null\n const rawMessage =\n rawErr && typeof rawErr.message === 'string' ? rawErr.message : ''\n const stringErr = typeof error === 'string' ? error : ''\n const detailMessage =\n rawErr &&\n rawErr.detail &&\n typeof rawErr.detail === 'object' &&\n typeof (rawErr.detail as Record<string, unknown>).message === 'string'\n ? String((rawErr.detail as Record<string, unknown>).message)\n : ''\n // Headline: prefer the most specific human-readable text on hand —\n // raw `message` (most common SDK shape), then a string-error directly,\n // then `detail.message`, then the localized AdminError-code translation,\n // then the bare code.\n const headline =\n rawMessage || stringErr || detailMessage || localized || adminError.code\n\n console.error(pc.red(`Error: ${headline}`))\n // Surface the raw `code`/`status` (when present and distinct) so callers\n // who throw SDK errors with proprietary codes don't lose them in the\n // human-readable rendering. The AdminError type/code is always emitted\n // — that's the canonical contract.\n if (\n rawErr &&\n typeof rawErr.code === 'string' &&\n rawErr.code !== adminError.code\n ) {\n console.error(pc.dim(`Code: ${rawErr.code}`))\n } else {\n console.error(pc.dim(`Code: ${adminError.code}`))\n }\n if (rawErr && typeof rawErr.status === 'number') {\n console.error(pc.dim(`Status: ${rawErr.status}`))\n }\n console.error(pc.dim(`Type: ${adminError.type}`))\n\n if (\n adminError.type === 'degraded' &&\n typeof adminError.retryAfter === 'number'\n ) {\n console.error(pc.yellow(`Retry after: ${adminError.retryAfter}s`))\n }\n if (rawErr && typeof rawErr.suggestion === 'string') {\n console.error(pc.yellow(rawErr.suggestion))\n }\n\n if (resolveFormat(options) === 'json') {\n console.log(JSON.stringify(adminError))\n }\n}\n\nexport function exitWithError(\n error: unknown,\n options: ErrorPrintOptions = {},\n): never {\n printError(error, options)\n process.exit(getExitCode(error))\n}\n","export type ValidationCode = string\n\nexport type PermissionCode =\n | 'tenant_mismatch'\n | 'account_suspended'\n | 'feature_disabled'\n | 'role_denied'\n | 'credential_invalid'\n | 'pat_tenant_unpinned'\n | 'publishable_key_mismatch'\n | 'scope_denied'\n\nexport type DegradedCode =\n | 'redis_unavailable'\n | 'provider_unavailable'\n | 'rate_limited'\n\nexport type NetworkCode = 'upstream_timeout' | 'upstream_5xx' | 'dns_failure'\n\nexport type AdminErrorCode =\n | PermissionCode\n | DegradedCode\n | NetworkCode\n | ValidationCode\n\nexport type AdminError =\n | {\n type: 'validation'\n code: ValidationCode\n field?: string\n detail?: Record<string, unknown>\n }\n | {\n type: 'permission'\n code: PermissionCode\n detail?: Record<string, unknown>\n }\n | {\n type: 'degraded'\n code: DegradedCode\n retryAfter?: number\n detail?: Record<string, unknown>\n }\n | {\n type: 'network'\n code: NetworkCode\n detail?: Record<string, unknown>\n }\n\nexport const ADMIN_ERROR_CODES = {\n permission: [\n 'tenant_mismatch',\n 'account_suspended',\n 'feature_disabled',\n 'role_denied',\n 'credential_invalid',\n 'pat_tenant_unpinned',\n 'publishable_key_mismatch',\n 'scope_denied',\n ] as const satisfies readonly PermissionCode[],\n degraded: [\n 'redis_unavailable',\n 'provider_unavailable',\n 'rate_limited',\n ] as const satisfies readonly DegradedCode[],\n network: [\n 'upstream_timeout',\n 'upstream_5xx',\n 'dns_failure',\n ] as const satisfies readonly NetworkCode[],\n} as const\n\nconst PERMISSION_CODES = ADMIN_ERROR_CODES.permission\nconst DEGRADED_CODES = ADMIN_ERROR_CODES.degraded\nconst NETWORK_CODES = ADMIN_ERROR_CODES.network\n\nfunction isPermissionCode(code: string): code is PermissionCode {\n return (PERMISSION_CODES as readonly string[]).includes(code)\n}\n\nfunction isDegradedCode(code: string): code is DegradedCode {\n return (DEGRADED_CODES as readonly string[]).includes(code)\n}\n\nfunction isNetworkCode(code: string): code is NetworkCode {\n return (NETWORK_CODES as readonly string[]).includes(code)\n}\n\nexport function isUnknownAdminError(err: AdminError): boolean {\n return err.type === 'validation' && err.code === 'unknown'\n}\n\n/**\n * Shared AdminError classifier for literal codes and explicit validation shapes.\n * Surfaces that need SDK/HTTP heuristics wrap this and handle `unknown` locally.\n */\nexport function classifyAdminError(err: unknown): AdminError {\n if (err && typeof err === 'object') {\n const obj = err as Record<string, unknown>\n\n if (typeof obj.code === 'string') {\n const code = obj.code\n if (isPermissionCode(code)) {\n return { type: 'permission', code }\n }\n if (isDegradedCode(code)) {\n const out: AdminError = { type: 'degraded', code }\n if (typeof obj.retryAfter === 'number') {\n out.retryAfter = obj.retryAfter\n }\n return out\n }\n if (isNetworkCode(code)) {\n return { type: 'network', code }\n }\n }\n\n if (obj.type === 'validation' && typeof obj.code === 'string') {\n const out: AdminError = { type: 'validation', code: obj.code }\n if (typeof obj.field === 'string') out.field = obj.field\n if (obj.detail && typeof obj.detail === 'object') {\n out.detail = obj.detail as Record<string, unknown>\n }\n return out\n }\n }\n\n return {\n type: 'validation',\n code: 'unknown',\n detail: { message: err instanceof Error ? err.message : String(err) },\n }\n}\n","// CLI AdminError surface. Shared taxonomy and core classifier live in\n// `@01.software/errors`. Locale copy stays in `packages/cli/src/lib/i18n.ts`.\n// Drift is enforced by `pnpm verify:i18n-parity`.\n\nimport {\n ADMIN_ERROR_CODES,\n classifyAdminError,\n isUnknownAdminError,\n type AdminError,\n type AdminErrorCode,\n type DegradedCode,\n type NetworkCode,\n type PermissionCode,\n type ValidationCode,\n} from '@01.software/errors'\n\nexport type {\n AdminError,\n AdminErrorCode,\n DegradedCode,\n NetworkCode,\n PermissionCode,\n ValidationCode,\n}\n\nexport { ADMIN_ERROR_CODES }\n\nfunction classifyCliExtensions(err: unknown): AdminError | null {\n if (!err || typeof err !== 'object') return null\n\n const obj = err as Record<string, unknown>\n\n if (obj.code === 'auth_error' || obj.code === 'permission_error') {\n return { type: 'permission', code: 'credential_invalid' }\n }\n\n const name = typeof obj.name === 'string' ? obj.name : undefined\n const status = typeof obj.status === 'number' ? obj.status : undefined\n if (\n name === 'ConfigError' ||\n name === 'AuthError' ||\n name === 'PermissionError' ||\n status === 401 ||\n status === 403\n ) {\n return { type: 'permission', code: 'credential_invalid' }\n }\n if (\n name === 'NetworkError' ||\n name === 'TimeoutError' ||\n status === 408 ||\n status === 503\n ) {\n return { type: 'network', code: 'upstream_timeout' }\n }\n if (name === 'GoneError' || status === 404) {\n return {\n type: 'validation',\n code: 'not_found',\n detail:\n typeof obj.message === 'string' ? { message: obj.message } : undefined,\n }\n }\n if (name === 'UsageLimitError' || status === 429) {\n const out: AdminError = { type: 'degraded', code: 'rate_limited' }\n if (typeof obj.retryAfter === 'number') out.retryAfter = obj.retryAfter\n return out\n }\n if (name === 'ValidationError' || status === 400 || status === 422) {\n return {\n type: 'validation',\n code: 'invalid_argument',\n detail:\n typeof obj.message === 'string' ? { message: obj.message } : undefined,\n }\n }\n\n return null\n}\n\n/**\n * Classify an unknown thrown / rejected value into the AdminError union.\n * Applies shared taxonomy first, then CLI-only SDK/HTTP fallbacks.\n */\nexport function classifyError(err: unknown): AdminError {\n const classified = classifyAdminError(err)\n if (!isUnknownAdminError(classified)) return classified\n return classifyCliExtensions(err) ?? classified\n}\n\n/**\n * Map AdminError → CLI exit code per `docs/packages/cli-exit-codes.md`.\n */\nexport function adminErrorExitCode(err: AdminError): number {\n if (err.code === 'unknown') return 1\n switch (err.type) {\n case 'permission':\n return 2\n case 'validation':\n return err.code === 'not_found' ? 5 : 3\n case 'network':\n return 4\n case 'degraded':\n return err.code === 'rate_limited' ? 6 : 4\n }\n}\n","// CLI i18n table — mirrors `apps/console/src/lib/i18n/admin.ts` AdminError\n// code coverage so a single check (`apps/console/scripts/check-i18n-parity.ts`)\n// can verify the CLI carries every code with both KO and EN translations.\n//\n// Locale resolution:\n// 1. CLI `--lang <ko|en>` (resolved by the entry point and exported via\n// `setLocale`).\n// 2. `LANG` / `LC_ALL` environment variables — anything starting with\n// `ko` (`ko_KR.UTF-8`, `ko-KR`, …) → ko; else en.\n// 3. Default `en`.\n\nexport const CLI_I18N_KO = {\n // CLI-surface microcopy\n AuthenticationRequired: '인증이 필요합니다',\n RunLoginToAuthenticate: '`01 login` 명령으로 브라우저 인증을 진행하거나,',\n PassApiKey: '`--api-key <token>` 옵션을 전달하거나,',\n SetEnvVars:\n '`SOFTWARE_PUBLISHABLE_KEY` / `SOFTWARE_SECRET_KEY` 환경 변수를 설정하세요.',\n InvalidApiKeyFormat:\n 'API 키 형식이 올바르지 않습니다. `sk01_` 또는 `pat01_` 토큰이 필요합니다.',\n RetiredHexCredentialsRejected:\n '이전 hex 자격 증명은 더 이상 허용되지 않습니다 — `01 login`으로 다시 인증하세요.',\n InvalidJsonObject: '`--{{label}}` 인자는 JSON 객체여야 합니다.',\n InvalidJsonArray: '`--{{label}}` 인자는 JSON 배열이어야 합니다.',\n InvalidJsonValue: '`--{{label}}` 인자의 JSON 형식이 올바르지 않습니다: {{value}}',\n Empty: '(없음)',\n Total: '총 {{n}}개',\n PageOf: '{{page}} / {{total}} 페이지',\n\n // AdminError code translations (mirrors apps/console admin.ts).\n tenant_mismatch: '권한이 없는 테넌트',\n account_suspended: '계정이 정지되었습니다',\n feature_disabled: '이 기능이 비활성화되었습니다',\n role_denied: '권한이 부족합니다',\n credential_invalid: '자격 증명이 유효하지 않습니다',\n pat_tenant_unpinned: 'PAT 토큰의 테넌트가 고정되지 않았습니다',\n publishable_key_mismatch: '공개 키가 일치하지 않습니다',\n scope_denied: '범위 권한이 없습니다',\n redis_unavailable: '캐시가 일시적으로 사용 불가합니다',\n provider_unavailable: '외부 공급자가 응답하지 않습니다',\n rate_limited: '요청이 너무 많습니다 — 잠시 후 다시 시도하세요',\n upstream_timeout: '응답 시간이 초과되었습니다',\n upstream_5xx: '외부 서비스 오류',\n dns_failure: '네트워크 연결 오류',\n not_found: '리소스를 찾을 수 없습니다',\n invalid_argument: '인자가 올바르지 않습니다',\n unknown: '알 수 없는 오류',\n} as const\n\nexport type CliI18nKey = keyof typeof CLI_I18N_KO\n\nexport const CLI_I18N_EN: Record<CliI18nKey, string> = {\n AuthenticationRequired: 'Authentication required',\n RunLoginToAuthenticate:\n 'Run `01 login` to authenticate via browser, or',\n PassApiKey: 'pass `--api-key <token>`, or',\n SetEnvVars:\n 'set `SOFTWARE_PUBLISHABLE_KEY` and `SOFTWARE_SECRET_KEY` environment variables.',\n InvalidApiKeyFormat:\n 'Invalid API key format. Expected `sk01_` or `pat01_` token.',\n RetiredHexCredentialsRejected:\n 'Retired hex credentials are no longer accepted — run `01 login` to re-authenticate.',\n InvalidJsonObject: '--{{label}} must be a JSON object.',\n InvalidJsonArray: '--{{label}} must be a JSON array.',\n InvalidJsonValue: 'Invalid JSON for --{{label}}: {{value}}',\n Empty: '(empty)',\n Total: '{{n}} total',\n PageOf: 'page {{page}}/{{total}}',\n\n tenant_mismatch: 'Tenant access denied',\n account_suspended: 'Your account has been suspended',\n feature_disabled: 'This feature is disabled',\n role_denied: 'Insufficient role permissions',\n credential_invalid: 'Invalid credentials',\n pat_tenant_unpinned: 'PAT token tenant is not pinned',\n publishable_key_mismatch: 'Publishable key mismatch',\n scope_denied: 'Scope permission denied',\n redis_unavailable: 'Cache temporarily unavailable',\n provider_unavailable: 'Upstream provider unavailable',\n rate_limited: 'Too many requests — please try again shortly',\n upstream_timeout: 'Upstream request timed out',\n upstream_5xx: 'Upstream service error',\n dns_failure: 'Network connection error',\n not_found: 'Resource not found',\n invalid_argument: 'Invalid argument',\n unknown: 'Unknown error',\n}\n\nexport type Locale = 'ko' | 'en'\n\nlet activeLocale: Locale | null = null\n\nexport function detectLocale(): Locale {\n if (activeLocale) return activeLocale\n const raw =\n process.env.LC_ALL ?? process.env.LANG ?? process.env.LANGUAGE ?? ''\n return raw.toLowerCase().startsWith('ko') ? 'ko' : 'en'\n}\n\nexport function setLocale(locale: Locale | null | undefined): void {\n activeLocale = locale ?? null\n}\n\nexport function t(\n key: CliI18nKey,\n vars?: Record<string, string | number>,\n): string {\n const table = detectLocale() === 'ko' ? CLI_I18N_KO : CLI_I18N_EN\n let s: string = table[key]\n if (vars) {\n for (const [k, v] of Object.entries(vars)) {\n // Use a global regex (escape user-supplied key) instead of\n // String.prototype.replaceAll so we keep working on tsconfig\n // targets older than ES2021. Keys are statically declared above so\n // metacharacter escaping is defense-in-depth.\n const escaped = k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n s = s.replace(new RegExp(`\\\\{\\\\{${escaped}\\\\}\\\\}`, 'g'), String(v))\n }\n }\n return s\n}\n","import { readFileSync } from 'node:fs'\nimport { basename } from 'node:path'\nimport { Command } from 'commander'\nimport type { ApiQueryOptions } from '@01.software/sdk'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { parseSelect, validateCollection } from '../lib/collections.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJson } from '../lib/parse.js'\n\nfunction readFileAsBlob(filePath: string): { blob: Blob; filename: string } {\n const buffer = readFileSync(filePath)\n return { blob: new Blob([buffer]), filename: basename(filePath) }\n}\n\nexport function registerCrudCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n program\n .command('query <collection>')\n .description('Query documents from a collection')\n .option('--where <json>', 'Filter conditions (JSON)')\n .option('--limit <n>', 'Max results', (v: string) => parseInt(v, 10))\n .option('--page <n>', 'Page number', (v: string) => parseInt(v, 10))\n .option('--sort <field>', 'Sort field (prefix with - for descending)')\n .option(\n '--depth <n>',\n 'Relationship depth (0 = no population)',\n (v: string) => parseInt(v, 10),\n )\n .option('--select <fields>', 'Comma-separated fields to select')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const client = getClient()\n const options: Record<string, unknown> = {}\n if (opts.where) options.where = parseJson(opts.where, 'where')\n if (opts.limit) options.limit = opts.limit\n if (opts.page) options.page = opts.page\n if (opts.sort) options.sort = opts.sort\n if (opts.depth != null) options.depth = opts.depth\n if (opts.select) options.select = parseSelect(opts.select)\n const result = await client.collections.from(col).find(options)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('get <collection> <id>')\n .description('Get a document by ID')\n .option(\n '--depth <n>',\n 'Relationship depth (0 = no population)',\n (v: string) => parseInt(v, 10),\n )\n .option('--select <fields>', 'Comma-separated fields to select')\n .action(async (collection: string, id: string, opts) => {\n try {\n const col = validateCollection(collection)\n const client = getClient()\n const options: Record<string, unknown> = {}\n if (opts.depth != null) options.depth = opts.depth\n if (opts.select) options.select = parseSelect(opts.select)\n const result = await client.collections.from(col).findById(id, options)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('create <collection>')\n .description('Create a new document')\n .requiredOption('--data <json>', 'Document data (JSON)')\n .option('--file <path>', 'File to upload (for upload collections)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const data = parseJson(opts.data, 'data')\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'create',\n collection: col,\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n let fileOpts: { file: Blob; filename: string } | undefined\n if (opts.file) {\n const { blob, filename } = readFileAsBlob(opts.file)\n fileOpts = { file: blob, filename }\n }\n const result = await client.collections.from(col).create(data, fileOpts)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('update <collection> <id>')\n .description('Update a document by ID')\n .requiredOption('--data <json>', 'Document data (JSON)')\n .option('--file <path>', 'File to upload (for upload collections)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, id: string, opts) => {\n try {\n const col = validateCollection(collection)\n const data = parseJson(opts.data, 'data')\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'update',\n collection: col,\n id,\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n let fileOpts: { file: Blob; filename: string } | undefined\n if (opts.file) {\n const { blob, filename } = readFileAsBlob(opts.file)\n fileOpts = { file: blob, filename }\n }\n const result = await client.collections\n .from(col)\n .update(id, data, fileOpts)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('delete <collection> <id>')\n .description('Delete a document by ID')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, id: string, opts) => {\n try {\n const col = validateCollection(collection)\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'delete',\n collection: col,\n id,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.collections.from(col).remove(id)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('update-many <collection>')\n .description('Update multiple documents matching a filter')\n .requiredOption('--where <json>', 'Filter conditions (JSON)')\n .requiredOption('--data <json>', 'Update data (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const where = parseJson(opts.where, 'where') as ApiQueryOptions['where']\n const data = parseJson(opts.data, 'data')\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'update-many',\n collection: col,\n where,\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.collections\n .from(col)\n .updateMany(where, data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n program\n .command('delete-many <collection>')\n .description('Delete multiple documents matching a filter')\n .requiredOption('--where <json>', 'Filter conditions (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (collection: string, opts) => {\n try {\n const col = validateCollection(collection)\n const where = parseJson(opts.where, 'where') as ApiQueryOptions['where']\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'delete-many',\n collection: col,\n where,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.collections.from(col).removeMany(where)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { SERVER_COLLECTIONS } from '@01.software/sdk'\n\nexport type CliCollection = (typeof SERVER_COLLECTIONS)[number]\n\nexport function validateCollection(name: string): CliCollection {\n if ((SERVER_COLLECTIONS as readonly string[]).includes(name)) {\n return name as CliCollection\n }\n\n const normalized = name.replace(/-/g, '').toLowerCase()\n const suggestions = (SERVER_COLLECTIONS as readonly string[])\n .filter((collection) => {\n const candidate = collection.replace(/-/g, '').toLowerCase()\n return (\n candidate.startsWith(normalized) ||\n normalized.startsWith(candidate) ||\n (normalized.length >= 3 && candidate.includes(normalized))\n )\n })\n .slice(0, 5)\n\n const hint =\n suggestions.length > 0\n ? `Did you mean: ${suggestions.join(', ')}?`\n : 'Run \"01 --help\" for available collections.'\n\n throw new Error(`Unknown collection \"${name}\". ${hint}`)\n}\n\nexport function parseSelect(input: string): Record<string, boolean> {\n return Object.fromEntries(\n input\n .split(',')\n .map((field) => field.trim())\n .map((field) => [field, true]),\n )\n}\n","import { exitWithError } from './output.js'\nimport { t } from './i18n.js'\nimport type { z } from 'zod'\n\n/**\n * Throw an AdminError-shaped object so `exitWithError` can render it correctly\n * under `--format json` and exit with code 3 (validation). The `code` literal\n * `invalid_argument` is already in the validation bucket per `admin-error.ts`.\n */\nfunction failArg(\n label: string,\n value: string,\n expectedKind: 'object' | 'array' | 'value',\n): never {\n const message =\n expectedKind === 'object'\n ? t('InvalidJsonObject', { label })\n : expectedKind === 'array'\n ? t('InvalidJsonArray', { label })\n : t('InvalidJsonValue', { label, value })\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n // `message` is read by `printError` for the stderr headline so the\n // user sees the label/value in the one-line summary; `detail` carries\n // the structured fields for `--format json` consumers.\n message,\n detail: { message, value, field: label },\n })\n}\n\nfunction stringifyValue(value: unknown): string {\n try {\n return JSON.stringify(value)\n } catch {\n return String(value)\n }\n}\n\nfunction formatSchemaIssues(\n label: string,\n issues: readonly { path: readonly string[]; message: string }[],\n): string {\n return issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join('.') : label\n return `${path}: ${issue.message}`\n })\n .join('; ')\n}\n\nexport function parseWithSchema<T>(\n value: unknown,\n label: string,\n schema: z.ZodType<T>,\n): T {\n const parsed = schema.safeParse(value)\n if (parsed.success) return parsed.data\n\n const issues = parsed.error.issues.map((issue) => ({\n path: issue.path.map(String),\n message: issue.message,\n }))\n const message = `Invalid value for --${label}: ${formatSchemaIssues(label, issues)}`\n\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n message,\n detail: {\n message,\n value: stringifyValue(value),\n field: label,\n issues,\n },\n })\n}\n\nexport function parseJson(\n value: string,\n label: string,\n options: { format?: string } = {},\n): Record<string, unknown> {\n let parsed: unknown\n try {\n parsed = JSON.parse(value)\n } catch {\n return failArg(label, value, 'value')\n }\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n return failArg(label, value, 'object')\n }\n void options\n return parsed as Record<string, unknown>\n}\n\nexport function parseJsonArray(\n value: string,\n label: string,\n options: { format?: string } = {},\n): unknown[] {\n let parsed: unknown\n try {\n parsed = JSON.parse(value)\n } catch {\n return failArg(label, value, 'value')\n }\n if (!Array.isArray(parsed)) {\n return failArg(label, value, 'array')\n }\n void options\n return parsed\n}\n","import { z } from 'zod'\n\nexport const tenantFieldConfigStateSchema = z\n .object({\n hiddenFields: z.array(z.string()),\n isHidden: z.boolean(),\n })\n .strict()\n\nexport const tenantContextQuerySchema = z\n .object({\n counts: z.literal('true').optional(),\n })\n .strict()\n\nexport const tenantContextToolInputSchema = z\n .object({\n includeCounts: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Include per-collection document counts and config status (bypasses cache, slower)',\n ),\n })\n .strict()\n\nexport const tenantContextResponseSchema = z\n .object({\n tenant: z\n .object({\n id: z.string(),\n name: z.string(),\n plan: z.string(),\n planSource: z.string().optional(),\n authoritative: z.boolean().optional(),\n capabilityVersion: z.string().optional(),\n })\n .strict(),\n features: z.array(z.string()),\n collections: z\n .object({\n active: z.array(z.string()),\n inactive: z.array(z.string()),\n })\n .strict(),\n fieldConfigs: z.record(z.string(), tenantFieldConfigStateSchema),\n counts: z.record(z.string(), z.number()).optional(),\n config: z\n .object({\n webhookConfigured: z.boolean(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const tenantFeatureProgressFeatureSchema = z.enum(['ecommerce'])\n\nexport const tenantFeatureProgressInputSchema = z\n .object({\n feature: tenantFeatureProgressFeatureSchema.describe(\n 'Feature to inspect for tenant implementation readiness',\n ),\n includeEvidence: z\n .boolean()\n .optional()\n .default(false)\n .describe('Include sanitized counts and static surface evidence'),\n })\n .strict()\n\nexport const tenantFeatureProgressStatusSchema = z.enum([\n 'ready',\n 'attention',\n 'blocked',\n])\n\nexport const tenantFeatureProgressItemStateSchema = z.enum([\n 'complete',\n 'incomplete',\n 'blocked',\n 'attention',\n 'optional',\n 'unknown',\n 'manual',\n 'not-applicable',\n])\n\nexport const tenantFeatureProgressSeveritySchema = z.enum([\n 'required',\n 'recommended',\n 'optional',\n])\n\nexport const tenantFeatureProgressEvidenceValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n])\n\nexport const tenantFeatureProgressItemSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n state: tenantFeatureProgressItemStateSchema,\n severity: tenantFeatureProgressSeveritySchema,\n summary: z.string(),\n evidence: z\n .record(z.string(), tenantFeatureProgressEvidenceValueSchema)\n .optional(),\n })\n .strict()\n\nexport const tenantFeatureProgressGroupSchema = z\n .object({\n id: z.string(),\n title: z.string(),\n summary: z.string().optional(),\n items: z.array(tenantFeatureProgressItemSchema),\n })\n .strict()\n\nexport const tenantFeatureProgressResponseSchema = z\n .object({\n schemaVersion: z.literal(1),\n feature: tenantFeatureProgressFeatureSchema,\n status: tenantFeatureProgressStatusSchema,\n generatedAt: z.string(),\n tenant: z\n .object({\n id: z.string(),\n name: z.string(),\n plan: z.string(),\n })\n .strict(),\n capability: z\n .object({\n effectiveFeatures: z.array(z.string()),\n planBlocked: z.array(z.string()),\n closureAdded: z.array(z.string()),\n })\n .strict(),\n config: z\n .object({\n fulfillmentMode: z.enum(['shipping', 'none']),\n })\n .strict(),\n summary: z\n .object({\n complete: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n blocking: z.number().int().nonnegative(),\n manual: z.number().int().nonnegative(),\n unknown: z.number().int().nonnegative(),\n })\n .strict(),\n groups: z.array(tenantFeatureProgressGroupSchema),\n })\n .strict()\n\nexport const COLLECTION_SCHEMA_CONTRACT_VERSION = 1\n\nexport const collectionSchemaEndpointParamsSchema = z\n .object({\n collectionSlug: z.string().min(1, 'collectionSlug is required'),\n })\n .strict()\n\nexport function createCollectionSchemaToolInputSchema<\n const T extends readonly [string, ...string[]],\n>(collections: T) {\n return z\n .object({\n collection: z.enum(collections).describe('Collection name (required)'),\n })\n .strict()\n}\n\nexport const collectionFieldOptionSchema = z\n .object({\n label: z.string(),\n value: z.string(),\n })\n .strict()\n\nexport interface CollectionFieldSchema {\n name: string\n path: string\n type: string\n required?: true\n unique?: true\n hasMany?: true\n relationTo?: string | string[]\n options?: Array<{ label: string; value: string }>\n hidden?: true\n systemManaged?: true\n writable?: boolean\n fields?: CollectionFieldSchema[]\n}\n\nexport const collectionFieldSchema: z.ZodType<CollectionFieldSchema> = z.lazy(\n () =>\n z\n .object({\n name: z.string(),\n path: z.string(),\n type: z.string(),\n required: z.literal(true).optional(),\n unique: z.literal(true).optional(),\n hasMany: z.literal(true).optional(),\n relationTo: z.union([z.string(), z.array(z.string())]).optional(),\n options: z.array(collectionFieldOptionSchema).optional(),\n hidden: z.literal(true).optional(),\n systemManaged: z.literal(true).optional(),\n writable: z.boolean().optional(),\n fields: z.array(collectionFieldSchema).optional(),\n })\n .strict(),\n)\n\nexport const collectionSchemaResponseSchema = z\n .object({\n contractVersion: z.literal(COLLECTION_SCHEMA_CONTRACT_VERSION),\n mode: z.literal('effective'),\n collection: z\n .object({\n slug: z.string(),\n timestamps: z.boolean(),\n alwaysActive: z.boolean(),\n feature: z.string().nullable(),\n systemFields: z.array(z.string()),\n visibility: z\n .object({\n collectionHidden: z.boolean(),\n hiddenFields: z.array(z.string()),\n })\n .strict(),\n fields: z.array(collectionFieldSchema),\n })\n .strict(),\n })\n .strict()\n\nexport type TenantFieldConfigState = z.infer<\n typeof tenantFieldConfigStateSchema\n>\nexport type TenantContextQuery = z.input<typeof tenantContextQuerySchema>\nexport type TenantContextToolInput = z.infer<\n typeof tenantContextToolInputSchema\n>\nexport type TenantContextResponse = z.infer<typeof tenantContextResponseSchema>\nexport type TenantFeatureProgressFeature = z.infer<\n typeof tenantFeatureProgressFeatureSchema\n>\nexport type TenantFeatureProgressInput = z.infer<\n typeof tenantFeatureProgressInputSchema\n>\n/**\n * Raw feature-progress request input before schema defaults are applied.\n * `TenantFeatureProgressInput` is the parsed/effective shape.\n */\nexport type TenantFeatureProgressRequestInput = z.input<\n typeof tenantFeatureProgressInputSchema\n>\nexport type TenantFeatureProgressStatus = z.infer<\n typeof tenantFeatureProgressStatusSchema\n>\nexport type TenantFeatureProgressItemState = z.infer<\n typeof tenantFeatureProgressItemStateSchema\n>\nexport type TenantFeatureProgressSeverity = z.infer<\n typeof tenantFeatureProgressSeveritySchema\n>\nexport type TenantFeatureProgressEvidenceValue = z.infer<\n typeof tenantFeatureProgressEvidenceValueSchema\n>\nexport type TenantFeatureProgressItem = z.infer<\n typeof tenantFeatureProgressItemSchema\n>\nexport type TenantFeatureProgressGroup = z.infer<\n typeof tenantFeatureProgressGroupSchema\n>\nexport type TenantFeatureProgressResponse = z.infer<\n typeof tenantFeatureProgressResponseSchema\n>\nexport type CollectionSchemaEndpointParams = z.infer<\n typeof collectionSchemaEndpointParamsSchema\n>\nexport type CollectionFieldOption = z.infer<typeof collectionFieldOptionSchema>\nexport type CollectionSchemaResponse = z.infer<\n typeof collectionSchemaResponseSchema\n>\n","import { z } from 'zod'\n\nexport * from './product-detail'\nexport * from './product-patch'\nexport * from './product-catalog'\nexport * from './product-upsert'\nexport * from './product-options'\nexport * from './product-media'\nexport * from './product-selection-media'\nexport * from './product-gallery'\nexport * from './stock-snapshot'\nexport * from './cart-merge'\nexport * from './cart-mine'\nexport * from './checkout'\n\nexport const transactionStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'failed',\n 'canceled',\n 'refunded',\n])\n\n// Order-level statuses carry no `failed`: payment failure is recorded as a\n// Transaction outcome (`Transaction.status = failed`) while the order stays\n// `pending`, and permanent abandonment uses cancellation. Transaction and\n// shipment `failed` remain supported below.\nexport const financialStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'canceled',\n 'partially_refunded',\n 'refunded',\n])\n\nexport const orderDisplayFinancialStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'partially_refunded',\n 'refunded',\n 'voided',\n])\n\nexport const confirmationStatusSchema = z.enum(['unconfirmed', 'confirmed'])\n\nexport const fulfillmentOrderStatusSchema = z.enum([\n 'open',\n 'in_progress',\n 'on_hold',\n 'canceled',\n 'closed',\n])\n\nexport const shipmentStatusSchema = z.enum([\n 'pending',\n 'shipped',\n 'delivered',\n 'canceled',\n 'failed',\n])\n\nexport const orderDisplayFulfillmentStatusSchema = z.enum([\n 'unfulfilled',\n 'in_progress',\n 'on_hold',\n 'partially_fulfilled',\n 'shipped',\n 'fulfilled',\n 'canceled',\n])\n\nexport const orderReturnStatusSchema = z.enum([\n 'no_return',\n 'return_requested',\n 'in_progress',\n 'returned',\n])\n\nexport type FinancialStatusValue = z.infer<typeof financialStatusSchema>\nexport type OrderDisplayFinancialStatusValue = z.infer<\n typeof orderDisplayFinancialStatusSchema\n>\nexport type ConfirmationStatusValue = z.infer<typeof confirmationStatusSchema>\nexport type FulfillmentOrderStatusValue = z.infer<\n typeof fulfillmentOrderStatusSchema\n>\nexport type ShipmentStatusValue = z.infer<typeof shipmentStatusSchema>\nexport type OrderDisplayFulfillmentStatusValue = z.infer<\n typeof orderDisplayFulfillmentStatusSchema\n>\nexport type OrderReturnStatusValue = z.infer<typeof orderReturnStatusSchema>\n\n/**\n * @deprecated This is a display-status compatibility alias for one release.\n * Do not use it as a mutation target; update financial, confirmation,\n * fulfillment-order, or shipment state through their explicit contracts.\n */\nexport const orderStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'canceled',\n 'refunded',\n 'preparing',\n 'shipped',\n 'delivered',\n 'confirmed',\n 'return_requested',\n 'return_processing',\n 'returned',\n])\n\nexport const orderDisplayStatusSchema = orderStatusSchema\nexport type OrderDisplayStatusValue = z.infer<typeof orderDisplayStatusSchema>\n/** @deprecated Use OrderDisplayStatusValue for read-side display state. */\nexport type OrderStatusValue = z.infer<typeof orderStatusSchema>\n\nconst entityIdSchema = z\n .union([z.string().min(1), z.number()])\n .transform(String)\n\nexport const createOrderItemSchema = z\n .object({\n // `product` and `option` are storefront-optional: the create-order\n // endpoint derives the product from the variant's parent and snapshots\n // option selection from the variant.\n product: entityIdSchema.optional(),\n variant: entityIdSchema,\n option: entityIdSchema.optional(),\n quantity: z.number().int().positive('quantity must be a positive integer'),\n unitPrice: z.number().optional(),\n totalPrice: z.number().optional(),\n })\n .strict()\n\nexport const createOrderSchema = z\n .object({\n pgPaymentId: z.string().min(1).optional(),\n orderNumber: z.string().min(1, 'orderNumber is required'),\n customer: entityIdSchema.optional(),\n customerSnapshot: z\n .object({\n name: z.string().optional(),\n email: z.string().email('Invalid email format'),\n phone: z.string().optional(),\n })\n .strict(),\n shippingAddress: z\n .object({\n postalCode: z.string().optional(),\n address: z.string().optional(),\n detailAddress: z.string().optional(),\n deliveryMessage: z.string().optional(),\n recipientName: z.string().optional(),\n phone: z.string().optional(),\n })\n .strict()\n .optional(),\n orderItems: z\n .array(createOrderItemSchema)\n .min(1, 'At least one order item is required')\n .max(100, 'Maximum 100 items per order'),\n totalAmount: z.number().nonnegative('totalAmount must be non-negative'),\n shippingAmount: z.number().min(0).optional(),\n discountCode: z.string().optional(),\n })\n .strict()\n\nexport const CreateOrderSchema = createOrderSchema\n\nexport const updateTransactionSchema = z\n .object({\n pgPaymentId: z\n .string()\n .min(1, 'pgPaymentId is required')\n .describe('PG payment ID (required)'),\n status: transactionStatusSchema.describe(\n 'New transaction status (required)',\n ),\n paymentMethod: z.string().optional().describe('Payment method (optional)'),\n receiptUrl: z.string().optional().describe('Receipt URL (optional)'),\n paymentKey: z\n .string()\n .min(1)\n .optional()\n .describe('Provider payment key for verified paid confirmation'),\n amount: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Provider-confirmed amount for verified paid confirmation'),\n })\n .strict()\n\nexport const UpdateTransactionSchema = updateTransactionSchema\n\nconst providerSlugSchema = z\n .string()\n .trim()\n .regex(/^[a-z0-9][a-z0-9_-]{0,63}$/, 'pgProvider must be lowercase slug')\n\nexport const confirmPaymentSchema = z\n .object({\n orderNumber: z.string().min(1).optional(),\n pgPaymentId: z\n .string()\n .min(1, 'pgPaymentId is required')\n .describe('Provider payment identifier stored on the transaction'),\n pgProvider: providerSlugSchema.describe(\n 'Payment provider slug, e.g. toss, portone, stripe',\n ),\n pgOrderId: z.string().min(1).optional(),\n amount: z\n .number()\n .int()\n .nonnegative('amount must be non-negative')\n .describe('Provider-confirmed amount in minor units'),\n currency: z.string().min(1).optional(),\n paymentMethod: z.string().optional(),\n receiptUrl: z.string().url().optional(),\n approvedAt: z.string().optional(),\n providerStatus: z.string().optional(),\n providerEventId: z.string().min(1).optional(),\n confirmationSource: z\n .enum([\n 'provider_webhook',\n 'provider_lookup',\n 'provider_api_confirm',\n 'manual_server',\n ])\n .optional(),\n paymentKey: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Optional provider payment key from the client confirm handshake; stored for BFF/provider refund workflows (also accepted as metadata.tossPaymentKey). Local cancel does not read this field.',\n ),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const ConfirmPaymentSchema = confirmPaymentSchema\n\n/**\n * Single-source `confirmPayment` response shape. Console\n * (`FinalizeProviderPaymentResult`) aliases this and the SDK hand-type\n * (`ConfirmPaymentResponse`) is locked to it by a bidirectional parity\n * `test-d`, so the wire response has one owner.\n */\nexport const confirmPaymentResponseSchema = z\n .object({\n orderId: z.string().min(1),\n transactionId: z.string().min(1),\n status: z.literal('paid'),\n alreadyConfirmed: z.boolean().optional(),\n })\n .strict()\n\nexport const ConfirmPaymentResponseSchema = confirmPaymentResponseSchema\n\n/**\n * Machine-readable return reason codes. Console label maps and the SDK\n * `ReturnReason` union derive from this single source (parity-tested), mirroring\n * the product-upsert reason-code precedent.\n */\nexport const RETURN_REASON_CODES = [\n 'change_of_mind',\n 'defective',\n 'wrong_delivery',\n 'damaged',\n 'other',\n] as const\n\nexport const returnReasonSchema = z.enum(RETURN_REASON_CODES)\n\n/**\n * Machine-readable return *rejection* reason codes. Distinct from the\n * customer-supplied return reasons above: these are operator-selected reasons\n * for denying a return (mirroring the cancel-reason-code precedent). The Console\n * label map and the persisted `returns.rejectionReasonCode` field derive from\n * this single source (parity-tested).\n */\nexport const RETURN_REJECTION_REASON_CODES = [\n 'window_expired',\n 'used_or_damaged',\n 'non_returnable',\n 'other',\n] as const\n\nexport const returnRejectionReasonCodeSchema = z.enum(\n RETURN_REJECTION_REASON_CODES,\n)\n\nexport const restockActionSchema = z.enum(['return_to_stock', 'discard'])\n\nexport const returnWithRefundItemSchema = z\n .object({\n orderItem: z.union([z.string().min(1), z.number()]).transform(String),\n quantity: z.number().int().positive('quantity must be a positive integer'),\n restockAction: restockActionSchema.default('return_to_stock'),\n restockingFee: z\n .number()\n .min(0, 'restockingFee must be non-negative')\n .optional()\n .describe('Restocking fee charged for this line (ADR 0005 §Gap 1)'),\n })\n .strict()\n\nexport const returnWithRefundSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number (required)'),\n reason: returnReasonSchema.optional().describe('Return reason (optional)'),\n reasonDetail: z\n .string()\n .optional()\n .describe('Detailed reason text (optional)'),\n returnItems: z\n .array(returnWithRefundItemSchema)\n .min(1, 'At least one return item is required')\n .max(100, 'Too many return items')\n .describe('Array of products to return (required)'),\n refundAmount: z\n .number()\n .min(0, 'refundAmount must be non-negative')\n .describe('Refund amount (required, min 0)'),\n returnShippingFee: z\n .number()\n .min(0, 'returnShippingFee must be non-negative')\n .optional()\n .describe(\n 'Return shipping fee charged to the customer (ADR 0005 §Gap 1)',\n ),\n initialShippingRefundAmount: z\n .number()\n .min(0, 'initialShippingRefundAmount must be non-negative')\n .optional()\n .describe('Initial order shipping amount refunded to the customer'),\n initialShippingRefundOverrideNote: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Operator audit note required when overriding policy suggestion',\n ),\n pgPaymentId: z\n .string()\n .min(1, 'pgPaymentId is required')\n .describe('PG payment ID for refund (required)'),\n paymentKey: z\n .string()\n .min(1)\n .optional()\n .describe('Provider payment key for verified refund'),\n refundReceiptUrl: z\n .string()\n .optional()\n .describe('Refund receipt URL (optional)'),\n })\n .strict()\n\nexport const createReturnSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number (required)'),\n reason: returnReasonSchema.optional().describe('Return reason (optional)'),\n reasonDetail: z\n .string()\n .optional()\n .describe('Detailed reason text (optional)'),\n returnItems: z\n .array(returnWithRefundItemSchema)\n .min(1, 'At least one return item is required')\n .max(100, 'Too many return items')\n .describe('Array of products to return (required)'),\n refundAmount: z\n .number()\n .min(0, 'refundAmount must be non-negative')\n .describe(\n 'Line refund amount before initial shipping refund (required, min 0)',\n ),\n returnShippingFee: z\n .number()\n .min(0, 'returnShippingFee must be non-negative')\n .optional()\n .describe('Return shipping fee charged to the customer'),\n initialShippingRefundAmount: z\n .number()\n .min(0, 'initialShippingRefundAmount must be non-negative')\n .optional()\n .describe('Initial order shipping amount refunded to the customer'),\n initialShippingRefundOverrideNote: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Operator audit note required when overriding policy suggestion',\n ),\n })\n .strict()\n\nexport const CreateReturnSchema = createReturnSchema\nexport const ReturnWithRefundSchema = returnWithRefundSchema\n\n/**\n * Machine-readable order cancellation reason codes. Console label maps and the\n * SDK `CancelReasonCode` union derive from this single source (parity-tested).\n */\nexport const CANCEL_REASON_CODES = [\n 'customer',\n 'inventory',\n 'fraud',\n 'declined',\n 'staff',\n 'other',\n] as const\n\nexport const cancelReasonCodeSchema = z.enum(CANCEL_REASON_CODES)\n\n/**\n * Machine-readable operator force-resolution reason codes (operational return /\n * fulfillment-mistake corrections). Single source for Console's\n * `forceResolveOrderMistake` reason union.\n */\nexport const FORCE_RESOLUTION_REASON_CODES = [\n 'staff_error',\n 'wrong_fulfillment',\n 'other',\n] as const\n\nexport const forceResolutionReasonCodeSchema = z.enum(\n FORCE_RESOLUTION_REASON_CODES,\n)\n\nexport const idempotencyKeySchema = z\n .string()\n .trim()\n .min(1, 'idempotencyKey is required')\n .max(255, 'idempotencyKey must be 255 characters or fewer')\n .regex(\n /^[\\x21-\\x7E]+$/,\n 'idempotencyKey must contain only printable header-safe characters',\n )\n\nexport const cancelOrderSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number to cancel'),\n reasonCode: cancelReasonCodeSchema\n .default('other')\n .describe('Operator-selected cancel reason code'),\n reasonDetail: z\n .string()\n .trim()\n .max(2000, 'reasonDetail must be 2000 characters or fewer')\n .optional()\n .describe('Internal cancellation detail stored on the order'),\n })\n .strict()\n\nexport const CancelOrderSchema = cancelOrderSchema\n\nconst cancelOrderResponseBaseSchema = {\n orderId: z.string().min(1),\n} satisfies z.ZodRawShape\n\nconst unpaidLocalCancelCommittedResponseFields = {\n refundedAmount: z.literal(0),\n providerRefunded: z.literal(false),\n} satisfies z.ZodRawShape\n\nconst paidLocalCancelCommittedResponseFields = {\n transactionId: z.string().min(1),\n refundedAmount: z.literal(0),\n providerRefunded: z.literal(false),\n refundPending: z.literal(true),\n} satisfies z.ZodRawShape\n\nconst legacyProviderRefundResponseFields = {\n transactionId: z.string().min(1),\n refundedAmount: z.number().int().positive(),\n refundSeq: z.number().int().positive(),\n providerRefunded: z.literal(true),\n} satisfies z.ZodRawShape\n\nconst alreadyCanceledResponseFields = {\n refundedAmount: z.number().int().nonnegative(),\n providerRefunded: z.literal(false),\n} satisfies z.ZodRawShape\n\nconst alreadyCanceledRefundPendingResponseFields = {\n transactionId: z.string().min(1),\n refundedAmount: z.number().int().nonnegative(),\n providerRefunded: z.literal(false),\n refundPending: z.literal(true),\n} satisfies z.ZodRawShape\n\n/** @deprecated Inline PG cancel reconciliation removed; retained for type migration only. */\nexport const cancelOrderReconciliationStatusSchema = z.enum([\n 'paid',\n 'preparing',\n 'shipped',\n 'delivered',\n 'confirmed',\n 'return_requested',\n 'return_processing',\n 'returned',\n 'refunded',\n])\n\nexport const cancelOrderResponseSchema = z.union([\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...paidLocalCancelCommittedResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...unpaidLocalCancelCommittedResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...alreadyCanceledResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(false),\n alreadyCanceled: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...alreadyCanceledRefundPendingResponseFields,\n status: z.literal('canceled'),\n cancelCommitted: z.literal(false),\n alreadyCanceled: z.literal(true),\n })\n .strict(),\n z\n .object({\n ...cancelOrderResponseBaseSchema,\n ...legacyProviderRefundResponseFields,\n status: cancelOrderReconciliationStatusSchema,\n cancelCommitted: z.literal(false),\n reconciliationRequired: z.literal(true),\n })\n .strict(),\n])\n\nexport const CancelOrderResponseSchema = cancelOrderResponseSchema\n\nexport const resolveCancelRefundOutcomeSchema = z.enum(['succeeded', 'failed'])\n\nexport const resolveCancelRefundSchema = z\n .object({\n orderNumber: z\n .string()\n .min(1, 'orderNumber is required')\n .describe('Order number whose pending cancel refund is being resolved'),\n idempotencyKey: idempotencyKeySchema.describe(\n 'Stable key for this PG refund result report',\n ),\n outcome: resolveCancelRefundOutcomeSchema.describe(\n 'PG refund result reported by the storefront or BFF',\n ),\n refundedAmount: z\n .number()\n .int('refundedAmount must be an integer minor-unit amount')\n .nonnegative('refundedAmount must be nonnegative'),\n pgProvider: z\n .string()\n .trim()\n .min(1, 'pgProvider is required')\n .regex(\n /^[a-z0-9][a-z0-9_-]*$/,\n 'pgProvider must be a lowercase provider slug',\n ),\n pgRefundId: z.string().trim().min(1).optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.outcome === 'succeeded' && value.refundedAmount <= 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['refundedAmount'],\n message: 'refundedAmount must be positive when outcome is succeeded',\n })\n }\n\n if (value.outcome === 'succeeded' && !value.pgRefundId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['pgRefundId'],\n message: 'pgRefundId is required when outcome is succeeded',\n })\n }\n\n if (value.outcome === 'failed' && value.refundedAmount !== 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['refundedAmount'],\n message: 'refundedAmount must be 0 when outcome is failed',\n })\n }\n })\n\nexport const ResolveCancelRefundSchema = resolveCancelRefundSchema\n\nexport const resolveCancelRefundResponseSchema = z.union([\n z\n .object({\n orderId: z.string().min(1),\n transactionId: z.string().min(1),\n refundTransactionId: z.string().min(1),\n refundedAmount: z.number().int().positive(),\n refundStatus: z.literal('succeeded'),\n transactionStatus: z.literal('refunded'),\n })\n .strict(),\n z\n .object({\n orderId: z.string().min(1),\n transactionId: z.string().min(1),\n refundTransactionId: z.string().min(1),\n refundedAmount: z.literal(0),\n refundStatus: z.literal('failed'),\n transactionStatus: z.literal('paid'),\n })\n .strict(),\n])\n\nexport const ResolveCancelRefundResponseSchema =\n resolveCancelRefundResponseSchema\n\nexport type TransactionStatus = z.infer<typeof transactionStatusSchema>\nexport type UpdateTransactionParams = z.input<typeof UpdateTransactionSchema>\nexport type ParsedUpdateTransactionParams = z.output<\n typeof UpdateTransactionSchema\n>\nexport type CreateOrderParams = z.input<typeof CreateOrderSchema>\nexport type ParsedCreateOrderParams = z.output<typeof CreateOrderSchema>\nexport type CreateOrderItemParams = z.input<typeof createOrderItemSchema>\nexport type ParsedCreateOrderItemParams = z.output<typeof createOrderItemSchema>\nexport type ConfirmPaymentParams = z.input<typeof ConfirmPaymentSchema>\nexport type ParsedConfirmPaymentParams = z.output<typeof ConfirmPaymentSchema>\nexport type ConfirmPaymentResponse = z.output<\n typeof confirmPaymentResponseSchema\n>\nexport type ReturnReason = z.infer<typeof returnReasonSchema>\nexport type ReturnRejectionReasonCode = z.infer<\n typeof returnRejectionReasonCodeSchema\n>\nexport type RestockAction = z.infer<typeof restockActionSchema>\nexport type ReturnWithRefundItem = z.input<typeof returnWithRefundItemSchema>\nexport type ParsedReturnWithRefundItem = z.output<\n typeof returnWithRefundItemSchema\n>\nexport type ReturnWithRefundParams = z.input<typeof ReturnWithRefundSchema>\nexport type ParsedReturnWithRefundParams = z.output<\n typeof ReturnWithRefundSchema\n>\nexport type CreateReturnParams = z.input<typeof CreateReturnSchema>\nexport type ParsedCreateReturnParams = z.output<typeof CreateReturnSchema>\nexport type CancelReasonCode = z.infer<typeof cancelReasonCodeSchema>\nexport type ForceResolutionReasonCode = z.infer<\n typeof forceResolutionReasonCodeSchema\n>\nexport type IdempotencyKey = z.infer<typeof idempotencyKeySchema>\nexport type CancelOrderReconciliationStatus = z.infer<\n typeof cancelOrderReconciliationStatusSchema\n>\nexport type CancelOrderParams = z.input<typeof CancelOrderSchema>\nexport type ParsedCancelOrderParams = z.output<typeof CancelOrderSchema>\nexport type CancelOrderRequestParams = {\n orderNumber: string\n reasonCode?: CancelReasonCode\n reasonDetail?: string\n idempotencyKey?: IdempotencyKey\n}\nexport type CancelOrderResponse = z.output<typeof CancelOrderResponseSchema>\nexport type ResolveCancelRefundOutcome = z.infer<\n typeof resolveCancelRefundOutcomeSchema\n>\nexport type ResolveCancelRefundParams = z.input<\n typeof ResolveCancelRefundSchema\n>\nexport type ParsedResolveCancelRefundParams = z.output<\n typeof ResolveCancelRefundSchema\n>\nexport type ResolveCancelRefundSucceededRequestParams = Omit<\n ResolveCancelRefundParams,\n 'outcome' | 'refundedAmount' | 'pgRefundId'\n> & {\n outcome: 'succeeded'\n refundedAmount: number\n pgRefundId: string\n}\nexport type ResolveCancelRefundFailedRequestParams = Omit<\n ResolveCancelRefundParams,\n 'outcome' | 'refundedAmount'\n> & {\n outcome: 'failed'\n refundedAmount: 0\n}\nexport type ResolveCancelRefundRequestParams =\n | ResolveCancelRefundSucceededRequestParams\n | ResolveCancelRefundFailedRequestParams\nexport type ResolveCancelRefundResponse = z.output<\n typeof ResolveCancelRefundResponseSchema\n>\n","import { z } from 'zod'\n\nconst IdSchema = z.union([z.string(), z.number()]).transform(String)\nconst RemovedLegacyMediaFieldSchema = z.unknown().optional()\n\nexport const PRODUCT_UPSERT_UNKNOWN_FIELD_REASON = 'unknown_field' as const\nexport const PRODUCT_UPSERT_READONLY_FIELD_REASON =\n 'product_field_readonly' as const\nexport const PRODUCT_GRAPH_CONFLICT_REASON = 'graph_conflict' as const\nexport const PRODUCT_GRAPH_REVISION_REQUIRED_REASON =\n 'graph_revision_required' as const\n\nexport const PRODUCT_READONLY_FIELDS = [\n 'isSoldOut',\n '_order',\n 'tenant',\n] as const\n\nconst productFieldShape = {\n id: IdSchema.optional(),\n title: z.string().min(1).optional(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n status: z.string().optional(),\n slug: z.string().optional(),\n images: z.array(IdSchema).optional(),\n mediaSets: RemovedLegacyMediaFieldSchema,\n vendor: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n brand: IdSchema.optional().nullable(),\n shippingPolicy: IdSchema.optional().nullable(),\n weight: z.number().int().min(0).optional().nullable(),\n minOrderQuantity: z.number().int().min(1).optional().nullable(),\n maxOrderQuantity: z.number().int().min(1).optional().nullable(),\n isFeatured: z.boolean().optional(),\n publishedAt: z.string().optional().nullable(),\n categories: z.array(IdSchema).optional(),\n tags: z.array(IdSchema).optional(),\n seo: z\n .object({\n title: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n metadata: z.unknown().optional(),\n} as const\n\nexport const PRODUCT_UPSERT_PRODUCT_FIELDS = Object.keys(\n productFieldShape,\n) as (keyof typeof productFieldShape)[]\n\nexport const PRODUCT_UPSERT_EDIT_PRODUCT_FIELDS = ['id'] as const\n\nconst ProductFieldsSchema = z\n .object(productFieldShape)\n .passthrough()\n .superRefine((value, ctx) => {\n for (const field of ['primaryMediaItemId', 'thumbnail'] as const) {\n if (Object.prototype.hasOwnProperty.call(value, field)) {\n ctx.addIssue({\n code: 'custom',\n message:\n 'Product media is ordered like Shopify. Use product.images and put the featured image first.',\n path: [field],\n })\n }\n }\n })\n\n/**\n * Base option-value object shape. Exported so strict consumers (e.g. the MCP\n * product-upsert tool) can reject unknown keys via `.strict()` without\n * duplicating the field list. The runtime `OptionValueInputSchema` keeps its\n * passthrough + legacy-`swatchColor` rejection semantics.\n */\nexport const OptionValueObjectSchema = z.object({\n id: IdSchema.optional(),\n value: z.string().min(1, 'Option value `value` is required'),\n slug: z.string().optional(),\n swatch: z\n .object({\n type: z.enum(['color', 'media']).optional().nullable(),\n color: z.string().optional().nullable(),\n mediaItemId: IdSchema.optional().nullable(),\n })\n .optional()\n .nullable(),\n thumbnail: RemovedLegacyMediaFieldSchema,\n images: RemovedLegacyMediaFieldSchema,\n metadata: z.unknown().optional(),\n})\n\nconst OptionValueInputSchema =\n OptionValueObjectSchema.passthrough().superRefine((value, ctx) => {\n if (Object.prototype.hasOwnProperty.call(value, 'swatchColor')) {\n ctx.addIssue({\n code: 'custom',\n message:\n 'Option value field `swatchColor` was removed. Use nested `swatch.color` instead.',\n path: ['swatchColor'],\n })\n }\n })\n\nexport const OptionInputSchema = z.object({\n id: IdSchema.optional(),\n title: z.string().min(1, 'Option `title` is required'),\n slug: z.string().optional(),\n values: z\n .array(OptionValueInputSchema)\n .min(1, 'Each option must have at least one value'),\n})\n\nconst VariantOptionValueObjectSchema = z\n .object({\n valueSlug: z.string().optional(),\n valueId: IdSchema.optional(),\n value: z.string().optional(),\n })\n .refine((data) => Boolean(data.valueSlug ?? data.valueId ?? data.value), {\n message:\n 'Variant option value object requires valueSlug, valueId, or value',\n })\n\nexport const VariantInputSchema = z.object({\n id: IdSchema.optional(),\n optionValues: z\n .union([\n z.record(\n z.string(),\n z.union([z.string(), VariantOptionValueObjectSchema]),\n ),\n z.array(IdSchema),\n ])\n .optional(),\n sku: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n price: z.number().min(0),\n compareAtPrice: z.number().min(0).optional().nullable(),\n stock: z.number().int().min(0).optional(),\n isUnlimited: z.boolean().optional(),\n inventoryPolicy: z.enum(['deny', 'continue']).optional(),\n weight: z.number().int().min(0).optional().nullable(),\n requiresShipping: z.boolean().optional(),\n barcode: z.string().optional().nullable(),\n externalId: z.string().optional().nullable(),\n isActive: z.boolean().optional(),\n images: z.array(IdSchema).optional(),\n thumbnail: RemovedLegacyMediaFieldSchema,\n featuredMediaItemId: RemovedLegacyMediaFieldSchema,\n metadata: z.unknown().optional(),\n})\n\n/** Base object schema for `.shape` consumers (MCP tool fields). */\nexport const ProductUpsertObjectSchema = z.object({\n /** Required on graph edit when the server graph is non-empty (`productId` set); optional for first seed on an empty graph. */\n graphRevision: z.string().optional(),\n productId: IdSchema.optional(),\n product: ProductFieldsSchema.optional(),\n options: z.array(OptionInputSchema).max(10).optional().default([]),\n variants: z.array(VariantInputSchema).max(500).optional().default([]),\n})\n\nexport const ProductUpsertSchema = ProductUpsertObjectSchema.superRefine(\n (data, ctx) => {\n const nestedProductId = data.product?.id\n if (\n data.productId != null &&\n nestedProductId != null &&\n String(data.productId) !== String(nestedProductId)\n ) {\n ctx.addIssue({\n code: 'custom',\n message:\n 'productId must match product.id when both are set on graph upsert.',\n path: ['productId'],\n })\n }\n\n const productId = data.productId ?? nestedProductId\n const isEdit = productId != null\n\n if (!isEdit && data.productId != null) {\n ctx.addIssue({\n code: 'custom',\n message: 'productId is not allowed when creating a product.',\n path: ['productId'],\n })\n }\n\n if (!isEdit && !data.product?.title) {\n ctx.addIssue({\n code: 'custom',\n message: 'Product `title` is required when creating a new product.',\n path: ['product', 'title'],\n })\n }\n\n if (isEdit && data.product) {\n for (const key of Object.keys(data.product)) {\n if (key !== 'id') {\n ctx.addIssue({\n code: 'custom',\n message:\n 'Existing product graph upsert accepts only product identity. Save document fields through Payload.',\n path: ['product', key],\n })\n }\n }\n }\n },\n)\n\n/** Create: `product.title` required; no `productId`. */\nexport type ProductUpsertCreateInput = {\n graphRevision?: string\n product: ProductFieldsInput & { title: string }\n options?: OptionInput[]\n variants?: VariantInput[]\n}\n\n/** Edit: graph-only; document fields via Payload / Admin save. */\nexport type ProductUpsertEditInput = {\n graphRevision?: string\n productId: string\n options?: OptionInput[]\n variants?: VariantInput[]\n}\n\n/** Edit (legacy carrier): `product: { id }` only — prefer `productId`. */\nexport type ProductUpsertEditNestedIdInput = {\n graphRevision?: string\n product: { id: string }\n options?: OptionInput[]\n variants?: VariantInput[]\n}\n\n/** Parsed upsert body (Zod defaults + refine). Prefer this at API boundaries. */\nexport type ProductUpsertInput = z.infer<typeof ProductUpsertSchema>\n\nexport type ProductFieldsInput = z.infer<typeof ProductFieldsSchema>\nexport type OptionInput = z.infer<typeof OptionInputSchema>\nexport type OptionValueInput = z.infer<typeof OptionValueInputSchema>\nexport type VariantInput = z.infer<typeof VariantInputSchema>\n","import { Command } from 'commander'\nimport { createOrderSchema, cancelOrderSchema } from '@01.software/contracts'\nimport { z } from 'zod'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJson, parseJsonArray, parseWithSchema } from '../lib/parse.js'\n\nconst idSchema = z.union([z.string().min(1), z.number()]).transform(String)\n\nconst customerSnapshotSchema = z\n .object({\n email: z.string().email('Invalid email format'),\n name: z.string().optional(),\n phone: z.string().optional(),\n })\n .strict()\n\nconst orderStatusSchema = z.enum(['confirmed'])\n\nconst fulfillmentStatusSchema = z.enum(['shipped', 'delivered', 'failed'])\n\nconst updateFulfillmentSchema = z\n .object({\n fulfillmentId: idSchema,\n status: fulfillmentStatusSchema.optional(),\n carrier: z.string().min(1).optional(),\n trackingNumber: z.string().min(1).optional(),\n })\n .refine(\n (value) =>\n value.status !== undefined ||\n value.carrier !== undefined ||\n value.trackingNumber !== undefined,\n {\n message: 'status, carrier, or trackingNumber is required',\n },\n )\n\nconst fulfillmentItemsSchema = z\n .array(\n z\n .object({\n orderItem: idSchema,\n quantity: z\n .number()\n .int()\n .positive('quantity must be a positive integer'),\n })\n .strict(),\n )\n .min(1, 'At least one fulfillment item is required')\n .max(100, 'Maximum 100 items per fulfillment')\n\nexport function registerOrderCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const order = program.command('order').description('Order management')\n\n order\n .command('create')\n .description('Create a new order')\n .option('--payment-id <id>', 'Payment ID')\n .requiredOption('--order-number <num>', 'Order number')\n .requiredOption('--email <email>', 'Customer email')\n .option('--customer <id>', 'Customer ID')\n .option('--name <name>', 'Customer name')\n .option('--phone <phone>', 'Customer phone')\n .requiredOption('--shipping-address <json>', 'Shipping address (JSON)')\n .requiredOption('--products <json>', 'Order products array (JSON)')\n .requiredOption('--total-amount <n>', 'Total amount', parseFloat)\n .option('--shipping-amount <n>', 'Shipping amount', parseFloat)\n .option('--discount-code <code>', 'Discount code')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n {\n pgPaymentId: opts.paymentId,\n orderNumber: opts.orderNumber,\n customerSnapshot: {\n email: opts.email,\n name: opts.name,\n phone: opts.phone,\n },\n customer: opts.customer,\n shippingAddress: parseJson(\n opts.shippingAddress,\n 'shipping-address',\n ),\n orderItems: parseJsonArray(opts.products, 'products'),\n totalAmount: opts.totalAmount,\n shippingAmount: opts.shippingAmount,\n discountCode: opts.discountCode,\n },\n 'order',\n createOrderSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order create', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.create(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('get <orderNumber>')\n .description('Get an order by order number')\n .action(async (orderNumber: string) => {\n try {\n const client = getClient()\n const {\n docs: [order],\n } = await client.collections\n .from('orders')\n .find({\n where: { orderNumber: { equals: orderNumber } },\n limit: 1,\n depth: 1,\n })\n if (!order) throw new Error('Order not found')\n printResult(order, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('update <orderNumber>')\n .description('Confirm a delivered order purchase')\n .requiredOption('--status <status>', 'New status (confirmed only)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const status = parseWithSchema(opts.status, 'status', orderStatusSchema)\n const data = { orderNumber, status }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.update(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('cancel <orderNumber>')\n .description('Cancel an eligible order')\n .option(\n '--reason-code <code>',\n 'Cancel reason (customer, inventory, fraud, declined, staff, other)',\n )\n .option('--reason-detail <text>', 'Internal cancellation detail')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n orderNumber,\n ...(opts.reasonCode ? { reasonCode: opts.reasonCode } : {}),\n ...(opts.reasonDetail ? { reasonDetail: opts.reasonDetail } : {}),\n },\n 'cancel',\n cancelOrderSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order cancel', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.cancelOrder(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('checkout')\n .description('Convert a cart to an order')\n .requiredOption('--cart-id <id>', 'Cart ID')\n .option('--payment-id <id>', 'Payment ID (optional for free orders)')\n .requiredOption('--order-number <num>', 'Order number')\n .requiredOption('--customer <json>', 'Customer snapshot (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const customerSnapshot = parseWithSchema(\n parseJson(opts.customer, 'customer'),\n 'customer',\n customerSnapshotSchema,\n )\n const data = {\n cartId: opts.cartId,\n pgPaymentId: opts.paymentId,\n orderNumber: opts.orderNumber,\n customerSnapshot,\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order checkout', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.checkout({\n ...data,\n customerSnapshot: customerSnapshot as Parameters<\n typeof client.commerce.orders.checkout\n >[0]['customerSnapshot'],\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('prepare <orderNumber>')\n .description('Move paid order fulfillment work to preparation')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = { orderNumber }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order prepare', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result =\n await client.commerce.orders.prepareFulfillmentOrder(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('fulfill <orderNumber>')\n .description('Create a shipment for a prepared order')\n .option('--items <json>', 'Fulfillment items array (JSON)')\n .option('--carrier <name>', 'Shipping carrier')\n .option('--tracking-number <num>', 'Tracking number')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const items = opts.items\n ? parseWithSchema(\n parseJsonArray(opts.items, 'items'),\n 'items',\n fulfillmentItemsSchema,\n )\n : undefined\n const data = {\n orderNumber,\n ...(opts.carrier ? { carrier: opts.carrier } : {}),\n ...(opts.trackingNumber\n ? { trackingNumber: opts.trackingNumber }\n : {}),\n ...(items ? { items } : {}),\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'order fulfill', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.createFulfillment({\n ...data,\n ...(items\n ? {\n items: items as Parameters<\n typeof client.commerce.orders.createFulfillment\n >[0]['items'],\n }\n : {}),\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n order\n .command('update-fulfillment <fulfillmentId>')\n .description('Update shipment status or tracking information')\n .option('--status <status>', 'Shipment status (shipped, delivered, failed)')\n .option('--carrier <name>', 'Shipping carrier')\n .option('--tracking-number <num>', 'Tracking number')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (fulfillmentId: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n fulfillmentId,\n ...(opts.status ? { status: opts.status } : {}),\n ...(opts.carrier ? { carrier: opts.carrier } : {}),\n ...(opts.trackingNumber\n ? { trackingNumber: opts.trackingNumber }\n : {}),\n },\n 'fulfillment',\n updateFulfillmentSchema,\n )\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'order update-fulfillment',\n data,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.updateFulfillment(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport {\n createReturnSchema,\n returnWithRefundSchema,\n} from '@01.software/contracts'\nimport { z } from 'zod'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJsonArray, parseWithSchema } from '../lib/parse.js'\n\nconst returnStatusSchema = z.enum([\n 'processing',\n 'approved',\n 'rejected',\n 'completed',\n])\n\nexport function registerReturnCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const ret = program.command('return').description('Return management')\n\n ret\n .command('create <orderNumber>')\n .description('Create a return request')\n .requiredOption('--products <json>', 'Return products array (JSON)')\n .requiredOption('--refund-amount <n>', 'Refund amount', parseFloat)\n .option(\n '--return-shipping-fee <n>',\n 'Return shipping fee charged to the customer',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-amount <n>',\n 'Initial order shipping refund amount',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-note <text>',\n 'Audit note for manual initial shipping refund override',\n )\n .option(\n '--reason <reason>',\n 'Return reason (change_of_mind, defective, wrong_delivery, damaged, other)',\n )\n .option('--reason-detail <text>', 'Detailed reason')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n orderNumber,\n returnItems: parseJsonArray(opts.products, 'products'),\n refundAmount: opts.refundAmount,\n returnShippingFee: opts.returnShippingFee,\n reason: opts.reason,\n reasonDetail: opts.reasonDetail,\n initialShippingRefundAmount: opts.initialShippingRefundAmount,\n initialShippingRefundOverrideNote: opts.initialShippingRefundNote,\n },\n 'return',\n createReturnSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'return create', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.createReturn({\n ...data,\n returnItems: data.returnItems as Parameters<\n typeof client.commerce.orders.createReturn\n >[0]['returnItems'],\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n ret\n .command('update <returnId>')\n .description('Update return status')\n .requiredOption(\n '--status <status>',\n 'New status (processing, approved, rejected, completed)',\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (returnId: string, opts) => {\n try {\n const status = parseWithSchema(\n opts.status,\n 'status',\n returnStatusSchema,\n )\n const data = { returnId, status }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'return update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.updateReturn(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n ret\n .command('refund <orderNumber>')\n .description('Return with refund')\n .requiredOption('--products <json>', 'Return products array (JSON)')\n .requiredOption('--refund-amount <n>', 'Refund amount', parseFloat)\n .requiredOption('--payment-id <id>', 'Payment ID')\n .option(\n '--return-shipping-fee <n>',\n 'Return shipping fee charged to the customer',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-amount <n>',\n 'Initial order shipping refund amount',\n parseFloat,\n )\n .option(\n '--initial-shipping-refund-note <text>',\n 'Audit note for manual initial shipping refund override',\n )\n .option('--reason <reason>', 'Return reason')\n .option('--reason-detail <text>', 'Detailed reason')\n .option('--refund-receipt-url <url>', 'Refund receipt URL')\n .option('--payment-key <key>', 'Provider payment key')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (orderNumber: string, opts) => {\n try {\n const data = parseWithSchema(\n {\n orderNumber,\n returnItems: parseJsonArray(opts.products, 'products'),\n refundAmount: opts.refundAmount,\n returnShippingFee: opts.returnShippingFee,\n pgPaymentId: opts.paymentId,\n reason: opts.reason,\n reasonDetail: opts.reasonDetail,\n refundReceiptUrl: opts.refundReceiptUrl,\n paymentKey: opts.paymentKey,\n initialShippingRefundAmount: opts.initialShippingRefundAmount,\n initialShippingRefundOverrideNote: opts.initialShippingRefundNote,\n },\n 'return',\n returnWithRefundSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'return refund', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.returnWithRefund({\n ...data,\n returnItems: data.returnItems as Parameters<\n typeof client.commerce.orders.returnWithRefund\n >[0]['returnItems'],\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerCartCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const cart = program.command('cart').description('Cart management')\n\n cart\n .command('create')\n .description('Create a cart and print its cartToken handle')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart create', data: {} },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.create()\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('add <cartToken>')\n .description('Add an item to a cart (addressed by its cartToken)')\n .requiredOption('--product <id>', 'Product ID')\n .requiredOption('--variant <id>', 'Variant ID')\n .requiredOption('--option <id>', 'Option ID')\n .requiredOption('--quantity <n>', 'Quantity', (v: string) =>\n parseInt(v, 10),\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n const data = {\n cartToken,\n product: opts.product,\n variant: opts.variant,\n option: opts.option,\n quantity: opts.quantity,\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart add', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.addItem(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('update <cartItemId>')\n .description('Update cart item quantity')\n .requiredOption('--cart-token <token>', 'Cart token (cart handle)')\n .requiredOption('--quantity <n>', 'New quantity', (v: string) =>\n parseInt(v, 10),\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartItemId: string, opts) => {\n try {\n const data = {\n cartToken: opts.cartToken,\n cartItemId,\n quantity: opts.quantity,\n }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.updateItem(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('remove <cartItemId>')\n .description('Remove an item from a cart')\n .requiredOption('--cart-token <token>', 'Cart token (cart handle)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartItemId: string, opts) => {\n try {\n const data = { cartToken: opts.cartToken, cartItemId }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart remove', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.removeItem(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('clear <cartToken>')\n .description('Remove all items from a cart')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart clear', data: { cartToken } },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.clear({ cartToken })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('apply-discount <cartToken>')\n .description('Apply a discount code to a cart')\n .requiredOption('--code <code>', 'Discount code')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n const data = { cartToken, discountCode: opts.code }\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'cart apply-discount', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.applyDiscount(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n cart\n .command('remove-discount <cartToken>')\n .description('Remove the discount from a cart')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (cartToken: string, opts) => {\n try {\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'cart remove-discount',\n data: { cartToken },\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.cart.removeDiscount({ cartToken })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJsonArray } from '../lib/parse.js'\n\nexport function registerStockCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const stock = program.command('stock').description('Stock management')\n\n stock\n .command('check')\n .description('Check stock availability')\n .requiredOption(\n '--items <json>',\n 'Items to check (JSON array of { optionId, quantity })',\n )\n .action(async (opts) => {\n try {\n const client = getClient()\n const items = parseJsonArray(opts.items, 'items') as Parameters<\n typeof client.commerce.product.stockCheck\n >[0]['items']\n const result = await client.commerce.product.stockCheck({ items })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport {\n updateTransactionSchema,\n confirmPaymentSchema,\n idempotencyKeySchema,\n} from '@01.software/contracts'\nimport { z } from 'zod'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseWithSchema } from '../lib/parse.js'\n\nconst transactionAmountSchema = z.object({\n amount: z\n .string()\n .regex(/^[1-9]\\d*$/, 'amount must be a positive integer')\n .transform(Number),\n})\nconst confirmPaymentAmountSchema = z.object({\n amount: z\n .string()\n .regex(/^(0|[1-9]\\d*)$/, 'amount must be a non-negative integer')\n .transform(Number),\n})\nconst idempotencyKeyOptionSchema = z.object({\n idempotencyKey: idempotencyKeySchema,\n})\n\nfunction parseTransactionAmount(value: string | undefined) {\n if (value === undefined) return undefined\n return parseWithSchema({ amount: value }, 'amount', transactionAmountSchema)\n .amount\n}\n\nfunction parseConfirmPaymentAmount(value: string) {\n return parseWithSchema({ amount: value }, 'amount', confirmPaymentAmountSchema)\n .amount\n}\n\nfunction parseIdempotencyKey(value: string | undefined) {\n if (value === undefined) return undefined\n return parseWithSchema(\n { idempotencyKey: value },\n 'idempotencyKey',\n idempotencyKeyOptionSchema,\n ).idempotencyKey\n}\n\nexport function registerTransactionCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const tx = program\n .command('transaction')\n .description('Transaction management')\n\n tx.command('update')\n .description('Update transaction status')\n .requiredOption('--payment-id <id>', 'Payment ID')\n .requiredOption(\n '--status <status>',\n 'New status (pending, paid, failed, canceled, refunded)',\n )\n .option('--payment-method <method>', 'Payment method')\n .option('--receipt-url <url>', 'Receipt URL')\n .option('--payment-key <key>', 'Provider payment key')\n .option('--amount <n>', 'Provider-confirmed amount')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n {\n pgPaymentId: opts.paymentId,\n status: opts.status,\n paymentMethod: opts.paymentMethod,\n receiptUrl: opts.receiptUrl,\n paymentKey: opts.paymentKey,\n amount: parseTransactionAmount(opts.amount),\n },\n 'transaction',\n updateTransactionSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'transaction update', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.updateTransaction(data)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n\n tx.command('confirm-payment')\n .description('Confirm a provider-verified payment for an order')\n .requiredOption('--payment-id <id>', 'Provider payment identifier (pgPaymentId)')\n .requiredOption(\n '--provider <slug>',\n 'Payment provider slug (toss, portone, stripe, ...)',\n )\n .requiredOption(\n '--amount <n>',\n 'Provider-confirmed amount in minor units',\n )\n .option('--order-number <num>', 'Order number')\n .option('--pg-order-id <id>', 'Provider order id')\n .option('--currency <code>', 'Currency code')\n .option('--payment-method <method>', 'Payment method')\n .option('--receipt-url <url>', 'Receipt URL')\n .option('--approved-at <ts>', 'Provider approval timestamp')\n .option('--provider-status <status>', 'Provider status')\n .option('--provider-event-id <id>', 'Provider event id (idempotency)')\n .option('--idempotency-key <key>', 'Idempotency key header override')\n .option(\n '--confirmation-source <src>',\n 'provider_webhook | provider_lookup | provider_api_confirm | manual_server',\n )\n .option('--payment-key <key>', 'Provider payment key')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n {\n pgPaymentId: opts.paymentId,\n pgProvider: opts.provider,\n amount: parseConfirmPaymentAmount(opts.amount),\n ...(opts.orderNumber ? { orderNumber: opts.orderNumber } : {}),\n ...(opts.pgOrderId ? { pgOrderId: opts.pgOrderId } : {}),\n ...(opts.currency ? { currency: opts.currency } : {}),\n ...(opts.paymentMethod\n ? { paymentMethod: opts.paymentMethod }\n : {}),\n ...(opts.receiptUrl ? { receiptUrl: opts.receiptUrl } : {}),\n ...(opts.approvedAt ? { approvedAt: opts.approvedAt } : {}),\n ...(opts.providerStatus\n ? { providerStatus: opts.providerStatus }\n : {}),\n ...(opts.providerEventId\n ? { providerEventId: opts.providerEventId }\n : {}),\n ...(opts.confirmationSource\n ? { confirmationSource: opts.confirmationSource }\n : {}),\n ...(opts.paymentKey ? { paymentKey: opts.paymentKey } : {}),\n },\n 'confirm-payment',\n confirmPaymentSchema,\n )\n const sdkParams = {\n ...data,\n ...(opts.idempotencyKey !== undefined\n ? { idempotencyKey: parseIdempotencyKey(opts.idempotencyKey) }\n : {}),\n }\n if (opts.dryRun) {\n printResult(\n {\n dryRun: true,\n valid: true,\n action: 'transaction confirm-payment',\n data: sdkParams,\n },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.orders.confirmPayment(\n sdkParams as Parameters<typeof client.commerce.orders.confirmPayment>[0],\n )\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport { ProductUpsertSchema } from '@01.software/contracts'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseJson, parseWithSchema } from '../lib/parse.js'\n\nexport function registerProductCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const product = program.command('product').description('Product management')\n\n product\n .command('upsert')\n .description('Create or update a product graph (options, values, variants)')\n .requiredOption('--input <json>', 'Product upsert input (JSON)')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n parseJson(opts.input, 'input'),\n 'input',\n ProductUpsertSchema,\n )\n if (opts.dryRun) {\n printResult(\n { dryRun: true, valid: true, action: 'product upsert', data },\n getFormat(),\n )\n return\n }\n const client = getClient()\n const result = await client.commerce.product.upsert(\n data as Parameters<typeof client.commerce.product.upsert>[0],\n )\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerDiscountCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const discount = program\n .command('discount')\n .description('Discount management')\n\n discount\n .command('validate')\n .description('Validate a discount code against an order amount')\n .requiredOption('--code <code>', 'Discount code')\n .requiredOption('--order-amount <n>', 'Order amount', (v: string) =>\n parseInt(v, 10),\n )\n .action(async (opts) => {\n try {\n const client = getClient()\n const result = await client.commerce.discounts.validate({\n code: opts.code,\n orderAmount: opts.orderAmount,\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerShippingCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const shipping = program\n .command('shipping')\n .description('Shipping calculation')\n\n shipping\n .command('calculate')\n .description('Calculate shipping for an order amount')\n .requiredOption('--order-amount <n>', 'Order amount', (v: string) =>\n parseInt(v, 10),\n )\n .option('--shipping-policy-id <id>', 'Shipping policy ID')\n .option('--postal-code <code>', 'Destination postal code')\n .action(async (opts) => {\n try {\n const client = getClient()\n const result = await client.commerce.shipping.calculate({\n orderAmount: opts.orderAmount,\n ...(opts.shippingPolicyId\n ? { shippingPolicyId: opts.shippingPolicyId }\n : {}),\n ...(opts.postalCode ? { postalCode: opts.postalCode } : {}),\n })\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { randomBytes } from 'node:crypto'\nimport { createServer } from 'node:http'\nimport { execFile, exec } from 'node:child_process'\nimport { platform } from 'node:os'\nimport { URL } from 'node:url'\nimport type { Command } from 'commander'\nimport pc from 'picocolors'\nimport {\n loadCredentials,\n saveCredentials,\n deleteCredentials,\n getCredentialsPath,\n loadLocalCredentials,\n saveLocalCredentials,\n getLocalCredentialsPath,\n loadTenantList,\n saveTenantList,\n type TenantInfo,\n} from '../lib/credentials.js'\n\nconst WEB_URL = process.env.SOFTWARE_WEB_URL || 'https://01.software'\nconst TIMEOUT_MS = 3 * 60 * 1000 // 3 minutes\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n\nfunction openBrowser(url: string): void {\n const os = platform()\n\n const onError = () => {\n console.log(\n pc.yellow(\n `Could not open browser automatically. Open this URL manually:\\n${url}`,\n ),\n )\n }\n\n if (os === 'win32') {\n exec(`start \"\" \"${url}\"`, (err) => {\n if (err) onError()\n })\n } else {\n const cmd = os === 'darwin' ? 'open' : 'xdg-open'\n execFile(cmd, [url], (err) => {\n if (err) onError()\n })\n }\n}\n\nconst PAGE_STYLE = `*{margin:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;display:flex;justify-content:center;align-items:center;min-height:100vh;background:#fff;color:#252525}\n@media(prefers-color-scheme:dark){body{background:#252525;color:#f5f5f5}}\n.card{text-align:center;padding:2rem 2.5rem;border-radius:10px;max-width:380px;width:100%}\n.icon{width:40px;height:40px;margin:0 auto 1rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.25rem}\n.icon.ok{background:rgba(0,0,0,.05);color:#252525}\n.icon.err{background:rgba(220,38,38,.08);color:#dc2626}\n@media(prefers-color-scheme:dark){.icon.ok{background:rgba(255,255,255,.08);color:#f5f5f5}}\nh1{font-size:.875rem;font-weight:600;margin-bottom:.375rem}\np{font-size:.75rem;color:#737373;line-height:1.5}`\n\nconst SUCCESS_HTML = `<!DOCTYPE html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width\"><title>CLI Login</title>\n<style>${PAGE_STYLE}</style>\n</head><body><div class=\"card\"><div class=\"icon ok\">\\u2713</div><h1>Authenticated</h1><p>You can close this tab and return to the terminal.</p></div></body></html>`\n\nconst ERROR_HTML = (msg: string) => `<!DOCTYPE html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width\"><title>CLI Login Error</title>\n<style>${PAGE_STYLE}</style>\n</head><body><div class=\"card\"><div class=\"icon err\">!</div><h1>Authentication failed</h1><p>${escapeHtml(msg)}</p></div></body></html>`\n\ninterface ExchangeResponse {\n publishableKey: string\n secretKey: string\n tenantName: string\n tenantId: string\n tenants?: TenantInfo[]\n}\n\nasync function exchangeCode(code: string): Promise<ExchangeResponse | null> {\n const url = `${WEB_URL}/api/cli/exchange`\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code }),\n })\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n console.error(\n pc.red(\n `Exchange failed: HTTP ${res.status} from ${url}${body ? ` — ${body.slice(0, 200)}` : ''}`,\n ),\n )\n return null\n }\n const data = (await res.json()) as Partial<ExchangeResponse>\n if (\n typeof data.publishableKey !== 'string' ||\n typeof data.secretKey !== 'string' ||\n typeof data.tenantName !== 'string' ||\n typeof data.tenantId !== 'string'\n ) {\n console.error(pc.red(`Exchange failed: malformed response from ${url}`))\n return null\n }\n return {\n publishableKey: data.publishableKey,\n secretKey: data.secretKey,\n tenantName: data.tenantName,\n tenantId: data.tenantId,\n tenants: Array.isArray(data.tenants)\n ? data.tenants.filter(\n (t): t is TenantInfo =>\n typeof (t as TenantInfo)?.id === 'string' &&\n typeof (t as TenantInfo)?.name === 'string',\n )\n : undefined,\n }\n } catch (err) {\n console.error(\n pc.red(\n `Exchange request to ${url} failed: ${err instanceof Error ? err.message : String(err)}`,\n ),\n )\n return null\n }\n}\n\n/**\n * Start a local HTTP server that receives the OAuth-style redirect callback\n * from the browser. The browser top-level-navigates to\n * http://127.0.0.1:{port}/callback?code={encryptedCode}&state={state}\n * and the CLI exchanges the opaque code with the web API to receive the\n * actual credentials server-to-server. This path has no CORS or PNA\n * preflight because the browser never issues a subresource fetch.\n */\nfunction startAuthServer(options: {\n state: string\n saveFn: (creds: {\n publishableKey: string\n secretKey: string\n tenantId?: string\n tenantName: string\n }) => void\n}): Promise<{ port: number; cleanup: (exitCode?: number) => void }> {\n return new Promise((resolve, reject) => {\n const server = createServer((req, res) => {\n if (!req.url) {\n res.writeHead(400).end()\n return\n }\n\n const url = new URL(req.url, `http://localhost`)\n\n if (url.pathname !== '/callback' || req.method !== 'GET') {\n res.writeHead(404).end()\n return\n }\n\n const error = url.searchParams.get('error')\n if (error) {\n res\n .writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML(error))\n console.error(pc.red(`Login failed: ${error}`))\n cleanup(2)\n return\n }\n\n const code = url.searchParams.get('code')\n const receivedState = url.searchParams.get('state')\n\n if (!code || !receivedState) {\n res\n .writeHead(400, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML('Missing code or state. Start over with \"01 login\".'))\n cleanup(2)\n return\n }\n\n if (receivedState !== options.state) {\n res\n .writeHead(403, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML('State mismatch. Start over with \"01 login\".'))\n console.error(pc.red('Login failed: state mismatch.'))\n cleanup(2)\n return\n }\n\n exchangeCode(code).then((creds) => {\n if (!creds) {\n res\n .writeHead(400, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(ERROR_HTML('Invalid or expired code. Start over with \"01 login\".'))\n console.error(pc.red('Login failed: code exchange failed.'))\n cleanup(2)\n return\n }\n\n options.saveFn({\n publishableKey: creds.publishableKey,\n secretKey: creds.secretKey,\n tenantId: creds.tenantId,\n tenantName: creds.tenantName,\n })\n\n if (creds.tenants && creds.tenants.length > 0) {\n saveTenantList(creds.tenants)\n }\n\n console.log(pc.green(`\\nLogged in successfully!`))\n console.log(pc.dim(`Tenant: ${creds.tenantName}`))\n\n res\n .writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', Connection: 'close' })\n .end(SUCCESS_HTML)\n cleanup(0)\n })\n })\n\n let timeout: ReturnType<typeof setTimeout>\n let completed = false\n\n function cleanup(exitCode = 0) {\n if (completed) return\n completed = true\n clearTimeout(timeout)\n server.closeAllConnections?.()\n server.close(() => process.exit(exitCode))\n }\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address()\n if (!addr || typeof addr === 'string') {\n reject(new Error('Failed to start local server.'))\n return\n }\n\n timeout = setTimeout(() => {\n console.error(\n pc.red('\\nLogin timed out (3 minutes). Please try again.'),\n )\n cleanup(4)\n }, TIMEOUT_MS)\n\n resolve({ port: addr.port, cleanup })\n })\n\n server.on('error', (err) => {\n reject(err)\n })\n })\n}\n\nexport function registerAuthCommands(program: Command): void {\n program\n .command('login')\n .description('Login via browser and store credentials')\n .action(async () => {\n const state = randomBytes(32).toString('hex')\n\n try {\n const { port } = await startAuthServer({\n state,\n saveFn: (creds) => {\n saveCredentials(creds)\n console.log(pc.dim(`Credentials saved to ${getCredentialsPath()}`))\n },\n })\n\n const params = new URLSearchParams({ port: String(port), state })\n const loginUrl = `${WEB_URL}/cli-auth?${params.toString()}`\n\n console.log(pc.dim('Opening browser for login...'))\n console.log(pc.dim(`If the browser does not open, visit:\\n${loginUrl}`))\n openBrowser(loginUrl)\n } catch (err) {\n console.error(\n pc.red(\n `Server error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n )\n process.exit(4)\n }\n })\n\n program\n .command('logout')\n .description('Remove stored credentials')\n .action(() => {\n const deleted = deleteCredentials()\n if (deleted) {\n console.log(pc.green('Logged out. Credentials removed.'))\n } else {\n console.log(pc.dim('No stored credentials found.'))\n }\n })\n\n program\n .command('whoami')\n .description('Show current authentication status')\n .action(() => {\n // Check local credentials first\n const localCreds = loadLocalCredentials()\n const globalCreds = loadCredentials()\n const creds = localCreds || globalCreds\n const isLocal = !!localCreds\n\n if (!creds) {\n console.log(pc.dim('Not logged in. Run \"01 login\" to authenticate.'))\n return\n }\n\n const masked =\n creds.publishableKey.length > 8\n ? creds.publishableKey.slice(0, 4) + '...' + creds.publishableKey.slice(-4)\n : '****'\n\n const scope = isLocal ? pc.cyan(' (local)') : ''\n console.log(`Tenant: ${pc.bold(creds.tenantName)}${scope}`)\n console.log(`Publishable Key: ${pc.dim(masked)}`)\n console.log(`Stored at: ${pc.dim(creds.storedAt)}`)\n console.log(\n `File: ${pc.dim(isLocal ? getLocalCredentialsPath() : getCredentialsPath())}`,\n )\n })\n\n // -------------------------------------------------------------------------\n // tenant subcommands\n // -------------------------------------------------------------------------\n const tenant = program\n .command('tenant')\n .description('Manage tenant switching')\n\n tenant\n .command('list')\n .description('Show cached tenant list')\n .action(() => {\n const tenants = loadTenantList()\n if (!tenants || tenants.length === 0) {\n console.log(pc.dim('No cached tenants. Run \"01 login\" first.'))\n return\n }\n\n // Determine active tenant\n const localCreds = loadLocalCredentials()\n const globalCreds = loadCredentials()\n const activeCreds = localCreds || globalCreds\n const activeId = activeCreds?.tenantId\n const activeName = activeCreds?.tenantName\n\n console.log(pc.bold('Cached tenants:\\n'))\n for (const t of tenants) {\n const active = (activeId ? t.id === activeId : t.name === activeName)\n ? pc.green(' *')\n : ''\n console.log(` ${t.name}${active}`)\n }\n console.log()\n if (activeName) {\n const scope = localCreds ? '(local)' : '(global)'\n console.log(pc.dim(`* active ${scope}`))\n }\n })\n\n tenant\n .command('use <name>')\n .description('Switch to a different tenant via browser')\n .option('--local', 'Save credentials locally in the current project')\n .action(async (name: string, opts: { local?: boolean }) => {\n const tenants = loadTenantList()\n if (!tenants || tenants.length === 0) {\n console.error(pc.red('No cached tenants. Run \"01 login\" first.'))\n process.exit(2)\n }\n\n const match = tenants.find(\n (t) => t.name.toLowerCase() === name.toLowerCase(),\n )\n if (!match) {\n console.error(pc.red(`Tenant \"${name}\" not found in cache.`))\n console.error(\n pc.dim(`Available: ${tenants.map((t) => t.name).join(', ')}`),\n )\n process.exit(3)\n }\n\n const state = randomBytes(32).toString('hex')\n const isLocal = !!opts.local\n\n try {\n const { port } = await startAuthServer({\n state,\n saveFn: (creds) => {\n if (isLocal) {\n saveLocalCredentials(creds)\n console.log(\n pc.dim(`Credentials saved to ${getLocalCredentialsPath()}`),\n )\n } else {\n saveCredentials(creds)\n console.log(\n pc.dim(`Credentials saved to ${getCredentialsPath()}`),\n )\n }\n },\n })\n\n const params = new URLSearchParams({\n port: String(port),\n state,\n tenantId: match.id,\n })\n const loginUrl = `${WEB_URL}/cli-auth?${params.toString()}`\n\n console.log(pc.dim(`Switching to tenant \"${match.name}\"...`))\n console.log(pc.dim(`If the browser does not open, visit:\\n${loginUrl}`))\n openBrowser(loginUrl)\n } catch (err) {\n console.error(\n pc.red(\n `Server error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n )\n process.exit(4)\n }\n })\n}\n","import { Command } from 'commander'\nimport { SERVER_COLLECTIONS } from '@01.software/sdk'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { validateCollection } from '../lib/collections.js'\nimport { printResult, exitWithError } from '../lib/output.js'\n\nexport function registerSchemaCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const schema = program\n .command('schema')\n .description('Collection schema introspection')\n\n schema\n .command('list')\n .description('List available collections')\n .action(() => {\n printResult(SERVER_COLLECTIONS, getFormat())\n })\n\n schema\n .command('show <collection>')\n .description('Show collection field schema')\n .action(async (collection: string) => {\n try {\n const col = validateCollection(collection)\n const client = getClient()\n const result = await client.tenant.collectionSchema(col)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\n}\n","import { Command } from 'commander'\nimport {\n tenantFeatureProgressInputSchema,\n tenantFeatureProgressResponseSchema,\n type TenantFeatureProgressResponse,\n} from '@01.software/contracts'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { printResult, exitWithError } from '../lib/output.js'\nimport { parseWithSchema } from '../lib/parse.js'\n\nfunction flattenProgress(progress: TenantFeatureProgressResponse) {\n return progress.groups.flatMap((group) =>\n group.items.map((item) => ({\n group: group.title,\n item: item.title,\n state: item.state,\n severity: item.severity,\n summary: item.summary,\n })),\n )\n}\n\nexport function registerFeatureCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const feature = program\n .command('feature')\n .description('Feature implementation progress checks')\n\n feature\n .command('check <feature>')\n .description('Check tenant implementation progress for a feature')\n .option('--evidence', 'Include sanitized evidence counts and surface flags')\n .action(async (featureName: string, options: { evidence?: boolean }) => {\n try {\n const input = parseWithSchema(\n {\n feature: featureName,\n includeEvidence: Boolean(options.evidence),\n },\n 'feature',\n tenantFeatureProgressInputSchema,\n )\n const client = getClient()\n const result = tenantFeatureProgressResponseSchema.parse(\n await client.tenant.featureProgress(input),\n )\n const format = getFormat()\n printResult(\n format === 'table' ? flattenProgress(result) : result,\n format,\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n}\n","import { Command, type CommanderError } from 'commander'\nimport { SERVER_COLLECTIONS } from '@01.software/sdk'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { isAgentPlanCollection } from '../lib/agent-plan-allowlist.js'\nimport { exitWithAgentError, printAgentSuccess } from '../lib/agent-output.js'\nimport {\n parseSelect,\n validateCollection,\n type CliCollection,\n} from '../lib/collections.js'\nimport { registerAgentPlanCommands } from './agent-plan.js'\n\nconst AGENT_PROTOCOL_VERSION = '1'\n\ntype AgentReadOperation = 'query' | 'get'\ntype AgentPlanOperationName = 'plan:create' | 'plan:update' | 'plan:delete'\ntype AgentOperation = AgentReadOperation | AgentPlanOperationName\n\ntype AgentFieldName = 'id' | 'createdAt' | 'updatedAt'\n\ninterface AgentFieldMetadata {\n type: 'string'\n queryable: boolean\n}\n\ntype AgentFieldMap = Record<AgentFieldName, AgentFieldMetadata>\n\nexport interface AgentManifest {\n version: typeof AGENT_PROTOCOL_VERSION\n collections: Record<\n CliCollection,\n {\n operations: readonly AgentOperation[]\n fields: AgentFieldMap\n }\n >\n}\n\nfunction buildStableAgentFields(): AgentFieldMap {\n return {\n id: { type: 'string', queryable: true },\n createdAt: { type: 'string', queryable: true },\n updatedAt: { type: 'string', queryable: true },\n }\n}\n\nfunction invalidInput(message: string, field: string, value?: unknown): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: 'invalid_argument',\n field,\n detail: { message, value, field },\n })\n return error\n}\n\nfunction parsePositiveInteger(\n value: string | undefined,\n field: 'limit' | 'page',\n): number | undefined {\n if (value == null) return undefined\n if (/^[1-9]\\d*$/.test(value)) return Number(value)\n throw invalidInput(`--${field} must be a positive integer`, field, value)\n}\n\nfunction handleCommanderError(error: CommanderError): never {\n if (error.code === 'commander.helpDisplayed') {\n process.exit(error.exitCode)\n }\n\n exitWithAgentError(invalidInput(error.message, 'command'))\n}\n\nfunction configureAgentParser(command: Command): Command {\n command.configureOutput({\n writeErr: () => {},\n writeOut: (str) => {\n process.stdout.write(str)\n },\n })\n command.exitOverride(handleCommanderError)\n return command\n}\n\nfunction parseWhere(\n value: string | undefined,\n): Record<string, unknown> | undefined {\n if (value == null) return undefined\n\n try {\n const parsed: unknown = JSON.parse(value)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>\n }\n } catch {\n throw invalidInput('--where must be a JSON object', 'where', value)\n }\n\n throw invalidInput('--where must be a JSON object', 'where', value)\n}\n\nconst AGENT_READ_OPERATIONS = [\n 'query',\n 'get',\n] as const satisfies readonly AgentReadOperation[]\nconst AGENT_PLAN_OPERATIONS = [\n 'plan:create',\n 'plan:update',\n 'plan:delete',\n] as const satisfies readonly AgentPlanOperationName[]\n\nexport function buildAgentManifest(): AgentManifest {\n const collections = {} as AgentManifest['collections']\n for (const collection of SERVER_COLLECTIONS) {\n const operations: AgentOperation[] = isAgentPlanCollection(collection)\n ? [...AGENT_READ_OPERATIONS, ...AGENT_PLAN_OPERATIONS]\n : [...AGENT_READ_OPERATIONS]\n collections[collection] = {\n operations,\n fields: buildStableAgentFields(),\n }\n }\n\n return {\n version: AGENT_PROTOCOL_VERSION,\n collections,\n }\n}\n\nfunction validateAgentCollection(collection: string): CliCollection {\n try {\n return validateCollection(collection)\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : `Unknown collection \"${collection}\".`\n throw invalidInput(message, 'collection', collection)\n }\n}\n\nexport function registerAgentCommands(\n program: Command,\n getClient: () => ResolvedClient,\n): void {\n const agent = configureAgentParser(\n program\n .command('agent')\n .description('Machine-stable CLI namespace for coding agents')\n .addHelpText(\n 'after',\n '\\nContract: docs/agent-cli-contract.md\\nJSON only on stdout; no TTY effects.',\n ),\n )\n\n configureAgentParser(\n agent\n .command('manifest')\n .description('Print the Agent CLI protocol manifest')\n .option('--pretty', 'Print 2-space indented JSON')\n .action((opts: { pretty?: boolean }) => {\n printAgentSuccess(buildAgentManifest(), {\n pretty: Boolean(opts.pretty),\n })\n }),\n )\n\n configureAgentParser(\n agent\n .command('query <collection>')\n .description('Query documents from a collection')\n .option('--where <json>', 'Filter conditions as a JSON object')\n .option('--limit <n>', 'Max results')\n .option('--page <n>', 'Page number')\n .option('--sort <field>', 'Sort field; prefix with - for descending')\n .option('--select <fields>', 'Comma-separated fields to select')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n opts: {\n where?: string\n limit?: string\n page?: string\n sort?: string\n select?: string\n pretty?: boolean\n },\n ) => {\n try {\n const col = validateAgentCollection(collection)\n const options: Record<string, unknown> = {}\n const where = parseWhere(opts.where)\n const limit = parsePositiveInteger(opts.limit, 'limit')\n const page = parsePositiveInteger(opts.page, 'page')\n\n if (where) options.where = where\n if (limit != null) options.limit = limit\n if (page != null) options.page = page\n if (opts.sort) options.sort = opts.sort\n if (opts.select) options.select = parseSelect(opts.select)\n\n const client = getClient()\n const result = await client.collections.from(col).find(options)\n printAgentSuccess(result, { pretty: Boolean(opts.pretty) })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n agent\n .command('get <collection> [id]')\n .description('Get a document by ID')\n .option('--select <fields>', 'Comma-separated fields to select')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n id: string | undefined,\n opts: { select?: string; pretty?: boolean },\n ) => {\n try {\n const col = validateAgentCollection(collection)\n if (!id) {\n throw invalidInput('Missing required argument: id', 'id')\n }\n\n const options: Record<string, unknown> = {}\n if (opts.select) options.select = parseSelect(opts.select)\n\n const client = getClient()\n const result = await client.collections\n .from(col)\n .findById(id, options)\n printAgentSuccess(result, { pretty: Boolean(opts.pretty) })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n registerAgentPlanCommands(agent, getClient)\n}\n","import { classifyError } from './admin-error.js'\n\nexport type AgentErrorCode =\n | 'INVALID_INPUT'\n | 'AUTH_FAILED'\n | 'NOT_FOUND'\n | 'INTERNAL'\n | 'PLAN_EXPIRED'\n | 'PLAN_MISMATCH'\n | 'PLAN_STALE'\n | 'UNSUPPORTED_OPERATION'\n\nconst PLAN_AGENT_ERROR_CODES: ReadonlySet<AgentErrorCode> = new Set([\n 'PLAN_EXPIRED',\n 'PLAN_MISMATCH',\n 'PLAN_STALE',\n 'UNSUPPORTED_OPERATION',\n])\n\nexport function agentPlanError(\n code:\n | 'PLAN_EXPIRED'\n | 'PLAN_MISMATCH'\n | 'PLAN_STALE'\n | 'UNSUPPORTED_OPERATION'\n | 'INVALID_INPUT',\n message: string,\n): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: code.toLowerCase(),\n agentCode: code,\n detail: { message, agentCode: code },\n })\n return error\n}\n\nexport interface AgentErrorEnvelope {\n error: {\n code: AgentErrorCode\n message: string\n }\n}\n\nexport interface AgentPrintOptions {\n pretty?: boolean\n}\n\nfunction stringifyAgentJson(\n data: unknown,\n options: AgentPrintOptions = {},\n): string {\n return options.pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data)\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : null\n}\n\nfunction errorMessage(error: unknown): string {\n const raw = asRecord(error)\n if (raw) {\n if (typeof raw.message === 'string' && raw.message.length > 0) {\n return raw.message\n }\n if (\n raw.detail &&\n typeof raw.detail === 'object' &&\n typeof (raw.detail as Record<string, unknown>).message === 'string'\n ) {\n return String((raw.detail as Record<string, unknown>).message)\n }\n }\n if (error instanceof Error && error.message.length > 0) {\n return error.message\n }\n if (typeof error === 'string' && error.length > 0) {\n return error\n }\n return 'Internal error'\n}\n\nfunction isRawNotFound(error: unknown): boolean {\n const raw = asRecord(error)\n return (\n raw?.status === 404 ||\n raw?.code === 'not_found' ||\n raw?.name === 'GoneError'\n )\n}\n\nexport function agentErrorExitCode(code: AgentErrorCode): number {\n switch (code) {\n case 'INVALID_INPUT':\n case 'PLAN_EXPIRED':\n case 'PLAN_MISMATCH':\n case 'PLAN_STALE':\n case 'UNSUPPORTED_OPERATION':\n return 2\n case 'AUTH_FAILED':\n return 3\n case 'NOT_FOUND':\n return 4\n case 'INTERNAL':\n return 1\n }\n}\n\nexport function classifyAgentError(error: unknown): AgentErrorEnvelope {\n const raw = asRecord(error)\n const message = errorMessage(error)\n const detail = raw?.detail\n const detailRecord =\n detail && typeof detail === 'object'\n ? (detail as Record<string, unknown>)\n : null\n const agentCode = raw?.agentCode ?? detailRecord?.agentCode\n if (\n typeof agentCode === 'string' &&\n PLAN_AGENT_ERROR_CODES.has(agentCode as AgentErrorCode)\n ) {\n return { error: { code: agentCode as AgentErrorCode, message } }\n }\n\n const adminError = classifyError(error)\n\n if (isRawNotFound(error) || adminError.code === 'not_found') {\n return { error: { code: 'NOT_FOUND', message } }\n }\n\n if (adminError.type === 'permission') {\n return { error: { code: 'AUTH_FAILED', message } }\n }\n\n if (adminError.type === 'validation' && adminError.code !== 'unknown') {\n return { error: { code: 'INVALID_INPUT', message } }\n }\n\n return { error: { code: 'INTERNAL', message } }\n}\n\nexport function printAgentSuccess(\n data: unknown,\n options: AgentPrintOptions = {},\n): void {\n console.log(stringifyAgentJson(data, options))\n}\n\nexport function printAgentError(\n error: unknown,\n options: AgentPrintOptions = {},\n): AgentErrorEnvelope {\n const envelope = classifyAgentError(error)\n console.log(stringifyAgentJson(envelope, options))\n return envelope\n}\n\nexport function exitWithAgentError(\n error: unknown,\n options: AgentPrintOptions = {},\n): never {\n const envelope = printAgentError(error, options)\n process.exit(agentErrorExitCode(envelope.error.code))\n}\n","import { agentPlanError } from './agent-output.js'\n\nexport const AGENT_PLAN_COLLECTIONS = [\n 'articles',\n 'article-categories',\n 'article-tags',\n 'links',\n 'link-categories',\n 'link-tags',\n] as const\n\nexport type AgentPlanCollection = (typeof AGENT_PLAN_COLLECTIONS)[number]\nexport type AgentPlanOperation = 'create' | 'update' | 'delete'\n\nconst AGENT_PLAN_COLLECTION_SET = new Set<string>(AGENT_PLAN_COLLECTIONS)\n\nexport function isAgentPlanCollection(\n collection: string,\n): collection is AgentPlanCollection {\n return AGENT_PLAN_COLLECTION_SET.has(collection)\n}\n\nexport function assertAgentPlanCollection(collection: string): AgentPlanCollection {\n if (isAgentPlanCollection(collection)) {\n return collection\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Collection \"${collection}\" is not supported for agent plan mutations.`,\n )\n}\n\nexport function assertAgentPlanOperation(\n operation: string,\n): AgentPlanOperation {\n if (operation === 'create' || operation === 'update' || operation === 'delete') {\n return operation\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Operation \"${operation}\" is not supported for agent plan mutations.`,\n )\n}\n","import { createHash } from 'node:crypto'\n\nexport function buildAuthContextFingerprint(input: {\n publishableKey: string\n secretKey: string\n apiUrl?: string\n tenantId?: string\n}): string {\n const apiUrl =\n input.apiUrl ??\n process.env.SOFTWARE_API_URL ??\n process.env.NEXT_PUBLIC_SOFTWARE_API_URL ??\n ''\n const tenantId = input.tenantId ?? process.env.SOFTWARE_TENANT_ID ?? ''\n const secretDigest = createHash('sha256').update(input.secretKey).digest('hex')\n const material = [input.publishableKey, secretDigest, apiUrl, tenantId].join('\\n')\n return createHash('sha256').update(material).digest('hex')\n}\n","import { mkdir, open, readFile, unlink, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport {\n isAgentPlanCollection,\n type AgentPlanCollection,\n type AgentPlanOperation,\n} from './agent-plan-allowlist.js'\nimport { hashAgentPlanEnvelope } from './agent-plan-hash.js'\nimport { assertValidPlanId, safePlanPath } from './agent-plan-id.js'\nimport { agentPlanError } from './agent-output.js'\n\nexport const AGENT_PLAN_TTL_MS = 15 * 60 * 1000\n\nexport type AgentPlanStatus = 'pending' | 'claimed' | 'consumed'\n\nexport interface StoredAgentPlan {\n planId: string\n planHash: string\n operation: AgentPlanOperation\n collection: AgentPlanCollection\n documentId?: string\n payload?: Record<string, unknown>\n baseUpdatedAt?: string\n authFingerprint: string\n createdAt: string\n expiresAt: string\n status: AgentPlanStatus\n}\n\nexport function resolveAgentPlanDir(): string {\n const override = process.env.SOFTWARE_AGENT_PLAN_DIR?.trim()\n if (override) {\n return override\n }\n return join(homedir(), '.01software', 'agent-plans')\n}\n\nfunction parseExpiresAtMs(expiresAt: string): number {\n const ms = Date.parse(expiresAt)\n if (!Number.isFinite(ms)) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has invalid expiresAt.')\n }\n return ms\n}\n\nfunction parseStoredAgentPlan(raw: unknown, planId: string): StoredAgentPlan {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan is corrupted.')\n }\n const record = raw as Record<string, unknown>\n if (record.planId !== planId) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan id does not match token.')\n }\n if (\n typeof record.planHash !== 'string' ||\n typeof record.operation !== 'string' ||\n typeof record.collection !== 'string' ||\n typeof record.authFingerprint !== 'string' ||\n typeof record.createdAt !== 'string' ||\n typeof record.expiresAt !== 'string' ||\n typeof record.status !== 'string'\n ) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan is missing required fields.')\n }\n if (\n record.status !== 'pending' &&\n record.status !== 'claimed' &&\n record.status !== 'consumed'\n ) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has invalid status.')\n }\n\n if (!isAgentPlanCollection(record.collection)) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has unsupported collection.')\n }\n const collection = record.collection\n const operation = record.operation\n if (operation !== 'create' && operation !== 'update' && operation !== 'delete') {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan has invalid operation.')\n }\n\n const payload =\n record.payload == null\n ? undefined\n : typeof record.payload === 'object' && !Array.isArray(record.payload)\n ? (record.payload as Record<string, unknown>)\n : (() => {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan payload is invalid.')\n })()\n\n const documentId =\n record.documentId == null\n ? undefined\n : typeof record.documentId === 'string'\n ? record.documentId\n : (() => {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan documentId is invalid.')\n })()\n\n const baseUpdatedAt =\n record.baseUpdatedAt == null\n ? undefined\n : typeof record.baseUpdatedAt === 'string'\n ? record.baseUpdatedAt\n : (() => {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan baseUpdatedAt is invalid.')\n })()\n\n return {\n planId,\n planHash: record.planHash,\n operation,\n collection,\n documentId,\n payload,\n baseUpdatedAt,\n authFingerprint: record.authFingerprint,\n createdAt: record.createdAt,\n expiresAt: record.expiresAt,\n status: record.status,\n }\n}\n\nexport function assertStoredPlanHashMatches(plan: StoredAgentPlan): void {\n const expected = hashAgentPlanEnvelope({\n operation: plan.operation,\n collection: plan.collection,\n documentId: plan.documentId,\n payload: plan.payload,\n })\n if (plan.planHash !== expected) {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan hash does not match plan contents.')\n }\n}\n\nfunction assertPlanNotExpired(plan: StoredAgentPlan): void {\n if (Date.now() > parseExpiresAtMs(plan.expiresAt)) {\n throw agentPlanError('PLAN_EXPIRED', 'Plan expired.')\n }\n}\n\nasync function readAgentPlanFile(\n planDir: string,\n planId: string,\n): Promise<StoredAgentPlan> {\n assertValidPlanId(planId)\n let raw: string\n try {\n raw = await readFile(safePlanPath(planDir, planId), 'utf8')\n } catch {\n throw agentPlanError('PLAN_MISMATCH', 'Plan not found.')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw agentPlanError('PLAN_MISMATCH', 'Stored plan is corrupted.')\n }\n\n return parseStoredAgentPlan(parsed, planId)\n}\n\nasync function writeAgentPlanFile(\n planDir: string,\n plan: StoredAgentPlan,\n): Promise<void> {\n await writeFile(safePlanPath(planDir, plan.planId), JSON.stringify(plan), {\n encoding: 'utf8',\n mode: 0o600,\n })\n}\n\nexport async function writeAgentPlan(input: {\n planDir: string\n record: Omit<StoredAgentPlan, 'planId' | 'status'> & { planId?: string }\n}): Promise<StoredAgentPlan> {\n await mkdir(input.planDir, { recursive: true, mode: 0o700 })\n const planId = input.record.planId ?? randomUUID()\n assertValidPlanId(planId)\n const plan: StoredAgentPlan = {\n ...input.record,\n planId,\n status: 'pending',\n }\n assertStoredPlanHashMatches(plan)\n await writeAgentPlanFile(input.planDir, plan)\n return plan\n}\n\nexport async function claimAgentPlan(input: {\n planDir: string\n planId: string\n planHash: string\n authFingerprint: string\n}): Promise<StoredAgentPlan> {\n assertValidPlanId(input.planId)\n const planPath = safePlanPath(input.planDir, input.planId)\n const lockPath = `${planPath}.lock`\n let lockHandle: Awaited<ReturnType<typeof open>> | undefined\n\n try {\n lockHandle = await open(lockPath, 'wx', 0o600)\n } catch {\n throw agentPlanError('PLAN_MISMATCH', 'Plan was already claimed or consumed.')\n }\n\n try {\n const plan = await readAgentPlanFile(input.planDir, input.planId)\n assertPlanNotExpired(plan)\n assertStoredPlanHashMatches(plan)\n\n if (plan.planHash !== input.planHash) {\n throw agentPlanError('PLAN_MISMATCH', 'Plan hash does not match stored plan.')\n }\n\n if (plan.authFingerprint !== input.authFingerprint) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Plan auth context does not match current credentials.',\n )\n }\n\n if (plan.status !== 'pending') {\n throw agentPlanError('PLAN_MISMATCH', 'Plan was already claimed or consumed.')\n }\n\n const claimed: StoredAgentPlan = { ...plan, status: 'claimed' }\n await writeAgentPlanFile(input.planDir, claimed)\n return claimed\n } finally {\n if (lockHandle) {\n await lockHandle.close().catch(() => {})\n }\n await unlink(lockPath).catch(() => {})\n }\n}\n\nexport async function releaseAgentPlanClaim(input: {\n planDir: string\n planId: string\n}): Promise<void> {\n const plan = await readAgentPlanFile(input.planDir, input.planId)\n if (plan.status !== 'claimed') {\n return\n }\n await writeAgentPlanFile(input.planDir, { ...plan, status: 'pending' })\n}\n\nexport async function markAgentPlanConsumed(input: {\n planDir: string\n planId: string\n}): Promise<void> {\n const plan = await readAgentPlanFile(input.planDir, input.planId)\n await writeAgentPlanFile(input.planDir, { ...plan, status: 'consumed' })\n}\n","import { createHash } from 'node:crypto'\nimport type {\n AgentPlanCollection,\n AgentPlanOperation,\n} from './agent-plan-allowlist.js'\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortKeys)\n }\n if (value && typeof value === 'object') {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = sortKeys((value as Record<string, unknown>)[key])\n return acc\n }, {})\n }\n return value\n}\n\nexport function hashPlanPayload(payload: unknown): string {\n const canonical = JSON.stringify(sortKeys(payload))\n return createHash('sha256').update(canonical).digest('hex')\n}\n\nexport interface AgentPlanHashInput {\n operation: AgentPlanOperation\n collection: AgentPlanCollection\n documentId?: string\n payload?: Record<string, unknown>\n}\n\nexport function hashAgentPlanEnvelope(input: AgentPlanHashInput): string {\n return hashPlanPayload({\n operation: input.operation,\n collection: input.collection,\n documentId: input.documentId,\n payload: input.payload,\n })\n}\n","import { resolve, sep } from 'node:path'\nimport { agentPlanError } from './agent-output.js'\n\nconst PLAN_ID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\nexport function assertValidPlanId(planId: string): void {\n if (!PLAN_ID_PATTERN.test(planId)) {\n throw agentPlanError('INVALID_INPUT', 'Invalid plan token.')\n }\n}\n\nexport function safePlanPath(planDir: string, planId: string): string {\n assertValidPlanId(planId)\n const resolvedDir = resolve(planDir)\n const resolvedPath = resolve(resolvedDir, `${planId}.json`)\n if (\n resolvedPath !== resolvedDir &&\n !resolvedPath.startsWith(`${resolvedDir}${sep}`)\n ) {\n throw agentPlanError('INVALID_INPUT', 'Invalid plan token.')\n }\n return resolvedPath\n}\n","import type { AgentPlanOperation } from './agent-plan-allowlist.js'\nimport { agentPlanError } from './agent-output.js'\n\nexport function readDocumentUpdatedAt(doc: unknown): string | undefined {\n if (!doc || typeof doc !== 'object') {\n return undefined\n }\n const updatedAt = (doc as Record<string, unknown>).updatedAt\n return typeof updatedAt === 'string' && updatedAt.length > 0\n ? updatedAt\n : undefined\n}\n\nexport function assertPlanBaseUpdatedAt(\n operation: AgentPlanOperation,\n baseUpdatedAt: string | undefined,\n): void {\n if (operation === 'create') {\n return\n }\n if (!baseUpdatedAt) {\n throw agentPlanError(\n 'INVALID_INPUT',\n 'Document is missing updatedAt; cannot plan update or delete.',\n )\n }\n}\n\nexport async function assertPlanNotStale(input: {\n operation: AgentPlanOperation\n baseUpdatedAt?: string\n currentUpdatedAt?: string\n}): Promise<void> {\n if (input.operation === 'create') {\n return\n }\n if (!input.baseUpdatedAt || !input.currentUpdatedAt) {\n throw agentPlanError(\n 'PLAN_STALE',\n 'Document is missing updatedAt for stale check.',\n )\n }\n if (input.baseUpdatedAt !== input.currentUpdatedAt) {\n throw agentPlanError(\n 'PLAN_STALE',\n 'Document changed since the plan was created.',\n )\n }\n}\n","import type { ResolvedClient } from './client.js'\nimport { agentPlanError } from './agent-output.js'\nimport type { StoredAgentPlan } from './agent-plan-store.js'\nimport {\n markAgentPlanConsumed,\n resolveAgentPlanDir,\n} from './agent-plan-store.js'\nimport {\n assertPlanNotStale,\n readDocumentUpdatedAt,\n} from './agent-plan-stale.js'\n\nexport async function executeAgentPlanMutation(\n client: ResolvedClient,\n plan: StoredAgentPlan,\n): Promise<unknown> {\n const collection = client.collections.from(plan.collection)\n\n if (plan.operation === 'create') {\n const response = await collection.create(plan.payload ?? {})\n return response.doc\n }\n\n if (!plan.documentId) {\n throw agentPlanError('PLAN_MISMATCH', 'Plan is missing document id.')\n }\n\n if (plan.operation === 'update') {\n const current = await collection.findById(plan.documentId)\n await assertPlanNotStale({\n operation: plan.operation,\n baseUpdatedAt: plan.baseUpdatedAt,\n currentUpdatedAt: readDocumentUpdatedAt(current),\n })\n const response = await collection.update(plan.documentId, plan.payload ?? {})\n return response.doc\n }\n\n const current = await collection.findById(plan.documentId)\n await assertPlanNotStale({\n operation: plan.operation,\n baseUpdatedAt: plan.baseUpdatedAt,\n currentUpdatedAt: readDocumentUpdatedAt(current),\n })\n return collection.remove(plan.documentId)\n}\n\nexport async function finalizeAgentPlan(plan: StoredAgentPlan): Promise<void> {\n await markAgentPlanConsumed({\n planDir: resolveAgentPlanDir(),\n planId: plan.planId,\n })\n}\n","import { readFileSync } from 'node:fs'\nimport { stdin } from 'node:process'\nimport { agentPlanError } from './agent-output.js'\n\nasync function readStdinUtf8(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n return Buffer.concat(chunks).toString('utf8')\n}\n\nexport async function readAgentPlanPayload(opts: {\n dataStdin?: boolean\n dataFile?: string\n}): Promise<Record<string, unknown>> {\n const sourceCount = [opts.dataStdin, opts.dataFile].filter(Boolean).length\n if (sourceCount !== 1) {\n throw agentPlanError(\n 'INVALID_INPUT',\n 'Exactly one of --data-stdin or --data-file is required.',\n )\n }\n\n let raw: string\n try {\n raw = opts.dataStdin\n ? await readStdinUtf8()\n : readFileSync(opts.dataFile!, 'utf8')\n } catch {\n throw agentPlanError(\n 'INVALID_INPUT',\n 'Mutation data file could not be read.',\n )\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw agentPlanError('INVALID_INPUT', 'Mutation data must be valid JSON.')\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw agentPlanError('INVALID_INPUT', 'Mutation data must be a JSON object.')\n }\n\n return parsed as Record<string, unknown>\n}\n","import { agentPlanError } from './agent-output.js'\n\nconst SECRET_KEY =\n /(?:^|_)(?:secret|password|token|api[_-]?key|private[_-]?key|credential)(?:$|_)/i\n\nfunction isSecretFieldName(key: string): boolean {\n if (SECRET_KEY.test(key)) {\n return true\n }\n const snake = key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase()\n return SECRET_KEY.test(snake)\n}\n\nexport function assertNoSecretFields(value: unknown, path = ''): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n assertNoSecretFields(item, `${path}[${index}]`)\n })\n return\n }\n\n if (!value || typeof value !== 'object') {\n return\n }\n\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n const fieldPath = path ? `${path}.${key}` : key\n if (isSecretFieldName(key)) {\n throw agentPlanError(\n 'INVALID_INPUT',\n `Secret-looking field \"${fieldPath}\" is not allowed in agent mutation payloads.`,\n )\n }\n assertNoSecretFields(child, fieldPath)\n }\n}\n","import { assertValidPlanId } from './agent-plan-id.js'\nimport { agentPlanError } from './agent-output.js'\n\nexport interface AgentPlanToken {\n planId: string\n planHash: string\n expiresAt: string\n}\n\nexport function encodePlanToken(token: AgentPlanToken): string {\n return Buffer.from(JSON.stringify(token), 'utf8').toString('base64url')\n}\n\nexport function decodePlanToken(raw: string): AgentPlanToken {\n try {\n const parsed: unknown = JSON.parse(\n Buffer.from(raw, 'base64url').toString('utf8'),\n )\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('invalid token')\n }\n const record = parsed as Record<string, unknown>\n if (\n typeof record.planId !== 'string' ||\n typeof record.planHash !== 'string' ||\n typeof record.expiresAt !== 'string'\n ) {\n throw new Error('invalid token fields')\n }\n assertValidPlanId(record.planId)\n return {\n planId: record.planId,\n planHash: record.planHash,\n expiresAt: record.expiresAt,\n }\n } catch {\n throw agentPlanError('INVALID_INPUT', 'Invalid plan token.')\n }\n}\n\nexport function buildConfirmCommand(planToken: string, planHash: string): string {\n return `01 agent confirm ${planToken} --hash ${planHash}`\n}\n","import { Command, type CommanderError } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport {\n assertAgentPlanCollection,\n type AgentPlanOperation,\n} from '../lib/agent-plan-allowlist.js'\nimport { buildAuthContextFingerprint } from '../lib/agent-plan-auth.js'\nimport {\n executeAgentPlanMutation,\n finalizeAgentPlan,\n} from '../lib/agent-plan-confirm.js'\nimport { hashAgentPlanEnvelope } from '../lib/agent-plan-hash.js'\nimport { readAgentPlanPayload } from '../lib/agent-plan-payload.js'\nimport { assertNoSecretFields } from '../lib/agent-plan-secrets.js'\nimport {\n AGENT_PLAN_TTL_MS,\n claimAgentPlan,\n releaseAgentPlanClaim,\n resolveAgentPlanDir,\n writeAgentPlan,\n} from '../lib/agent-plan-store.js'\nimport {\n assertPlanBaseUpdatedAt,\n readDocumentUpdatedAt,\n} from '../lib/agent-plan-stale.js'\nimport {\n buildConfirmCommand,\n decodePlanToken,\n encodePlanToken,\n} from '../lib/agent-plan-token.js'\nimport {\n agentPlanError,\n exitWithAgentError,\n printAgentSuccess,\n} from '../lib/agent-output.js'\n\nfunction invalidInput(message: string, field: string): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: 'invalid_argument',\n field,\n detail: { message, field },\n })\n return error\n}\n\nfunction handleCommanderError(error: CommanderError): never {\n if (error.code === 'commander.helpDisplayed') {\n process.exit(error.exitCode)\n }\n exitWithAgentError(invalidInput(error.message, 'command'))\n}\n\nfunction configureAgentParser(command: Command): Command {\n command.configureOutput({\n writeErr: () => {},\n writeOut: (str) => {\n process.stdout.write(str)\n },\n })\n command.exitOverride(handleCommanderError)\n return command\n}\n\nasync function captureBaseUpdatedAt(\n client: ResolvedClient,\n collection: ReturnType<typeof assertAgentPlanCollection>,\n documentId: string,\n): Promise<string | undefined> {\n const doc = await client.collections.from(collection).findById(documentId)\n return readDocumentUpdatedAt(doc)\n}\n\nasync function runPlanAction(input: {\n operation: AgentPlanOperation\n collection: string\n documentId?: string\n dataStdin?: boolean\n dataFile?: string\n pretty?: boolean\n getClient: () => ResolvedClient\n}): Promise<void> {\n const collection = assertAgentPlanCollection(input.collection)\n\n if (input.operation !== 'create' && !input.documentId) {\n throw invalidInput('Missing required argument: id', 'id')\n }\n\n let payload: Record<string, unknown> | undefined\n if (input.operation === 'create' || input.operation === 'update') {\n payload = await readAgentPlanPayload({\n dataStdin: input.dataStdin,\n dataFile: input.dataFile,\n })\n assertNoSecretFields(payload)\n }\n\n const client = input.getClient()\n const authFingerprint = buildAuthContextFingerprint({\n publishableKey: client.publishableKey,\n secretKey: client.secretKey,\n })\n\n let baseUpdatedAt: string | undefined\n if (input.operation !== 'create' && input.documentId) {\n baseUpdatedAt = await captureBaseUpdatedAt(\n client,\n collection,\n input.documentId,\n )\n assertPlanBaseUpdatedAt(input.operation, baseUpdatedAt)\n }\n\n const planHash = hashAgentPlanEnvelope({\n operation: input.operation,\n collection,\n documentId: input.documentId,\n payload,\n })\n\n const createdAt = new Date()\n const expiresAt = new Date(createdAt.getTime() + AGENT_PLAN_TTL_MS)\n\n const stored = await writeAgentPlan({\n planDir: resolveAgentPlanDir(),\n record: {\n planHash,\n operation: input.operation,\n collection,\n documentId: input.documentId,\n payload,\n baseUpdatedAt,\n authFingerprint,\n createdAt: createdAt.toISOString(),\n expiresAt: expiresAt.toISOString(),\n },\n })\n\n const planToken = encodePlanToken({\n planId: stored.planId,\n planHash: stored.planHash,\n expiresAt: stored.expiresAt,\n })\n\n printAgentSuccess(\n {\n planToken,\n planHash: stored.planHash,\n planId: stored.planId,\n expiresAt: stored.expiresAt,\n operation: stored.operation,\n collection: stored.collection,\n documentId: stored.documentId,\n confirmCommand: buildConfirmCommand(planToken, stored.planHash),\n },\n { pretty: Boolean(input.pretty) },\n )\n}\n\nexport function registerAgentPlanCommands(\n agent: Command,\n getClient: () => ResolvedClient,\n): void {\n const plan = configureAgentParser(\n agent.command('plan').description('Plan a mutation without executing'),\n )\n\n configureAgentParser(\n plan\n .command('create <collection>')\n .description('Plan a document create')\n .option('--data-stdin', 'Read mutation JSON from stdin')\n .option('--data-file <path>', 'Read mutation JSON from file')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n ) => {\n try {\n await runPlanAction({\n operation: 'create',\n collection,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n pretty: opts.pretty,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n plan\n .command('update <collection> <id>')\n .description('Plan a document update')\n .option('--data-stdin', 'Read mutation JSON from stdin')\n .option('--data-file <path>', 'Read mutation JSON from file')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n id: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n ) => {\n try {\n await runPlanAction({\n operation: 'update',\n collection,\n documentId: id,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n pretty: opts.pretty,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n plan\n .command('delete <collection> <id>')\n .description('Plan a document delete')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n collection: string,\n id: string,\n opts: { pretty?: boolean },\n ) => {\n try {\n await runPlanAction({\n operation: 'delete',\n collection,\n documentId: id,\n pretty: opts.pretty,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n\n configureAgentParser(\n agent\n .command('confirm <planToken>')\n .description('Execute a previously planned mutation')\n .requiredOption('--hash <planHash>', 'Plan hash from plan output')\n .option('--pretty', 'Print 2-space indented JSON')\n .action(\n async (\n planTokenRaw: string,\n opts: { hash: string; pretty?: boolean },\n ) => {\n try {\n const token = decodePlanToken(planTokenRaw)\n if (token.planHash !== opts.hash) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Plan token does not match --hash.',\n )\n }\n\n const client = getClient()\n const authFingerprint = buildAuthContextFingerprint({\n publishableKey: client.publishableKey,\n secretKey: client.secretKey,\n })\n\n const planDir = resolveAgentPlanDir()\n const plan = await claimAgentPlan({\n planDir,\n planId: token.planId,\n planHash: opts.hash,\n authFingerprint,\n })\n\n if (token.planId !== plan.planId) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Plan token does not match stored plan.',\n )\n }\n\n let doc: unknown\n try {\n doc = await executeAgentPlanMutation(client, plan)\n } catch (mutationError) {\n await releaseAgentPlanClaim({\n planDir,\n planId: plan.planId,\n }).catch(() => {})\n throw mutationError\n }\n\n await finalizeAgentPlan(plan)\n\n printAgentSuccess(\n {\n applied: true,\n operation: plan.operation,\n collection: plan.collection,\n id:\n doc && typeof doc === 'object' && 'id' in doc\n ? String((doc as Record<string, unknown>).id)\n : plan.documentId,\n doc,\n },\n { pretty: Boolean(opts.pretty) },\n )\n } catch (error) {\n exitWithAgentError(error, { pretty: Boolean(opts.pretty) })\n }\n },\n ),\n )\n}\n"],"mappings":"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","names":["t","readFileSync","readFileSync","program","getClient","getFormat","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","orderStatusSchema","program","getClient","getFormat","order","z","z","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","z","z","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","pc","pc","t","resolve","program","SERVER_COLLECTIONS","program","getClient","getFormat","SERVER_COLLECTIONS","program","getClient","getFormat","SERVER_COLLECTIONS","homedir","join","createHash","join","homedir","current","readFileSync","readFileSync","getClient","plan","invalidInput","handleCommanderError","configureAgentParser","SERVER_COLLECTIONS","program","getClient","require"]}
|