@01.software/cli 0.17.4 → 0.19.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1385 -260
- package/dist/index.js.map +1 -1
- package/package.json +7 -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","../../../internal/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","../../../internal/contracts/src/tenant/index.ts","../../../internal/contracts/src/tenant/features.ts","../../../internal/contracts/src/ecommerce/index.ts","../../../internal/contracts/src/ecommerce/product-upsert.ts","../../../internal/contracts/src/ecommerce/cart.ts","../../../internal/contracts/src/ecommerce/commerce-common.ts","../../../internal/contracts/src/ecommerce/checkout.ts","../../../internal/contracts/src/ecommerce/payment-session.ts","../src/commands/order.ts","../src/commands/return.ts","../src/lib/sensitive-json-input.ts","../src/commands/cart.ts","../src/commands/stock.ts","../src/commands/transaction.ts","../src/lib/product-detail-options.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-plan-allowlist.ts","../src/lib/agent-output.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 { registerCommerceSessionCommands } 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)\nregisterCommerceSessionCommands(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 chmodSync,\n closeSync,\n constants as fsConstants,\n existsSync,\n fchmodSync,\n fstatSync,\n fsyncSync,\n lstatSync,\n mkdirSync,\n openSync,\n readFileSync,\n renameSync,\n type Stats,\n unlinkSync,\n writeFileSync,\n appendFileSync,\n} from 'node:fs'\nimport { spawnSync } from 'node:child_process'\nimport { randomBytes } from 'node:crypto'\nimport { dirname, 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'\nconst LOCAL_CREDENTIAL_PATH = `${DIR_NAME}/${FILE_NAME}`\nconst LOCAL_GITIGNORE_ENTRY = `${DIR_NAME}/`\nconst PRIVATE_DIRECTORY_MODE = 0o700\nconst PRIVATE_FILE_MODE = 0o600\nconst CURRENT_USER_ID =\n process.platform !== 'win32' && typeof process.getuid === 'function'\n ? process.getuid()\n : null\nconst HAS_POSIX_FILE_PERMISSIONS = CURRENT_USER_ID !== null\nconst SANITIZED_GIT_ENVIRONMENT_VARIABLES = new Set([\n 'GIT_ALTERNATE_OBJECT_DIRECTORIES',\n 'GIT_CEILING_DIRECTORIES',\n 'GIT_COMMON_DIR',\n 'GIT_CONFIG_COUNT',\n 'GIT_CONFIG_PARAMETERS',\n 'GIT_DIR',\n 'GIT_DISCOVERY_ACROSS_FILESYSTEM',\n 'GIT_INDEX_FILE',\n 'GIT_ICASE_PATHSPECS',\n 'GIT_GLOB_PATHSPECS',\n 'GIT_LITERAL_PATHSPECS',\n 'GIT_NOGLOB_PATHSPECS',\n 'GIT_OBJECT_DIRECTORY',\n 'GIT_PREFIX',\n 'GIT_WORK_TREE',\n])\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 filePath = getCredentialsPath()\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeCredentialFile(filePath, JSON.stringify(data, null, 2))\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 workingDirectory = process.cwd(),\n): void {\n // Fail closed before creating a secret-bearing file. The repository-level\n // .gitignore already covers this path, but callers may run the CLI elsewhere.\n const temporaryFileName = createTemporaryCredentialFileName()\n ensureGitignore(workingDirectory, `${DIR_NAME}/${temporaryFileName}`)\n\n const filePath = join(workingDirectory, DIR_NAME, FILE_NAME)\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeCredentialFile(\n filePath,\n JSON.stringify(data, null, 2),\n temporaryFileName,\n )\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\ninterface FileIdentity {\n dev: number\n ino: number\n}\n\nfunction writeCredentialFile(\n filePath: string,\n content: string,\n temporaryFileName = createTemporaryCredentialFileName(),\n): void {\n const directoryPath = dirname(filePath)\n const directoryDescriptor = openPrivateCredentialDirectory(directoryPath)\n const initialTarget = inspectCredentialTarget(filePath)\n const tempPath = join(directoryPath, temporaryFileName)\n let tempDescriptor: number | undefined\n\n try {\n tempDescriptor = openSync(tempPath, 'wx', PRIVATE_FILE_MODE)\n const tempStats = fstatSync(tempDescriptor)\n assertRegularOwnedCredentialFile(tempStats, 'temporary credential file')\n if (HAS_POSIX_FILE_PERMISSIONS) {\n fchmodSync(tempDescriptor, PRIVATE_FILE_MODE)\n assertMode(\n fstatSync(tempDescriptor),\n PRIVATE_FILE_MODE,\n 'temporary credential file',\n )\n }\n\n writeFileSync(tempDescriptor, content, { encoding: 'utf-8' })\n fsyncSync(tempDescriptor)\n closeSync(tempDescriptor)\n tempDescriptor = undefined\n\n const currentTarget = inspectCredentialTarget(filePath)\n if (!sameFileIdentity(initialTarget, currentTarget)) {\n throw credentialFileProtectionError(\n 'credential target changed while being checked',\n )\n }\n\n renameSync(tempPath, filePath)\n const finalStats = lstatCredentialPath(filePath)\n if (!finalStats) {\n throw credentialFileProtectionError(\n 'credential target disappeared after atomic replacement',\n )\n }\n assertRegularOwnedCredentialFile(finalStats, 'credential target')\n if (HAS_POSIX_FILE_PERMISSIONS) {\n assertMode(finalStats, PRIVATE_FILE_MODE, 'credential target')\n if (directoryDescriptor !== undefined) {\n fsyncSync(directoryDescriptor)\n }\n }\n } catch (error) {\n if (tempDescriptor !== undefined) {\n try {\n closeSync(tempDescriptor)\n } catch {\n // Best-effort descriptor cleanup after a failed private-file write.\n }\n }\n try {\n unlinkSync(tempPath)\n } catch {\n // Best-effort cleanup after a failed write or atomic replacement.\n }\n throw error\n } finally {\n if (directoryDescriptor !== undefined) {\n closeSync(directoryDescriptor)\n }\n }\n}\n\nfunction openPrivateCredentialDirectory(\n directoryPath: string,\n): number | undefined {\n let directoryStats = lstatCredentialPath(directoryPath)\n if (!directoryStats) {\n try {\n mkdirSync(directoryPath, { mode: PRIVATE_DIRECTORY_MODE })\n if (HAS_POSIX_FILE_PERMISSIONS) {\n chmodSync(directoryPath, PRIVATE_DIRECTORY_MODE)\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error\n // Another process created the path after lstat. Inspect it below.\n }\n directoryStats = lstatCredentialPath(directoryPath)\n }\n\n if (\n !directoryStats ||\n directoryStats.isSymbolicLink() ||\n !directoryStats.isDirectory()\n ) {\n throw credentialFileProtectionError(\n 'credential directory must be a regular directory, not a symlink',\n )\n }\n assertCurrentUserOwns(directoryStats, 'credential directory')\n\n if (!HAS_POSIX_FILE_PERMISSIONS) return undefined\n\n const descriptor = openSync(\n directoryPath,\n fsConstants.O_RDONLY | fsConstants.O_DIRECTORY | fsConstants.O_NOFOLLOW,\n )\n try {\n const openedStats = fstatSync(descriptor)\n if (\n !openedStats.isDirectory() ||\n openedStats.dev !== directoryStats.dev ||\n openedStats.ino !== directoryStats.ino\n ) {\n throw credentialFileProtectionError(\n 'credential directory changed while being checked',\n )\n }\n assertCurrentUserOwns(openedStats, 'credential directory')\n fchmodSync(descriptor, PRIVATE_DIRECTORY_MODE)\n assertMode(\n fstatSync(descriptor),\n PRIVATE_DIRECTORY_MODE,\n 'credential directory',\n )\n return descriptor\n } catch (error) {\n closeSync(descriptor)\n throw error\n }\n}\n\nfunction inspectCredentialTarget(filePath: string): FileIdentity | null {\n const stats = lstatCredentialPath(filePath)\n if (!stats) return null\n\n assertRegularOwnedCredentialFile(stats, 'credential target')\n return { dev: stats.dev, ino: stats.ino }\n}\n\nfunction assertRegularOwnedCredentialFile(\n stats: Stats,\n description: string,\n): void {\n if (stats.isSymbolicLink()) {\n throw credentialFileProtectionError(`${description} must not be a symlink`)\n }\n if (!stats.isFile()) {\n throw credentialFileProtectionError(`${description} must be a regular file`)\n }\n if (HAS_POSIX_FILE_PERMISSIONS && stats.nlink > 1) {\n throw credentialFileProtectionError(\n `${description} must not have multiple hard links`,\n )\n }\n assertCurrentUserOwns(stats, description)\n}\n\nfunction assertCurrentUserOwns(stats: Stats, description: string): void {\n if (CURRENT_USER_ID !== null && stats.uid !== CURRENT_USER_ID) {\n throw credentialFileProtectionError(\n `${description} must be owned by the current user`,\n )\n }\n}\n\nfunction assertMode(stats: Stats, expectedMode: number, description: string) {\n if ((stats.mode & 0o777) !== expectedMode) {\n throw credentialFileProtectionError(\n `${description} permissions could not be secured`,\n )\n }\n}\n\nfunction sameFileIdentity(\n initial: FileIdentity | null,\n current: FileIdentity | null,\n): boolean {\n if (!initial || !current) return initial === current\n return initial.dev === current.dev && initial.ino === current.ino\n}\n\nfunction lstatCredentialPath(filePath: string): Stats | null {\n try {\n return lstatSync(filePath)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return null\n throw credentialFileProtectionError(\n 'credential filesystem target could not be inspected',\n )\n }\n}\n\nfunction credentialFileProtectionError(message: string): Error {\n return new Error(`Cannot save credentials: ${message}`)\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(cwd: string, temporaryCredentialPath: string): void {\n const gitignorePath = join(cwd, '.gitignore')\n assertSafeGitignorePath(gitignorePath)\n\n const gitState = detectGitWorkTree(cwd)\n if (gitState === 'inside') {\n assertCredentialPathIsUntracked(cwd)\n if (areCredentialPathsIgnored(cwd, temporaryCredentialPath)) return\n\n ensureTerminalGitignoreEntry(gitignorePath, true)\n if (!areCredentialPathsIgnored(cwd, temporaryCredentialPath)) {\n throw credentialProtectionError(\n 'Git still reports a credential path as unignored',\n )\n }\n return\n }\n\n // Outside a Git work tree, keep a durable rule for a future `git init`\n // without requiring Git to be installed.\n ensureTerminalGitignoreEntry(gitignorePath, false)\n}\n\nfunction assertSafeGitignorePath(gitignorePath: string): void {\n const stats = lstatIfPresent(gitignorePath)\n if (stats && (!stats.isFile() || stats.isSymbolicLink())) {\n throw credentialProtectionError('.gitignore must be a regular file')\n }\n}\n\nfunction ensureTerminalGitignoreEntry(\n gitignorePath: string,\n forceAppend: boolean,\n): void {\n const initialStats = lstatIfPresent(gitignorePath)\n if (!initialStats) {\n try {\n writeFileSync(gitignorePath, `${LOCAL_GITIGNORE_ENTRY}\\n`, {\n encoding: 'utf-8',\n flag: 'wx',\n })\n return\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error\n // Another process created the path after lstat. Re-inspect it below.\n return ensureTerminalGitignoreEntry(gitignorePath, forceAppend)\n }\n }\n\n if (!initialStats.isFile() || initialStats.isSymbolicLink()) {\n throw credentialProtectionError('.gitignore must be a regular file')\n }\n\n const descriptor = openSync(gitignorePath, 'a+')\n try {\n const openedStats = fstatSync(descriptor)\n if (\n !openedStats.isFile() ||\n openedStats.dev !== initialStats.dev ||\n openedStats.ino !== initialStats.ino\n ) {\n throw credentialProtectionError('.gitignore changed while being checked')\n }\n\n const content = readFileSync(descriptor, 'utf-8')\n const lastNonEmptyLine = content\n .split(/\\r?\\n/)\n .filter((line) => line.length > 0)\n .at(-1)\n if (\n !forceAppend &&\n (lastNonEmptyLine === LOCAL_GITIGNORE_ENTRY ||\n lastNonEmptyLine === `/${LOCAL_GITIGNORE_ENTRY}`)\n ) {\n return\n }\n\n const separator = content.length > 0 && !content.endsWith('\\n') ? '\\n' : ''\n appendFileSync(\n descriptor,\n `${separator}${LOCAL_GITIGNORE_ENTRY}\\n`,\n 'utf-8',\n )\n } finally {\n closeSync(descriptor)\n }\n}\n\nfunction detectGitWorkTree(cwd: string): 'inside' | 'outside' {\n const result = runGit(cwd, ['rev-parse', '--is-inside-work-tree'])\n if (result.error) {\n if (\n (result.error as NodeJS.ErrnoException).code === 'ENOENT' &&\n !hasGitMarker(cwd)\n ) {\n return 'outside'\n }\n throw credentialProtectionError('Git repository detection failed')\n }\n\n if (result.status === 0) {\n if (result.stdout.trim() === 'true') return 'inside'\n throw credentialProtectionError(\n 'the current directory is not a Git work tree',\n )\n }\n\n if (result.status === 128 && !hasGitMarker(cwd)) return 'outside'\n throw credentialProtectionError('Git repository detection failed')\n}\n\nfunction assertCredentialPathIsUntracked(cwd: string): void {\n const result = runGit(cwd, [\n 'ls-files',\n '-z',\n '--',\n `:(icase,literal)${LOCAL_CREDENTIAL_PATH}`,\n ])\n if (result.error || result.status !== 0) {\n throw credentialProtectionError('Git tracked-file verification failed')\n }\n if (result.stdout.length > 0) {\n throw credentialProtectionError(\n '.01software/credentials.json is already tracked by Git',\n )\n }\n}\n\nfunction createTemporaryCredentialFileName(): string {\n return `.${FILE_NAME}.${randomBytes(12).toString('hex')}.tmp`\n}\n\nfunction areCredentialPathsIgnored(\n cwd: string,\n temporaryCredentialPath: string,\n): boolean {\n // Both paths must be ignored. A directory-level rule can be followed by a\n // negation that makes either the credential or its atomic-write temporary\n // stageable again.\n return (\n isPathIgnored(cwd, LOCAL_CREDENTIAL_PATH) &&\n isPathIgnored(cwd, temporaryCredentialPath)\n )\n}\n\nfunction isPathIgnored(cwd: string, relativePath: string): boolean {\n const result = runGit(cwd, [\n 'check-ignore',\n '--quiet',\n '--no-index',\n '--',\n relativePath,\n ])\n if (result.error || (result.status !== 0 && result.status !== 1)) {\n throw credentialProtectionError('Git ignore verification failed')\n }\n return result.status === 0\n}\n\nfunction runGit(cwd: string, args: string[]) {\n const env: NodeJS.ProcessEnv = { ...process.env, LC_ALL: 'C' }\n for (const key of Object.keys(env)) {\n const normalizedKey = key.toUpperCase()\n if (\n SANITIZED_GIT_ENVIRONMENT_VARIABLES.has(normalizedKey) ||\n normalizedKey.startsWith('GIT_CONFIG_KEY_') ||\n normalizedKey.startsWith('GIT_CONFIG_VALUE_')\n ) {\n delete env[key]\n }\n }\n return spawnSync('git', args, {\n cwd,\n encoding: 'utf-8',\n env,\n })\n}\n\nfunction hasGitMarker(startPath: string): boolean {\n let currentPath = startPath\n while (true) {\n if (lstatIfPresent(join(currentPath, '.git'))) return true\n const parentPath = dirname(currentPath)\n if (parentPath === currentPath) return false\n currentPath = parentPath\n }\n}\n\nfunction lstatIfPresent(filePath: string) {\n try {\n return lstatSync(filePath)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return null\n throw credentialProtectionError('local Git metadata could not be inspected')\n }\n}\n\nfunction credentialProtectionError(message: string): Error {\n return new Error(`Cannot save local credentials: ${message}`)\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/published/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 형식이 올바르지 않습니다.',\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: '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}}.',\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 })\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n // Keep rejected values out of terminal and structured output. `message`\n // is the stderr headline; `detail` carries only the stable field label for\n // machine consumers.\n message,\n detail: { message, field: label },\n })\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 // Zod paths and messages may contain payload-controlled record keys or\n // unknown property names. Commerce inputs include capabilities and provider\n // credentials, so expose only Zod's stable issue category.\n const issues = parsed.error.issues.map((issue) => ({ code: issue.code }))\n const message = `Invalid value for --${label}.`\n\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n message,\n detail: {\n message,\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'\nimport {\n TENANT_CUSTOM_FIELD_TYPES,\n type TenantCustomFieldType,\n} from './features'\n\nexport * from './features'\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\nconst collectionCustomFieldRequiredSchema = z.literal(true).optional()\n\nexport const collectionCustomFieldDefinitionSchema = z.discriminatedUnion(\n 'type',\n [\n z\n .object({\n key: z.string().min(1),\n type: z.enum(\n TENANT_CUSTOM_FIELD_TYPES.filter((type) => type !== 'select') as [\n Exclude<TenantCustomFieldType, 'select'>,\n ...Exclude<TenantCustomFieldType, 'select'>[],\n ],\n ),\n required: collectionCustomFieldRequiredSchema,\n })\n .strict(),\n z\n .object({\n key: z.string().min(1),\n type: z.literal('select'),\n required: collectionCustomFieldRequiredSchema,\n options: z.array(z.string().min(1)).min(1),\n })\n .strict(),\n ],\n)\n\nexport const collectionCustomFieldsSchema = z\n .object({\n storagePath: z.literal('customData'),\n definitions: z.array(collectionCustomFieldDefinitionSchema),\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 customFields: collectionCustomFieldsSchema.optional(),\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 CollectionCustomFieldDefinition = z.infer<\n typeof collectionCustomFieldDefinitionSchema\n>\nexport type CollectionCustomFields = z.infer<\n typeof collectionCustomFieldsSchema\n>\nexport type CollectionSchemaResponse = z.infer<\n typeof collectionSchemaResponseSchema\n>\n","/**\n * Tenant feature and plan vocabulary.\n *\n * This is the single declaration site. Console re-exports it from\n * `apps/console/src/payload/collections/tenants/types.ts`; Web re-exports it\n * from `apps/web/lib/auth/onboarding-defaults.ts`.\n *\n * Vocabulary only. Feature *policy* — minimum plan, dependencies, and public /\n * private collection ownership — stays in\n * `apps/console/src/payload/collections/tenants/feature-manifest.ts`, and plan\n * quotas stay in the Console tenant types module.\n */\n\nexport const TENANT_FEATURES = [\n 'ecommerce',\n 'customers',\n 'playlists',\n 'galleries',\n 'links',\n 'forms',\n 'articles',\n 'documents',\n 'canvas',\n 'videos',\n 'live-streaming',\n 'community',\n 'events',\n 'membership',\n] as const\n\nexport type TenantFeature = (typeof TENANT_FEATURES)[number]\n\nexport const TENANT_PLANS = [\n 'free',\n 'starter',\n 'basic',\n 'pro',\n 'enterprise',\n] as const\n\nexport type TenantPlan = (typeof TENANT_PLANS)[number]\n\nexport const TENANT_CUSTOM_FIELD_TYPES = [\n 'text',\n 'number',\n 'select',\n 'boolean',\n 'date',\n] as const\n\nexport type TenantCustomFieldType = (typeof TENANT_CUSTOM_FIELD_TYPES)[number]\n\nexport const isTenantFeature = (value: unknown): value is TenantFeature =>\n typeof value === 'string' &&\n TENANT_FEATURES.includes(value as TenantFeature)\n\nexport const isTenantPlan = (value: unknown): value is TenantPlan =>\n typeof value === 'string' && TENANT_PLANS.includes(value as TenantPlan)\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'\nexport * from './cart-merge'\nexport * from './cart-mine'\nexport {\n CanonicalCheckoutQueryResultSchema,\n CanonicalCheckoutQuerySchema,\n CanonicalPublicCheckoutItemSchema,\n CheckoutQueryResultSchema,\n CheckoutQuerySchema,\n CreateCheckoutBodySchema,\n CreateCheckoutParamsSchema,\n CreateCheckoutResultSchema,\n CreateServerCheckoutBodySchema,\n CreateServerCheckoutParamsSchema,\n CreateServerCheckoutResultSchema,\n PublicCheckoutSchema,\n RetrieveCheckoutParamsSchema,\n RetrieveServerCheckoutParamsSchema,\n ServerCheckoutSchema,\n canonicalCheckoutQueryResultSchema,\n canonicalCheckoutQuerySchema,\n canonicalPublicCheckoutItemSchema,\n checkoutAmountsSchema,\n checkoutListItemSchema,\n checkoutPaymentSessionRefSchema,\n createCheckoutBodySchema,\n createCheckoutParamsSchema,\n createCheckoutResultSchema,\n createServerCheckoutBodySchema,\n createServerCheckoutParamsSchema,\n createServerCheckoutResultSchema,\n openCheckoutPaymentStateSchema,\n publicCheckoutSchema,\n retrieveCheckoutParamsSchema,\n retrieveServerCheckoutParamsSchema,\n serverCheckoutSchema,\n spentCheckoutPaymentStateSchema,\n type CanonicalPublicCheckoutItem,\n type CheckoutAmounts,\n type CheckoutListItem,\n type CheckoutPaymentSessionRef,\n type CheckoutQueryParams,\n type CheckoutQueryResult,\n type CreateCheckoutParams,\n type CreateCheckoutResult,\n type CreateServerCheckoutParams,\n type CreateServerCheckoutResult,\n type OpenCheckoutPaymentState,\n type PublicCheckout,\n type RetrieveCheckoutParams,\n type RetrieveServerCheckoutParams,\n type ServerCheckout,\n type SpentCheckoutPaymentState,\n} from './checkout'\nexport * from './shipping-calculate'\nexport * from './fulfillment'\nexport * from './market-capability'\nexport * from './market'\nexport * from './commerce-common'\nexport * from './commerce-errors'\nexport * from './discount-errors'\nexport * from './canonical-fingerprint'\nexport * from './payment-session'\nexport {\n confirmationStatusSchema,\n financialStatusSchema,\n fulfillmentOrderStatusSchema,\n orderFulfillmentStatusSchema,\n orderPrimaryDisplayStatusSchema,\n orderReturnStatusSchema,\n shipmentStatusSchema,\n type ConfirmationStatusValue,\n type FinancialStatusValue,\n type FulfillmentOrderStatusValue,\n type OrderFulfillmentStatusValue,\n type OrderPrimaryDisplayStatusValue,\n type OrderReturnStatusValue,\n type ShipmentStatusValue,\n} from './order-status'\nexport * from './order'\n\nexport const transactionStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'success',\n 'failed',\n 'error',\n 'canceled',\n 'refunded',\n])\n\nexport const transactionKindSchema = z.enum([\n 'authorization',\n 'sale',\n 'capture',\n 'void',\n 'refund',\n])\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 *\n * The trailing codes mirror Shopify `ReturnReason` granularity (size/color/style,\n * not-as-described, wrong-item, unknown) that fashion tenants need for\n * category-level returns reporting (#1857). The original five codes are retained\n * for legacy readability; `change_of_mind`/`wrong_delivery` predate and coexist\n * with the Shopify-aligned `unknown`/`wrong_item`.\n */\nexport const RETURN_REASON_CODES = [\n 'change_of_mind',\n 'defective',\n 'wrong_delivery',\n 'damaged',\n 'size_too_large',\n 'size_too_small',\n 'color',\n 'style',\n 'not_as_described',\n 'wrong_item',\n 'unknown',\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\n/** Operator-selected reasons for canceling a return after approval. */\nexport const RETURN_CANCELLATION_REASON_CODES = [\n 'items_not_received',\n 'customer_withdrew',\n 'merchant_decision',\n 'other',\n] as const\n\nexport const returnCancellationReasonCodeSchema = z.enum(\n RETURN_CANCELLATION_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\nexport const updateReturnSchema = z\n .object({\n returnId: z.union([z.string(), z.number()]).transform(String),\n // Only non-financial transitions are accepted here. `completed` is included\n // so the server can return the canonical `server_derived` error instead of\n // a generic validation failure.\n status: z.enum([\n 'processing',\n 'approved',\n 'rejected',\n 'canceled',\n 'completed',\n ]),\n reasonCode: returnRejectionReasonCodeSchema.optional(),\n cancellationReasonCode: returnCancellationReasonCodeSchema.optional(),\n cancellationReasonDetail: z.string().trim().min(1).max(2000).optional(),\n })\n .strict()\n\nexport const UpdateReturnSchema = updateReturnSchema\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 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\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])\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.enum(['paid', '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 TransactionKind = z.infer<typeof transactionKindSchema>\nexport type ReturnReason = z.infer<typeof returnReasonSchema>\nexport type ReturnRejectionReasonCode = z.infer<\n typeof returnRejectionReasonCodeSchema\n>\nexport type ReturnCancellationReasonCode = z.infer<\n typeof returnCancellationReasonCodeSchema\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 UpdateReturnParams = z.input<typeof UpdateReturnSchema>\nexport type ParsedUpdateReturnParams = z.output<typeof UpdateReturnSchema>\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 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 markets: z.array(IdSchema).optional().nullable(),\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\n/**\n * Coarse minor-unit bound for catalog amounts.\n *\n * The wire body carries no currency (the tenant `shopCurrency` and each market's\n * `currency` live server-side), so this can only enforce the widest bound any\n * supported currency permits — two decimal places. The exact per-currency check\n * (KRW admits none) runs in the Console variant write hook, which knows the\n * currency. This refine is the early, currency-agnostic rejection of values such\n * as `15000.005` that no supported currency could represent.\n *\n * Not a representation change: ADR 0040 keeps decimal/minor-unit money a v1\n * non-goal, and amounts stay plain `number` on the wire.\n */\nexport const MAX_CATALOG_AMOUNT_DECIMAL_PLACES = 2\n\nexport function catalogAmountDecimalPlaces(value: number): number {\n if (!Number.isFinite(value)) return 0\n const text = String(value)\n const exponential = text.indexOf('e-')\n if (exponential !== -1) return Number(text.slice(exponential + 2)) || 0\n const dot = text.indexOf('.')\n return dot === -1 ? 0 : text.length - dot - 1\n}\n\nconst CatalogAmountSchema = z\n .number()\n .min(0)\n .refine(\n (value) =>\n catalogAmountDecimalPlaces(value) <= MAX_CATALOG_AMOUNT_DECIMAL_PLACES,\n {\n message: `Amount must have at most ${MAX_CATALOG_AMOUNT_DECIMAL_PLACES} decimal places; the store currency may allow fewer.`,\n },\n )\n\nexport const VariantMarketPriceInputSchema = z.object({\n market: IdSchema,\n price: CatalogAmountSchema,\n compareAtPrice: CatalogAmountSchema.optional().nullable(),\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: CatalogAmountSchema,\n compareAtPrice: CatalogAmountSchema.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 marketPrices: z.array(VariantMarketPriceInputSchema).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>\nexport type VariantMarketPriceInput = z.infer<\n typeof VariantMarketPriceInputSchema\n>\n","import { z } from 'zod'\nimport {\n commerceCapabilitySchema,\n commerceIdempotencyKeySchema,\n commerceResourceIdSchema,\n currencyCodeSchema,\n minorAmountSchema,\n publicAttributesSchema,\n} from './commerce-common'\n\nexport const MAX_CART_LINE_QUANTITY = 99\nexport const MAX_CART_DISCOUNT_CODES = 250\nexport const MAX_CART_DISCOUNT_CODE_LENGTH = 128\n\nexport const cartDiscountCodeSchema = z\n .object({\n code: z.string().min(1).max(MAX_CART_DISCOUNT_CODE_LENGTH),\n applicable: z.boolean(),\n })\n .strict()\n\nexport const CART_WARNING_CODES = [\n 'DISCOUNT_CODE_NOT_HONOURED',\n 'DISCOUNT_CURRENTLY_INACTIVE',\n 'DISCOUNT_CUSTOMER_NOT_ELIGIBLE',\n 'DISCOUNT_CUSTOMER_USAGE_LIMIT_REACHED',\n 'DISCOUNT_ELIGIBLE_CUSTOMER_MISSING',\n 'DISCOUNT_NO_ENTITLED_LINE_ITEMS',\n 'DISCOUNT_NO_ENTITLED_SHIPPING_LINES',\n 'DISCOUNT_NOT_FOUND',\n 'DISCOUNT_PURCHASE_NOT_IN_RANGE',\n 'DISCOUNT_USAGE_LIMIT_REACHED',\n 'MERCHANDISE_NOT_ENOUGH_STOCK',\n 'MERCHANDISE_OUT_OF_STOCK',\n] as const\n\nexport const cartWarningCodeSchema = z.enum(CART_WARNING_CODES)\n\nexport const cartWarningSchema = z\n .object({\n code: cartWarningCodeSchema,\n message: z.string().min(1),\n target: z.string().min(1),\n })\n .strict()\n\nexport const updateDiscountCodesBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n discountCodes: z\n .array(z.string().trim().min(1).max(MAX_CART_DISCOUNT_CODE_LENGTH))\n .max(\n MAX_CART_DISCOUNT_CODES,\n `discountCodes cannot contain more than ${MAX_CART_DISCOUNT_CODES} values`,\n ),\n })\n .strict()\nexport const updateDiscountCodesParamsSchema =\n updateDiscountCodesBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\nexport const updateDiscountCodesSchema = updateDiscountCodesParamsSchema\n\nexport type CartDiscountCode = z.infer<typeof cartDiscountCodeSchema>\nexport type CartWarningCode = (typeof CART_WARNING_CODES)[number]\nexport type CartWarning = z.infer<typeof cartWarningSchema>\nexport type UpdateDiscountCodesParams = z.infer<\n typeof updateDiscountCodesParamsSchema\n>\n\nexport const MAX_CART_LINE_ADMISSIONS = 32\n\nexport const publicMediaSizeSchema = z\n .object({\n width: z.number().nullable().optional(),\n height: z.number().nullable().optional(),\n mimeType: z.string().nullable().optional(),\n filename: z.string().nullable().optional(),\n url: z.string().nullable().optional(),\n })\n .strict()\n\nexport const publicMediaAssetSchema = z.union([\n z.string(),\n z\n .object({\n id: z.union([z.string(), z.number()]).nullable().optional(),\n alt: z.string().nullable().optional(),\n width: z.number().nullable().optional(),\n height: z.number().nullable().optional(),\n mimeType: z.string().nullable().optional(),\n filename: z.string().nullable().optional(),\n url: z.string().nullable().optional(),\n sizes: z.record(z.string(), publicMediaSizeSchema).optional(),\n })\n .strict(),\n])\n\nexport const publicCartReferenceSchema = z\n .object({\n id: z.string().min(1),\n title: z.string().min(1),\n handle: z.string().min(1).nullable(),\n image: publicMediaAssetSchema.nullable(),\n })\n .strict()\n\nexport const publicCartMarketSchema = z\n .object({\n id: z.string().min(1),\n handle: z.string().min(1),\n name: z.string().min(1),\n })\n .strict()\n\nexport const publicCartItemAdmissionSchema = z\n .object({\n eventId: z.string().min(1),\n occurrenceId: z.string().min(1),\n admissionTypeId: z.string().min(1),\n })\n .strict()\n\nexport const cartLineAdmissionsInputSchema = z\n .array(publicCartItemAdmissionSchema)\n // Bound the raw input before the handler canonical-sorts it. Duplicate\n // removal must not let an oversized request through.\n .max(\n MAX_CART_LINE_ADMISSIONS,\n `admissions cannot contain more than ${MAX_CART_LINE_ADMISSIONS} values`,\n )\n .min(1, 'admissions must contain at least one value')\n .superRefine((admissions, ctx) => {\n const seen = new Set<string>()\n admissions.forEach((admission, index) => {\n const key = `${admission.eventId}:${admission.occurrenceId}:${admission.admissionTypeId}`\n if (seen.has(key)) {\n ctx.addIssue({\n code: 'custom',\n path: [index],\n message: 'admissions must be unique',\n })\n }\n seen.add(key)\n })\n })\n\nconst cartTokenField = z.string().min(1, 'cartToken is required')\nconst cartMarketField = z.string().trim().min(1).optional()\nconst cartEntityIdField = z.union([z.string(), z.number()]).transform(String)\n\nexport const createCartSchema = z\n .object({\n market: cartMarketField,\n attributes: publicAttributesSchema.optional(),\n })\n .strict()\n\nexport const getCartSchema = z.object({ cartToken: cartTokenField }).strict()\n\nexport const addCartItemSchema = z\n .object({\n cartToken: cartTokenField,\n product: cartEntityIdField,\n variant: cartEntityIdField,\n option: cartEntityIdField.optional(),\n quantity: z.number().int().positive('quantity must be a positive integer'),\n market: cartMarketField,\n admissions: cartLineAdmissionsInputSchema.optional(),\n })\n .strict()\n\nexport const updateCartItemSchema = z\n .object({\n cartToken: cartTokenField,\n cartItemId: cartEntityIdField,\n quantity: z.number().int().positive('quantity must be a positive integer'),\n })\n .strict()\n\nexport const removeCartItemSchema = z\n .object({\n cartToken: cartTokenField,\n cartItemId: cartEntityIdField,\n })\n .strict()\n\nexport const updateCartAttributesSchema = z\n .object({\n cartToken: cartTokenField,\n attributes: publicAttributesSchema,\n })\n .strict()\n\nexport const clearCartSchema = z.object({ cartToken: cartTokenField }).strict()\n\nfunction compareAdmissions(\n left: z.infer<typeof publicCartItemAdmissionSchema>,\n right: z.infer<typeof publicCartItemAdmissionSchema>,\n) {\n for (const field of ['eventId', 'occurrenceId', 'admissionTypeId'] as const) {\n if (left[field] < right[field]) return -1\n if (left[field] > right[field]) return 1\n }\n return 0\n}\n\nexport const publicCartItemAdmissionsSchema = z\n .array(publicCartItemAdmissionSchema)\n .max(MAX_CART_LINE_ADMISSIONS)\n .superRefine((admissions, ctx) => {\n let previous: z.infer<typeof publicCartItemAdmissionSchema> | undefined\n admissions.forEach((admission, index) => {\n const comparison = previous\n ? compareAdmissions(admission, previous)\n : undefined\n if (comparison !== undefined && comparison <= 0) {\n ctx.addIssue({\n code: 'custom',\n path: [index],\n message:\n comparison === 0\n ? 'admissions must be unique'\n : 'admissions must be in canonical order',\n })\n }\n previous = admission\n })\n })\n\nexport const publicCartItemSchema = z\n .object({\n id: z.string().min(1),\n product: publicCartReferenceSchema,\n variant: publicCartReferenceSchema,\n admissions: publicCartItemAdmissionsSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n unitPriceMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n estimatedLineTotalMinor: minorAmountSchema,\n requiresShipping: z.boolean(),\n })\n .strict()\n .superRefine((item, ctx) => {\n const expectedLineTotal =\n BigInt(item.unitPriceMinor) * BigInt(item.quantity) -\n BigInt(item.discountMinor)\n\n if (expectedLineTotal < 0n) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor cannot exceed the undiscounted line total',\n })\n return\n }\n\n if (BigInt(item.estimatedLineTotalMinor) !== expectedLineTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['estimatedLineTotalMinor'],\n message:\n 'estimatedLineTotalMinor must equal unitPriceMinor * quantity - discountMinor',\n })\n }\n })\n\nexport const publicCartSchema = z\n .object({\n id: z.string().min(1),\n status: z.enum(['active', 'completed', 'abandoned']),\n revision: z.number().int().nonnegative(),\n currency: currencyCodeSchema,\n market: publicCartMarketSchema,\n subtotalMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n estimatedTotalMinor: minorAmountSchema,\n discountCodes: z.array(cartDiscountCodeSchema),\n attributes: publicAttributesSchema,\n items: z.array(publicCartItemSchema),\n expiresAt: z.string().datetime({ offset: true }),\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n })\n .strict()\n .superRefine((cart, ctx) => {\n const expectedSubtotal = cart.items.reduce(\n (total, item) =>\n total + BigInt(item.unitPriceMinor) * BigInt(item.quantity),\n 0n,\n )\n const expectedTotal = expectedSubtotal - BigInt(cart.discountMinor)\n const expectedDiscount = cart.items.reduce(\n (total, item) => total + BigInt(item.discountMinor),\n 0n,\n )\n\n if (BigInt(cart.subtotalMinor) !== expectedSubtotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['subtotalMinor'],\n message:\n 'subtotalMinor must equal the sum of undiscounted cart line totals',\n })\n }\n if (BigInt(cart.discountMinor) !== expectedDiscount) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor must equal the sum of cart line discounts',\n })\n }\n if (expectedTotal < 0n) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor cannot exceed subtotalMinor',\n })\n } else if (BigInt(cart.estimatedTotalMinor) !== expectedTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['estimatedTotalMinor'],\n message: 'estimatedTotalMinor must equal subtotalMinor - discountMinor',\n })\n }\n })\n\nexport const cartMutationResultSchema = z\n .object({\n cart: publicCartSchema,\n warnings: z.array(cartWarningSchema),\n })\n .strict()\n\nexport const createCartParamsSchema = z\n .object({\n market: commerceResourceIdSchema.optional(),\n attributes: publicAttributesSchema.optional(),\n })\n .strict()\n\nexport const createCartResultSchema = z\n .object({\n cart: publicCartSchema,\n warnings: z.array(cartWarningSchema),\n cartToken: commerceCapabilitySchema,\n })\n .strict()\n .superRefine((result, ctx) => {\n if (result.cart.revision !== 0) {\n ctx.addIssue({\n code: 'custom',\n path: ['cart', 'revision'],\n message: 'a newly created Cart must start at revision 0',\n })\n }\n })\n\nexport const retrieveCartParamsSchema = z\n .object({ cartToken: commerceCapabilitySchema })\n .strict()\n\nconst addItemAdmissionsSchema = z\n .tuple([publicCartItemAdmissionSchema], publicCartItemAdmissionSchema)\n .readonly()\n .superRefine((admissions, ctx) => {\n if (admissions.length > MAX_CART_LINE_ADMISSIONS) {\n ctx.addIssue({\n code: 'too_big',\n origin: 'array',\n maximum: MAX_CART_LINE_ADMISSIONS,\n inclusive: true,\n message: `admissions cannot contain more than ${MAX_CART_LINE_ADMISSIONS} values`,\n })\n }\n admissions.forEach((admission, index) => {\n if (index === 0) return\n const comparison = compareAdmissions(admission, admissions[index - 1]!)\n if (comparison <= 0) {\n ctx.addIssue({\n code: 'custom',\n path: [index],\n message:\n comparison === 0\n ? 'admissions must be unique'\n : 'admissions must be in canonical order',\n })\n }\n })\n })\n\nexport const addItemBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n productId: commerceResourceIdSchema,\n variantId: commerceResourceIdSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n admissions: addItemAdmissionsSchema.optional(),\n })\n .strict()\nexport const addItemParamsSchema = addItemBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const updateItemBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n cartItemId: commerceResourceIdSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n })\n .strict()\nexport const updateItemParamsSchema = updateItemBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const removeItemBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n cartItemId: commerceResourceIdSchema,\n })\n .strict()\nexport const removeItemParamsSchema = removeItemBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const clearCartBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n })\n .strict()\nexport const clearCartParamsSchema = clearCartBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const updateCartAttributesBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n attributes: publicAttributesSchema,\n })\n .strict()\nexport const updateCartAttributesParamsSchema =\n updateCartAttributesBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\n// Browser and server bodies are identical for token-keyed operations. Server\n// credentials remain headers and never enter these schemas.\nexport const serverCreateCartParamsSchema = createCartParamsSchema\nexport const serverRetrieveCartParamsSchema = retrieveCartParamsSchema\nexport const serverAddItemParamsSchema = addItemParamsSchema\nexport const serverAddItemBodySchema = addItemBodySchema\nexport const serverUpdateItemParamsSchema = updateItemParamsSchema\nexport const serverUpdateItemBodySchema = updateItemBodySchema\nexport const serverRemoveItemParamsSchema = removeItemParamsSchema\nexport const serverRemoveItemBodySchema = removeItemBodySchema\nexport const serverClearCartParamsSchema = clearCartParamsSchema\nexport const serverClearCartBodySchema = clearCartBodySchema\nexport const serverUpdateDiscountCodesParamsSchema =\n updateDiscountCodesParamsSchema\nexport const serverUpdateDiscountCodesBodySchema = updateDiscountCodesBodySchema\nexport const serverUpdateCartAttributesParamsSchema =\n updateCartAttributesParamsSchema\nexport const serverUpdateCartAttributesBodySchema =\n updateCartAttributesBodySchema\n\nexport const addItemResultSchema = cartMutationResultSchema\nexport const updateItemResultSchema = cartMutationResultSchema\nexport const removeItemResultSchema = cartMutationResultSchema\nexport const clearCartResultSchema = cartMutationResultSchema\nexport const updateDiscountCodesResultSchema = cartMutationResultSchema\nexport const updateCartAttributesResultSchema = cartMutationResultSchema\nexport const serverCreateCartResultSchema = createCartResultSchema\nexport const serverAddItemResultSchema = cartMutationResultSchema\nexport const serverUpdateItemResultSchema = cartMutationResultSchema\nexport const serverRemoveItemResultSchema = cartMutationResultSchema\nexport const serverClearCartResultSchema = cartMutationResultSchema\nexport const serverUpdateDiscountCodesResultSchema = cartMutationResultSchema\nexport const serverUpdateCartAttributesResultSchema = cartMutationResultSchema\n\nexport const PublicCartSchema = publicCartSchema\nexport const PublicCartItemSchema = publicCartItemSchema\nexport const PublicCartItemAdmissionSchema = publicCartItemAdmissionSchema\n\nexport type PublicMediaSize = z.infer<typeof publicMediaSizeSchema>\nexport type PublicMediaAsset = z.infer<typeof publicMediaAssetSchema>\nexport type PublicCartReference = z.infer<typeof publicCartReferenceSchema>\nexport type PublicCartMarket = z.infer<typeof publicCartMarketSchema>\nexport type PublicCartItemAdmission = z.infer<\n typeof publicCartItemAdmissionSchema\n>\nexport type PublicCartItem = z.infer<typeof publicCartItemSchema>\nexport type PublicCart = z.infer<typeof publicCartSchema>\nexport type CartMutationResult = z.infer<typeof cartMutationResultSchema>\nexport type CreateCartParams = z.infer<typeof createCartParamsSchema>\nexport type CreateCartResult = z.infer<typeof createCartResultSchema>\nexport type RetrieveCartParams = z.infer<typeof retrieveCartParamsSchema>\nexport type AddItemParams = z.infer<typeof addItemParamsSchema>\nexport type UpdateItemParams = z.infer<typeof updateItemParamsSchema>\nexport type RemoveItemParams = z.infer<typeof removeItemParamsSchema>\nexport type ClearCartParams = z.infer<typeof clearCartParamsSchema>\nexport type UpdateCartAttributesParams = z.infer<\n typeof updateCartAttributesParamsSchema\n>\nexport type AddItemResult = CartMutationResult\nexport type UpdateItemResult = CartMutationResult\nexport type RemoveItemResult = CartMutationResult\nexport type ClearCartResult = CartMutationResult\nexport type UpdateDiscountCodesResult = CartMutationResult\nexport type UpdateCartAttributesResult = CartMutationResult\nexport type ServerCreateCartParams = CreateCartParams\nexport type ServerRetrieveCartParams = RetrieveCartParams\nexport type ServerAddItemParams = AddItemParams\nexport type ServerUpdateItemParams = UpdateItemParams\nexport type ServerRemoveItemParams = RemoveItemParams\nexport type ServerClearCartParams = ClearCartParams\nexport type ServerUpdateDiscountCodesParams = UpdateDiscountCodesParams\nexport type ServerUpdateCartAttributesParams = UpdateCartAttributesParams\nexport type ServerCreateCartResult = CreateCartResult\nexport type ServerAddItemResult = CartMutationResult\nexport type ServerUpdateItemResult = CartMutationResult\nexport type ServerRemoveItemResult = CartMutationResult\nexport type ServerClearCartResult = CartMutationResult\nexport type ServerUpdateDiscountCodesResult = CartMutationResult\nexport type ServerUpdateCartAttributesResult = CartMutationResult\n","import { z } from 'zod'\n\nexport type CurrencyCode = Uppercase<string>\n\nexport const currencyCodeSchema = z\n .string()\n .regex(\n /^[A-Z]{3}$/,\n 'currency must be a three-letter uppercase ISO 4217 code',\n ) as z.ZodType<CurrencyCode>\n\nexport const minorAmountSchema = z\n .number()\n .int()\n .nonnegative()\n .max(Number.MAX_SAFE_INTEGER)\n\nexport const moneySchema = z\n .object({\n amountMinor: minorAmountSchema,\n currency: currencyCodeSchema,\n })\n .strict()\n\nexport const MAX_COMMERCE_EXTENSION_ENTRIES = 50\nexport const MAX_COMMERCE_EXTENSION_KEY_LENGTH = 40\nexport const MAX_COMMERCE_EXTENSION_VALUE_LENGTH = 500\nexport const MAX_COMMERCE_RESOURCE_ID_LENGTH = 255\nexport const MAX_COMMERCE_CAPABILITY_LENGTH = 512\nexport const MAX_COMMERCE_CUSTOMER_TOKEN_LENGTH = 4096\nexport const MAX_COMMERCE_SHORT_TEXT_LENGTH = 200\nexport const MAX_COMMERCE_ADDRESS_LENGTH = 500\nexport const MAX_COMMERCE_EMAIL_LENGTH = 254\nexport const MAX_COMMERCE_PHONE_LENGTH = 32\nexport const MAX_COMMERCE_POSTAL_CODE_LENGTH = 32\n\nexport const commerceResourceIdSchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_RESOURCE_ID_LENGTH)\nexport const commerceCapabilitySchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_CAPABILITY_LENGTH)\nexport const commerceCustomerTokenSchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_CUSTOMER_TOKEN_LENGTH)\n\nconst publicAttributeKeySchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_EXTENSION_KEY_LENGTH)\n // Double-underscore names are already treated as reserved across the repo.\n .refine((key) => !key.startsWith('__'), {\n message: 'attribute key uses a reserved platform prefix',\n })\n\nexport const publicAttributeSchema = z\n .object({\n key: publicAttributeKeySchema,\n value: z.string().max(MAX_COMMERCE_EXTENSION_VALUE_LENGTH),\n })\n .strict()\n\nexport const publicAttributesSchema = z\n .array(publicAttributeSchema)\n .max(MAX_COMMERCE_EXTENSION_ENTRIES)\n .superRefine((attributes, ctx) => {\n const seen = new Set<string>()\n attributes.forEach(({ key }, index) => {\n if (seen.has(key)) {\n ctx.addIssue({\n code: 'custom',\n path: [index, 'key'],\n message: 'attribute keys must be unique',\n })\n }\n seen.add(key)\n })\n })\n\nconst integrationMetadataKeySchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_EXTENSION_KEY_LENGTH)\n .refine((key) => !key.includes('[') && !key.includes(']'), {\n message: 'integration metadata keys must not use bracket notation',\n })\n\nexport const integrationMetadataSchema = z\n .record(\n integrationMetadataKeySchema,\n z.string().max(MAX_COMMERCE_EXTENSION_VALUE_LENGTH),\n )\n .superRefine((metadata, ctx) => {\n if (Object.keys(metadata).length > MAX_COMMERCE_EXTENSION_ENTRIES) {\n ctx.addIssue({\n code: 'too_big',\n origin: 'object',\n maximum: MAX_COMMERCE_EXTENSION_ENTRIES,\n inclusive: true,\n message: `integration metadata cannot contain more than ${MAX_COMMERCE_EXTENSION_ENTRIES} entries`,\n })\n }\n })\n\nexport const customerSnapshotSchema = z\n .object({\n email: z.string().email().max(MAX_COMMERCE_EMAIL_LENGTH),\n name: z.string().min(1).max(MAX_COMMERCE_SHORT_TEXT_LENGTH).optional(),\n phone: z.string().min(1).max(MAX_COMMERCE_PHONE_LENGTH).optional(),\n })\n .strict()\n\nexport const checkoutShippingAddressSchema = z\n .object({\n recipientName: z.string().min(1).max(MAX_COMMERCE_SHORT_TEXT_LENGTH),\n phone: z.string().min(1).max(MAX_COMMERCE_PHONE_LENGTH),\n countryCode: z.string().trim().length(2).optional(),\n regionCode: z.string().trim().min(1).max(64).optional(),\n postalCode: z.string().min(1).max(MAX_COMMERCE_POSTAL_CODE_LENGTH),\n address: z.string().min(1).max(MAX_COMMERCE_ADDRESS_LENGTH),\n detailAddress: z.string().min(1).max(MAX_COMMERCE_ADDRESS_LENGTH),\n deliveryMessage: z\n .string()\n .max(MAX_COMMERCE_EXTENSION_VALUE_LENGTH)\n .optional(),\n })\n .strict()\n\n/**\n * The two high-entropy formats accepted by ADR 0051. This is deliberately\n * stricter than the legacy order-operation idempotency key contract.\n */\nexport const commerceIdempotencyKeySchema = z\n .string()\n .max(255)\n .refine(\n (value) =>\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n ) || /^ik_[A-Za-z0-9_-]{22}$/.test(value),\n 'idempotencyKey must be a UUIDv4 or ik_-prefixed 128-bit base64url value',\n )\n\nexport const CurrencyCodeSchema = currencyCodeSchema\nexport const MoneySchema = moneySchema\nexport const CommerceIdempotencyKeySchema = commerceIdempotencyKeySchema\n\nexport type Money = z.infer<typeof moneySchema>\nexport type PublicAttribute = z.infer<typeof publicAttributeSchema>\nexport type PublicAttributes = z.infer<typeof publicAttributesSchema>\nexport type IntegrationMetadata = z.infer<typeof integrationMetadataSchema>\nexport type CustomerSnapshot = z.infer<typeof customerSnapshotSchema>\nexport type CanonicalCheckoutShippingAddress = z.infer<\n typeof checkoutShippingAddressSchema\n>\nexport type CommerceIdempotencyKey = z.infer<\n typeof commerceIdempotencyKeySchema\n>\n","import { z } from 'zod'\nimport {\n MAX_CART_LINE_QUANTITY,\n publicCartItemAdmissionsSchema,\n publicCartReferenceSchema,\n} from './cart'\nimport {\n checkoutShippingAddressSchema as canonicalCheckoutShippingAddressSchema,\n commerceCapabilitySchema,\n commerceIdempotencyKeySchema,\n commerceResourceIdSchema,\n currencyCodeSchema,\n customerSnapshotSchema,\n integrationMetadataSchema,\n minorAmountSchema,\n publicAttributesSchema,\n} from './commerce-common'\nimport { paymentProviderStatusSchema } from './payment-session'\n\nexport const canonicalPublicCheckoutItemSchema = z\n .object({\n id: z.string().min(1),\n product: publicCartReferenceSchema,\n variant: publicCartReferenceSchema,\n productTitle: z.string().min(1),\n variantTitle: z.string().min(1).nullable(),\n sku: z.string().min(1).nullable(),\n admissions: publicCartItemAdmissionsSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n unitPriceMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n lineTotalMinor: minorAmountSchema,\n requiresShipping: z.boolean(),\n })\n .strict()\n .superRefine((item, ctx) => {\n const expectedLineTotal =\n BigInt(item.unitPriceMinor) * BigInt(item.quantity) -\n BigInt(item.discountMinor)\n\n if (expectedLineTotal < 0n) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor cannot exceed the undiscounted line total',\n })\n return\n }\n\n if (BigInt(item.lineTotalMinor) !== expectedLineTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['lineTotalMinor'],\n message:\n 'lineTotalMinor must equal unitPriceMinor * quantity - discountMinor',\n })\n }\n })\n\nexport const checkoutAmountsSchema = z\n .object({\n currency: currencyCodeSchema,\n subtotalMinor: minorAmountSchema,\n shippingMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n totalMinor: minorAmountSchema,\n })\n .strict()\n .superRefine((amounts, ctx) => {\n const expectedTotal =\n BigInt(amounts.subtotalMinor) +\n BigInt(amounts.shippingMinor) -\n BigInt(amounts.discountMinor)\n\n if (BigInt(amounts.totalMinor) !== expectedTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['totalMinor'],\n message:\n 'totalMinor must equal subtotalMinor + shippingMinor - discountMinor',\n })\n }\n })\n\nconst CHECKOUT_PAYMENT_SESSION_PROVIDERS = ['toss', 'portone'] as const\n\nexport const checkoutPaymentSessionRefSchema = z\n .object({\n id: z.string().min(1),\n provider: z.enum(CHECKOUT_PAYMENT_SESSION_PROVIDERS),\n providerStatus: paymentProviderStatusSchema,\n })\n .strict()\n\nexport const openCheckoutPaymentStateSchema = z\n .object({\n activePaymentSession: checkoutPaymentSessionRefSchema.nullable(),\n })\n .strict()\n\nexport const spentCheckoutPaymentStateSchema = z\n .object({\n activePaymentSession: z.null(),\n })\n .strict()\n\nconst lightweightOrderReferenceSchema = z\n .object({\n id: z.string().min(1),\n orderNumber: z.string().min(1),\n })\n .strict()\n\nconst publicCheckoutBaseShape = {\n id: z.string().min(1),\n amounts: checkoutAmountsSchema,\n items: z.array(canonicalPublicCheckoutItemSchema).min(1),\n customerSnapshot: customerSnapshotSchema,\n shippingAddress: canonicalCheckoutShippingAddressSchema.nullable(),\n attributes: publicAttributesSchema,\n expiresAt: z.string().datetime({ offset: true }),\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n}\n\nconst abandonedReasonSchema = z.enum(['expired', 'customer', 'operator'])\n\nconst publicCheckoutVariants = [\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('open'),\n paymentState: openCheckoutPaymentStateSchema,\n order: z.null(),\n })\n .strict(),\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('placed'),\n placedAt: z.string().datetime({ offset: true }),\n paymentState: spentCheckoutPaymentStateSchema,\n order: lightweightOrderReferenceSchema,\n })\n .strict(),\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('placed'),\n placedAt: z.string().datetime({ offset: true }),\n placedVia: z.literal('late_capture'),\n abandonedAt: z.string().datetime({ offset: true }),\n abandonedReason: abandonedReasonSchema,\n paymentState: spentCheckoutPaymentStateSchema,\n order: lightweightOrderReferenceSchema,\n })\n .strict(),\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('abandoned'),\n abandonedAt: z.string().datetime({ offset: true }),\n abandonedReason: abandonedReasonSchema,\n paymentState: z\n .object({\n activePaymentSession: z.null(),\n })\n .strict(),\n order: z.null(),\n })\n .strict(),\n] as const\n\nfunction validateCheckoutSnapshot(input: unknown, ctx: z.RefinementCtx) {\n // The callback runs only after the strict variant schema succeeds. Keeping\n // the callback input unknown also lets the typed ServerCheckout union reuse\n // the same cross-field invariant without weakening its public Zod type.\n const checkout = input as {\n amounts: { subtotalMinor: number; discountMinor: number }\n items: Array<{\n unitPriceMinor: number\n discountMinor: number\n quantity: number\n }>\n }\n const expectedSubtotal = checkout.items.reduce(\n (total, item) =>\n total + BigInt(item.unitPriceMinor) * BigInt(item.quantity),\n 0n,\n )\n const expectedDiscount = checkout.items.reduce(\n (total, item) => total + BigInt(item.discountMinor),\n 0n,\n )\n\n if (BigInt(checkout.amounts.subtotalMinor) !== expectedSubtotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['amounts', 'subtotalMinor'],\n message:\n 'subtotalMinor must equal the sum of undiscounted checkout line totals',\n })\n }\n if (BigInt(checkout.amounts.discountMinor) !== expectedDiscount) {\n ctx.addIssue({\n code: 'custom',\n path: ['amounts', 'discountMinor'],\n message: 'discountMinor must equal the sum of checkout line discounts',\n })\n }\n}\n\nexport const publicCheckoutSchema = z\n .union(publicCheckoutVariants)\n .superRefine(validateCheckoutSnapshot)\n\nconst serverCheckoutExtraShape = {\n clientReferenceId: commerceResourceIdSchema.nullable(),\n integrationMetadata: integrationMetadataSchema,\n}\n\nexport type ServerCheckout = PublicCheckout & {\n clientReferenceId: string | null\n integrationMetadata: Record<string, string>\n}\n\nconst serverCheckoutVariants = publicCheckoutVariants.map((variant) =>\n variant.extend(serverCheckoutExtraShape),\n) as unknown as [z.ZodType, z.ZodType, ...z.ZodType[]]\n\nexport const serverCheckoutSchema: z.ZodType<ServerCheckout> = z\n .union(serverCheckoutVariants)\n .superRefine(validateCheckoutSnapshot) as z.ZodType<ServerCheckout>\n\nexport const retrieveCheckoutParamsSchema = z\n .object({ checkoutToken: commerceCapabilitySchema })\n .strict()\n\nexport const retrieveServerCheckoutParamsSchema = z\n .object({ checkoutId: commerceResourceIdSchema })\n .strict()\n\nexport const createCheckoutBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n customer: customerSnapshotSchema,\n shippingAddress: canonicalCheckoutShippingAddressSchema.optional(),\n })\n .strict()\nexport const createCheckoutParamsSchema = createCheckoutBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const createServerCheckoutBodySchema = createCheckoutBodySchema\n .safeExtend({\n clientReferenceId: commerceResourceIdSchema.optional(),\n integrationMetadata: integrationMetadataSchema.optional(),\n })\n .strict()\nexport const createServerCheckoutParamsSchema =\n createServerCheckoutBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const createCheckoutResultSchema = z\n .object({\n checkout: publicCheckoutSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const createServerCheckoutResultSchema = z\n .object({\n checkout: serverCheckoutSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const canonicalCheckoutQuerySchema = z\n .object({\n limit: z.number().int().min(1).max(100).default(20),\n cursor: z.string().min(1).max(512).optional(),\n status: z.array(z.enum(['open', 'placed', 'abandoned'])).optional(),\n createdAtFrom: z.string().datetime({ offset: true }).optional(),\n createdAtTo: z.string().datetime({ offset: true }).optional(),\n clientReferenceId: commerceResourceIdSchema.optional(),\n })\n .strict()\n\nexport type CheckoutListItem = PublicCheckout extends infer Checkout\n ? Checkout extends unknown\n ? Omit<Checkout, 'items' | 'shippingAddress' | 'attributes'> & {\n clientReferenceId: string | null\n }\n : never\n : never\n\nconst checkoutListItemVariants = publicCheckoutVariants.map((variant) =>\n (variant as z.ZodObject<Record<string, z.ZodType>>)\n .omit({\n items: true,\n shippingAddress: true,\n attributes: true,\n })\n .extend({ clientReferenceId: commerceResourceIdSchema.nullable() }),\n) as unknown as [\n z.ZodType<CheckoutListItem>,\n z.ZodType<CheckoutListItem>,\n ...z.ZodType<CheckoutListItem>[],\n]\n\nexport const checkoutListItemSchema = z.union(checkoutListItemVariants)\n\nexport const canonicalCheckoutQueryResultSchema = z\n .object({\n data: z.array(checkoutListItemSchema),\n hasMore: z.boolean(),\n nextCursor: z.string().min(1).max(512).nullable(),\n })\n .strict()\n\nexport const CanonicalPublicCheckoutItemSchema =\n canonicalPublicCheckoutItemSchema\nexport const PublicCheckoutSchema = publicCheckoutSchema\nexport const ServerCheckoutSchema = serverCheckoutSchema\nexport const RetrieveCheckoutParamsSchema = retrieveCheckoutParamsSchema\nexport const RetrieveServerCheckoutParamsSchema =\n retrieveServerCheckoutParamsSchema\nexport const CreateCheckoutBodySchema = createCheckoutBodySchema\nexport const CreateCheckoutParamsSchema = createCheckoutParamsSchema\nexport const CreateServerCheckoutBodySchema = createServerCheckoutBodySchema\nexport const CreateServerCheckoutParamsSchema = createServerCheckoutParamsSchema\nexport const CreateCheckoutResultSchema = createCheckoutResultSchema\nexport const CreateServerCheckoutResultSchema = createServerCheckoutResultSchema\nexport const CanonicalCheckoutQuerySchema = canonicalCheckoutQuerySchema\nexport const CanonicalCheckoutQueryResultSchema =\n canonicalCheckoutQueryResultSchema\nexport const CheckoutQuerySchema = canonicalCheckoutQuerySchema\nexport const CheckoutQueryResultSchema = canonicalCheckoutQueryResultSchema\n\nexport type CanonicalPublicCheckoutItem = z.infer<\n typeof canonicalPublicCheckoutItemSchema\n>\nexport type CheckoutAmounts = z.infer<typeof checkoutAmountsSchema>\nexport type CheckoutPaymentSessionRef = z.infer<\n typeof checkoutPaymentSessionRefSchema\n>\nexport type OpenCheckoutPaymentState = z.infer<\n typeof openCheckoutPaymentStateSchema\n>\nexport type SpentCheckoutPaymentState = z.infer<\n typeof spentCheckoutPaymentStateSchema\n>\nexport type PublicCheckout = z.infer<typeof publicCheckoutSchema>\nexport type RetrieveCheckoutParams = z.infer<\n typeof retrieveCheckoutParamsSchema\n>\nexport type RetrieveServerCheckoutParams = z.infer<\n typeof retrieveServerCheckoutParamsSchema\n>\nexport type CreateCheckoutParams = z.input<typeof createCheckoutParamsSchema>\nexport type CreateServerCheckoutParams = z.input<\n typeof createServerCheckoutParamsSchema\n>\nexport type CreateCheckoutResult = z.infer<typeof createCheckoutResultSchema>\nexport type CreateServerCheckoutResult = z.infer<\n typeof createServerCheckoutResultSchema\n>\nexport type CheckoutQueryParams = z.input<typeof canonicalCheckoutQuerySchema>\nexport type CheckoutQueryResult = z.infer<\n typeof canonicalCheckoutQueryResultSchema\n>\n","import { z } from 'zod'\nimport {\n commerceCapabilitySchema,\n commerceIdempotencyKeySchema,\n commerceResourceIdSchema,\n currencyCodeSchema,\n moneySchema,\n} from './commerce-common'\n\nexport const tossProviderOrderIdSchema = z\n .string()\n .min(6)\n .max(64)\n .regex(\n /^[A-Za-z0-9_-]+$/,\n 'providerOrderId may contain only ASCII letters, digits, underscores, and hyphens',\n )\n\nconst accountAliasUuidV4Schema = z\n .string()\n .regex(\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n 'providerCustomerKey must be ANONYMOUS or a UUIDv4 account alias',\n )\n\nexport const tossProviderCustomerKeySchema = z.union([\n z.literal('ANONYMOUS'),\n accountAliasUuidV4Schema,\n])\n\nconst createPaymentSessionBaseBodyShape = {\n checkoutToken: commerceCapabilitySchema,\n}\n\nconst createTossPaymentSessionBodySchema = z\n .object({\n ...createPaymentSessionBaseBodyShape,\n provider: z.literal('toss'),\n providerOptions: z.object({ profile: z.literal('widget_v2') }).strict(),\n })\n .strict()\n\nexport const PORTONE_HOSTED_PAYMENT_METHODS = [\n 'CARD_KR',\n 'N_PAY',\n 'KAKAO_PAY',\n 'TOSS_PAY',\n 'CARD_INTERNATIONAL',\n 'PAY_PAL',\n 'UNION_PAY',\n 'ALIPAY_CN',\n 'ALIPAY_HK',\n 'TRUE_MONEY',\n 'DANA',\n 'TOUCH_N_GO',\n 'G_CASH',\n 'WE_CHAT_PAY',\n 'KLARNA',\n 'E_CONTEXT',\n 'GRAB_PAY_MY',\n 'GRAB_PAY_SG',\n 'SHOPEE_PAY_TH',\n 'PAY_PAY',\n 'BPI',\n 'RABBIT_LINE_PAY',\n 'CONVENIENCE_STORE_JP',\n 'AMAZON_PAY',\n 'RAKUTEN_PAY',\n 'D_BARAI',\n 'AU_PAY',\n 'MERPAY',\n] as const\n\nexport type PortOneHostedPaymentMethod =\n (typeof PORTONE_HOSTED_PAYMENT_METHODS)[number]\n\nexport const portOneHostedPaymentMethodSchema = z.enum(\n PORTONE_HOSTED_PAYMENT_METHODS,\n)\n\n/** Standard V2 Browser SDK methods are deliberately not Hosted methods. */\nexport const PORTONE_STANDARD_PAYMENT_METHODS = ['CARD'] as const\nexport type PortOneStandardPaymentMethod =\n (typeof PORTONE_STANDARD_PAYMENT_METHODS)[number]\nexport const portOneStandardPaymentMethodSchema = z.enum(\n PORTONE_STANDARD_PAYMENT_METHODS,\n)\n\n/** PortOne Browser SDK V2 uses provider constants, not ISO currency codes. */\nexport const PORTONE_STANDARD_CURRENCY = 'CURRENCY_KRW' as const\n\nconst portOneStandardProviderOptionsSchema = z\n .object({\n profile: z.literal('standard_v2'),\n paymentMethod: portOneStandardPaymentMethodSchema,\n })\n .strict()\n\nexport const createPortOnePaymentSessionBodySchema = z\n .object({\n ...createPaymentSessionBaseBodyShape,\n provider: z.literal('portone'),\n providerOptions: z.discriminatedUnion('profile', [\n z\n .object({\n profile: z.literal('hosted_v2'),\n paymentMethod: portOneHostedPaymentMethodSchema,\n })\n .strict(),\n portOneStandardProviderOptionsSchema,\n ]),\n })\n .strict()\n\nexport const createPaymentSessionBodySchema = z.discriminatedUnion('provider', [\n createTossPaymentSessionBodySchema,\n createPortOnePaymentSessionBodySchema,\n])\n\nexport const createPaymentSessionParamsSchema = z.discriminatedUnion(\n 'provider',\n [\n createTossPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n }),\n createPortOnePaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n }),\n ],\n)\n\nexport const retrieveBrowserPaymentSessionParamsSchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const retrieveServerPaymentSessionParamsSchema = z\n .object({ paymentSessionId: commerceResourceIdSchema })\n .strict()\n\nexport const cancelBrowserPaymentSessionBodySchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\nexport const cancelBrowserPaymentSessionParamsSchema =\n cancelBrowserPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const cancelServerPaymentSessionBodySchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n })\n .strict()\nexport const cancelServerPaymentSessionParamsSchema =\n cancelServerPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const cancelPaymentSessionParamsSchema = z.union([\n cancelBrowserPaymentSessionParamsSchema,\n cancelServerPaymentSessionParamsSchema,\n])\n\nexport const confirmTossPaymentSessionBodySchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n action: z\n .object({\n type: z.literal('toss_authorization'),\n paymentKey: z.string().min(1).max(512),\n providerOrderId: tossProviderOrderIdSchema,\n })\n .strict(),\n })\n .strict()\nexport const confirmTossPaymentSessionParamsSchema =\n confirmTossPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const PAYMENT_PROVIDER_STATUSES = [\n 'requires_payment_method',\n 'requires_action',\n 'requires_confirmation',\n 'initializing',\n 'processing',\n 'authorized',\n 'canceling',\n 'unknown',\n 'captured',\n 'failed',\n 'canceled',\n] as const\n\nexport const paymentProviderStatusSchema = z.enum(PAYMENT_PROVIDER_STATUSES)\n\nconst customPaymentProviderSchema = z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9][a-z0-9_-]{0,63}$/i, 'provider must be a slug')\n\nconst customPaymentIdentitySchema = z.string().trim().min(1)\nconst customPaymentCurrencyInputSchema = z\n .string()\n .trim()\n .min(1)\n .regex(/^[A-Za-z]{3}$/, 'currency must be a three-letter ISO 4217 code')\n .transform((currency) => currency.toUpperCase() as Uppercase<string>)\n\nexport const createCustomPaymentSessionBodySchema = z\n .object({\n provider: customPaymentProviderSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const createCustomPaymentSessionParamsSchema =\n createCustomPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\n/**\n * Server-only projection for the bounded custom-provider bridge. It is\n * intentionally not the raw internal PaymentSession document.\n */\nexport const customPaymentSessionSchema = z\n .object({\n id: commerceResourceIdSchema,\n provider: customPaymentProviderSchema,\n providerSessionId: customPaymentIdentitySchema,\n money: moneySchema,\n })\n .strict()\n\nconst customPaymentSessionLookupSchema = z.union([\n z\n .object({\n providerSessionId: customPaymentIdentitySchema,\n })\n .strict(),\n z\n .object({\n providerPaymentId: customPaymentIdentitySchema,\n })\n .strict(),\n])\n\nexport const retrieveCustomPaymentSessionBodySchema = z\n .object({\n provider: customPaymentProviderSchema,\n by: customPaymentSessionLookupSchema,\n })\n .strict()\n\nexport const retrieveCustomPaymentSessionParamsSchema =\n retrieveCustomPaymentSessionBodySchema\n\nexport const retrievedCustomPaymentSessionSchema = z\n .object({\n id: commerceResourceIdSchema,\n provider: customPaymentProviderSchema,\n providerSessionId: customPaymentIdentitySchema,\n providerPaymentId: customPaymentIdentitySchema.nullable(),\n status: z.enum(['pending', 'captured', 'failed', 'canceled']),\n providerStatus: paymentProviderStatusSchema,\n finalizationStatus: z.enum(['not_ready', 'pending', 'committed']),\n money: moneySchema,\n orderId: commerceResourceIdSchema.nullable(),\n })\n .strict()\n\nexport const confirmCustomPaymentSessionBodySchema = z\n .object({\n provider: customPaymentProviderSchema,\n providerSessionId: customPaymentIdentitySchema,\n providerPaymentId: customPaymentIdentitySchema,\n providerEventId: customPaymentIdentitySchema,\n amount: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),\n currency: customPaymentCurrencyInputSchema,\n occurredAt: customPaymentIdentitySchema,\n })\n .strict()\n\nexport const confirmCustomPaymentSessionParamsSchema =\n confirmCustomPaymentSessionBodySchema\n\nexport const confirmCustomPaymentSessionResponseSchema = z\n .object({\n orderId: commerceResourceIdSchema,\n transactionId: commerceResourceIdSchema,\n status: z.literal('paid'),\n alreadyConfirmed: z.boolean().optional(),\n })\n .strict()\n\nexport const tossPaymentNextActionSchema = z\n .object({\n type: z.literal('toss_widget'),\n clientKey: z.string().min(1).max(255),\n paymentMethodVariantKey: z.string().min(1).max(255),\n agreementVariantKey: z.string().min(1).max(255),\n providerOrderId: tossProviderOrderIdSchema,\n providerCustomerKey: tossProviderCustomerKeySchema,\n orderName: z.string().min(1).max(200),\n customerName: z.string().min(1).max(200).optional(),\n customerEmail: z.string().email().max(254).optional(),\n })\n .strict()\n\nexport const portOnePaymentNextActionSchema = z\n .object({\n type: z.literal('portone_checkout'),\n checkoutUrl: z\n .string()\n .url()\n .startsWith('https://')\n .max(2048)\n .refine((value) => {\n const url = new URL(value)\n return url.username === '' && url.password === ''\n }, 'checkoutUrl must not contain embedded credentials'),\n })\n .strict()\n\nexport const portOneSdkPaymentNextActionSchema = z\n .object({\n type: z.literal('portone_sdk'),\n version: z.literal('v2'),\n storeId: z.string().min(1).max(255),\n channelKey: z.string().min(1).max(255),\n paymentId: z.string().regex(/^[A-Za-z0-9]{6,40}$/),\n orderName: z.string().min(1).max(200),\n totalAmount: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),\n currency: z.literal(PORTONE_STANDARD_CURRENCY),\n payMethod: portOneStandardPaymentMethodSchema,\n redirectUrl: z\n .string()\n .url()\n .max(2048)\n .refine((value) => {\n const url = new URL(value)\n const loopback =\n url.protocol === 'http:' &&\n (url.hostname === 'localhost' || url.hostname === '127.0.0.1')\n return (\n (url.protocol === 'https:' || loopback) &&\n !url.username &&\n !url.password\n )\n }, 'redirectUrl must be HTTPS (or development loopback) without embedded credentials'),\n })\n .strict()\n\nexport const paymentNextActionSchema = z.discriminatedUnion('type', [\n tossPaymentNextActionSchema,\n portOnePaymentNextActionSchema,\n portOneSdkPaymentNextActionSchema,\n])\n\nexport const PAYMENT_SESSION_ROLES = [\n 'active',\n 'canonical_candidate',\n 'canonical',\n 'residual',\n 'historical',\n] as const\n\nexport const paymentSessionRoleSchema = z.enum(PAYMENT_SESSION_ROLES)\n\nexport const PAYMENT_RECONCILIATION_REASONS = [\n 'provider_outcome_unknown',\n 'local_commit_ambiguous',\n 'amount_mismatch',\n 'currency_mismatch',\n 'excess_capture_pending_order',\n 'inventory_unavailable',\n 'admission_unavailable',\n 'excess_capture',\n 'late_capture',\n 'cross_checkout_duplicate',\n] as const\n\nexport const paymentReconciliationReasonSchema = z.enum(\n PAYMENT_RECONCILIATION_REASONS,\n)\n\nfunction requiredReconciliationSchema<\n const T extends readonly [string, ...string[]],\n>(reasons: T) {\n const reasonSchema = z.enum(reasons)\n return z\n .object({\n status: z.literal('required'),\n reasons: z.array(reasonSchema).min(1).readonly(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const indexes = new Map(reasons.map((reason, index) => [reason, index]))\n let previous = -1\n value.reasons.forEach((reason, index) => {\n const current = indexes.get(reason) ?? -1\n if (current <= previous) {\n ctx.addIssue({\n code: 'custom',\n path: ['reasons', index],\n message:\n 'reconciliation reasons must be unique and canonical-sorted',\n })\n }\n previous = current\n })\n })\n}\n\nconst noReconciliationSchema = z.object({ status: z.literal('none') }).strict()\n\nexport const publicCaptureEvidenceSchema = z\n .object({\n amountMinor: z.number().int().nonnegative(),\n currency: currencyCodeSchema,\n observedAt: z.string().datetime({ offset: true }),\n })\n .strict()\n\nexport const reconciliationRefundEvidenceSchema = z\n .object({\n providerRefundId: z.string().min(1),\n money: moneySchema,\n observedAt: z.string().datetime({ offset: true }),\n })\n .strict()\n\nexport const PAYMENT_FAILURE_REASONS = [\n 'payment_declined',\n 'authentication_failed',\n 'authorization_expired',\n 'payment_method_unavailable',\n 'provider_terminal_failure',\n 'unknown_provider_terminal_failure',\n] as const\n\nexport const paymentFailureReasonSchema = z.enum(PAYMENT_FAILURE_REASONS)\n\nexport type PaymentNextAction = z.infer<typeof paymentNextActionSchema>\nexport type TossPaymentNextAction = z.infer<typeof tossPaymentNextActionSchema>\nexport type PortOnePaymentNextAction = z.infer<\n typeof portOnePaymentNextActionSchema\n>\nexport type PortOneSdkPaymentNextAction = z.infer<\n typeof portOneSdkPaymentNextActionSchema\n>\nexport type PublicCaptureEvidence = z.infer<typeof publicCaptureEvidenceSchema>\nexport type PaymentFailureReason = z.infer<typeof paymentFailureReasonSchema>\n\nexport type ReconciliationRequired<Reason extends string> = {\n status: 'required'\n reasons: readonly [Reason, ...Reason[]]\n}\n\ntype PublicPaymentSessionBase = {\n id: string\n money: z.infer<typeof moneySchema>\n expiresAt: string | null\n sessionRole:\n | 'active'\n | 'canonical_candidate'\n | 'canonical'\n | 'residual'\n | 'historical'\n}\n\ntype PublicPaymentSessionState<Action extends PaymentNextAction> =\n | ({\n providerStatus: 'requires_payment_method' | 'requires_action'\n finalizationStatus: 'not_ready'\n reconciliation: { status: 'none' }\n order: null\n } & (\n | {\n sessionRole: 'active'\n presentationStatus: 'actionable'\n nextAction: Action\n }\n | {\n sessionRole: 'residual'\n presentationStatus: 'suppressed'\n nextAction?: never\n }\n ))\n | {\n providerStatus: 'requires_confirmation'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: { status: 'none' }\n order: null\n }\n | {\n providerStatus: 'initializing' | 'processing' | 'authorized'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: { status: 'none' }\n order: null\n }\n | {\n providerStatus: 'canceling'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: { status: 'none' }\n order: null\n }\n | {\n providerStatus: 'unknown'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: ReconciliationRequired<'provider_outcome_unknown'>\n order: null\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical_candidate' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'pending'\n nextAction?: never\n reconciliation: { status: 'none' }\n providerEvidence: PublicCaptureEvidence\n order: null\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical' | 'historical'\n presentationStatus: 'suppressed'\n finalizationStatus: 'committed'\n nextAction?: never\n reconciliation: { status: 'none' }\n providerEvidence: PublicCaptureEvidence\n order: { id: string; orderNumber: string }\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical_candidate' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'pending'\n nextAction?: never\n reconciliation: ReconciliationRequired<\n | 'local_commit_ambiguous'\n | 'amount_mismatch'\n | 'currency_mismatch'\n | 'excess_capture_pending_order'\n >\n providerEvidence: PublicCaptureEvidence\n order: null\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'committed'\n nextAction?: never\n reconciliation: ReconciliationRequired<\n | 'inventory_unavailable'\n | 'admission_unavailable'\n | 'amount_mismatch'\n | 'currency_mismatch'\n | 'excess_capture'\n | 'late_capture'\n | 'cross_checkout_duplicate'\n >\n providerEvidence: PublicCaptureEvidence\n order: { id: string; orderNumber: string }\n }\n | {\n providerStatus: 'failed'\n sessionRole: 'historical'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n providerEvidence?: never\n cancellationReason?: never\n reconciliation: { status: 'none' }\n failure: { reason: PaymentFailureReason; message?: string }\n order: null\n }\n | {\n providerStatus: 'canceled'\n sessionRole: 'historical'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n providerEvidence?: never\n failure?: never\n cancellationReason: 'expired' | 'customer' | 'operator' | 'provider'\n reconciliation: { status: 'none' }\n order: null\n }\n\nexport type PublicPaymentSession = PublicPaymentSessionBase &\n (\n | ({ provider: 'toss' } & PublicPaymentSessionState<TossPaymentNextAction>)\n | ({\n provider: 'portone'\n } & PublicPaymentSessionState<\n PortOnePaymentNextAction | PortOneSdkPaymentNextAction\n >)\n )\n\nconst orderReferenceSchema = z\n .object({\n id: z.string().min(1),\n orderNumber: z.string().min(1),\n })\n .strict()\n\nconst paymentSessionBaseShape = {\n id: z.string().min(1),\n money: moneySchema,\n expiresAt: z.string().datetime({ offset: true }).nullable(),\n}\n\nconst suppressedNotReadyShape = {\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n reconciliation: noReconciliationSchema,\n order: z.null(),\n}\n\nfunction stateSchemas(nextAction: z.ZodType) {\n return [\n z.object({\n providerStatus: z.enum(['requires_payment_method', 'requires_action']),\n sessionRole: z.literal('active'),\n presentationStatus: z.literal('actionable'),\n finalizationStatus: z.literal('not_ready'),\n nextAction,\n reconciliation: noReconciliationSchema,\n order: z.null(),\n }),\n z.object({\n providerStatus: z.enum(['requires_payment_method', 'requires_action']),\n sessionRole: z.literal('residual'),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.literal('requires_confirmation'),\n sessionRole: z.enum(['active', 'residual']),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.enum(['initializing', 'processing', 'authorized']),\n sessionRole: z.enum(['active', 'residual']),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.literal('canceling'),\n sessionRole: z.enum(['active', 'residual']),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.literal('unknown'),\n sessionRole: z.enum(['active', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n reconciliation: requiredReconciliationSchema([\n 'provider_outcome_unknown',\n ]),\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical_candidate', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('pending'),\n reconciliation: noReconciliationSchema,\n providerEvidence: publicCaptureEvidenceSchema,\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical', 'historical']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('committed'),\n reconciliation: noReconciliationSchema,\n providerEvidence: publicCaptureEvidenceSchema,\n order: orderReferenceSchema,\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical_candidate', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('pending'),\n reconciliation: requiredReconciliationSchema([\n 'local_commit_ambiguous',\n 'amount_mismatch',\n 'currency_mismatch',\n 'excess_capture_pending_order',\n ]),\n providerEvidence: publicCaptureEvidenceSchema,\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('committed'),\n reconciliation: requiredReconciliationSchema([\n 'inventory_unavailable',\n 'admission_unavailable',\n 'amount_mismatch',\n 'currency_mismatch',\n 'excess_capture',\n 'late_capture',\n 'cross_checkout_duplicate',\n ]),\n providerEvidence: publicCaptureEvidenceSchema,\n order: orderReferenceSchema,\n }),\n z.object({\n providerStatus: z.literal('failed'),\n sessionRole: z.literal('historical'),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n reconciliation: noReconciliationSchema,\n failure: z\n .object({\n reason: paymentFailureReasonSchema,\n message: z.string().min(1).optional(),\n })\n .strict(),\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('canceled'),\n sessionRole: z.literal('historical'),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n cancellationReason: z.enum([\n 'expired',\n 'customer',\n 'operator',\n 'provider',\n ]),\n reconciliation: noReconciliationSchema,\n order: z.null(),\n }),\n ]\n}\n\nfunction providerSessionSchemas(\n provider: 'toss' | 'portone',\n action: z.ZodType,\n) {\n return stateSchemas(action).map((state) =>\n z\n .object({\n ...paymentSessionBaseShape,\n provider: z.literal(provider),\n ...state.shape,\n })\n .strict(),\n )\n}\n\nconst publicPaymentSessionVariants = [\n ...providerSessionSchemas('toss', tossPaymentNextActionSchema),\n ...providerSessionSchemas(\n 'portone',\n z.union([\n portOnePaymentNextActionSchema,\n portOneSdkPaymentNextActionSchema,\n ]),\n ),\n] as unknown as [z.ZodType, z.ZodType, ...z.ZodType[]]\n\nexport const publicPaymentSessionSchema: z.ZodType<PublicPaymentSession> =\n z.union(publicPaymentSessionVariants) as z.ZodType<PublicPaymentSession>\n\nexport const CreatePaymentSessionParamsSchema = createPaymentSessionParamsSchema\nexport const CreatePaymentSessionBodySchema = createPaymentSessionBodySchema\nexport const PublicPaymentSessionSchema = publicPaymentSessionSchema\nexport const RetrieveBrowserPaymentSessionParamsSchema =\n retrieveBrowserPaymentSessionParamsSchema\nexport const RetrieveServerPaymentSessionParamsSchema =\n retrieveServerPaymentSessionParamsSchema\nexport const CancelBrowserPaymentSessionParamsSchema =\n cancelBrowserPaymentSessionParamsSchema\nexport const CancelBrowserPaymentSessionBodySchema =\n cancelBrowserPaymentSessionBodySchema\nexport const CancelServerPaymentSessionParamsSchema =\n cancelServerPaymentSessionParamsSchema\nexport const CancelServerPaymentSessionBodySchema =\n cancelServerPaymentSessionBodySchema\nexport const ConfirmTossPaymentSessionParamsSchema =\n confirmTossPaymentSessionParamsSchema\nexport const ConfirmTossPaymentSessionBodySchema =\n confirmTossPaymentSessionBodySchema\nexport const CancelPaymentSessionParamsSchema = cancelPaymentSessionParamsSchema\nexport const CreateCustomPaymentSessionBodySchema =\n createCustomPaymentSessionBodySchema\nexport const CreateCustomPaymentSessionParamsSchema =\n createCustomPaymentSessionParamsSchema\nexport const CustomPaymentSessionSchema = customPaymentSessionSchema\nexport const RetrieveCustomPaymentSessionBodySchema =\n retrieveCustomPaymentSessionBodySchema\nexport const RetrieveCustomPaymentSessionParamsSchema =\n retrieveCustomPaymentSessionParamsSchema\nexport const RetrievedCustomPaymentSessionSchema =\n retrievedCustomPaymentSessionSchema\nexport const ConfirmCustomPaymentSessionBodySchema =\n confirmCustomPaymentSessionBodySchema\nexport const ConfirmCustomPaymentSessionParamsSchema =\n confirmCustomPaymentSessionParamsSchema\nexport const ConfirmCustomPaymentSessionResponseSchema =\n confirmCustomPaymentSessionResponseSchema\n\nexport type CreatePaymentSessionParams = z.infer<\n typeof createPaymentSessionParamsSchema\n>\nexport type RetrieveBrowserPaymentSessionParams = z.infer<\n typeof retrieveBrowserPaymentSessionParamsSchema\n>\nexport type RetrieveServerPaymentSessionParams = z.infer<\n typeof retrieveServerPaymentSessionParamsSchema\n>\nexport type CancelBrowserPaymentSessionParams = z.infer<\n typeof cancelBrowserPaymentSessionParamsSchema\n>\nexport type CancelServerPaymentSessionParams = z.infer<\n typeof cancelServerPaymentSessionParamsSchema\n>\nexport type CancelPaymentSessionParams = z.infer<\n typeof cancelPaymentSessionParamsSchema\n>\nexport type ConfirmTossPaymentSessionParams = z.infer<\n typeof confirmTossPaymentSessionParamsSchema\n>\nexport type CreateCustomPaymentSessionBody = z.input<\n typeof createCustomPaymentSessionBodySchema\n>\nexport type CreateCustomPaymentSessionParams = z.input<\n typeof createCustomPaymentSessionParamsSchema\n>\nexport type CustomPaymentSession = z.output<typeof customPaymentSessionSchema>\nexport type RetrieveCustomPaymentSessionBody = z.input<\n typeof retrieveCustomPaymentSessionBodySchema\n>\nexport type RetrieveCustomPaymentSessionParams = z.input<\n typeof retrieveCustomPaymentSessionParamsSchema\n>\nexport type RetrievedCustomPaymentSession = z.output<\n typeof retrievedCustomPaymentSessionSchema\n>\nexport type ConfirmCustomPaymentSessionBody = z.input<\n typeof confirmCustomPaymentSessionBodySchema\n>\nexport type ConfirmCustomPaymentSessionParams = z.input<\n typeof confirmCustomPaymentSessionParamsSchema\n>\nexport type ConfirmCustomPaymentSessionResponse = z.output<\n typeof confirmCustomPaymentSessionResponseSchema\n>\nexport type PaymentSessionRole = z.infer<typeof paymentSessionRoleSchema>\nexport type PaymentProviderStatus = z.infer<typeof paymentProviderStatusSchema>\nexport type PaymentReconciliationReason = z.infer<\n typeof paymentReconciliationReasonSchema\n>\nexport type ReconciliationRefundEvidence = z.infer<\n typeof reconciliationRefundEvidenceSchema\n>\n","import { Command } from 'commander'\nimport { cancelOrderSchema } 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 idSchema = z.union([z.string().min(1), z.number()]).transform(String)\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('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('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 { createReadStream } from 'node:fs'\nimport { stdin as processStdin } from 'node:process'\n\nexport const SENSITIVE_JSON_MAX_BYTES = 1024 * 1024\n\ntype SensitiveReadable = AsyncIterable<Buffer | string> & {\n isTTY?: boolean\n destroy?: () => void\n}\n\nexport interface SensitiveJsonInputSources {\n stdin?: SensitiveReadable\n openFile?: (path: string) => SensitiveReadable\n}\n\nfunction invalidInput(message: string) {\n return {\n type: 'validation' as const,\n code: 'invalid_argument' as const,\n field: 'data',\n message,\n detail: { message, field: 'data' },\n }\n}\n\nfunction isInvalidInput(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false\n const value = error as Record<string, unknown>\n return value.type === 'validation' && value.code === 'invalid_argument'\n}\n\nasync function readBoundedUtf8(source: SensitiveReadable): Promise<string> {\n const chunks: Buffer[] = []\n let totalBytes = 0\n for await (const chunk of source) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)\n totalBytes += buffer.byteLength\n if (totalBytes > SENSITIVE_JSON_MAX_BYTES) {\n throw invalidInput(\n `Sensitive commerce data must be ${SENSITIVE_JSON_MAX_BYTES} bytes or fewer.`,\n )\n }\n chunks.push(buffer)\n }\n return Buffer.concat(chunks, totalBytes).toString('utf8')\n}\n\n/** Read secret-bearing JSON without placing it in argv or validation output. */\nexport async function readSensitiveJsonObject(\n opts: {\n dataStdin?: boolean\n dataFile?: string\n },\n sources: SensitiveJsonInputSources = {},\n): Promise<Record<string, unknown>> {\n const sourceCount = [opts.dataStdin, opts.dataFile].filter(Boolean).length\n if (sourceCount !== 1) {\n throw invalidInput(\n 'Exactly one of --data-stdin or --data-file is required for sensitive commerce data.',\n )\n }\n\n let raw: string\n const input = sources.stdin ?? processStdin\n try {\n if (opts.dataStdin) {\n if (input.isTTY === true) {\n throw invalidInput(\n 'Sensitive commerce data cannot be read from an interactive terminal. Pipe JSON to --data-stdin or use --data-file.',\n )\n }\n raw = await readBoundedUtf8(input)\n } else {\n const file = (sources.openFile ?? createReadStream)(opts.dataFile!)\n try {\n raw = await readBoundedUtf8(file)\n } finally {\n file.destroy?.()\n }\n }\n } catch (error) {\n if (isInvalidInput(error)) throw error\n throw invalidInput('Sensitive commerce data could not be read.')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw invalidInput('Sensitive commerce data must be valid JSON.')\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw invalidInput('Sensitive commerce data must be a JSON object.')\n }\n return parsed as Record<string, unknown>\n}\n\n/** Build a dry-run result that proves validation without echoing secret input. */\nexport function sensitiveDryRunResult(action: string) {\n return { dryRun: true, valid: true, action } as const\n}\n","import {\n addItemParamsSchema,\n clearCartParamsSchema,\n createCartParamsSchema,\n removeItemParamsSchema,\n retrieveCartParamsSchema,\n updateCartAttributesParamsSchema,\n updateDiscountCodesParamsSchema,\n updateItemParamsSchema,\n} from '@01.software/contracts'\nimport { Command } from 'commander'\nimport {\n addCartItemSchema,\n cartLineAdmissionsInputSchema,\n clearCartSchema,\n removeCartItemSchema,\n updateCartItemSchema,\n updateDiscountCodesSchema,\n} from '@01.software/contracts'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { exitWithError, printResult } from '../lib/output.js'\nimport { parseWithSchema } from '../lib/parse.js'\nimport {\n readSensitiveJsonObject,\n sensitiveDryRunResult,\n} from '../lib/sensitive-json-input.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 capability')\n .option('--data-stdin', 'Read market and attributes JSON from stdin')\n .option('--data-file <path>', 'Read market and attributes JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const input =\n opts.dataStdin || opts.dataFile\n ? await readSensitiveJsonObject(opts)\n : {}\n const data = parseWithSchema(\n input,\n 'cart create',\n createCartParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart create'), getFormat())\n return\n }\n printResult(await getClient().commerce.carts.create(data), getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('retrieve')\n .description('Retrieve a cart by its capability token')\n .option('--data-stdin', 'Read the Cart capability JSON from stdin')\n .option('--data-file <path>', 'Read the Cart capability JSON from file')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart retrieve',\n retrieveCartParamsSchema,\n )\n printResult(\n await getClient().commerce.carts.retrieve(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('add')\n .description('Add an item to a cart')\n .option('--data-stdin', 'Read capability and item JSON from stdin')\n .option('--data-file <path>', 'Read capability and item JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart add',\n addItemParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart add'), getFormat())\n return\n }\n printResult(await getClient().commerce.carts.addItem(data), getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('update')\n .description('Update cart item quantity')\n .option('--data-stdin', 'Read capability and item JSON from stdin')\n .option('--data-file <path>', 'Read capability and item JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart update',\n updateItemParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart update'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.updateItem(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('remove')\n .description('Remove an item from a cart')\n .option('--data-stdin', 'Read capability and item JSON from stdin')\n .option('--data-file <path>', 'Read capability and item JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart remove',\n removeItemParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart remove'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.removeItem(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('clear')\n .description('Remove all items from a cart')\n .option('--data-stdin', 'Read the Cart capability JSON from stdin')\n .option('--data-file <path>', 'Read the Cart capability JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart clear',\n clearCartParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart clear'), getFormat())\n return\n }\n printResult(await getClient().commerce.carts.clear(data), getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('discounts')\n .description('Replace all cart discount codes; pass [] to clear')\n .option('--data-stdin', 'Read capability and discount JSON from stdin')\n .option('--data-file <path>', 'Read capability and discount JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart discounts',\n updateDiscountCodesParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart discounts'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.updateDiscountCodes(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('attributes')\n .description('Replace all public cart attributes; pass [] to clear')\n .option('--data-stdin', 'Read capability and attributes JSON from stdin')\n .option(\n '--data-file <path>',\n 'Read capability and attributes JSON from file',\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart attributes',\n updateCartAttributesParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart attributes'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.updateAttributes(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\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 {\n CancelServerPaymentSessionParamsSchema,\n CanonicalCheckoutQuerySchema,\n ConfirmTossPaymentSessionParamsSchema,\n CreatePaymentSessionParamsSchema,\n CreateServerCheckoutParamsSchema,\n} from '@01.software/contracts'\nimport { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { exitWithError, printResult } from '../lib/output.js'\nimport { parseJson, parseWithSchema } from '../lib/parse.js'\nimport {\n readSensitiveJsonObject,\n sensitiveDryRunResult,\n} from '../lib/sensitive-json-input.js'\n\nfunction paymentProvider(value: unknown): 'portone' | 'toss' {\n if (value === 'toss' || value === 'portone') return value\n throw new Error('payment provider must be toss or portone')\n}\n\nexport function registerCommerceSessionCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const checkout = program\n .command('checkout')\n .description('Checkout management')\n\n checkout\n .command('create')\n .description('Create a Checkout from a server-authoritative Cart')\n .option('--data-stdin', 'Read capability and customer JSON from stdin')\n .option('--data-file <path>', 'Read capability and customer JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'checkout',\n CreateServerCheckoutParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('checkout create'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.checkouts.create(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n checkout\n .command('retrieve <checkoutId>')\n .description('Retrieve a Checkout by ID with server credentials')\n .action(async (checkoutId: string) => {\n try {\n printResult(\n await getClient().commerce.checkouts.retrieve({ checkoutId }),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n checkout\n .command('query')\n .description('Query lightweight Checkouts with server credentials')\n .option('--params <json>', 'Checkout query parameters (JSON)', '{}')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n parseJson(opts.params, 'params'),\n 'checkout query',\n CanonicalCheckoutQuerySchema,\n )\n printResult(\n await getClient().commerce.checkouts.query(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n const sessions = program\n .command('payment-session')\n .description('PaymentSession management')\n\n sessions\n .command('create')\n .description('Create a canonical provider-configured PaymentSession')\n .option('--data-stdin', 'Read canonical create parameters from stdin')\n .option('--data-file <path>', 'Read canonical create parameters from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'payment-session',\n CreatePaymentSessionParamsSchema,\n )\n if (opts.dryRun) {\n printResult(\n sensitiveDryRunResult('payment-session create'),\n getFormat(),\n )\n return\n }\n const paymentSessions = getClient().commerce.paymentSessions\n const result =\n data.provider === 'portone'\n ? await paymentSessions.createPortOne(data)\n : await paymentSessions.create(data)\n printResult(result, getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n sessions\n .command('retrieve <paymentSessionId>')\n .description('Retrieve a PaymentSession')\n .option(\n '--provider <provider>',\n 'Payment provider (toss or portone)',\n 'toss',\n )\n .action(async (paymentSessionId: string, opts) => {\n try {\n const provider = paymentProvider(opts.provider)\n const paymentSessions = getClient().commerce.paymentSessions\n printResult(\n provider === 'portone'\n ? await paymentSessions.retrievePortOne({ paymentSessionId })\n : await paymentSessions.retrieve({ paymentSessionId }),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n sessions\n .command('cancel')\n .description('Cancel a PaymentSession and release its payment slot')\n .option('--data-stdin', 'Read session ID and idempotency key from stdin')\n .option(\n '--data-file <path>',\n 'Read session ID and idempotency key from file',\n )\n .option(\n '--provider <provider>',\n 'Payment provider (toss or portone)',\n 'toss',\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'payment-session cancel',\n CancelServerPaymentSessionParamsSchema,\n )\n const provider = paymentProvider(opts.provider)\n if (opts.dryRun) {\n printResult(\n sensitiveDryRunResult('payment-session cancel'),\n getFormat(),\n )\n return\n }\n const paymentSessions = getClient().commerce.paymentSessions\n printResult(\n provider === 'portone'\n ? await paymentSessions.cancelPortOne(data)\n : await paymentSessions.cancel(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n sessions\n .command('confirm-toss')\n .description('Confirm a Toss authorization with the typed server action')\n .option('--data-stdin', 'Read Toss confirmation params from stdin')\n .option('--data-file <path>', 'Read Toss confirmation params from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'payment-session confirm-toss',\n ConfirmTossPaymentSessionParamsSchema,\n )\n if (opts.dryRun) {\n printResult(\n sensitiveDryRunResult('payment-session confirm-toss'),\n getFormat(),\n )\n return\n }\n printResult(\n await getClient().commerce.paymentSessions.confirm(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n}\n","import type {\n ProductDetailParams,\n ProductFallbackLocaleOption,\n ProductLocaleOption,\n} from '@01.software/sdk'\n\nexport interface ProductDetailCliOptions {\n id?: string\n slug?: string\n market?: string\n locale?: string\n fallbackLocale?: string\n}\n\nfunction invalidOption(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 parseLocale(\n value: string | undefined,\n): ProductLocaleOption | undefined {\n if (value == null) return undefined\n if (value === 'ko' || value === 'en' || value === 'all') return value\n throw invalidOption('--locale must be one of: ko, en, all', 'locale', value)\n}\n\nfunction parseFallbackLocale(\n value: string | undefined,\n): ProductFallbackLocaleOption | undefined {\n if (value == null) return undefined\n if (value === 'ko' || value === 'en') return value\n if (value === 'none') return false\n throw invalidOption(\n '--fallback-locale must be one of: ko, en, none',\n 'fallbackLocale',\n value,\n )\n}\n\nexport function productDetailParamsFromOptions(\n options: ProductDetailCliOptions,\n): ProductDetailParams {\n const hasId = typeof options.id === 'string' && options.id.length > 0\n const hasSlug = typeof options.slug === 'string' && options.slug.length > 0\n\n if (hasId === hasSlug) {\n throw invalidOption(\n 'Exactly one of --id or --slug is required.',\n 'product',\n { id: options.id, slug: options.slug },\n )\n }\n\n const locale = parseLocale(options.locale)\n const fallbackLocale = parseFallbackLocale(options.fallbackLocale)\n const identifier = hasId ? { id: options.id! } : { slug: options.slug! }\n\n return {\n ...identifier,\n ...(options.market !== undefined ? { market: options.market } : {}),\n ...(locale !== undefined ? { locale } : {}),\n ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),\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'\nimport {\n productDetailParamsFromOptions,\n type ProductDetailCliOptions,\n} from '../lib/product-detail-options.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('detail')\n .description('Get shaped product detail by slug or ID')\n .option('--slug <slug>', 'Product slug')\n .option('--id <id>', 'Product ID')\n .option('--market <market>', 'Market slug')\n .option('--locale <locale>', 'Locale: ko, en, or all')\n .option('--fallback-locale <locale>', 'Fallback locale: ko, en, or none')\n .action(async (opts: ProductDetailCliOptions) => {\n try {\n const params = productDetailParamsFromOptions(opts)\n const client = getClient()\n const result = await client.commerce.product.detail(params)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\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('--country-code <code>', 'Destination country code')\n .option('--region-code <code>', 'Destination region code')\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.countryCode ? { countryCode: opts.countryCode } : {}),\n ...(opts.regionCode ? { regionCode: opts.regionCode } : {}),\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 {\n getAgentPlanOperations,\n type AgentPlanOperation,\n} from '../lib/agent-plan-allowlist.js'\nimport {\n exitWithAgentError,\n printAgentSuccess,\n resolveAgentPrintOptions,\n validateAgentOutputTarget,\n} from '../lib/agent-output.js'\nimport {\n parseSelect,\n validateCollection,\n type CliCollection,\n} from '../lib/collections.js'\nimport {\n productDetailParamsFromOptions,\n type ProductDetailCliOptions,\n} from '../lib/product-detail-options.js'\nimport { registerAgentPlanCommands } from './agent-plan.js'\n\nconst AGENT_PROTOCOL_VERSION = '1'\n\ntype AgentReadOperation = 'query' | 'get' | 'detail'\ntype AgentPlanOperationName = `plan:${AgentPlanOperation}`\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 discovery: {\n context: {\n counts: boolean\n }\n schema: {\n mode: 'effective'\n }\n }\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 Exclude<AgentReadOperation, 'detail'>[]\nconst AGENT_PRODUCT_OPERATIONS = [\n 'detail',\n] as const satisfies readonly AgentReadOperation[]\nexport function buildAgentManifest(): AgentManifest {\n const collections = {} as AgentManifest['collections']\n for (const collection of SERVER_COLLECTIONS) {\n const operations: AgentOperation[] = [\n ...AGENT_READ_OPERATIONS,\n ...(collection === 'products' ? AGENT_PRODUCT_OPERATIONS : []),\n ...getAgentPlanOperations(collection).map(\n (operation): AgentPlanOperationName => `plan:${operation}`,\n ),\n ]\n collections[collection] = {\n operations,\n fields: buildStableAgentFields(),\n }\n }\n\n return {\n version: AGENT_PROTOCOL_VERSION,\n discovery: {\n context: { counts: true },\n schema: { mode: 'effective' },\n },\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 .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action((_opts: object, command: Command) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n printAgentSuccess(buildAgentManifest(), outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n }),\n )\n\n configureAgentParser(\n agent\n .command('context')\n .description('Get the active tenant context')\n .option('--counts', 'Include collection document counts')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(async (opts: { counts?: boolean }, command: Command) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n const client = getClient()\n const result = opts.counts\n ? await client.tenant.context({ includeCounts: true })\n : await client.tenant.context()\n printAgentSuccess(result, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n }),\n )\n\n configureAgentParser(\n agent\n .command('schema <collection>')\n .description('Get the effective field schema for a collection')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(async (collection: string, _opts: object, command: Command) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n const col = validateAgentCollection(collection)\n const client = getClient()\n const result = await client.tenant.collectionSchema(col)\n printAgentSuccess(result, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\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 command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\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, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n id: string | undefined,\n opts: { select?: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\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, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n },\n ),\n )\n\n const product = configureAgentParser(\n agent.command('product').description('Shaped product reads'),\n )\n\n configureAgentParser(\n product\n .command('detail')\n .description('Get shaped product detail by slug or ID')\n .option('--slug <slug>', 'Product slug')\n .option('--id <id>', 'Product ID')\n .option('--market <market>', 'Market slug')\n .option('--locale <locale>', 'Locale: ko, en, or all')\n .option('--fallback-locale <locale>', 'Fallback locale: ko, en, or none')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n opts: ProductDetailCliOptions & { pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n const params = productDetailParamsFromOptions(opts)\n const client = getClient()\n const result = await client.commerce.product.detail(params)\n printAgentSuccess(result, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n },\n ),\n )\n\n registerAgentPlanCommands(agent, getClient)\n}\n","import { SERVER_COLLECTIONS } from '@01.software/sdk'\nimport { agentPlanError } from './agent-output.js'\n\nexport type AgentPlanOperation = 'create' | 'update' | 'delete'\ntype ServerCollection = (typeof SERVER_COLLECTIONS)[number]\n\nexport const AGENT_PLAN_CAPABILITIES = {\n articles: ['create', 'update', 'delete'],\n 'article-categories': ['create', 'update', 'delete'],\n 'article-tags': ['create', 'update', 'delete'],\n links: ['create', 'update', 'delete'],\n 'link-categories': ['create', 'update', 'delete'],\n 'link-tags': ['create', 'update', 'delete'],\n documents: ['create', 'update'],\n 'document-categories': ['create', 'update'],\n 'document-types': ['create', 'update'],\n canvases: ['create', 'update', 'delete'],\n 'canvas-categories': ['create', 'update', 'delete'],\n 'canvas-tags': ['create', 'update', 'delete'],\n} as const satisfies Partial<\n Record<ServerCollection, readonly AgentPlanOperation[]>\n>\n\nexport type AgentPlanCollection = keyof typeof AGENT_PLAN_CAPABILITIES\n\nconst SERVER_COLLECTION_SET = new Set<string>(SERVER_COLLECTIONS)\nconst AGENT_PLAN_OPERATIONS = new Set<AgentPlanOperation>([\n 'create',\n 'update',\n 'delete',\n])\n\nexport function assertAgentPlanCapabilityMatrix(\n matrix: Readonly<Record<string, readonly string[]>>,\n): void {\n for (const [collection, operations] of Object.entries(matrix)) {\n if (!SERVER_COLLECTION_SET.has(collection)) {\n throw new Error(\n `Agent plan capability collection \"${collection}\" is not a ServerCollection.`,\n )\n }\n if (operations.length === 0) {\n throw new Error(\n `Agent plan capability collection \"${collection}\" has no operations.`,\n )\n }\n\n const seen = new Set<string>()\n for (const operation of operations) {\n if (!AGENT_PLAN_OPERATIONS.has(operation as AgentPlanOperation)) {\n throw new Error(\n `Agent plan capability operation \"${operation}\" is invalid for \"${collection}\".`,\n )\n }\n if (seen.has(operation)) {\n throw new Error(\n `Agent plan capability operation \"${operation}\" is duplicated for \"${collection}\".`,\n )\n }\n seen.add(operation)\n }\n }\n}\n\nassertAgentPlanCapabilityMatrix(AGENT_PLAN_CAPABILITIES)\n\nexport function isAgentPlanCollection(\n collection: string,\n): collection is AgentPlanCollection {\n return Object.prototype.hasOwnProperty.call(\n AGENT_PLAN_CAPABILITIES,\n collection,\n )\n}\n\nexport function assertAgentPlanCollection(\n collection: string,\n): 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 getAgentPlanOperations(\n collection: ServerCollection,\n): readonly AgentPlanOperation[] {\n return isAgentPlanCollection(collection)\n ? AGENT_PLAN_CAPABILITIES[collection]\n : []\n}\n\nexport function isAgentPlanCapability(\n collection: string,\n operation: string,\n): collection is AgentPlanCollection {\n if (!isAgentPlanCollection(collection)) return false\n return (AGENT_PLAN_CAPABILITIES[collection] as readonly string[]).includes(\n operation,\n )\n}\n\nexport function assertAgentPlanCapability(\n collection: string,\n operation: AgentPlanOperation,\n): AgentPlanCollection {\n if (isAgentPlanCapability(collection, operation)) {\n return collection\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Operation \"${operation}\" is not supported for collection \"${collection}\" in agent plan mutations.`,\n )\n}\n\nexport function assertAgentPlanOperation(\n operation: string,\n): AgentPlanOperation {\n if (AGENT_PLAN_OPERATIONS.has(operation as AgentPlanOperation)) {\n return operation as AgentPlanOperation\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Operation \"${operation}\" is not supported for agent plan mutations.`,\n )\n}\n","import { randomBytes } from 'node:crypto'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport type { Command } from 'commander'\nimport { 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 retryable: boolean\n retryAfter?: number\n }\n}\n\nexport interface AgentPrintOptions {\n pretty?: boolean\n outputFile?: string\n}\n\ninterface AgentCommandOutputOptions {\n pretty?: boolean\n outputFile?: string\n}\n\ninterface AgentOutputReceipt {\n outputFile: string\n bytes: number\n}\n\nconst AGENT_OUTPUT_FILE_MODE = 0o600\nconst isWin32 = process.platform === 'win32'\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 invalidOutputTarget(message: string, outputFile: string): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: 'invalid_argument',\n field: 'outputFile',\n detail: { message, field: 'outputFile', value: outputFile },\n })\n return error\n}\n\nfunction assertSafeAgentOutputTarget(outputFile: string): void {\n let stat: fs.Stats\n try {\n stat = fs.lstatSync(outputFile)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return\n throw error\n }\n\n if (stat.isSymbolicLink()) {\n throw invalidOutputTarget(\n `Refusing to write Agent output through a symlink: ${outputFile}.`,\n outputFile,\n )\n }\n if (!stat.isFile()) {\n throw invalidOutputTarget(\n `Refusing to write Agent output to a non-regular file: ${outputFile}.`,\n outputFile,\n )\n }\n if (!isWin32 && stat.nlink > 1) {\n throw invalidOutputTarget(\n `Refusing to write Agent output to a file with multiple hard links: ${outputFile}.`,\n outputFile,\n )\n }\n}\n\nfunction writeAgentOutputFile(\n requestedPath: string,\n content: string,\n): AgentOutputReceipt {\n const outputFile = path.resolve(requestedPath)\n assertSafeAgentOutputTarget(outputFile)\n\n const tempFile = path.join(\n path.dirname(outputFile),\n `.${path.basename(outputFile)}.${randomBytes(12).toString('hex')}.tmp`,\n )\n let tempFd: number | undefined\n\n try {\n tempFd = fs.openSync(tempFile, 'wx', AGENT_OUTPUT_FILE_MODE)\n if (!isWin32) {\n fs.fchmodSync(tempFd, AGENT_OUTPUT_FILE_MODE)\n }\n fs.writeFileSync(tempFd, content, { encoding: 'utf8' })\n fs.closeSync(tempFd)\n tempFd = undefined\n fs.renameSync(tempFile, outputFile)\n } catch (error) {\n if (tempFd !== undefined) {\n try {\n fs.closeSync(tempFd)\n } catch {\n // Best-effort descriptor cleanup after a failed temp write.\n }\n }\n try {\n fs.unlinkSync(tempFile)\n } catch {\n // Best-effort cleanup after a failed temp write or atomic rename.\n }\n throw error\n }\n\n return {\n outputFile,\n bytes: Buffer.byteLength(content, 'utf8'),\n }\n}\n\nexport function resolveAgentPrintOptions(command: Command): AgentPrintOptions {\n const options = command.optsWithGlobals<AgentCommandOutputOptions>()\n return {\n pretty: Boolean(options.pretty),\n outputFile: options.outputFile,\n }\n}\n\nexport function validateAgentOutputTarget(options: AgentPrintOptions): void {\n if (options.outputFile !== undefined) {\n assertSafeAgentOutputTarget(path.resolve(options.outputFile))\n }\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\nfunction isSdkUsageLimitError(error: unknown): boolean {\n const raw = asRecord(error)\n return raw?.name === 'UsageLimitError' || raw?.code === 'USAGE_LIMIT_ERROR'\n}\n\nfunction agentErrorEnvelope(\n code: AgentErrorCode,\n message: string,\n retryable: boolean,\n retryAfter?: number,\n): AgentErrorEnvelope {\n return {\n error: {\n code,\n message,\n retryable,\n ...(typeof retryAfter === 'number' ? { retryAfter } : {}),\n },\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 agentErrorEnvelope(agentCode as AgentErrorCode, message, false)\n }\n\n const adminError = classifyError(error)\n\n if (isRawNotFound(error) || adminError.code === 'not_found') {\n return agentErrorEnvelope('NOT_FOUND', message, false)\n }\n\n if (adminError.type === 'permission') {\n return agentErrorEnvelope('AUTH_FAILED', message, false)\n }\n\n if (adminError.type === 'validation' && adminError.code !== 'unknown') {\n return agentErrorEnvelope('INVALID_INPUT', message, false)\n }\n\n const retryable =\n !isSdkUsageLimitError(error) &&\n (adminError.type === 'network' || adminError.type === 'degraded')\n const retryAfter =\n retryable &&\n adminError.type === 'degraded' &&\n adminError.code === 'rate_limited'\n ? adminError.retryAfter\n : undefined\n\n return agentErrorEnvelope('INTERNAL', message, retryable, retryAfter)\n}\n\nexport function printAgentSuccess(\n data: unknown,\n options: AgentPrintOptions = {},\n): void {\n const output = stringifyAgentJson(data, options)\n if (options.outputFile !== undefined) {\n const receipt = writeAgentOutputFile(options.outputFile, output)\n console.log(JSON.stringify(receipt))\n return\n }\n console.log(output)\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 { 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 isAgentPlanCapability,\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 if (!isAgentPlanCapability(collection, operation)) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Stored plan has unsupported collection operation.',\n )\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 if (!isAgentPlanCapability(plan.collection, plan.operation)) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Stored plan has unsupported collection operation.',\n )\n }\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 assertAgentPlanCapability,\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 resolveAgentPrintOptions,\n validateAgentOutputTarget,\n type AgentPrintOptions,\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 assertAgentPlanCapability>,\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 outputOptions: AgentPrintOptions\n getClient: () => ResolvedClient\n}): Promise<void> {\n const collection = assertAgentPlanCapability(\n input.collection,\n input.operation,\n )\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 input.outputOptions,\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n await runPlanAction({\n operation: 'create',\n collection,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n outputOptions,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n id: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n await runPlanAction({\n operation: 'update',\n collection,\n documentId: id,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n outputOptions,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n id: string,\n opts: { pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n await runPlanAction({\n operation: 'delete',\n collection,\n documentId: id,\n outputOptions,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n planTokenRaw: string,\n opts: { hash: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\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 outputOptions,\n )\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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","z","z","z","z","z","z","program","getClient","getFormat","z","z","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","program","getClient","getFormat","randomBytes","URL","pc","pc","t","resolve","URL","program","randomBytes","SERVER_COLLECTIONS","program","getClient","getFormat","SERVER_COLLECTIONS","program","getClient","getFormat","SERVER_COLLECTIONS","SERVER_COLLECTIONS","randomBytes","randomBytes","SERVER_COLLECTIONS","homedir","join","createHash","join","homedir","current","readFileSync","readFileSync","path","invalidInput","getClient","plan","invalidInput","handleCommanderError","configureAgentParser","SERVER_COLLECTIONS","program","getClient","require"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/client.ts","../../../internal/http-contracts/src/index.ts","../src/lib/embedded-admin-management.ts","../src/lib/credentials.ts","../src/lib/output.ts","../../../internal/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","../../../internal/contracts/src/tenant/index.ts","../../../internal/contracts/src/tenant/features.ts","../../../internal/contracts/src/ecommerce/index.ts","../../../internal/contracts/src/ecommerce/product-upsert.ts","../../../internal/contracts/src/ecommerce/cart.ts","../../../internal/contracts/src/ecommerce/commerce-common.ts","../../../internal/contracts/src/ecommerce/checkout.ts","../../../internal/contracts/src/ecommerce/managed-payment-provider.ts","../../../internal/contracts/src/ecommerce/payment-session.ts","../src/commands/order.ts","../src/commands/return.ts","../src/lib/sensitive-json-input.ts","../src/commands/cart.ts","../src/commands/stock.ts","../src/commands/transaction.ts","../src/lib/product-detail-options.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-plan-allowlist.ts","../src/lib/agent-output.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","../src/commands/embedded-app.ts","../src/lib/doctor.ts","../src/commands/doctor.ts"],"sourcesContent":["import { realpathSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { fileURLToPath } from 'node:url'\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 { registerCommerceSessionCommands } 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'\nimport { registerEmbeddedAppCommands } from './commands/embedded-app.js'\nimport { registerDoctorCommands } from './commands/doctor.js'\n\nconst require = createRequire(import.meta.url)\nconst { version } = require('../package.json') as { version: string }\n\nexport function createCliProgram(): Command {\n const program = new Command()\n\n program\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\n const 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.\n program.hook('preAction', () => {\n const lang = program.opts().lang as string | undefined\n if (lang === 'ko' || lang === 'en') setLocale(lang as Locale)\n // Do not synthesize OUTPUT_FORMAT=json for commands that intentionally\n // default to human output (notably `01 doctor`). Explicit CLI flags retain\n // their historical propagation for shared error rendering.\n const format = program.opts().format as string | undefined\n if (format) process.env.OUTPUT_FORMAT = format\n })\n\n const getClient = () =>\n resolveClient(program.opts().apiKey as string | undefined)\n const getAgentClient = () =>\n resolveClientOrThrow(program.opts().apiKey as string | undefined)\n\n const agent = registerAgentCommands(program, getAgentClient)\n registerDoctorCommands(program, agent)\n registerCrudCommands(program, getClient, getFormat)\n registerOrderCommands(program, getClient, getFormat)\n registerReturnCommands(program, getClient, getFormat)\n registerCartCommands(program, getClient, getFormat)\n registerStockCommands(program, getClient, getFormat)\n registerCommerceSessionCommands(program, getClient, getFormat)\n registerProductCommands(program, getClient, getFormat)\n registerDiscountCommands(program, getClient, getFormat)\n registerShippingCommands(program, getClient, getFormat)\n registerSchemaCommands(program, getClient, getFormat)\n registerFeatureCommands(program, getClient, getFormat)\n registerEmbeddedAppCommands(program, getClient, getFormat)\n registerAuthCommands(program)\n\n return program\n}\n\nfunction isDirectExecution(): boolean {\n if (process.argv[1] === undefined) return false\n try {\n // Package-manager bins normally point to this file through a symlink. A\n // lexical path comparison leaves the published CLI silent in that case.\n return (\n realpathSync(process.argv[1]) ===\n realpathSync(fileURLToPath(import.meta.url))\n )\n } catch {\n return false\n }\n}\n\nif (isDirectExecution()) {\n const program = createCliProgram()\n process.on('unhandledRejection', (err) => {\n exitWithError(err, {\n format: (program.opts().format ??\n process.env.OUTPUT_FORMAT ??\n 'json') as string,\n })\n })\n program.parse()\n}\n","import {\n ServerCollectionClient,\n ServerCommerceClient,\n TenantIntrospectionApi,\n type TenantIntrospectionClient,\n} from '@01.software/sdk/server'\nimport { EmbeddedAdminManagementClient } from './embedded-admin-management.js'\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 embeddedAdmin: EmbeddedAdminManagementClient\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 embeddedAdmin: new EmbeddedAdminManagementClient(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","const operationBrand: unique symbol = Symbol('sdk-http-operation')\n\n/**\n * Opt-in representation for Standard V2 PortOne action capabilities.\n *\n * The default application/json projection stays byte-shape compatible with\n * strict SDK parsers released before these capability literals existed.\n */\nexport const PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE =\n 'application/vnd.01software.portone-action-capabilities.v1+json' as const\n\nexport function requestsPortOneStandardActionCapabilities(\n accept: string | null | undefined,\n): boolean {\n return (\n accept?.trim().toLowerCase() ===\n PORTONE_STANDARD_ACTION_CAPABILITIES_MEDIA_TYPE\n )\n}\n\nexport type HttpOperation = {\n readonly [operationBrand]: true\n readonly collection: string | null\n readonly method: 'get' | 'post' | 'patch' | 'delete'\n readonly path: `/${string}`\n readonly errorFamily?: 'commerce'\n /**\n * Canonical commerce reasons emitted by an otherwise legacy-compatible\n * endpoint. Only these responses may be normalized and parsed as the strict\n * commerce envelope; every other response retains its established shape.\n */\n readonly typedCommerceErrorReasons?: readonly string[]\n}\n\nconst operation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n errorFamily?: HttpOperation['errorFamily'],\n) =>\n Object.freeze({\n [operationBrand]: true,\n collection,\n method,\n path,\n ...(errorFamily && { errorFamily }),\n } as const)\n\nconst strictCommerceOperation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n) => operation(collection, method, path, 'commerce')\n\nconst selectiveCommerceOperation = <\n TCollection extends string | null,\n TMethod extends HttpOperation['method'],\n TPath extends `/${string}`,\n TReasons extends readonly [string, ...string[]],\n>(\n collection: TCollection,\n method: TMethod,\n path: TPath,\n typedCommerceErrorReasons: TReasons,\n) =>\n Object.freeze({\n ...operation(collection, method, path),\n typedCommerceErrorReasons: Object.freeze([...typedCommerceErrorReasons]),\n } as const)\n\nexport const COMMERCE_ENDPOINT_OPERATIONS = {\n products: {\n detail: operation('products', 'get', '/detail'),\n detailCatalog: operation('products', 'get', '/detail/catalog'),\n listingGroups: operation('products', 'get', '/listing-groups'),\n listingGroupsCatalog: operation(\n 'products',\n 'get',\n '/listing-groups/catalog',\n ),\n listingGroupsQuery: operation('products', 'post', '/listing-groups/query'),\n listingGroupsQueryGet: operation(\n 'products',\n 'get',\n '/listing-groups/query',\n ),\n listingGroupsQueryCatalog: operation(\n 'products',\n 'get',\n '/listing-groups/query/catalog',\n ),\n stockCheck: operation('products', 'post', '/stock-check'),\n stockSnapshot: operation('products', 'get', '/stock'),\n upsert: operation('products', 'post', '/upsert'),\n },\n orders: {\n create: operation('orders', 'post', '/create'),\n update: operation('orders', 'post', '/update'),\n confirmPayment: operation('orders', 'post', '/confirm-payment'),\n byPayment: operation('orders', 'get', '/by-payment'),\n cancel: operation('orders', 'post', '/cancel'),\n resolveCancelRefund: selectiveCommerceOperation(\n 'orders',\n 'post',\n '/resolve-cancel-refund',\n ['managed_refund_attestation_forbidden'],\n ),\n checkout: strictCommerceOperation('orders', 'post', '/checkout'),\n createFulfillment: operation('orders', 'post', '/create-fulfillment'),\n updateFulfillment: operation('orders', 'post', '/update-fulfillment'),\n },\n checkouts: {\n detail: strictCommerceOperation('checkouts', 'post', '/detail'),\n query: strictCommerceOperation('checkouts', 'post', '/query'),\n },\n draftOrders: {\n calculate: operation('draft-orders', 'post', '/:id/calculate'),\n complete: operation('draft-orders', 'post', '/:id/complete'),\n finalize: operation('draft-orders', 'post', '/:id/finalize'),\n },\n transactions: {\n update: operation('transactions', 'post', '/update'),\n },\n returns: {\n create: operation('returns', 'post', '/create'),\n update: operation('returns', 'post', '/update'),\n returnRefund: operation('returns', 'post', '/return-refund'),\n },\n fulfillmentOrders: {\n prepare: operation(\n 'fulfillment-orders',\n 'post',\n '/prepare-fulfillment-order',\n ),\n },\n fulfillments: {\n bulkImport: operation('fulfillments', 'post', '/bulk-import'),\n },\n carts: {\n create: strictCommerceOperation('carts', 'post', '/create'),\n retrieve: strictCommerceOperation('carts', 'post', '/retrieve'),\n mine: strictCommerceOperation('carts', 'post', '/mine'),\n merge: strictCommerceOperation('carts', 'post', '/merge'),\n addItem: strictCommerceOperation('carts', 'post', '/add-item'),\n updateItem: strictCommerceOperation('carts', 'post', '/update-item'),\n removeItem: strictCommerceOperation('carts', 'post', '/remove-item'),\n updateDiscountCodes: strictCommerceOperation(\n 'carts',\n 'post',\n '/update-discount-codes',\n ),\n updateAttributes: strictCommerceOperation(\n 'carts',\n 'post',\n '/update-attributes',\n ),\n clear: strictCommerceOperation('carts', 'post', '/clear'),\n },\n paymentSessions: {\n create: strictCommerceOperation('payment-sessions', 'post', '/create'),\n retrieve: strictCommerceOperation('payment-sessions', 'post', '/retrieve'),\n cancel: strictCommerceOperation('payment-sessions', 'post', '/cancel'),\n server: {\n create: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/create',\n ),\n retrieve: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/retrieve',\n ),\n cancel: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/cancel',\n ),\n confirm: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/confirm',\n ),\n findPortOne: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/portone/find',\n ),\n reconcilePortOne: strictCommerceOperation(\n 'payment-sessions',\n 'post',\n '/server/portone/reconcile',\n ),\n },\n custom: {\n create: operation('orders', 'post', '/custom-payment-sessions'),\n retrieve: operation(\n 'orders',\n 'post',\n '/custom-payment-sessions/retrieve',\n ),\n confirm: operation('orders', 'post', '/custom-payment-sessions/confirm'),\n },\n },\n shippingPolicies: {\n calculate: operation('shipping-policies', 'post', '/calculate'),\n },\n discounts: {\n validate: operation('discounts', 'post', '/validate'),\n },\n} as const\n\nconst portOneStandardActionCapabilityOperations = new Set<HttpOperation>([\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.create,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.retrieve,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.create,\n COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.retrieve,\n])\n\n/**\n * Whether this operation may negotiate the Standard V2 capability projection.\n *\n * Create still requires a Standard V2 request profile, while retrieve discovers\n * the provider/profile from the stored session. Cancel and confirm deliberately\n * remain on the released JSON representation.\n */\nexport function supportsPortOneStandardActionCapabilityNegotiation(\n descriptor: HttpOperation,\n): boolean {\n return portOneStandardActionCapabilityOperations.has(descriptor)\n}\n\nexport const MEMBERSHIP_ENDPOINT_OPERATIONS = {\n subscribe: operation(null, 'post', '/memberships/subscribe'),\n cancel: operation(null, 'post', '/memberships/:id/cancel'),\n me: operation(null, 'get', '/memberships/me'),\n chargeResult: operation(null, 'post', '/memberships/:id/charge-result'),\n refundResult: operation(null, 'post', '/memberships/:id/refund-result'),\n revoke: operation(null, 'post', '/memberships/:id/revoke'),\n} as const\n\n/** Server-authenticated source-aware Customer Group authority operations. */\nexport const CUSTOMER_GROUP_ENDPOINT_OPERATIONS = {\n members: operation('customer-groups', 'get', '/:id/members'),\n grant: operation('customer-groups', 'post', '/:id/members/grant'),\n revoke: operation('customer-groups', 'post', '/:id/members/revoke'),\n} as const\n\n/** PAT-only operator controls for the active tenant embedded admin binding. */\nexport const EMBEDDED_ADMIN_ENDPOINT_OPERATIONS = {\n show: operation('tenants', 'get', '/embedded-admin-app'),\n configure: operation('tenants', 'patch', '/embedded-admin-app'),\n disable: operation('tenants', 'delete', '/embedded-admin-app'),\n} as const\n\n/** Shaped event operations shared by their owning runtime and SDK surfaces. */\nexport const EVENTS_ENDPOINT_OPERATIONS = {\n events: {\n convertSchedule: operation('events', 'post', '/:id/schedule'),\n },\n occurrences: {\n range: operation('event-occurrences', 'get', '/range'),\n admissionAvailability: operation(\n 'event-occurrences',\n 'get',\n '/admission-availability',\n ),\n },\n} as const\n\n/** Public, shaped browser reads served by community collections. */\nexport const COMMUNITY_ENDPOINT_OPERATIONS = {\n posts: {\n detail: operation('posts', 'get', '/detail'),\n },\n} as const\n\nexport function resolveOperationTemplate(descriptor: HttpOperation): string {\n return descriptor.collection\n ? `/api/${descriptor.collection}${descriptor.path}`\n : `/api${descriptor.path}`\n}\n\nexport function resolveOperationPath(\n descriptor: HttpOperation,\n options?: {\n pathParams?: Readonly<Record<string, string>>\n query?: string | URLSearchParams\n },\n): string {\n const path = resolveOperationTemplate(descriptor).replace(\n /:([A-Za-z][A-Za-z0-9_]*)/g,\n (_, key) => {\n const value = options?.pathParams?.[key]\n if (value === undefined) {\n throw new TypeError(`Missing path parameter: ${key}`)\n }\n return encodeURIComponent(value)\n },\n )\n const unresolved = path.match(/:([A-Za-z][A-Za-z0-9_]*)/)\n if (unresolved) {\n throw new TypeError(`Missing path parameter: ${unresolved[1]}`)\n }\n\n const query = options?.query?.toString().replace(/^\\?/, '')\n return query ? `${path}?${query}` : path\n}\n\nexport function resolveOperationMethod(\n descriptor: HttpOperation,\n): Uppercase<HttpOperation['method']> {\n return descriptor.method.toUpperCase() as Uppercase<HttpOperation['method']>\n}\n","import {\n EMBEDDED_ADMIN_ENDPOINT_OPERATIONS,\n resolveOperationMethod,\n resolveOperationPath,\n type HttpOperation,\n} from '@01.software/http-contracts'\nimport {\n normalizeEmbeddedAdminBindingConfiguration,\n type EmbeddedAdminBindingConfiguration,\n} from '@01.software/sdk/embedded-admin'\n\ndeclare const __DEFAULT_API_URL__: string\n\nconst REQUEST_TIMEOUT_MS = 30_000\n\nexport type EmbeddedAdminBindingStatus =\n | 'unconfigured'\n | 'disabled'\n | 'enabled'\n | 'invalid'\n\nexport type EmbeddedAdminBindingState = {\n binding: EmbeddedAdminBindingConfiguration | null\n status: EmbeddedAdminBindingStatus\n tenantId: string\n tenantName: string\n}\n\nexport type ConfigureEmbeddedAdminBindingInput = {\n label: string\n origin: string\n path?: string\n}\n\ntype EmbeddedAdminManagementOptions = {\n apiUrl?: string\n fetch?: typeof globalThis.fetch\n publishableKey: string\n secretKey: string\n}\n\nclass EmbeddedAdminManagementError extends Error {\n readonly reason?: string\n readonly requestId?: string\n readonly status: number\n\n constructor(\n message: string,\n status: number,\n options: { reason?: string; requestId?: string } = {},\n ) {\n super(message)\n this.name = 'EmbeddedAdminManagementError'\n this.status = status\n this.reason = options.reason\n this.requestId = options.requestId\n }\n}\n\nfunction resolveApiUrl(explicit?: string): string {\n const buildDefault =\n typeof __DEFAULT_API_URL__ === 'string'\n ? __DEFAULT_API_URL__\n : 'https://api.01.software'\n return (\n explicit ??\n process.env.SOFTWARE_API_URL ??\n process.env.NEXT_PUBLIC_SOFTWARE_API_URL ??\n buildDefault\n ).replace(/\\/$/, '')\n}\n\nfunction inferConsoleOrigin(apiUrl: string): {\n allowLoopbackConsoleHttp: boolean\n consoleOrigin?: string\n} {\n const url = new URL(apiUrl)\n if (url.hostname === 'api.01.software') {\n return {\n allowLoopbackConsoleHttp: false,\n consoleOrigin: 'https://console.01.software',\n }\n }\n if (url.hostname === 'api.stg.01.software') {\n return {\n allowLoopbackConsoleHttp: false,\n consoleOrigin: 'https://console.stg.01.software',\n }\n }\n const loopback =\n url.hostname === 'localhost' ||\n url.hostname === '127.0.0.1' ||\n url.hostname === '[::1]'\n return {\n allowLoopbackConsoleHttp: loopback && url.protocol === 'http:',\n ...(loopback ? { consoleOrigin: url.origin } : {}),\n }\n}\n\nfunction parseBindingState(value: unknown): EmbeddedAdminBindingState {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Embedded admin binding response is invalid.')\n }\n const input = value as Record<string, unknown>\n if (\n typeof input.tenantId !== 'string' ||\n input.tenantId.length === 0 ||\n typeof input.tenantName !== 'string' ||\n (input.status !== 'unconfigured' &&\n input.status !== 'disabled' &&\n input.status !== 'enabled' &&\n input.status !== 'invalid')\n ) {\n throw new Error('Embedded admin binding response is invalid.')\n }\n\n if (input.status === 'unconfigured' || input.status === 'invalid') {\n if (input.binding !== null) {\n throw new Error('Embedded admin binding response is invalid.')\n }\n return {\n binding: null,\n status: input.status,\n tenantId: input.tenantId,\n tenantName: input.tenantName,\n }\n }\n\n const binding = normalizeEmbeddedAdminBindingConfiguration(input.binding)\n if (binding.enabled !== (input.status === 'enabled')) {\n throw new Error('Embedded admin binding response is invalid.')\n }\n return {\n binding,\n status: input.status,\n tenantId: input.tenantId,\n tenantName: input.tenantName,\n }\n}\n\nexport class EmbeddedAdminManagementClient {\n private readonly apiUrl: string\n private readonly fetchImplementation: typeof globalThis.fetch\n private readonly publishableKey: string\n private readonly secretKey: string\n\n constructor(options: EmbeddedAdminManagementOptions) {\n this.apiUrl = resolveApiUrl(options.apiUrl)\n this.fetchImplementation = options.fetch ?? globalThis.fetch\n this.publishableKey = options.publishableKey\n this.secretKey = options.secretKey\n }\n\n validateConfiguration(\n input: ConfigureEmbeddedAdminBindingInput,\n ): EmbeddedAdminBindingConfiguration {\n this.validateManagementAccess()\n const console = inferConsoleOrigin(this.apiUrl)\n return normalizeEmbeddedAdminBindingConfiguration(\n { ...input, enabled: true, path: input.path ?? '/' },\n console,\n )\n }\n\n show(): Promise<EmbeddedAdminBindingState> {\n this.validateManagementAccess()\n return this.request(EMBEDDED_ADMIN_ENDPOINT_OPERATIONS.show)\n }\n\n configure(\n input: ConfigureEmbeddedAdminBindingInput,\n ): Promise<EmbeddedAdminBindingState> {\n const binding = this.validateConfiguration(input)\n return this.request(EMBEDDED_ADMIN_ENDPOINT_OPERATIONS.configure, {\n label: binding.label,\n origin: binding.origin,\n path: binding.path,\n })\n }\n\n disable(): Promise<EmbeddedAdminBindingState> {\n this.validateManagementAccess()\n return this.request(EMBEDDED_ADMIN_ENDPOINT_OPERATIONS.disable)\n }\n\n validateManagementAccess(): void {\n if (!this.secretKey.startsWith('pat01_')) {\n const error = new Error(\n 'Embedded admin binding management requires a user PAT (pat01_...).',\n )\n error.name = 'ConfigError'\n throw error\n }\n }\n\n private async request(\n operation: HttpOperation,\n body?: unknown,\n ): Promise<EmbeddedAdminBindingState> {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS)\n let response: Response\n try {\n response = await this.fetchImplementation(\n new URL(resolveOperationPath(operation), `${this.apiUrl}/`),\n {\n method: resolveOperationMethod(operation),\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${this.secretKey}`,\n 'Content-Type': 'application/json',\n 'X-Publishable-Key': this.publishableKey,\n },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n signal: controller.signal,\n },\n )\n } catch (cause) {\n const error = new Error(\n 'Embedded admin binding request failed.',\n ) as Error & {\n cause?: unknown\n }\n error.cause = cause\n error.name = 'NetworkError'\n throw error\n } finally {\n clearTimeout(timer)\n }\n\n let payload: unknown\n try {\n payload = await response.json()\n } catch {\n payload = null\n }\n if (!response.ok) {\n const record =\n payload && typeof payload === 'object' && !Array.isArray(payload)\n ? (payload as Record<string, unknown>)\n : {}\n throw new EmbeddedAdminManagementError(\n typeof record.error === 'string'\n ? record.error\n : `Embedded admin binding request failed (${response.status}).`,\n response.status,\n {\n ...(typeof record.reason === 'string'\n ? { reason: record.reason }\n : {}),\n ...(response.headers.get('x-request-id')\n ? { requestId: response.headers.get('x-request-id')! }\n : {}),\n },\n )\n }\n return parseBindingState(payload)\n }\n}\n","import {\n chmodSync,\n closeSync,\n constants as fsConstants,\n existsSync,\n fchmodSync,\n fstatSync,\n fsyncSync,\n lstatSync,\n mkdirSync,\n openSync,\n readFileSync,\n renameSync,\n type Stats,\n unlinkSync,\n writeFileSync,\n appendFileSync,\n} from 'node:fs'\nimport { spawnSync } from 'node:child_process'\nimport { randomBytes } from 'node:crypto'\nimport { dirname, 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'\nconst LOCAL_CREDENTIAL_PATH = `${DIR_NAME}/${FILE_NAME}`\nconst LOCAL_GITIGNORE_ENTRY = `${DIR_NAME}/`\nconst PRIVATE_DIRECTORY_MODE = 0o700\nconst PRIVATE_FILE_MODE = 0o600\nconst CURRENT_USER_ID =\n process.platform !== 'win32' && typeof process.getuid === 'function'\n ? process.getuid()\n : null\nconst HAS_POSIX_FILE_PERMISSIONS = CURRENT_USER_ID !== null\nconst SANITIZED_GIT_ENVIRONMENT_VARIABLES = new Set([\n 'GIT_ALTERNATE_OBJECT_DIRECTORIES',\n 'GIT_CEILING_DIRECTORIES',\n 'GIT_COMMON_DIR',\n 'GIT_CONFIG_COUNT',\n 'GIT_CONFIG_PARAMETERS',\n 'GIT_DIR',\n 'GIT_DISCOVERY_ACROSS_FILESYSTEM',\n 'GIT_INDEX_FILE',\n 'GIT_ICASE_PATHSPECS',\n 'GIT_GLOB_PATHSPECS',\n 'GIT_LITERAL_PATHSPECS',\n 'GIT_NOGLOB_PATHSPECS',\n 'GIT_OBJECT_DIRECTORY',\n 'GIT_PREFIX',\n 'GIT_WORK_TREE',\n])\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 filePath = getCredentialsPath()\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeCredentialFile(filePath, JSON.stringify(data, null, 2))\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 workingDirectory = process.cwd(),\n): void {\n // Fail closed before creating a secret-bearing file. The repository-level\n // .gitignore already covers this path, but callers may run the CLI elsewhere.\n const temporaryFileName = createTemporaryCredentialFileName()\n ensureGitignore(workingDirectory, `${DIR_NAME}/${temporaryFileName}`)\n\n const filePath = join(workingDirectory, DIR_NAME, FILE_NAME)\n const data: StoredCredentials = {\n ...creds,\n storedAt: new Date().toISOString(),\n }\n writeCredentialFile(\n filePath,\n JSON.stringify(data, null, 2),\n temporaryFileName,\n )\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\ninterface FileIdentity {\n dev: number\n ino: number\n}\n\nfunction writeCredentialFile(\n filePath: string,\n content: string,\n temporaryFileName = createTemporaryCredentialFileName(),\n): void {\n const directoryPath = dirname(filePath)\n const directoryDescriptor = openPrivateCredentialDirectory(directoryPath)\n const initialTarget = inspectCredentialTarget(filePath)\n const tempPath = join(directoryPath, temporaryFileName)\n let tempDescriptor: number | undefined\n\n try {\n tempDescriptor = openSync(tempPath, 'wx', PRIVATE_FILE_MODE)\n const tempStats = fstatSync(tempDescriptor)\n assertRegularOwnedCredentialFile(tempStats, 'temporary credential file')\n if (HAS_POSIX_FILE_PERMISSIONS) {\n fchmodSync(tempDescriptor, PRIVATE_FILE_MODE)\n assertMode(\n fstatSync(tempDescriptor),\n PRIVATE_FILE_MODE,\n 'temporary credential file',\n )\n }\n\n writeFileSync(tempDescriptor, content, { encoding: 'utf-8' })\n fsyncSync(tempDescriptor)\n closeSync(tempDescriptor)\n tempDescriptor = undefined\n\n const currentTarget = inspectCredentialTarget(filePath)\n if (!sameFileIdentity(initialTarget, currentTarget)) {\n throw credentialFileProtectionError(\n 'credential target changed while being checked',\n )\n }\n\n renameSync(tempPath, filePath)\n const finalStats = lstatCredentialPath(filePath)\n if (!finalStats) {\n throw credentialFileProtectionError(\n 'credential target disappeared after atomic replacement',\n )\n }\n assertRegularOwnedCredentialFile(finalStats, 'credential target')\n if (HAS_POSIX_FILE_PERMISSIONS) {\n assertMode(finalStats, PRIVATE_FILE_MODE, 'credential target')\n if (directoryDescriptor !== undefined) {\n fsyncSync(directoryDescriptor)\n }\n }\n } catch (error) {\n if (tempDescriptor !== undefined) {\n try {\n closeSync(tempDescriptor)\n } catch {\n // Best-effort descriptor cleanup after a failed private-file write.\n }\n }\n try {\n unlinkSync(tempPath)\n } catch {\n // Best-effort cleanup after a failed write or atomic replacement.\n }\n throw error\n } finally {\n if (directoryDescriptor !== undefined) {\n closeSync(directoryDescriptor)\n }\n }\n}\n\nfunction openPrivateCredentialDirectory(\n directoryPath: string,\n): number | undefined {\n let directoryStats = lstatCredentialPath(directoryPath)\n if (!directoryStats) {\n try {\n mkdirSync(directoryPath, { mode: PRIVATE_DIRECTORY_MODE })\n if (HAS_POSIX_FILE_PERMISSIONS) {\n chmodSync(directoryPath, PRIVATE_DIRECTORY_MODE)\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error\n // Another process created the path after lstat. Inspect it below.\n }\n directoryStats = lstatCredentialPath(directoryPath)\n }\n\n if (\n !directoryStats ||\n directoryStats.isSymbolicLink() ||\n !directoryStats.isDirectory()\n ) {\n throw credentialFileProtectionError(\n 'credential directory must be a regular directory, not a symlink',\n )\n }\n assertCurrentUserOwns(directoryStats, 'credential directory')\n\n if (!HAS_POSIX_FILE_PERMISSIONS) return undefined\n\n const descriptor = openSync(\n directoryPath,\n fsConstants.O_RDONLY | fsConstants.O_DIRECTORY | fsConstants.O_NOFOLLOW,\n )\n try {\n const openedStats = fstatSync(descriptor)\n if (\n !openedStats.isDirectory() ||\n openedStats.dev !== directoryStats.dev ||\n openedStats.ino !== directoryStats.ino\n ) {\n throw credentialFileProtectionError(\n 'credential directory changed while being checked',\n )\n }\n assertCurrentUserOwns(openedStats, 'credential directory')\n fchmodSync(descriptor, PRIVATE_DIRECTORY_MODE)\n assertMode(\n fstatSync(descriptor),\n PRIVATE_DIRECTORY_MODE,\n 'credential directory',\n )\n return descriptor\n } catch (error) {\n closeSync(descriptor)\n throw error\n }\n}\n\nfunction inspectCredentialTarget(filePath: string): FileIdentity | null {\n const stats = lstatCredentialPath(filePath)\n if (!stats) return null\n\n assertRegularOwnedCredentialFile(stats, 'credential target')\n return { dev: stats.dev, ino: stats.ino }\n}\n\nfunction assertRegularOwnedCredentialFile(\n stats: Stats,\n description: string,\n): void {\n if (stats.isSymbolicLink()) {\n throw credentialFileProtectionError(`${description} must not be a symlink`)\n }\n if (!stats.isFile()) {\n throw credentialFileProtectionError(`${description} must be a regular file`)\n }\n if (HAS_POSIX_FILE_PERMISSIONS && stats.nlink > 1) {\n throw credentialFileProtectionError(\n `${description} must not have multiple hard links`,\n )\n }\n assertCurrentUserOwns(stats, description)\n}\n\nfunction assertCurrentUserOwns(stats: Stats, description: string): void {\n if (CURRENT_USER_ID !== null && stats.uid !== CURRENT_USER_ID) {\n throw credentialFileProtectionError(\n `${description} must be owned by the current user`,\n )\n }\n}\n\nfunction assertMode(stats: Stats, expectedMode: number, description: string) {\n if ((stats.mode & 0o777) !== expectedMode) {\n throw credentialFileProtectionError(\n `${description} permissions could not be secured`,\n )\n }\n}\n\nfunction sameFileIdentity(\n initial: FileIdentity | null,\n current: FileIdentity | null,\n): boolean {\n if (!initial || !current) return initial === current\n return initial.dev === current.dev && initial.ino === current.ino\n}\n\nfunction lstatCredentialPath(filePath: string): Stats | null {\n try {\n return lstatSync(filePath)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return null\n throw credentialFileProtectionError(\n 'credential filesystem target could not be inspected',\n )\n }\n}\n\nfunction credentialFileProtectionError(message: string): Error {\n return new Error(`Cannot save credentials: ${message}`)\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(cwd: string, temporaryCredentialPath: string): void {\n const gitignorePath = join(cwd, '.gitignore')\n assertSafeGitignorePath(gitignorePath)\n\n const gitState = detectGitWorkTree(cwd)\n if (gitState === 'inside') {\n assertCredentialPathIsUntracked(cwd)\n if (areCredentialPathsIgnored(cwd, temporaryCredentialPath)) return\n\n ensureTerminalGitignoreEntry(gitignorePath, true)\n if (!areCredentialPathsIgnored(cwd, temporaryCredentialPath)) {\n throw credentialProtectionError(\n 'Git still reports a credential path as unignored',\n )\n }\n return\n }\n\n // Outside a Git work tree, keep a durable rule for a future `git init`\n // without requiring Git to be installed.\n ensureTerminalGitignoreEntry(gitignorePath, false)\n}\n\nfunction assertSafeGitignorePath(gitignorePath: string): void {\n const stats = lstatIfPresent(gitignorePath)\n if (stats && (!stats.isFile() || stats.isSymbolicLink())) {\n throw credentialProtectionError('.gitignore must be a regular file')\n }\n}\n\nfunction ensureTerminalGitignoreEntry(\n gitignorePath: string,\n forceAppend: boolean,\n): void {\n const initialStats = lstatIfPresent(gitignorePath)\n if (!initialStats) {\n try {\n writeFileSync(gitignorePath, `${LOCAL_GITIGNORE_ENTRY}\\n`, {\n encoding: 'utf-8',\n flag: 'wx',\n })\n return\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') throw error\n // Another process created the path after lstat. Re-inspect it below.\n return ensureTerminalGitignoreEntry(gitignorePath, forceAppend)\n }\n }\n\n if (!initialStats.isFile() || initialStats.isSymbolicLink()) {\n throw credentialProtectionError('.gitignore must be a regular file')\n }\n\n const descriptor = openSync(gitignorePath, 'a+')\n try {\n const openedStats = fstatSync(descriptor)\n if (\n !openedStats.isFile() ||\n openedStats.dev !== initialStats.dev ||\n openedStats.ino !== initialStats.ino\n ) {\n throw credentialProtectionError('.gitignore changed while being checked')\n }\n\n const content = readFileSync(descriptor, 'utf-8')\n const lastNonEmptyLine = content\n .split(/\\r?\\n/)\n .filter((line) => line.length > 0)\n .at(-1)\n if (\n !forceAppend &&\n (lastNonEmptyLine === LOCAL_GITIGNORE_ENTRY ||\n lastNonEmptyLine === `/${LOCAL_GITIGNORE_ENTRY}`)\n ) {\n return\n }\n\n const separator = content.length > 0 && !content.endsWith('\\n') ? '\\n' : ''\n appendFileSync(\n descriptor,\n `${separator}${LOCAL_GITIGNORE_ENTRY}\\n`,\n 'utf-8',\n )\n } finally {\n closeSync(descriptor)\n }\n}\n\nfunction detectGitWorkTree(cwd: string): 'inside' | 'outside' {\n const result = runGit(cwd, ['rev-parse', '--is-inside-work-tree'])\n if (result.error) {\n if (\n (result.error as NodeJS.ErrnoException).code === 'ENOENT' &&\n !hasGitMarker(cwd)\n ) {\n return 'outside'\n }\n throw credentialProtectionError('Git repository detection failed')\n }\n\n if (result.status === 0) {\n if (result.stdout.trim() === 'true') return 'inside'\n throw credentialProtectionError(\n 'the current directory is not a Git work tree',\n )\n }\n\n if (result.status === 128 && !hasGitMarker(cwd)) return 'outside'\n throw credentialProtectionError('Git repository detection failed')\n}\n\nfunction assertCredentialPathIsUntracked(cwd: string): void {\n const result = runGit(cwd, [\n 'ls-files',\n '-z',\n '--',\n `:(icase,literal)${LOCAL_CREDENTIAL_PATH}`,\n ])\n if (result.error || result.status !== 0) {\n throw credentialProtectionError('Git tracked-file verification failed')\n }\n if (result.stdout.length > 0) {\n throw credentialProtectionError(\n '.01software/credentials.json is already tracked by Git',\n )\n }\n}\n\nfunction createTemporaryCredentialFileName(): string {\n return `.${FILE_NAME}.${randomBytes(12).toString('hex')}.tmp`\n}\n\nfunction areCredentialPathsIgnored(\n cwd: string,\n temporaryCredentialPath: string,\n): boolean {\n // Both paths must be ignored. A directory-level rule can be followed by a\n // negation that makes either the credential or its atomic-write temporary\n // stageable again.\n return (\n isPathIgnored(cwd, LOCAL_CREDENTIAL_PATH) &&\n isPathIgnored(cwd, temporaryCredentialPath)\n )\n}\n\nfunction isPathIgnored(cwd: string, relativePath: string): boolean {\n const result = runGit(cwd, [\n 'check-ignore',\n '--quiet',\n '--no-index',\n '--',\n relativePath,\n ])\n if (result.error || (result.status !== 0 && result.status !== 1)) {\n throw credentialProtectionError('Git ignore verification failed')\n }\n return result.status === 0\n}\n\nfunction runGit(cwd: string, args: string[]) {\n const env: NodeJS.ProcessEnv = { ...process.env, LC_ALL: 'C' }\n for (const key of Object.keys(env)) {\n const normalizedKey = key.toUpperCase()\n if (\n SANITIZED_GIT_ENVIRONMENT_VARIABLES.has(normalizedKey) ||\n normalizedKey.startsWith('GIT_CONFIG_KEY_') ||\n normalizedKey.startsWith('GIT_CONFIG_VALUE_')\n ) {\n delete env[key]\n }\n }\n return spawnSync('git', args, {\n cwd,\n encoding: 'utf-8',\n env,\n })\n}\n\nfunction hasGitMarker(startPath: string): boolean {\n let currentPath = startPath\n while (true) {\n if (lstatIfPresent(join(currentPath, '.git'))) return true\n const parentPath = dirname(currentPath)\n if (parentPath === currentPath) return false\n currentPath = parentPath\n }\n}\n\nfunction lstatIfPresent(filePath: string) {\n try {\n return lstatSync(filePath)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return null\n throw credentialProtectionError('local Git metadata could not be inspected')\n }\n}\n\nfunction credentialProtectionError(message: string): Error {\n return new Error(`Cannot save local credentials: ${message}`)\n}\n","import pc from 'picocolors'\nimport {\n type AdminError,\n classifyError,\n adminErrorExitCode,\n} from './admin-error.js'\nimport { CLI_I18N_KO, t, type CliI18nKey } 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 /** Stable, caller-selected Human headline; machine errors keep raw message. */\n headlineKey?: CliI18nKey\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 (options.headlineKey ? t(options.headlineKey) : null) ||\n rawMessage ||\n stringErr ||\n detailMessage ||\n localized ||\n 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/published/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 DOCTOR_ACTION_KEYS = [\n 'DoctorProjectPackageJsonReady',\n 'DoctorProjectPackageJsonBlocked',\n 'DoctorNodeEngineReady',\n 'DoctorNodeEngineAttention',\n 'DoctorNodeEngineNotDeclared',\n 'DoctorSdkDeclarationReady',\n 'DoctorSdkDeclarationBlocked',\n 'DoctorSdkInstallationReady',\n 'DoctorSdkInstallationAttention',\n 'DoctorEnvCredentialsReady',\n 'DoctorEnvCredentialsBlocked',\n 'DoctorEnvFileInvalid',\n 'DoctorOriginInputInvalid',\n 'DoctorTenantContextReady',\n 'DoctorTenantContextBlocked',\n 'DoctorOriginCorsReady',\n 'DoctorOriginCorsBlocked',\n 'DoctorOriginCorsAttention',\n] as const\n\nexport type DoctorActionKey = (typeof DOCTOR_ACTION_KEYS)[number]\n\nexport type DoctorInputMessageKey =\n | 'DoctorEnvFileInvalid'\n | 'DoctorOriginInputInvalid'\n\nfunction withDoctorActionTranslations<\n const T extends Record<DoctorActionKey, string>,\n>(translations: T): T {\n return translations\n}\n\nexport const CLI_I18N_KO = withDoctorActionTranslations({\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 형식이 올바르지 않습니다.',\n Empty: '(없음)',\n Total: '총 {{n}}개',\n PageOf: '{{page}} / {{total}} 페이지',\n\n // Redacted app-integration doctor remediation keys. These are stable\n // machine references; the human CLI renders this locale-specific copy.\n DoctorProjectPackageJsonReady: 'package.json을 읽을 수 있습니다.',\n DoctorProjectPackageJsonBlocked:\n 'package.json이 있는 앱 디렉터리에서 실행하세요.',\n DoctorNodeEngineReady: '현재 Node.js가 선언된 engine을 충족합니다.',\n DoctorNodeEngineAttention:\n 'package.json의 Node.js engine과 현재 버전을 확인하세요.',\n DoctorNodeEngineNotDeclared:\n 'package.json에 지원하는 Node.js engine 범위를 선언하세요.',\n DoctorSdkDeclarationReady:\n '@01.software/sdk가 package.json에 선언되어 있습니다.',\n DoctorSdkDeclarationBlocked: 'package.json에 @01.software/sdk를 추가하세요.',\n DoctorSdkInstallationReady:\n '@01.software/sdk의 server export를 확인했습니다.',\n DoctorSdkInstallationAttention:\n '앱을 실행하기 전에 선언된 의존성을 설치하세요.',\n DoctorEnvCredentialsReady: '앱 자격증명 형식과 API 대상이 올바릅니다.',\n DoctorEnvCredentialsBlocked:\n '하나의 pk01_/sk01_ 앱 쌍을 사용하고 공개 환경 변수나 PAT에 secret을 넣지 마세요.',\n DoctorEnvFileInvalid:\n '일반 파일인 앱 환경 파일을 지정하고 symlink·특수 파일을 제거하세요.',\n DoctorOriginInputInvalid: '절대 http(s) origin URL을 지정하세요.',\n DoctorTenantContextReady:\n '앱 자격증명으로 테넌트 컨텍스트에 연결할 수 있습니다.',\n DoctorTenantContextBlocked:\n '앱 자격증명, 테넌트 접근 권한 및 API 연결을 확인하세요.',\n DoctorOriginCorsReady: 'API CORS 정책에서 origin이 허용됩니다.',\n DoctorOriginCorsBlocked: '이 origin을 테넌트 CORS 정책에 추가하세요.',\n DoctorOriginCorsAttention: 'API URL 및 CORS 정책을 확인하세요.',\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: '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}}.',\n Empty: '(empty)',\n Total: '{{n}} total',\n PageOf: 'page {{page}}/{{total}}',\n\n DoctorProjectPackageJsonReady: 'package.json is readable.',\n DoctorProjectPackageJsonBlocked:\n 'Run this command in an app directory with package.json.',\n DoctorNodeEngineReady: 'Current Node.js satisfies the declared engine.',\n DoctorNodeEngineAttention:\n 'Check the package.json Node.js engine and current version.',\n DoctorNodeEngineNotDeclared:\n 'Declare a supported Node.js engine range in package.json.',\n DoctorSdkDeclarationReady: '@01.software/sdk is declared in package.json.',\n DoctorSdkDeclarationBlocked: 'Add @01.software/sdk to package.json.',\n DoctorSdkInstallationReady:\n '@01.software/sdk server export is installed and resolvable.',\n DoctorSdkInstallationAttention:\n 'Install declared dependencies before running the app.',\n DoctorEnvCredentialsReady:\n 'App credentials and the API target are structurally valid.',\n DoctorEnvCredentialsBlocked:\n 'Use one pk01_/sk01_ app pair; never put a secret in a public env variable or use a PAT.',\n DoctorEnvFileInvalid:\n 'Use a regular app env file and remove symlinks or special files.',\n DoctorOriginInputInvalid: 'Use an absolute http(s) origin URL.',\n DoctorTenantContextReady:\n 'Tenant context is reachable with the app credential pair.',\n DoctorTenantContextBlocked:\n 'Check app credentials, tenant access, and API reachability.',\n DoctorOriginCorsReady: 'Origin is allowed by the API CORS policy.',\n DoctorOriginCorsBlocked: 'Add this origin to the tenant CORS policy.',\n DoctorOriginCorsAttention: 'Check the API URL and CORS policy.',\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 })\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n // Keep rejected values out of terminal and structured output. `message`\n // is the stderr headline; `detail` carries only the stable field label for\n // machine consumers.\n message,\n detail: { message, field: label },\n })\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 // Zod paths and messages may contain payload-controlled record keys or\n // unknown property names. Commerce inputs include capabilities and provider\n // credentials, so expose only Zod's stable issue category.\n const issues = parsed.error.issues.map((issue) => ({ code: issue.code }))\n const message = `Invalid value for --${label}.`\n\n exitWithError({\n type: 'validation',\n code: 'invalid_argument',\n field: label,\n message,\n detail: {\n message,\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'\nimport {\n TENANT_CUSTOM_FIELD_TYPES,\n type TenantCustomFieldType,\n} from './features'\n\nexport * from './features'\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\nconst collectionCustomFieldRequiredSchema = z.literal(true).optional()\n\nexport const collectionCustomFieldDefinitionSchema = z.discriminatedUnion(\n 'type',\n [\n z\n .object({\n key: z.string().min(1),\n type: z.enum(\n TENANT_CUSTOM_FIELD_TYPES.filter((type) => type !== 'select') as [\n Exclude<TenantCustomFieldType, 'select'>,\n ...Exclude<TenantCustomFieldType, 'select'>[],\n ],\n ),\n required: collectionCustomFieldRequiredSchema,\n })\n .strict(),\n z\n .object({\n key: z.string().min(1),\n type: z.literal('select'),\n required: collectionCustomFieldRequiredSchema,\n options: z.array(z.string().min(1)).min(1),\n })\n .strict(),\n ],\n)\n\nexport const collectionCustomFieldsSchema = z\n .object({\n storagePath: z.literal('customData'),\n definitions: z.array(collectionCustomFieldDefinitionSchema),\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 customFields: collectionCustomFieldsSchema.optional(),\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 CollectionCustomFieldDefinition = z.infer<\n typeof collectionCustomFieldDefinitionSchema\n>\nexport type CollectionCustomFields = z.infer<\n typeof collectionCustomFieldsSchema\n>\nexport type CollectionSchemaResponse = z.infer<\n typeof collectionSchemaResponseSchema\n>\n","/**\n * Tenant feature and plan vocabulary.\n *\n * This is the single declaration site. Console re-exports it from\n * `apps/console/src/payload/collections/tenants/types.ts`; Web re-exports it\n * from `apps/web/lib/auth/onboarding-defaults.ts`.\n *\n * Vocabulary only. Feature *policy* — minimum plan, dependencies, and public /\n * private collection ownership — stays in\n * `apps/console/src/payload/collections/tenants/feature-manifest.ts`, and plan\n * quotas stay in the Console tenant types module.\n */\n\nexport const TENANT_FEATURES = [\n 'ecommerce',\n 'customers',\n 'playlists',\n 'galleries',\n 'links',\n 'forms',\n 'articles',\n 'documents',\n 'canvas',\n 'videos',\n 'live-streaming',\n 'community',\n 'events',\n 'membership',\n] as const\n\nexport type TenantFeature = (typeof TENANT_FEATURES)[number]\n\nexport const TENANT_PLANS = [\n 'free',\n 'starter',\n 'basic',\n 'pro',\n 'enterprise',\n] as const\n\nexport type TenantPlan = (typeof TENANT_PLANS)[number]\n\nexport const TENANT_CUSTOM_FIELD_TYPES = [\n 'text',\n 'number',\n 'select',\n 'boolean',\n 'date',\n] as const\n\nexport type TenantCustomFieldType = (typeof TENANT_CUSTOM_FIELD_TYPES)[number]\n\nexport const isTenantFeature = (value: unknown): value is TenantFeature =>\n typeof value === 'string' &&\n TENANT_FEATURES.includes(value as TenantFeature)\n\nexport const isTenantPlan = (value: unknown): value is TenantPlan =>\n typeof value === 'string' && TENANT_PLANS.includes(value as TenantPlan)\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-selection-media'\nexport * from './stock-snapshot'\nexport * from './cart'\nexport * from './cart-merge'\nexport * from './cart-mine'\nexport {\n CanonicalCheckoutQueryResultSchema,\n CanonicalCheckoutQuerySchema,\n CanonicalPublicCheckoutItemSchema,\n CheckoutQueryResultSchema,\n CheckoutQuerySchema,\n CreateCheckoutBodySchema,\n CreateCheckoutParamsSchema,\n CreateCheckoutResultSchema,\n CreateServerCheckoutBodySchema,\n CreateServerCheckoutParamsSchema,\n CreateServerCheckoutResultSchema,\n PublicCheckoutSchema,\n RetrieveCheckoutParamsSchema,\n RetrieveServerCheckoutParamsSchema,\n ServerCheckoutSchema,\n canonicalCheckoutQueryResultSchema,\n canonicalCheckoutQuerySchema,\n canonicalPublicCheckoutItemSchema,\n checkoutAmountsSchema,\n checkoutListItemSchema,\n checkoutPaymentSessionRefSchema,\n createCheckoutBodySchema,\n createCheckoutParamsSchema,\n createCheckoutResultSchema,\n createServerCheckoutBodySchema,\n createServerCheckoutParamsSchema,\n createServerCheckoutResultSchema,\n openCheckoutPaymentStateSchema,\n publicCheckoutSchema,\n retrieveCheckoutParamsSchema,\n retrieveServerCheckoutParamsSchema,\n serverCheckoutSchema,\n spentCheckoutPaymentStateSchema,\n type CanonicalPublicCheckoutItem,\n type CheckoutAmounts,\n type CheckoutListItem,\n type CheckoutPaymentSessionRef,\n type CheckoutQueryParams,\n type CheckoutQueryResult,\n type CreateCheckoutParams,\n type CreateCheckoutResult,\n type CreateServerCheckoutParams,\n type CreateServerCheckoutResult,\n type OpenCheckoutPaymentState,\n type PublicCheckout,\n type RetrieveCheckoutParams,\n type RetrieveServerCheckoutParams,\n type ServerCheckout,\n type SpentCheckoutPaymentState,\n} from './checkout'\nexport {\n CHECKOUT_PAYMENT_SESSION_PROVIDERS,\n type CheckoutPaymentSessionProvider,\n} from './managed-payment-provider'\nexport * from './shipping-calculate'\nexport * from './fulfillment'\nexport * from './market-capability'\nexport * from './market'\nexport * from './commerce-common'\nexport * from './commerce-errors'\nexport * from './discount-errors'\nexport * from './canonical-fingerprint'\nexport * from './payment-session'\nexport * from './payment-incident-notification'\nexport {\n confirmationStatusSchema,\n financialStatusSchema,\n fulfillmentOrderStatusSchema,\n orderFulfillmentStatusSchema,\n orderPrimaryDisplayStatusSchema,\n orderReturnStatusSchema,\n shipmentStatusSchema,\n type ConfirmationStatusValue,\n type FinancialStatusValue,\n type FulfillmentOrderStatusValue,\n type OrderFulfillmentStatusValue,\n type OrderPrimaryDisplayStatusValue,\n type OrderReturnStatusValue,\n type ShipmentStatusValue,\n} from './order-status'\nexport * from './order'\n\nexport const transactionStatusSchema = z.enum([\n 'pending',\n 'paid',\n 'success',\n 'failed',\n 'error',\n 'canceled',\n 'refunded',\n])\n\nexport const transactionKindSchema = z.enum([\n 'authorization',\n 'sale',\n 'capture',\n 'void',\n 'refund',\n])\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 *\n * The trailing codes mirror Shopify `ReturnReason` granularity (size/color/style,\n * not-as-described, wrong-item, unknown) that fashion tenants need for\n * category-level returns reporting (#1857). The original five codes are retained\n * for legacy readability; `change_of_mind`/`wrong_delivery` predate and coexist\n * with the Shopify-aligned `unknown`/`wrong_item`.\n */\nexport const RETURN_REASON_CODES = [\n 'change_of_mind',\n 'defective',\n 'wrong_delivery',\n 'damaged',\n 'size_too_large',\n 'size_too_small',\n 'color',\n 'style',\n 'not_as_described',\n 'wrong_item',\n 'unknown',\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\n/** Operator-selected reasons for canceling a return after approval. */\nexport const RETURN_CANCELLATION_REASON_CODES = [\n 'items_not_received',\n 'customer_withdrew',\n 'merchant_decision',\n 'other',\n] as const\n\nexport const returnCancellationReasonCodeSchema = z.enum(\n RETURN_CANCELLATION_REASON_CODES,\n)\n\nexport const restockActionSchema = z.enum(['return_to_stock', 'discard'])\n\nconst returnRefundMoneySchema = z\n .number()\n .int('amount must be an integer minor-unit value')\n .safe('amount must be a safe integer')\n .nonnegative('amount must be non-negative')\n\nconst positiveReturnRefundMoneySchema = z\n .number()\n .int('amount must be an integer minor-unit value')\n .safe('amount must be a safe integer')\n .positive('amount must be positive')\n\nfunction trimmedReturnRefundScalarString(\n maxScalars: number,\n emptyMessage: string,\n maximumMessage: string,\n) {\n return z\n .string()\n .trim()\n .min(1, emptyMessage)\n .refine((value) => Array.from(value).length <= maxScalars, maximumMessage)\n}\n\nexport const returnWithRefundItemSchema = z\n .object({\n orderItem: z\n .union([z.string().trim().min(1), z.number().int().safe().positive()])\n .transform(String),\n quantity: z\n .number()\n .int('quantity must be an integer')\n .safe('quantity must be a safe integer')\n .positive('quantity must be a positive integer'),\n restockAction: restockActionSchema.default('return_to_stock'),\n restockingFee: returnRefundMoneySchema\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 .trim()\n .min(1, 'orderNumber is required')\n .describe('Order number (required)'),\n reason: returnReasonSchema.optional().describe('Return reason (optional)'),\n reasonDetail: trimmedReturnRefundScalarString(\n 2000,\n 'reasonDetail must not be empty',\n 'reasonDetail must be 2000 Unicode code points or fewer',\n )\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: positiveReturnRefundMoneySchema.describe(\n 'Refund amount (required, min 1)',\n ),\n returnShippingFee: returnRefundMoneySchema\n .optional()\n .describe(\n 'Return shipping fee charged to the customer (ADR 0005 §Gap 1)',\n ),\n initialShippingRefundAmount: returnRefundMoneySchema\n .optional()\n .describe('Initial order shipping amount refunded to the customer'),\n initialShippingRefundOverrideNote: trimmedReturnRefundScalarString(\n 2000,\n 'initialShippingRefundOverrideNote must not be empty',\n 'initialShippingRefundOverrideNote must be 2000 Unicode code points or fewer',\n )\n .optional()\n .describe(\n 'Operator audit note required when overriding policy suggestion',\n ),\n pgPaymentId: z\n .string()\n .trim()\n .min(1, 'pgPaymentId is required')\n .describe('PG payment ID for refund (required)'),\n paymentKey: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe('Provider payment key for verified refund'),\n refundReceiptUrl: trimmedReturnRefundScalarString(\n 2048,\n 'refundReceiptUrl must not be empty',\n 'refundReceiptUrl must be 2048 Unicode code points or fewer',\n )\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 .max(2000, 'reasonDetail must be 2000 characters or fewer')\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: returnRefundMoneySchema.describe(\n 'Line refund amount before initial shipping refund (required, min 0)',\n ),\n returnShippingFee: returnRefundMoneySchema\n .optional()\n .describe('Return shipping fee charged to the customer'),\n initialShippingRefundAmount: returnRefundMoneySchema\n .optional()\n .describe('Initial order shipping amount refunded to the customer'),\n initialShippingRefundOverrideNote: z\n .string()\n .min(1)\n .max(\n 2000,\n 'initialShippingRefundOverrideNote must be 2000 characters or fewer',\n )\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\nexport const updateReturnSchema = z\n .object({\n returnId: z.union([z.string(), z.number()]).transform(String),\n // Only non-financial transitions are accepted here. `completed` is included\n // so the server can return the canonical `server_derived` error instead of\n // a generic validation failure.\n status: z.enum([\n 'processing',\n 'approved',\n 'rejected',\n 'canceled',\n 'completed',\n ]),\n reasonCode: returnRejectionReasonCodeSchema.optional(),\n cancellationReasonCode: returnCancellationReasonCodeSchema.optional(),\n cancellationReasonDetail: z.string().trim().min(1).max(2000).optional(),\n })\n .strict()\n\nexport const UpdateReturnSchema = updateReturnSchema\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 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\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])\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.enum(['paid', '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 TransactionKind = z.infer<typeof transactionKindSchema>\nexport type ReturnReason = z.infer<typeof returnReasonSchema>\nexport type ReturnRejectionReasonCode = z.infer<\n typeof returnRejectionReasonCodeSchema\n>\nexport type ReturnCancellationReasonCode = z.infer<\n typeof returnCancellationReasonCodeSchema\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 UpdateReturnParams = z.input<typeof UpdateReturnSchema>\nexport type ParsedUpdateReturnParams = z.output<typeof UpdateReturnSchema>\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 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 markets: z.array(IdSchema).optional().nullable(),\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\n/**\n * Coarse minor-unit bound for catalog amounts.\n *\n * The wire body carries no currency (the tenant `shopCurrency` and each market's\n * `currency` live server-side), so this can only enforce the widest bound any\n * supported currency permits — two decimal places. The exact per-currency check\n * (KRW admits none) runs in the Console variant write hook, which knows the\n * currency. This refine is the early, currency-agnostic rejection of values such\n * as `15000.005` that no supported currency could represent.\n *\n * Not a representation change: ADR 0040 keeps decimal/minor-unit money a v1\n * non-goal, and amounts stay plain `number` on the wire.\n */\nexport const MAX_CATALOG_AMOUNT_DECIMAL_PLACES = 2\n\nexport function catalogAmountDecimalPlaces(value: number): number {\n if (!Number.isFinite(value)) return 0\n const text = String(value)\n const exponential = text.indexOf('e-')\n if (exponential !== -1) return Number(text.slice(exponential + 2)) || 0\n const dot = text.indexOf('.')\n return dot === -1 ? 0 : text.length - dot - 1\n}\n\nconst CatalogAmountSchema = z\n .number()\n .min(0)\n .refine(\n (value) =>\n catalogAmountDecimalPlaces(value) <= MAX_CATALOG_AMOUNT_DECIMAL_PLACES,\n {\n message: `Amount must have at most ${MAX_CATALOG_AMOUNT_DECIMAL_PLACES} decimal places; the store currency may allow fewer.`,\n },\n )\n\nexport const VariantMarketPriceInputSchema = z.object({\n market: IdSchema,\n price: CatalogAmountSchema,\n compareAtPrice: CatalogAmountSchema.optional().nullable(),\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: CatalogAmountSchema,\n compareAtPrice: CatalogAmountSchema.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 marketPrices: z.array(VariantMarketPriceInputSchema).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>\nexport type VariantMarketPriceInput = z.infer<\n typeof VariantMarketPriceInputSchema\n>\n","import { z } from 'zod'\nimport {\n commerceCapabilitySchema,\n commerceIdempotencyKeySchema,\n commerceResourceIdSchema,\n currencyCodeSchema,\n minorAmountSchema,\n publicAttributesSchema,\n} from './commerce-common'\n\nexport const MAX_CART_LINE_QUANTITY = 99\nexport const MAX_CART_DISCOUNT_CODES = 250\nexport const MAX_CART_DISCOUNT_CODE_LENGTH = 128\n\nexport const cartDiscountCodeSchema = z\n .object({\n code: z.string().min(1).max(MAX_CART_DISCOUNT_CODE_LENGTH),\n applicable: z.boolean(),\n })\n .strict()\n\nexport const CART_WARNING_CODES = [\n 'DISCOUNT_CODE_NOT_HONOURED',\n 'DISCOUNT_CURRENTLY_INACTIVE',\n 'DISCOUNT_CUSTOMER_NOT_ELIGIBLE',\n 'DISCOUNT_CUSTOMER_USAGE_LIMIT_REACHED',\n 'DISCOUNT_ELIGIBLE_CUSTOMER_MISSING',\n 'DISCOUNT_NO_ENTITLED_LINE_ITEMS',\n 'DISCOUNT_NO_ENTITLED_SHIPPING_LINES',\n 'DISCOUNT_NOT_FOUND',\n 'DISCOUNT_PURCHASE_NOT_IN_RANGE',\n 'DISCOUNT_USAGE_LIMIT_REACHED',\n 'MERCHANDISE_NOT_ENOUGH_STOCK',\n 'MERCHANDISE_OUT_OF_STOCK',\n] as const\n\nexport const cartWarningCodeSchema = z.enum(CART_WARNING_CODES)\n\nexport const cartWarningSchema = z\n .object({\n code: cartWarningCodeSchema,\n message: z.string().min(1),\n target: z.string().min(1),\n })\n .strict()\n\nexport const updateDiscountCodesBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n discountCodes: z\n .array(z.string().trim().min(1).max(MAX_CART_DISCOUNT_CODE_LENGTH))\n .max(\n MAX_CART_DISCOUNT_CODES,\n `discountCodes cannot contain more than ${MAX_CART_DISCOUNT_CODES} values`,\n ),\n })\n .strict()\nexport const updateDiscountCodesParamsSchema =\n updateDiscountCodesBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\nexport const updateDiscountCodesSchema = updateDiscountCodesParamsSchema\n\nexport type CartDiscountCode = z.infer<typeof cartDiscountCodeSchema>\nexport type CartWarningCode = (typeof CART_WARNING_CODES)[number]\nexport type CartWarning = z.infer<typeof cartWarningSchema>\nexport type UpdateDiscountCodesParams = z.infer<\n typeof updateDiscountCodesParamsSchema\n>\n\nexport const MAX_CART_LINE_ADMISSIONS = 32\n\nexport const publicMediaSizeSchema = z\n .object({\n width: z.number().nullable().optional(),\n height: z.number().nullable().optional(),\n mimeType: z.string().nullable().optional(),\n filename: z.string().nullable().optional(),\n url: z.string().nullable().optional(),\n })\n .strict()\n\nexport const publicMediaAssetSchema = z.union([\n z.string(),\n z\n .object({\n id: z.union([z.string(), z.number()]).nullable().optional(),\n alt: z.string().nullable().optional(),\n width: z.number().nullable().optional(),\n height: z.number().nullable().optional(),\n mimeType: z.string().nullable().optional(),\n filename: z.string().nullable().optional(),\n url: z.string().nullable().optional(),\n sizes: z.record(z.string(), publicMediaSizeSchema).optional(),\n })\n .strict(),\n])\n\nexport const publicCartReferenceSchema = z\n .object({\n id: z.string().min(1),\n title: z.string().min(1),\n handle: z.string().min(1).nullable(),\n image: publicMediaAssetSchema.nullable(),\n })\n .strict()\n\nexport const publicCartMarketSchema = z\n .object({\n id: z.string().min(1),\n handle: z.string().min(1),\n name: z.string().min(1),\n })\n .strict()\n\nexport const publicCartItemAdmissionSchema = z\n .object({\n eventId: z.string().min(1),\n occurrenceId: z.string().min(1),\n admissionTypeId: z.string().min(1),\n })\n .strict()\n\nexport const cartLineAdmissionsInputSchema = z\n .array(publicCartItemAdmissionSchema)\n // Bound the raw input before the handler canonical-sorts it. Duplicate\n // removal must not let an oversized request through.\n .max(\n MAX_CART_LINE_ADMISSIONS,\n `admissions cannot contain more than ${MAX_CART_LINE_ADMISSIONS} values`,\n )\n .min(1, 'admissions must contain at least one value')\n .superRefine((admissions, ctx) => {\n const seen = new Set<string>()\n admissions.forEach((admission, index) => {\n const key = `${admission.eventId}:${admission.occurrenceId}:${admission.admissionTypeId}`\n if (seen.has(key)) {\n ctx.addIssue({\n code: 'custom',\n path: [index],\n message: 'admissions must be unique',\n })\n }\n seen.add(key)\n })\n })\n\nconst cartTokenField = z.string().min(1, 'cartToken is required')\nconst cartMarketField = z.string().trim().min(1).optional()\nconst cartEntityIdField = z.union([z.string(), z.number()]).transform(String)\n\nexport const createCartSchema = z\n .object({\n market: cartMarketField,\n attributes: publicAttributesSchema.optional(),\n })\n .strict()\n\nexport const getCartSchema = z.object({ cartToken: cartTokenField }).strict()\n\nexport const addCartItemSchema = z\n .object({\n cartToken: cartTokenField,\n product: cartEntityIdField,\n variant: cartEntityIdField,\n option: cartEntityIdField.optional(),\n quantity: z.number().int().positive('quantity must be a positive integer'),\n market: cartMarketField,\n admissions: cartLineAdmissionsInputSchema.optional(),\n })\n .strict()\n\nexport const updateCartItemSchema = z\n .object({\n cartToken: cartTokenField,\n cartItemId: cartEntityIdField,\n quantity: z.number().int().positive('quantity must be a positive integer'),\n })\n .strict()\n\nexport const removeCartItemSchema = z\n .object({\n cartToken: cartTokenField,\n cartItemId: cartEntityIdField,\n })\n .strict()\n\nexport const updateCartAttributesSchema = z\n .object({\n cartToken: cartTokenField,\n attributes: publicAttributesSchema,\n })\n .strict()\n\nexport const clearCartSchema = z.object({ cartToken: cartTokenField }).strict()\n\nfunction compareAdmissions(\n left: z.infer<typeof publicCartItemAdmissionSchema>,\n right: z.infer<typeof publicCartItemAdmissionSchema>,\n) {\n for (const field of ['eventId', 'occurrenceId', 'admissionTypeId'] as const) {\n if (left[field] < right[field]) return -1\n if (left[field] > right[field]) return 1\n }\n return 0\n}\n\nexport const publicCartItemAdmissionsSchema = z\n .array(publicCartItemAdmissionSchema)\n .max(MAX_CART_LINE_ADMISSIONS)\n .superRefine((admissions, ctx) => {\n let previous: z.infer<typeof publicCartItemAdmissionSchema> | undefined\n admissions.forEach((admission, index) => {\n const comparison = previous\n ? compareAdmissions(admission, previous)\n : undefined\n if (comparison !== undefined && comparison <= 0) {\n ctx.addIssue({\n code: 'custom',\n path: [index],\n message:\n comparison === 0\n ? 'admissions must be unique'\n : 'admissions must be in canonical order',\n })\n }\n previous = admission\n })\n })\n\nexport const publicCartItemSchema = z\n .object({\n id: z.string().min(1),\n product: publicCartReferenceSchema,\n variant: publicCartReferenceSchema,\n admissions: publicCartItemAdmissionsSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n unitPriceMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n estimatedLineTotalMinor: minorAmountSchema,\n requiresShipping: z.boolean(),\n })\n .strict()\n .superRefine((item, ctx) => {\n const expectedLineTotal =\n BigInt(item.unitPriceMinor) * BigInt(item.quantity) -\n BigInt(item.discountMinor)\n\n if (expectedLineTotal < 0n) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor cannot exceed the undiscounted line total',\n })\n return\n }\n\n if (BigInt(item.estimatedLineTotalMinor) !== expectedLineTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['estimatedLineTotalMinor'],\n message:\n 'estimatedLineTotalMinor must equal unitPriceMinor * quantity - discountMinor',\n })\n }\n })\n\nexport const publicCartSchema = z\n .object({\n id: z.string().min(1),\n status: z.enum(['active', 'completed', 'abandoned']),\n revision: z.number().int().nonnegative(),\n currency: currencyCodeSchema,\n market: publicCartMarketSchema,\n subtotalMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n estimatedTotalMinor: minorAmountSchema,\n discountCodes: z.array(cartDiscountCodeSchema),\n attributes: publicAttributesSchema,\n items: z.array(publicCartItemSchema),\n expiresAt: z.string().datetime({ offset: true }),\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n })\n .strict()\n .superRefine((cart, ctx) => {\n const expectedSubtotal = cart.items.reduce(\n (total, item) =>\n total + BigInt(item.unitPriceMinor) * BigInt(item.quantity),\n 0n,\n )\n const expectedTotal = expectedSubtotal - BigInt(cart.discountMinor)\n const expectedDiscount = cart.items.reduce(\n (total, item) => total + BigInt(item.discountMinor),\n 0n,\n )\n\n if (BigInt(cart.subtotalMinor) !== expectedSubtotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['subtotalMinor'],\n message:\n 'subtotalMinor must equal the sum of undiscounted cart line totals',\n })\n }\n if (BigInt(cart.discountMinor) !== expectedDiscount) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor must equal the sum of cart line discounts',\n })\n }\n if (expectedTotal < 0n) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor cannot exceed subtotalMinor',\n })\n } else if (BigInt(cart.estimatedTotalMinor) !== expectedTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['estimatedTotalMinor'],\n message: 'estimatedTotalMinor must equal subtotalMinor - discountMinor',\n })\n }\n })\n\nexport const cartMutationResultSchema = z\n .object({\n cart: publicCartSchema,\n warnings: z.array(cartWarningSchema),\n })\n .strict()\n\nexport const createCartParamsSchema = z\n .object({\n market: commerceResourceIdSchema.optional(),\n attributes: publicAttributesSchema.optional(),\n })\n .strict()\n\nexport const createCartResultSchema = z\n .object({\n cart: publicCartSchema,\n warnings: z.array(cartWarningSchema),\n cartToken: commerceCapabilitySchema,\n })\n .strict()\n .superRefine((result, ctx) => {\n if (result.cart.revision !== 0) {\n ctx.addIssue({\n code: 'custom',\n path: ['cart', 'revision'],\n message: 'a newly created Cart must start at revision 0',\n })\n }\n })\n\nexport const retrieveCartParamsSchema = z\n .object({ cartToken: commerceCapabilitySchema })\n .strict()\n\nconst addItemAdmissionsSchema = z\n .tuple([publicCartItemAdmissionSchema], publicCartItemAdmissionSchema)\n .readonly()\n .superRefine((admissions, ctx) => {\n if (admissions.length > MAX_CART_LINE_ADMISSIONS) {\n ctx.addIssue({\n code: 'too_big',\n origin: 'array',\n maximum: MAX_CART_LINE_ADMISSIONS,\n inclusive: true,\n message: `admissions cannot contain more than ${MAX_CART_LINE_ADMISSIONS} values`,\n })\n }\n admissions.forEach((admission, index) => {\n if (index === 0) return\n const comparison = compareAdmissions(admission, admissions[index - 1]!)\n if (comparison <= 0) {\n ctx.addIssue({\n code: 'custom',\n path: [index],\n message:\n comparison === 0\n ? 'admissions must be unique'\n : 'admissions must be in canonical order',\n })\n }\n })\n })\n\nexport const addItemBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n productId: commerceResourceIdSchema,\n variantId: commerceResourceIdSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n admissions: addItemAdmissionsSchema.optional(),\n })\n .strict()\nexport const addItemParamsSchema = addItemBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const updateItemBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n cartItemId: commerceResourceIdSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n })\n .strict()\nexport const updateItemParamsSchema = updateItemBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const removeItemBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n cartItemId: commerceResourceIdSchema,\n })\n .strict()\nexport const removeItemParamsSchema = removeItemBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const clearCartBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n })\n .strict()\nexport const clearCartParamsSchema = clearCartBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const updateCartAttributesBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n expectedRevision: z.number().int().nonnegative(),\n attributes: publicAttributesSchema,\n })\n .strict()\nexport const updateCartAttributesParamsSchema =\n updateCartAttributesBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\n// Browser and server bodies are identical for token-keyed operations. Server\n// credentials remain headers and never enter these schemas.\nexport const serverCreateCartParamsSchema = createCartParamsSchema\nexport const serverRetrieveCartParamsSchema = retrieveCartParamsSchema\nexport const serverAddItemParamsSchema = addItemParamsSchema\nexport const serverAddItemBodySchema = addItemBodySchema\nexport const serverUpdateItemParamsSchema = updateItemParamsSchema\nexport const serverUpdateItemBodySchema = updateItemBodySchema\nexport const serverRemoveItemParamsSchema = removeItemParamsSchema\nexport const serverRemoveItemBodySchema = removeItemBodySchema\nexport const serverClearCartParamsSchema = clearCartParamsSchema\nexport const serverClearCartBodySchema = clearCartBodySchema\nexport const serverUpdateDiscountCodesParamsSchema =\n updateDiscountCodesParamsSchema\nexport const serverUpdateDiscountCodesBodySchema = updateDiscountCodesBodySchema\nexport const serverUpdateCartAttributesParamsSchema =\n updateCartAttributesParamsSchema\nexport const serverUpdateCartAttributesBodySchema =\n updateCartAttributesBodySchema\n\nexport const addItemResultSchema = cartMutationResultSchema\nexport const updateItemResultSchema = cartMutationResultSchema\nexport const removeItemResultSchema = cartMutationResultSchema\nexport const clearCartResultSchema = cartMutationResultSchema\nexport const updateDiscountCodesResultSchema = cartMutationResultSchema\nexport const updateCartAttributesResultSchema = cartMutationResultSchema\nexport const serverCreateCartResultSchema = createCartResultSchema\nexport const serverAddItemResultSchema = cartMutationResultSchema\nexport const serverUpdateItemResultSchema = cartMutationResultSchema\nexport const serverRemoveItemResultSchema = cartMutationResultSchema\nexport const serverClearCartResultSchema = cartMutationResultSchema\nexport const serverUpdateDiscountCodesResultSchema = cartMutationResultSchema\nexport const serverUpdateCartAttributesResultSchema = cartMutationResultSchema\n\nexport const PublicCartSchema = publicCartSchema\nexport const PublicCartItemSchema = publicCartItemSchema\nexport const PublicCartItemAdmissionSchema = publicCartItemAdmissionSchema\n\nexport type PublicMediaSize = z.infer<typeof publicMediaSizeSchema>\nexport type PublicMediaAsset = z.infer<typeof publicMediaAssetSchema>\nexport type PublicCartReference = z.infer<typeof publicCartReferenceSchema>\nexport type PublicCartMarket = z.infer<typeof publicCartMarketSchema>\nexport type PublicCartItemAdmission = z.infer<\n typeof publicCartItemAdmissionSchema\n>\nexport type PublicCartItem = z.infer<typeof publicCartItemSchema>\nexport type PublicCart = z.infer<typeof publicCartSchema>\nexport type CartMutationResult = z.infer<typeof cartMutationResultSchema>\nexport type CreateCartParams = z.infer<typeof createCartParamsSchema>\nexport type CreateCartResult = z.infer<typeof createCartResultSchema>\nexport type RetrieveCartParams = z.infer<typeof retrieveCartParamsSchema>\nexport type AddItemParams = z.infer<typeof addItemParamsSchema>\nexport type UpdateItemParams = z.infer<typeof updateItemParamsSchema>\nexport type RemoveItemParams = z.infer<typeof removeItemParamsSchema>\nexport type ClearCartParams = z.infer<typeof clearCartParamsSchema>\nexport type UpdateCartAttributesParams = z.infer<\n typeof updateCartAttributesParamsSchema\n>\nexport type AddItemResult = CartMutationResult\nexport type UpdateItemResult = CartMutationResult\nexport type RemoveItemResult = CartMutationResult\nexport type ClearCartResult = CartMutationResult\nexport type UpdateDiscountCodesResult = CartMutationResult\nexport type UpdateCartAttributesResult = CartMutationResult\nexport type ServerCreateCartParams = CreateCartParams\nexport type ServerRetrieveCartParams = RetrieveCartParams\nexport type ServerAddItemParams = AddItemParams\nexport type ServerUpdateItemParams = UpdateItemParams\nexport type ServerRemoveItemParams = RemoveItemParams\nexport type ServerClearCartParams = ClearCartParams\nexport type ServerUpdateDiscountCodesParams = UpdateDiscountCodesParams\nexport type ServerUpdateCartAttributesParams = UpdateCartAttributesParams\nexport type ServerCreateCartResult = CreateCartResult\nexport type ServerAddItemResult = CartMutationResult\nexport type ServerUpdateItemResult = CartMutationResult\nexport type ServerRemoveItemResult = CartMutationResult\nexport type ServerClearCartResult = CartMutationResult\nexport type ServerUpdateDiscountCodesResult = CartMutationResult\nexport type ServerUpdateCartAttributesResult = CartMutationResult\n","import { z } from 'zod'\n\nexport type CurrencyCode = Uppercase<string>\n\nexport const currencyCodeSchema = z\n .string()\n .regex(\n /^[A-Z]{3}$/,\n 'currency must be a three-letter uppercase ISO 4217 code',\n ) as z.ZodType<CurrencyCode>\n\nexport const minorAmountSchema = z\n .number()\n .int()\n .nonnegative()\n .max(Number.MAX_SAFE_INTEGER)\n\nexport const moneySchema = z\n .object({\n amountMinor: minorAmountSchema,\n currency: currencyCodeSchema,\n })\n .strict()\n\nexport const MAX_COMMERCE_EXTENSION_ENTRIES = 50\nexport const MAX_COMMERCE_EXTENSION_KEY_LENGTH = 40\nexport const MAX_COMMERCE_EXTENSION_VALUE_LENGTH = 500\nexport const MAX_COMMERCE_RESOURCE_ID_LENGTH = 255\nexport const MAX_COMMERCE_CAPABILITY_LENGTH = 512\nexport const MAX_COMMERCE_CUSTOMER_TOKEN_LENGTH = 4096\nexport const MAX_COMMERCE_SHORT_TEXT_LENGTH = 200\nexport const MAX_COMMERCE_ADDRESS_LENGTH = 500\nexport const MAX_COMMERCE_EMAIL_LENGTH = 254\nexport const MAX_COMMERCE_PHONE_LENGTH = 32\nexport const MAX_COMMERCE_POSTAL_CODE_LENGTH = 32\n\nexport const commerceResourceIdSchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_RESOURCE_ID_LENGTH)\nexport const commerceCapabilitySchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_CAPABILITY_LENGTH)\nexport const commerceCustomerTokenSchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_CUSTOMER_TOKEN_LENGTH)\n\nconst publicAttributeKeySchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_EXTENSION_KEY_LENGTH)\n // Double-underscore names are already treated as reserved across the repo.\n .refine((key) => !key.startsWith('__'), {\n message: 'attribute key uses a reserved platform prefix',\n })\n\nexport const publicAttributeSchema = z\n .object({\n key: publicAttributeKeySchema,\n value: z.string().max(MAX_COMMERCE_EXTENSION_VALUE_LENGTH),\n })\n .strict()\n\nexport const publicAttributesSchema = z\n .array(publicAttributeSchema)\n .max(MAX_COMMERCE_EXTENSION_ENTRIES)\n .superRefine((attributes, ctx) => {\n const seen = new Set<string>()\n attributes.forEach(({ key }, index) => {\n if (seen.has(key)) {\n ctx.addIssue({\n code: 'custom',\n path: [index, 'key'],\n message: 'attribute keys must be unique',\n })\n }\n seen.add(key)\n })\n })\n\nconst integrationMetadataKeySchema = z\n .string()\n .min(1)\n .max(MAX_COMMERCE_EXTENSION_KEY_LENGTH)\n .refine((key) => !key.includes('[') && !key.includes(']'), {\n message: 'integration metadata keys must not use bracket notation',\n })\n\nexport const integrationMetadataSchema = z\n .record(\n integrationMetadataKeySchema,\n z.string().max(MAX_COMMERCE_EXTENSION_VALUE_LENGTH),\n )\n .superRefine((metadata, ctx) => {\n if (Object.keys(metadata).length > MAX_COMMERCE_EXTENSION_ENTRIES) {\n ctx.addIssue({\n code: 'too_big',\n origin: 'object',\n maximum: MAX_COMMERCE_EXTENSION_ENTRIES,\n inclusive: true,\n message: `integration metadata cannot contain more than ${MAX_COMMERCE_EXTENSION_ENTRIES} entries`,\n })\n }\n })\n\nexport const customerSnapshotSchema = z\n .object({\n email: z.string().email().max(MAX_COMMERCE_EMAIL_LENGTH),\n name: z.string().min(1).max(MAX_COMMERCE_SHORT_TEXT_LENGTH).optional(),\n phone: z.string().min(1).max(MAX_COMMERCE_PHONE_LENGTH).optional(),\n })\n .strict()\n\nexport const checkoutShippingAddressSchema = z\n .object({\n recipientName: z.string().min(1).max(MAX_COMMERCE_SHORT_TEXT_LENGTH),\n phone: z.string().min(1).max(MAX_COMMERCE_PHONE_LENGTH),\n countryCode: z.string().trim().length(2).optional(),\n regionCode: z.string().trim().min(1).max(64).optional(),\n postalCode: z.string().min(1).max(MAX_COMMERCE_POSTAL_CODE_LENGTH),\n address: z.string().min(1).max(MAX_COMMERCE_ADDRESS_LENGTH),\n detailAddress: z.string().min(1).max(MAX_COMMERCE_ADDRESS_LENGTH),\n deliveryMessage: z\n .string()\n .max(MAX_COMMERCE_EXTENSION_VALUE_LENGTH)\n .optional(),\n })\n .strict()\n\n/**\n * The two high-entropy formats accepted by ADR 0051. This is deliberately\n * stricter than the legacy order-operation idempotency key contract.\n */\nexport const commerceIdempotencyKeySchema = z\n .string()\n .max(255)\n .refine(\n (value) =>\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n ) || /^ik_[A-Za-z0-9_-]{22}$/.test(value),\n 'idempotencyKey must be a UUIDv4 or ik_-prefixed 128-bit base64url value',\n )\n\nexport const CurrencyCodeSchema = currencyCodeSchema\nexport const MoneySchema = moneySchema\nexport const CommerceIdempotencyKeySchema = commerceIdempotencyKeySchema\n\nexport type Money = z.infer<typeof moneySchema>\nexport type PublicAttribute = z.infer<typeof publicAttributeSchema>\nexport type PublicAttributes = z.infer<typeof publicAttributesSchema>\nexport type IntegrationMetadata = z.infer<typeof integrationMetadataSchema>\nexport type CustomerSnapshot = z.infer<typeof customerSnapshotSchema>\nexport type CanonicalCheckoutShippingAddress = z.infer<\n typeof checkoutShippingAddressSchema\n>\nexport type CommerceIdempotencyKey = z.infer<\n typeof commerceIdempotencyKeySchema\n>\n","import { z } from 'zod'\nimport {\n MAX_CART_LINE_QUANTITY,\n publicCartItemAdmissionsSchema,\n publicCartReferenceSchema,\n} from './cart'\nimport {\n checkoutShippingAddressSchema as canonicalCheckoutShippingAddressSchema,\n commerceCapabilitySchema,\n commerceIdempotencyKeySchema,\n commerceResourceIdSchema,\n currencyCodeSchema,\n customerSnapshotSchema,\n integrationMetadataSchema,\n minorAmountSchema,\n publicAttributesSchema,\n} from './commerce-common'\nimport { CHECKOUT_PAYMENT_SESSION_PROVIDERS } from './managed-payment-provider'\nimport { paymentProviderStatusSchema } from './payment-session'\n\nexport const canonicalPublicCheckoutItemSchema = z\n .object({\n id: z.string().min(1),\n product: publicCartReferenceSchema,\n variant: publicCartReferenceSchema,\n productTitle: z.string().min(1),\n variantTitle: z.string().min(1).nullable(),\n sku: z.string().min(1).nullable(),\n admissions: publicCartItemAdmissionsSchema,\n quantity: z.number().int().positive().max(MAX_CART_LINE_QUANTITY),\n unitPriceMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n lineTotalMinor: minorAmountSchema,\n requiresShipping: z.boolean(),\n })\n .strict()\n .superRefine((item, ctx) => {\n const expectedLineTotal =\n BigInt(item.unitPriceMinor) * BigInt(item.quantity) -\n BigInt(item.discountMinor)\n\n if (expectedLineTotal < 0n) {\n ctx.addIssue({\n code: 'custom',\n path: ['discountMinor'],\n message: 'discountMinor cannot exceed the undiscounted line total',\n })\n return\n }\n\n if (BigInt(item.lineTotalMinor) !== expectedLineTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['lineTotalMinor'],\n message:\n 'lineTotalMinor must equal unitPriceMinor * quantity - discountMinor',\n })\n }\n })\n\nexport const checkoutAmountsSchema = z\n .object({\n currency: currencyCodeSchema,\n subtotalMinor: minorAmountSchema,\n shippingMinor: minorAmountSchema,\n discountMinor: minorAmountSchema,\n totalMinor: minorAmountSchema,\n })\n .strict()\n .superRefine((amounts, ctx) => {\n const expectedTotal =\n BigInt(amounts.subtotalMinor) +\n BigInt(amounts.shippingMinor) -\n BigInt(amounts.discountMinor)\n\n if (BigInt(amounts.totalMinor) !== expectedTotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['totalMinor'],\n message:\n 'totalMinor must equal subtotalMinor + shippingMinor - discountMinor',\n })\n }\n })\n\nexport const checkoutPaymentSessionRefSchema = z\n .object({\n id: z.string().min(1),\n provider: z.enum(CHECKOUT_PAYMENT_SESSION_PROVIDERS),\n providerStatus: paymentProviderStatusSchema,\n })\n .strict()\n\nexport const openCheckoutPaymentStateSchema = z\n .object({\n activePaymentSession: checkoutPaymentSessionRefSchema.nullable(),\n })\n .strict()\n\nexport const spentCheckoutPaymentStateSchema = z\n .object({\n activePaymentSession: z.null(),\n })\n .strict()\n\nconst lightweightOrderReferenceSchema = z\n .object({\n id: z.string().min(1),\n orderNumber: z.string().min(1),\n })\n .strict()\n\nconst publicCheckoutBaseShape = {\n id: z.string().min(1),\n amounts: checkoutAmountsSchema,\n items: z.array(canonicalPublicCheckoutItemSchema).min(1),\n customerSnapshot: customerSnapshotSchema,\n shippingAddress: canonicalCheckoutShippingAddressSchema.nullable(),\n attributes: publicAttributesSchema,\n expiresAt: z.string().datetime({ offset: true }),\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n}\n\nconst abandonedReasonSchema = z.enum(['expired', 'customer', 'operator'])\n\nconst publicCheckoutVariants = [\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('open'),\n paymentState: openCheckoutPaymentStateSchema,\n order: z.null(),\n })\n .strict(),\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('placed'),\n placedAt: z.string().datetime({ offset: true }),\n paymentState: spentCheckoutPaymentStateSchema,\n order: lightweightOrderReferenceSchema,\n })\n .strict(),\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('placed'),\n placedAt: z.string().datetime({ offset: true }),\n placedVia: z.literal('late_capture'),\n abandonedAt: z.string().datetime({ offset: true }),\n abandonedReason: abandonedReasonSchema,\n paymentState: spentCheckoutPaymentStateSchema,\n order: lightweightOrderReferenceSchema,\n })\n .strict(),\n z\n .object({\n ...publicCheckoutBaseShape,\n status: z.literal('abandoned'),\n abandonedAt: z.string().datetime({ offset: true }),\n abandonedReason: abandonedReasonSchema,\n paymentState: z\n .object({\n activePaymentSession: z.null(),\n })\n .strict(),\n order: z.null(),\n })\n .strict(),\n] as const\n\nfunction validateCheckoutSnapshot(input: unknown, ctx: z.RefinementCtx) {\n // The callback runs only after the strict variant schema succeeds. Keeping\n // the callback input unknown also lets the typed ServerCheckout union reuse\n // the same cross-field invariant without weakening its public Zod type.\n const checkout = input as {\n amounts: { subtotalMinor: number; discountMinor: number }\n items: Array<{\n unitPriceMinor: number\n discountMinor: number\n quantity: number\n }>\n }\n const expectedSubtotal = checkout.items.reduce(\n (total, item) =>\n total + BigInt(item.unitPriceMinor) * BigInt(item.quantity),\n 0n,\n )\n const expectedDiscount = checkout.items.reduce(\n (total, item) => total + BigInt(item.discountMinor),\n 0n,\n )\n\n if (BigInt(checkout.amounts.subtotalMinor) !== expectedSubtotal) {\n ctx.addIssue({\n code: 'custom',\n path: ['amounts', 'subtotalMinor'],\n message:\n 'subtotalMinor must equal the sum of undiscounted checkout line totals',\n })\n }\n if (BigInt(checkout.amounts.discountMinor) !== expectedDiscount) {\n ctx.addIssue({\n code: 'custom',\n path: ['amounts', 'discountMinor'],\n message: 'discountMinor must equal the sum of checkout line discounts',\n })\n }\n}\n\nexport const publicCheckoutSchema = z\n .union(publicCheckoutVariants)\n .superRefine(validateCheckoutSnapshot)\n\nconst serverCheckoutExtraShape = {\n clientReferenceId: commerceResourceIdSchema.nullable(),\n integrationMetadata: integrationMetadataSchema,\n}\n\nexport type ServerCheckout = PublicCheckout & {\n clientReferenceId: string | null\n integrationMetadata: Record<string, string>\n}\n\nconst serverCheckoutVariants = publicCheckoutVariants.map((variant) =>\n variant.extend(serverCheckoutExtraShape),\n) as unknown as [z.ZodType, z.ZodType, ...z.ZodType[]]\n\nexport const serverCheckoutSchema: z.ZodType<ServerCheckout> = z\n .union(serverCheckoutVariants)\n .superRefine(validateCheckoutSnapshot) as z.ZodType<ServerCheckout>\n\nexport const retrieveCheckoutParamsSchema = z\n .object({ checkoutToken: commerceCapabilitySchema })\n .strict()\n\nexport const retrieveServerCheckoutParamsSchema = z\n .object({ checkoutId: commerceResourceIdSchema })\n .strict()\n\nexport const createCheckoutBodySchema = z\n .object({\n cartToken: commerceCapabilitySchema,\n customer: customerSnapshotSchema,\n shippingAddress: canonicalCheckoutShippingAddressSchema.optional(),\n })\n .strict()\nexport const createCheckoutParamsSchema = createCheckoutBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n})\n\nexport const createServerCheckoutBodySchema = createCheckoutBodySchema\n .safeExtend({\n clientReferenceId: commerceResourceIdSchema.optional(),\n integrationMetadata: integrationMetadataSchema.optional(),\n })\n .strict()\nexport const createServerCheckoutParamsSchema =\n createServerCheckoutBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const createCheckoutResultSchema = z\n .object({\n checkout: publicCheckoutSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const createServerCheckoutResultSchema = z\n .object({\n checkout: serverCheckoutSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const canonicalCheckoutQuerySchema = z\n .object({\n limit: z.number().int().min(1).max(100).default(20),\n cursor: z.string().min(1).max(512).optional(),\n status: z.array(z.enum(['open', 'placed', 'abandoned'])).optional(),\n createdAtFrom: z.string().datetime({ offset: true }).optional(),\n createdAtTo: z.string().datetime({ offset: true }).optional(),\n clientReferenceId: commerceResourceIdSchema.optional(),\n })\n .strict()\n\nexport type CheckoutListItem = PublicCheckout extends infer Checkout\n ? Checkout extends unknown\n ? Omit<Checkout, 'items' | 'shippingAddress' | 'attributes'> & {\n clientReferenceId: string | null\n }\n : never\n : never\n\nconst checkoutListItemVariants = publicCheckoutVariants.map((variant) =>\n (variant as z.ZodObject<Record<string, z.ZodType>>)\n .omit({\n items: true,\n shippingAddress: true,\n attributes: true,\n })\n .extend({ clientReferenceId: commerceResourceIdSchema.nullable() }),\n) as unknown as [\n z.ZodType<CheckoutListItem>,\n z.ZodType<CheckoutListItem>,\n ...z.ZodType<CheckoutListItem>[],\n]\n\nexport const checkoutListItemSchema = z.union(checkoutListItemVariants)\n\nexport const canonicalCheckoutQueryResultSchema = z\n .object({\n data: z.array(checkoutListItemSchema),\n hasMore: z.boolean(),\n nextCursor: z.string().min(1).max(512).nullable(),\n })\n .strict()\n\nexport const CanonicalPublicCheckoutItemSchema =\n canonicalPublicCheckoutItemSchema\nexport const PublicCheckoutSchema = publicCheckoutSchema\nexport const ServerCheckoutSchema = serverCheckoutSchema\nexport const RetrieveCheckoutParamsSchema = retrieveCheckoutParamsSchema\nexport const RetrieveServerCheckoutParamsSchema =\n retrieveServerCheckoutParamsSchema\nexport const CreateCheckoutBodySchema = createCheckoutBodySchema\nexport const CreateCheckoutParamsSchema = createCheckoutParamsSchema\nexport const CreateServerCheckoutBodySchema = createServerCheckoutBodySchema\nexport const CreateServerCheckoutParamsSchema = createServerCheckoutParamsSchema\nexport const CreateCheckoutResultSchema = createCheckoutResultSchema\nexport const CreateServerCheckoutResultSchema = createServerCheckoutResultSchema\nexport const CanonicalCheckoutQuerySchema = canonicalCheckoutQuerySchema\nexport const CanonicalCheckoutQueryResultSchema =\n canonicalCheckoutQueryResultSchema\nexport const CheckoutQuerySchema = canonicalCheckoutQuerySchema\nexport const CheckoutQueryResultSchema = canonicalCheckoutQueryResultSchema\n\nexport type CanonicalPublicCheckoutItem = z.infer<\n typeof canonicalPublicCheckoutItemSchema\n>\nexport type CheckoutAmounts = z.infer<typeof checkoutAmountsSchema>\nexport type CheckoutPaymentSessionRef = z.infer<\n typeof checkoutPaymentSessionRefSchema\n>\nexport type OpenCheckoutPaymentState = z.infer<\n typeof openCheckoutPaymentStateSchema\n>\nexport type SpentCheckoutPaymentState = z.infer<\n typeof spentCheckoutPaymentStateSchema\n>\nexport type PublicCheckout = z.infer<typeof publicCheckoutSchema>\nexport type RetrieveCheckoutParams = z.infer<\n typeof retrieveCheckoutParamsSchema\n>\nexport type RetrieveServerCheckoutParams = z.infer<\n typeof retrieveServerCheckoutParamsSchema\n>\nexport type CreateCheckoutParams = z.input<typeof createCheckoutParamsSchema>\nexport type CreateServerCheckoutParams = z.input<\n typeof createServerCheckoutParamsSchema\n>\nexport type CreateCheckoutResult = z.infer<typeof createCheckoutResultSchema>\nexport type CreateServerCheckoutResult = z.infer<\n typeof createServerCheckoutResultSchema\n>\nexport type CheckoutQueryParams = z.input<typeof canonicalCheckoutQuerySchema>\nexport type CheckoutQueryResult = z.infer<\n typeof canonicalCheckoutQueryResultSchema\n>\n","export const CHECKOUT_PAYMENT_SESSION_PROVIDERS = ['toss', 'portone'] as const\n\nexport type CheckoutPaymentSessionProvider =\n (typeof CHECKOUT_PAYMENT_SESSION_PROVIDERS)[number]\n","import { z } from 'zod'\n\nimport {\n CHECKOUT_PAYMENT_SESSION_PROVIDERS,\n type CheckoutPaymentSessionProvider,\n} from './managed-payment-provider'\nimport {\n commerceCapabilitySchema,\n commerceIdempotencyKeySchema,\n commerceResourceIdSchema,\n currencyCodeSchema,\n moneySchema,\n} from './commerce-common'\n\nexport const tossProviderOrderIdSchema = z\n .string()\n .min(6)\n .max(64)\n .regex(\n /^[A-Za-z0-9_-]+$/,\n 'providerOrderId may contain only ASCII letters, digits, underscores, and hyphens',\n )\n\nconst accountAliasUuidV4Schema = z\n .string()\n .regex(\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n 'providerCustomerKey must be ANONYMOUS or a UUIDv4 account alias',\n )\n\nexport const tossProviderCustomerKeySchema = z.union([\n z.literal('ANONYMOUS'),\n accountAliasUuidV4Schema,\n])\n\nconst createPaymentSessionBaseBodyShape = {\n checkoutToken: commerceCapabilitySchema,\n}\n\nconst createTossPaymentSessionBodySchema = z\n .object({\n ...createPaymentSessionBaseBodyShape,\n provider: z.literal('toss'),\n providerOptions: z.object({ profile: z.literal('widget_v2') }).strict(),\n })\n .strict()\n\nexport const PORTONE_HOSTED_PAYMENT_METHODS = [\n 'CARD_KR',\n 'N_PAY',\n 'KAKAO_PAY',\n 'TOSS_PAY',\n 'CARD_INTERNATIONAL',\n 'PAY_PAL',\n 'UNION_PAY',\n 'ALIPAY_CN',\n 'ALIPAY_HK',\n 'TRUE_MONEY',\n 'DANA',\n 'TOUCH_N_GO',\n 'G_CASH',\n 'WE_CHAT_PAY',\n 'KLARNA',\n 'E_CONTEXT',\n 'GRAB_PAY_MY',\n 'GRAB_PAY_SG',\n 'SHOPEE_PAY_TH',\n 'PAY_PAY',\n 'BPI',\n 'RABBIT_LINE_PAY',\n 'CONVENIENCE_STORE_JP',\n 'AMAZON_PAY',\n 'RAKUTEN_PAY',\n 'D_BARAI',\n 'AU_PAY',\n 'MERPAY',\n] as const\n\nexport type PortOneHostedPaymentMethod =\n (typeof PORTONE_HOSTED_PAYMENT_METHODS)[number]\n\nexport const portOneHostedPaymentMethodSchema = z.enum(\n PORTONE_HOSTED_PAYMENT_METHODS,\n)\n\n/** Standard V2 Browser SDK methods are deliberately not Hosted methods. */\nexport const PORTONE_STANDARD_PAYMENT_METHODS = ['CARD'] as const\nexport type PortOneStandardPaymentMethod =\n (typeof PORTONE_STANDARD_PAYMENT_METHODS)[number]\nexport const portOneStandardPaymentMethodSchema = z.enum(\n PORTONE_STANDARD_PAYMENT_METHODS,\n)\n\n/** PortOne Browser SDK V2 uses provider constants, not ISO currency codes. */\nexport const PORTONE_STANDARD_CURRENCY = 'CURRENCY_KRW' as const\n\nconst portOneStandardProviderOptionsSchema = z\n .object({\n profile: z.literal('standard_v2'),\n paymentMethod: portOneStandardPaymentMethodSchema,\n })\n .strict()\n\nexport const createPortOnePaymentSessionBodySchema = z\n .object({\n ...createPaymentSessionBaseBodyShape,\n provider: z.literal('portone'),\n providerOptions: z.discriminatedUnion('profile', [\n z\n .object({\n profile: z.literal('hosted_v2'),\n paymentMethod: portOneHostedPaymentMethodSchema,\n })\n .strict(),\n portOneStandardProviderOptionsSchema,\n ]),\n })\n .strict()\n\nconst createPaymentSessionBodySchemasByProvider = {\n toss: createTossPaymentSessionBodySchema,\n portone: createPortOnePaymentSessionBodySchema,\n} satisfies Record<CheckoutPaymentSessionProvider, z.ZodObject>\n\nfunction providerDiscriminatedUnion<\n const Schemas extends Record<CheckoutPaymentSessionProvider, z.ZodObject>,\n>(schemas: Schemas) {\n const variants = CHECKOUT_PAYMENT_SESSION_PROVIDERS.map(\n (provider) => schemas[provider],\n ) as [\n Schemas[CheckoutPaymentSessionProvider],\n Schemas[CheckoutPaymentSessionProvider],\n ...Schemas[CheckoutPaymentSessionProvider][],\n ]\n return z.discriminatedUnion('provider', variants)\n}\n\nexport const createPaymentSessionBodySchema = providerDiscriminatedUnion(\n createPaymentSessionBodySchemasByProvider,\n)\n\nconst createPaymentSessionParamsSchemasByProvider = {\n toss: createTossPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n }),\n portone: createPortOnePaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n }),\n} satisfies Record<CheckoutPaymentSessionProvider, z.ZodObject>\n\nexport const createPaymentSessionParamsSchema = providerDiscriminatedUnion(\n createPaymentSessionParamsSchemasByProvider,\n)\n\nexport const retrieveBrowserPaymentSessionParamsSchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const retrieveServerPaymentSessionParamsSchema = z\n .object({ paymentSessionId: commerceResourceIdSchema })\n .strict()\n\nexport const cancelBrowserPaymentSessionBodySchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\nexport const cancelBrowserPaymentSessionParamsSchema =\n cancelBrowserPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const cancelServerPaymentSessionBodySchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n })\n .strict()\nexport const cancelServerPaymentSessionParamsSchema =\n cancelServerPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const cancelPaymentSessionParamsSchema = z.union([\n cancelBrowserPaymentSessionParamsSchema,\n cancelServerPaymentSessionParamsSchema,\n])\n\nexport const confirmTossPaymentSessionBodySchema = z\n .object({\n paymentSessionId: commerceResourceIdSchema,\n action: z\n .object({\n type: z.literal('toss_authorization'),\n paymentKey: z.string().min(1).max(512),\n providerOrderId: tossProviderOrderIdSchema,\n })\n .strict(),\n })\n .strict()\nexport const confirmTossPaymentSessionParamsSchema =\n confirmTossPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nconst portOneProviderIdentitySchema = z\n .string()\n .min(1)\n .max(512)\n .refine((value) => /\\S/u.test(value), 'Provider identity must not be blank')\n\n/** Canonical server-owned identity for one PortOne payment object. */\nexport const portOnePaymentSelectorSchema = z\n .object({\n provider: z.literal('portone'),\n providerAccountKey: portOneProviderIdentitySchema,\n environment: z.enum(['test', 'live']),\n providerPaymentId: portOneProviderIdentitySchema,\n })\n .strict()\n\nexport const findPortOnePaymentParamsSchema = portOnePaymentSelectorSchema\nexport const reconcilePortOnePaymentBodySchema = portOnePaymentSelectorSchema\nexport const reconcilePortOnePaymentParamsSchema =\n reconcilePortOnePaymentBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\nexport const PAYMENT_PROVIDER_STATUSES = [\n 'requires_payment_method',\n 'requires_action',\n 'requires_confirmation',\n 'initializing',\n 'processing',\n 'authorized',\n 'canceling',\n 'unknown',\n 'captured',\n 'failed',\n 'canceled',\n] as const\n\nexport const paymentProviderStatusSchema = z.enum(PAYMENT_PROVIDER_STATUSES)\n\nconst customPaymentProviderSchema = z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9][a-z0-9_-]{0,63}$/i, 'provider must be a slug')\n\nconst customPaymentIdentitySchema = z.string().trim().min(1)\nconst customPaymentCurrencyInputSchema = z\n .string()\n .trim()\n .min(1)\n .regex(/^[A-Za-z]{3}$/, 'currency must be a three-letter ISO 4217 code')\n .transform((currency) => currency.toUpperCase() as Uppercase<string>)\n\nexport const createCustomPaymentSessionBodySchema = z\n .object({\n provider: customPaymentProviderSchema,\n checkoutToken: commerceCapabilitySchema,\n })\n .strict()\n\nexport const createCustomPaymentSessionParamsSchema =\n createCustomPaymentSessionBodySchema.extend({\n idempotencyKey: commerceIdempotencyKeySchema,\n })\n\n/**\n * Server-only projection for the bounded custom-provider bridge. It is\n * intentionally not the raw internal PaymentSession document.\n */\nexport const customPaymentSessionSchema = z\n .object({\n id: commerceResourceIdSchema,\n provider: customPaymentProviderSchema,\n providerSessionId: customPaymentIdentitySchema,\n money: moneySchema,\n })\n .strict()\n\nconst customPaymentSessionLookupSchema = z.union([\n z\n .object({\n providerSessionId: customPaymentIdentitySchema,\n })\n .strict(),\n z\n .object({\n providerPaymentId: customPaymentIdentitySchema,\n })\n .strict(),\n])\n\nexport const retrieveCustomPaymentSessionBodySchema = z\n .object({\n provider: customPaymentProviderSchema,\n by: customPaymentSessionLookupSchema,\n })\n .strict()\n\nexport const retrieveCustomPaymentSessionParamsSchema =\n retrieveCustomPaymentSessionBodySchema\n\nexport const retrievedCustomPaymentSessionSchema = z\n .object({\n id: commerceResourceIdSchema,\n provider: customPaymentProviderSchema,\n providerSessionId: customPaymentIdentitySchema,\n providerPaymentId: customPaymentIdentitySchema.nullable(),\n status: z.enum(['pending', 'captured', 'failed', 'canceled']),\n providerStatus: paymentProviderStatusSchema,\n finalizationStatus: z.enum(['not_ready', 'pending', 'committed']),\n money: moneySchema,\n orderId: commerceResourceIdSchema.nullable(),\n })\n .strict()\n\nexport const confirmCustomPaymentSessionBodySchema = z\n .object({\n provider: customPaymentProviderSchema,\n providerSessionId: customPaymentIdentitySchema,\n providerPaymentId: customPaymentIdentitySchema,\n providerEventId: customPaymentIdentitySchema,\n amount: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),\n currency: customPaymentCurrencyInputSchema,\n occurredAt: customPaymentIdentitySchema,\n })\n .strict()\n\nexport const confirmCustomPaymentSessionParamsSchema =\n confirmCustomPaymentSessionBodySchema\n\nexport const confirmCustomPaymentSessionResponseSchema = z\n .object({\n orderId: commerceResourceIdSchema,\n transactionId: commerceResourceIdSchema,\n status: z.literal('paid'),\n alreadyConfirmed: z.boolean().optional(),\n })\n .strict()\n\nexport const PORTONE_RECONCILIATION_DISPOSITIONS = [\n 'applied',\n 'observed',\n 'recovered_after_ambiguous_result',\n 'requires_attention',\n] as const\n\nexport const portOneReconciliationDispositionSchema = z.enum(\n PORTONE_RECONCILIATION_DISPOSITIONS,\n)\n\nexport const tossPaymentNextActionSchema = z\n .object({\n type: z.literal('toss_widget'),\n clientKey: z.string().min(1).max(255),\n paymentMethodVariantKey: z.string().min(1).max(255),\n agreementVariantKey: z.string().min(1).max(255),\n providerOrderId: tossProviderOrderIdSchema,\n providerCustomerKey: tossProviderCustomerKeySchema,\n orderName: z.string().min(1).max(200),\n customerName: z.string().min(1).max(200).optional(),\n customerEmail: z.string().email().max(254).optional(),\n })\n .strict()\n\nexport const portOnePaymentNextActionSchema = z\n .object({\n type: z.literal('portone_checkout'),\n checkoutUrl: z\n .string()\n .url()\n .startsWith('https://')\n .max(2048)\n .refine((value) => {\n const url = new URL(value)\n return url.username === '' && url.password === ''\n }, 'checkoutUrl must not contain embedded credentials'),\n })\n .strict()\n\nexport const PORTONE_STANDARD_ACTION_RETRY_POLICY = 'same_action_only' as const\n\nexport const portOneSdkPaymentRequestSchema = z\n .object({\n type: z.literal('portone_sdk'),\n version: z.literal('v2'),\n storeId: z.string().min(1).max(255),\n channelKey: z.string().min(1).max(255),\n paymentId: z.string().regex(/^[A-Za-z0-9]{6,40}$/),\n orderName: z.string().min(1).max(200),\n totalAmount: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),\n currency: z.literal(PORTONE_STANDARD_CURRENCY),\n payMethod: portOneStandardPaymentMethodSchema,\n redirectUrl: z\n .string()\n .url()\n .max(2048)\n .refine((value) => {\n const url = new URL(value)\n const loopback =\n url.protocol === 'http:' &&\n (url.hostname === 'localhost' || url.hostname === '127.0.0.1')\n return (\n (url.protocol === 'https:' || loopback) &&\n !url.username &&\n !url.password\n )\n }, 'redirectUrl must be HTTPS (or development loopback) without embedded credentials'),\n })\n .strict()\n\nconst portOneSdkPaymentCapabilityNextActionSchema =\n portOneSdkPaymentRequestSchema\n .extend({\n cancelable: z.literal(false),\n retryPolicy: z.literal(PORTONE_STANDARD_ACTION_RETRY_POLICY),\n })\n .strict()\n\n/**\n * Accepts both negotiated and pre-capability Standard V2 wire projections,\n * then exposes one unambiguous normalized contract to current consumers.\n */\nexport const portOneSdkPaymentNextActionSchema = z\n .union([\n portOneSdkPaymentCapabilityNextActionSchema,\n portOneSdkPaymentRequestSchema,\n ])\n .transform((action) =>\n 'cancelable' in action\n ? action\n : {\n ...action,\n cancelable: false as const,\n retryPolicy: PORTONE_STANDARD_ACTION_RETRY_POLICY,\n },\n )\n\nexport const paymentNextActionSchema = z.union([\n tossPaymentNextActionSchema,\n portOnePaymentNextActionSchema,\n portOneSdkPaymentNextActionSchema,\n])\n\nexport const PAYMENT_SESSION_ROLES = [\n 'active',\n 'canonical_candidate',\n 'canonical',\n 'residual',\n 'historical',\n] as const\n\nexport const paymentSessionRoleSchema = z.enum(PAYMENT_SESSION_ROLES)\n\nexport const PAYMENT_RECONCILIATION_REASONS = [\n 'provider_outcome_unknown',\n 'local_commit_ambiguous',\n 'amount_mismatch',\n 'currency_mismatch',\n 'excess_capture_pending_order',\n 'inventory_unavailable',\n 'admission_unavailable',\n 'excess_capture',\n 'late_capture',\n 'cross_checkout_duplicate',\n] as const\n\nexport const paymentReconciliationReasonSchema = z.enum(\n PAYMENT_RECONCILIATION_REASONS,\n)\n\nfunction requiredReconciliationSchema<\n const T extends readonly [string, ...string[]],\n>(reasons: T) {\n const reasonSchema = z.enum(reasons)\n return z\n .object({\n status: z.literal('required'),\n reasons: z.array(reasonSchema).min(1).readonly(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const indexes = new Map(reasons.map((reason, index) => [reason, index]))\n let previous = -1\n value.reasons.forEach((reason, index) => {\n const current = indexes.get(reason) ?? -1\n if (current <= previous) {\n ctx.addIssue({\n code: 'custom',\n path: ['reasons', index],\n message:\n 'reconciliation reasons must be unique and canonical-sorted',\n })\n }\n previous = current\n })\n })\n}\n\nconst noReconciliationSchema = z.object({ status: z.literal('none') }).strict()\n\nexport const publicCaptureEvidenceSchema = z\n .object({\n amountMinor: z.number().int().nonnegative(),\n currency: currencyCodeSchema,\n observedAt: z.string().datetime({ offset: true }),\n })\n .strict()\n\nexport const reconciliationRefundEvidenceSchema = z\n .object({\n providerRefundId: z.string().min(1),\n money: moneySchema,\n observedAt: z.string().datetime({ offset: true }),\n })\n .strict()\n\nexport const PAYMENT_FAILURE_REASONS = [\n 'payment_declined',\n 'authentication_failed',\n 'authorization_expired',\n 'payment_method_unavailable',\n 'provider_terminal_failure',\n 'unknown_provider_terminal_failure',\n] as const\n\nexport const paymentFailureReasonSchema = z.enum(PAYMENT_FAILURE_REASONS)\n\nexport type PaymentNextAction = z.infer<typeof paymentNextActionSchema>\nexport type TossPaymentNextAction = z.infer<typeof tossPaymentNextActionSchema>\nexport type PortOnePaymentNextAction = z.infer<\n typeof portOnePaymentNextActionSchema\n>\nexport type PortOneSdkPaymentNextAction = z.infer<\n typeof portOneSdkPaymentNextActionSchema\n>\nexport type PortOneSdkPaymentNextActionWire = z.input<\n typeof portOneSdkPaymentNextActionSchema\n>\nexport type PortOneSdkPaymentRequest = z.infer<\n typeof portOneSdkPaymentRequestSchema\n>\nexport type PublicCaptureEvidence = z.infer<typeof publicCaptureEvidenceSchema>\nexport type PaymentFailureReason = z.infer<typeof paymentFailureReasonSchema>\n\nexport type ReconciliationRequired<Reason extends string> = {\n status: 'required'\n reasons: readonly [Reason, ...Reason[]]\n}\n\ntype PublicPaymentSessionBase = {\n id: string\n money: z.infer<typeof moneySchema>\n expiresAt: string | null\n sessionRole:\n | 'active'\n | 'canonical_candidate'\n | 'canonical'\n | 'residual'\n | 'historical'\n}\n\ntype PublicPaymentSessionState<Action> =\n | ({\n providerStatus: 'requires_payment_method' | 'requires_action'\n finalizationStatus: 'not_ready'\n reconciliation: { status: 'none' }\n order: null\n } & (\n | {\n sessionRole: 'active'\n presentationStatus: 'actionable'\n nextAction: Action\n }\n | {\n sessionRole: 'residual'\n presentationStatus: 'suppressed'\n nextAction?: never\n }\n ))\n | {\n providerStatus: 'requires_confirmation'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: { status: 'none' }\n order: null\n }\n | {\n providerStatus: 'initializing' | 'processing' | 'authorized'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: { status: 'none' }\n order: null\n }\n | {\n providerStatus: 'canceling'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: { status: 'none' }\n order: null\n }\n | {\n providerStatus: 'unknown'\n sessionRole: 'active' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n reconciliation: ReconciliationRequired<'provider_outcome_unknown'>\n order: null\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical_candidate' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'pending'\n nextAction?: never\n reconciliation: { status: 'none' }\n providerEvidence: PublicCaptureEvidence\n order: null\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical' | 'historical'\n presentationStatus: 'suppressed'\n finalizationStatus: 'committed'\n nextAction?: never\n reconciliation: { status: 'none' }\n providerEvidence: PublicCaptureEvidence\n order: { id: string; orderNumber: string }\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical_candidate' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'pending'\n nextAction?: never\n reconciliation: ReconciliationRequired<\n | 'local_commit_ambiguous'\n | 'amount_mismatch'\n | 'currency_mismatch'\n | 'excess_capture_pending_order'\n >\n providerEvidence: PublicCaptureEvidence\n order: null\n }\n | {\n providerStatus: 'captured'\n sessionRole: 'canonical' | 'residual'\n presentationStatus: 'suppressed'\n finalizationStatus: 'committed'\n nextAction?: never\n reconciliation: ReconciliationRequired<\n | 'inventory_unavailable'\n | 'admission_unavailable'\n | 'amount_mismatch'\n | 'currency_mismatch'\n | 'excess_capture'\n | 'late_capture'\n | 'cross_checkout_duplicate'\n >\n providerEvidence: PublicCaptureEvidence\n order: { id: string; orderNumber: string }\n }\n | {\n providerStatus: 'failed'\n sessionRole: 'historical'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n providerEvidence?: never\n cancellationReason?: never\n reconciliation: { status: 'none' }\n failure: { reason: PaymentFailureReason; message?: string }\n order: null\n }\n | {\n providerStatus: 'canceled'\n sessionRole: 'historical'\n presentationStatus: 'suppressed'\n finalizationStatus: 'not_ready'\n nextAction?: never\n providerEvidence?: never\n failure?: never\n cancellationReason: 'expired' | 'customer' | 'operator' | 'provider'\n reconciliation: { status: 'none' }\n order: null\n }\n\nexport type PublicPaymentSession = PublicPaymentSessionBase &\n (\n | ({ provider: 'toss' } & PublicPaymentSessionState<TossPaymentNextAction>)\n | ({\n provider: 'portone'\n } & PublicPaymentSessionState<\n PortOnePaymentNextAction | PortOneSdkPaymentNextAction\n >)\n )\n\nexport type PublicPaymentSessionWire = PublicPaymentSessionBase &\n (\n | ({ provider: 'toss' } & PublicPaymentSessionState<TossPaymentNextAction>)\n | ({\n provider: 'portone'\n } & PublicPaymentSessionState<\n PortOnePaymentNextAction | PortOneSdkPaymentNextActionWire\n >)\n )\n\nconst orderReferenceSchema = z\n .object({\n id: z.string().min(1),\n orderNumber: z.string().min(1),\n })\n .strict()\n\nconst paymentSessionBaseShape = {\n id: z.string().min(1),\n money: moneySchema,\n expiresAt: z.string().datetime({ offset: true }).nullable(),\n}\n\nconst suppressedNotReadyShape = {\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n reconciliation: noReconciliationSchema,\n order: z.null(),\n}\n\nfunction stateSchemas(nextAction: z.ZodType) {\n return [\n z.object({\n providerStatus: z.enum(['requires_payment_method', 'requires_action']),\n sessionRole: z.literal('active'),\n presentationStatus: z.literal('actionable'),\n finalizationStatus: z.literal('not_ready'),\n nextAction,\n reconciliation: noReconciliationSchema,\n order: z.null(),\n }),\n z.object({\n providerStatus: z.enum(['requires_payment_method', 'requires_action']),\n sessionRole: z.literal('residual'),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.literal('requires_confirmation'),\n sessionRole: z.enum(['active', 'residual']),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.enum(['initializing', 'processing', 'authorized']),\n sessionRole: z.enum(['active', 'residual']),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.literal('canceling'),\n sessionRole: z.enum(['active', 'residual']),\n ...suppressedNotReadyShape,\n }),\n z.object({\n providerStatus: z.literal('unknown'),\n sessionRole: z.enum(['active', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n reconciliation: requiredReconciliationSchema([\n 'provider_outcome_unknown',\n ]),\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical_candidate', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('pending'),\n reconciliation: noReconciliationSchema,\n providerEvidence: publicCaptureEvidenceSchema,\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical', 'historical']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('committed'),\n reconciliation: noReconciliationSchema,\n providerEvidence: publicCaptureEvidenceSchema,\n order: orderReferenceSchema,\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical_candidate', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('pending'),\n reconciliation: requiredReconciliationSchema([\n 'local_commit_ambiguous',\n 'amount_mismatch',\n 'currency_mismatch',\n 'excess_capture_pending_order',\n ]),\n providerEvidence: publicCaptureEvidenceSchema,\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('captured'),\n sessionRole: z.enum(['canonical', 'residual']),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('committed'),\n reconciliation: requiredReconciliationSchema([\n 'inventory_unavailable',\n 'admission_unavailable',\n 'amount_mismatch',\n 'currency_mismatch',\n 'excess_capture',\n 'late_capture',\n 'cross_checkout_duplicate',\n ]),\n providerEvidence: publicCaptureEvidenceSchema,\n order: orderReferenceSchema,\n }),\n z.object({\n providerStatus: z.literal('failed'),\n sessionRole: z.literal('historical'),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n reconciliation: noReconciliationSchema,\n failure: z\n .object({\n reason: paymentFailureReasonSchema,\n message: z.string().min(1).optional(),\n })\n .strict(),\n order: z.null(),\n }),\n z.object({\n providerStatus: z.literal('canceled'),\n sessionRole: z.literal('historical'),\n presentationStatus: z.literal('suppressed'),\n finalizationStatus: z.literal('not_ready'),\n cancellationReason: z.enum([\n 'expired',\n 'customer',\n 'operator',\n 'provider',\n ]),\n reconciliation: noReconciliationSchema,\n order: z.null(),\n }),\n ]\n}\n\nfunction providerSessionSchemas(\n provider: CheckoutPaymentSessionProvider,\n action: z.ZodType,\n) {\n return stateSchemas(action).map((state) =>\n z\n .object({\n ...paymentSessionBaseShape,\n provider: z.literal(provider),\n ...state.shape,\n })\n .strict(),\n )\n}\n\nconst paymentNextActionSchemasByProvider = {\n toss: tossPaymentNextActionSchema,\n portone: z.union([\n portOnePaymentNextActionSchema,\n portOneSdkPaymentNextActionSchema,\n ]),\n} satisfies Record<CheckoutPaymentSessionProvider, z.ZodType>\n\nconst publicPaymentSessionVariants = CHECKOUT_PAYMENT_SESSION_PROVIDERS.flatMap(\n (provider) =>\n providerSessionSchemas(\n provider,\n paymentNextActionSchemasByProvider[provider],\n ),\n) as unknown as [z.ZodType, z.ZodType, ...z.ZodType[]]\n\nexport const publicPaymentSessionSchema: z.ZodType<\n PublicPaymentSession,\n PublicPaymentSessionWire\n> = z.union(publicPaymentSessionVariants) as unknown as z.ZodType<\n PublicPaymentSession,\n PublicPaymentSessionWire\n>\n\nconst portOneReconciliationSummarySchema = z.union([\n noReconciliationSchema,\n z\n .object({\n status: z.literal('required'),\n reasons: z.array(paymentReconciliationReasonSchema).min(1).readonly(),\n })\n .strict(),\n])\n\n/** Bounded server-only projection; provider actions and private evidence stay out. */\nexport const portOnePaymentCurrentStateSchema = z\n .object({\n paymentSession: z\n .object({\n id: commerceResourceIdSchema,\n provider: z.literal('portone'),\n providerStatus: paymentProviderStatusSchema,\n finalizationStatus: z.enum(['not_ready', 'pending', 'committed']),\n sessionRole: paymentSessionRoleSchema,\n reconciliation: portOneReconciliationSummarySchema,\n })\n .strict(),\n checkout: z.object({ id: commerceResourceIdSchema }).strict(),\n order: orderReferenceSchema.nullable(),\n money: moneySchema,\n })\n .strict()\n\nexport const findPortOnePaymentResultSchema = z.discriminatedUnion('found', [\n z.object({ found: z.literal(false) }).strict(),\n z\n .object({\n found: z.literal(true),\n current: portOnePaymentCurrentStateSchema,\n })\n .strict(),\n])\n\nexport const reconcilePortOnePaymentResultSchema = z.discriminatedUnion(\n 'found',\n [\n z\n .object({\n found: z.literal(false),\n disposition: z.literal('requires_attention'),\n })\n .strict(),\n z\n .object({\n found: z.literal(true),\n disposition: portOneReconciliationDispositionSchema,\n current: portOnePaymentCurrentStateSchema,\n })\n .strict(),\n ],\n)\n\nexport const CreatePaymentSessionParamsSchema = createPaymentSessionParamsSchema\nexport const CreatePaymentSessionBodySchema = createPaymentSessionBodySchema\nexport const PublicPaymentSessionSchema = publicPaymentSessionSchema\nexport const RetrieveBrowserPaymentSessionParamsSchema =\n retrieveBrowserPaymentSessionParamsSchema\nexport const RetrieveServerPaymentSessionParamsSchema =\n retrieveServerPaymentSessionParamsSchema\nexport const CancelBrowserPaymentSessionParamsSchema =\n cancelBrowserPaymentSessionParamsSchema\nexport const CancelBrowserPaymentSessionBodySchema =\n cancelBrowserPaymentSessionBodySchema\nexport const CancelServerPaymentSessionParamsSchema =\n cancelServerPaymentSessionParamsSchema\nexport const CancelServerPaymentSessionBodySchema =\n cancelServerPaymentSessionBodySchema\nexport const ConfirmTossPaymentSessionParamsSchema =\n confirmTossPaymentSessionParamsSchema\nexport const ConfirmTossPaymentSessionBodySchema =\n confirmTossPaymentSessionBodySchema\nexport const PortOnePaymentSelectorSchema = portOnePaymentSelectorSchema\nexport const FindPortOnePaymentParamsSchema = findPortOnePaymentParamsSchema\nexport const ReconcilePortOnePaymentParamsSchema =\n reconcilePortOnePaymentParamsSchema\nexport const ReconcilePortOnePaymentBodySchema =\n reconcilePortOnePaymentBodySchema\nexport const PortOnePaymentCurrentStateSchema = portOnePaymentCurrentStateSchema\nexport const FindPortOnePaymentResultSchema = findPortOnePaymentResultSchema\nexport const ReconcilePortOnePaymentResultSchema =\n reconcilePortOnePaymentResultSchema\nexport const CancelPaymentSessionParamsSchema = cancelPaymentSessionParamsSchema\nexport const CreateCustomPaymentSessionBodySchema =\n createCustomPaymentSessionBodySchema\nexport const CreateCustomPaymentSessionParamsSchema =\n createCustomPaymentSessionParamsSchema\nexport const CustomPaymentSessionSchema = customPaymentSessionSchema\nexport const RetrieveCustomPaymentSessionBodySchema =\n retrieveCustomPaymentSessionBodySchema\nexport const RetrieveCustomPaymentSessionParamsSchema =\n retrieveCustomPaymentSessionParamsSchema\nexport const RetrievedCustomPaymentSessionSchema =\n retrievedCustomPaymentSessionSchema\nexport const ConfirmCustomPaymentSessionBodySchema =\n confirmCustomPaymentSessionBodySchema\nexport const ConfirmCustomPaymentSessionParamsSchema =\n confirmCustomPaymentSessionParamsSchema\nexport const ConfirmCustomPaymentSessionResponseSchema =\n confirmCustomPaymentSessionResponseSchema\n\nexport type CreatePaymentSessionParams = z.infer<\n typeof createPaymentSessionParamsSchema\n>\nexport type RetrieveBrowserPaymentSessionParams = z.infer<\n typeof retrieveBrowserPaymentSessionParamsSchema\n>\nexport type RetrieveServerPaymentSessionParams = z.infer<\n typeof retrieveServerPaymentSessionParamsSchema\n>\nexport type CancelBrowserPaymentSessionParams = z.infer<\n typeof cancelBrowserPaymentSessionParamsSchema\n>\nexport type CancelServerPaymentSessionParams = z.infer<\n typeof cancelServerPaymentSessionParamsSchema\n>\nexport type CancelPaymentSessionParams = z.infer<\n typeof cancelPaymentSessionParamsSchema\n>\nexport type ConfirmTossPaymentSessionParams = z.infer<\n typeof confirmTossPaymentSessionParamsSchema\n>\nexport type PortOnePaymentSelector = z.input<\n typeof portOnePaymentSelectorSchema\n>\nexport type FindPortOnePaymentParams = z.input<\n typeof findPortOnePaymentParamsSchema\n>\nexport type ReconcilePortOnePaymentParams = z.input<\n typeof reconcilePortOnePaymentParamsSchema\n>\nexport type ReconcilePortOnePaymentBody = z.input<\n typeof reconcilePortOnePaymentBodySchema\n>\nexport type PortOnePaymentCurrentState = z.output<\n typeof portOnePaymentCurrentStateSchema\n>\nexport type FindPortOnePaymentResult = z.output<\n typeof findPortOnePaymentResultSchema\n>\nexport type ReconcilePortOnePaymentResult = z.output<\n typeof reconcilePortOnePaymentResultSchema\n>\nexport type PortOneReconciliationDisposition = z.output<\n typeof portOneReconciliationDispositionSchema\n>\nexport type CreateCustomPaymentSessionBody = z.input<\n typeof createCustomPaymentSessionBodySchema\n>\nexport type CreateCustomPaymentSessionParams = z.input<\n typeof createCustomPaymentSessionParamsSchema\n>\nexport type CustomPaymentSession = z.output<typeof customPaymentSessionSchema>\nexport type RetrieveCustomPaymentSessionBody = z.input<\n typeof retrieveCustomPaymentSessionBodySchema\n>\nexport type RetrieveCustomPaymentSessionParams = z.input<\n typeof retrieveCustomPaymentSessionParamsSchema\n>\nexport type RetrievedCustomPaymentSession = z.output<\n typeof retrievedCustomPaymentSessionSchema\n>\nexport type ConfirmCustomPaymentSessionBody = z.input<\n typeof confirmCustomPaymentSessionBodySchema\n>\nexport type ConfirmCustomPaymentSessionParams = z.input<\n typeof confirmCustomPaymentSessionParamsSchema\n>\nexport type ConfirmCustomPaymentSessionResponse = z.output<\n typeof confirmCustomPaymentSessionResponseSchema\n>\nexport type PaymentSessionRole = z.infer<typeof paymentSessionRoleSchema>\nexport type PaymentProviderStatus = z.infer<typeof paymentProviderStatusSchema>\nexport type PaymentReconciliationReason = z.infer<\n typeof paymentReconciliationReasonSchema\n>\nexport type ReconciliationRefundEvidence = z.infer<\n typeof reconciliationRefundEvidenceSchema\n>\n","import { Command } from 'commander'\nimport { cancelOrderSchema } 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 idSchema = z.union([z.string().min(1), z.number()]).transform(String)\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('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('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 { createReadStream } from 'node:fs'\nimport { stdin as processStdin } from 'node:process'\n\nexport const SENSITIVE_JSON_MAX_BYTES = 1024 * 1024\n\ntype SensitiveReadable = AsyncIterable<Buffer | string> & {\n isTTY?: boolean\n destroy?: () => void\n}\n\nexport interface SensitiveJsonInputSources {\n stdin?: SensitiveReadable\n openFile?: (path: string) => SensitiveReadable\n}\n\nfunction invalidInput(message: string) {\n return {\n type: 'validation' as const,\n code: 'invalid_argument' as const,\n field: 'data',\n message,\n detail: { message, field: 'data' },\n }\n}\n\nfunction isInvalidInput(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false\n const value = error as Record<string, unknown>\n return value.type === 'validation' && value.code === 'invalid_argument'\n}\n\nasync function readBoundedUtf8(source: SensitiveReadable): Promise<string> {\n const chunks: Buffer[] = []\n let totalBytes = 0\n for await (const chunk of source) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)\n totalBytes += buffer.byteLength\n if (totalBytes > SENSITIVE_JSON_MAX_BYTES) {\n throw invalidInput(\n `Sensitive commerce data must be ${SENSITIVE_JSON_MAX_BYTES} bytes or fewer.`,\n )\n }\n chunks.push(buffer)\n }\n return Buffer.concat(chunks, totalBytes).toString('utf8')\n}\n\n/** Read secret-bearing JSON without placing it in argv or validation output. */\nexport async function readSensitiveJsonObject(\n opts: {\n dataStdin?: boolean\n dataFile?: string\n },\n sources: SensitiveJsonInputSources = {},\n): Promise<Record<string, unknown>> {\n const sourceCount = [opts.dataStdin, opts.dataFile].filter(Boolean).length\n if (sourceCount !== 1) {\n throw invalidInput(\n 'Exactly one of --data-stdin or --data-file is required for sensitive commerce data.',\n )\n }\n\n let raw: string\n const input = sources.stdin ?? processStdin\n try {\n if (opts.dataStdin) {\n if (input.isTTY === true) {\n throw invalidInput(\n 'Sensitive commerce data cannot be read from an interactive terminal. Pipe JSON to --data-stdin or use --data-file.',\n )\n }\n raw = await readBoundedUtf8(input)\n } else {\n const file = (sources.openFile ?? createReadStream)(opts.dataFile!)\n try {\n raw = await readBoundedUtf8(file)\n } finally {\n file.destroy?.()\n }\n }\n } catch (error) {\n if (isInvalidInput(error)) throw error\n throw invalidInput('Sensitive commerce data could not be read.')\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw invalidInput('Sensitive commerce data must be valid JSON.')\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw invalidInput('Sensitive commerce data must be a JSON object.')\n }\n return parsed as Record<string, unknown>\n}\n\n/** Build a dry-run result that proves validation without echoing secret input. */\nexport function sensitiveDryRunResult(action: string) {\n return { dryRun: true, valid: true, action } as const\n}\n","import {\n addItemParamsSchema,\n clearCartParamsSchema,\n createCartParamsSchema,\n removeItemParamsSchema,\n retrieveCartParamsSchema,\n updateCartAttributesParamsSchema,\n updateDiscountCodesParamsSchema,\n updateItemParamsSchema,\n} from '@01.software/contracts'\nimport { Command } from 'commander'\nimport {\n addCartItemSchema,\n cartLineAdmissionsInputSchema,\n clearCartSchema,\n removeCartItemSchema,\n updateCartItemSchema,\n updateDiscountCodesSchema,\n} from '@01.software/contracts'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { exitWithError, printResult } from '../lib/output.js'\nimport { parseWithSchema } from '../lib/parse.js'\nimport {\n readSensitiveJsonObject,\n sensitiveDryRunResult,\n} from '../lib/sensitive-json-input.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 capability')\n .option('--data-stdin', 'Read market and attributes JSON from stdin')\n .option('--data-file <path>', 'Read market and attributes JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const input =\n opts.dataStdin || opts.dataFile\n ? await readSensitiveJsonObject(opts)\n : {}\n const data = parseWithSchema(\n input,\n 'cart create',\n createCartParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart create'), getFormat())\n return\n }\n printResult(await getClient().commerce.carts.create(data), getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('retrieve')\n .description('Retrieve a cart by its capability token')\n .option('--data-stdin', 'Read the Cart capability JSON from stdin')\n .option('--data-file <path>', 'Read the Cart capability JSON from file')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart retrieve',\n retrieveCartParamsSchema,\n )\n printResult(\n await getClient().commerce.carts.retrieve(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('add')\n .description('Add an item to a cart')\n .option('--data-stdin', 'Read capability and item JSON from stdin')\n .option('--data-file <path>', 'Read capability and item JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart add',\n addItemParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart add'), getFormat())\n return\n }\n printResult(await getClient().commerce.carts.addItem(data), getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('update')\n .description('Update cart item quantity')\n .option('--data-stdin', 'Read capability and item JSON from stdin')\n .option('--data-file <path>', 'Read capability and item JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart update',\n updateItemParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart update'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.updateItem(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('remove')\n .description('Remove an item from a cart')\n .option('--data-stdin', 'Read capability and item JSON from stdin')\n .option('--data-file <path>', 'Read capability and item JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart remove',\n removeItemParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart remove'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.removeItem(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('clear')\n .description('Remove all items from a cart')\n .option('--data-stdin', 'Read the Cart capability JSON from stdin')\n .option('--data-file <path>', 'Read the Cart capability JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart clear',\n clearCartParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart clear'), getFormat())\n return\n }\n printResult(await getClient().commerce.carts.clear(data), getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('discounts')\n .description('Replace all cart discount codes; pass [] to clear')\n .option('--data-stdin', 'Read capability and discount JSON from stdin')\n .option('--data-file <path>', 'Read capability and discount JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart discounts',\n updateDiscountCodesParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart discounts'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.updateDiscountCodes(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n cart\n .command('attributes')\n .description('Replace all public cart attributes; pass [] to clear')\n .option('--data-stdin', 'Read capability and attributes JSON from stdin')\n .option(\n '--data-file <path>',\n 'Read capability and attributes JSON from file',\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'cart attributes',\n updateCartAttributesParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('cart attributes'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.carts.updateAttributes(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\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 {\n CancelServerPaymentSessionParamsSchema,\n CanonicalCheckoutQuerySchema,\n ConfirmTossPaymentSessionParamsSchema,\n CreatePaymentSessionParamsSchema,\n CreateServerCheckoutParamsSchema,\n} from '@01.software/contracts'\nimport { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport { exitWithError, printResult } from '../lib/output.js'\nimport { parseJson, parseWithSchema } from '../lib/parse.js'\nimport {\n readSensitiveJsonObject,\n sensitiveDryRunResult,\n} from '../lib/sensitive-json-input.js'\n\nfunction paymentProvider(value: unknown): 'portone' | 'toss' {\n if (value === 'toss' || value === 'portone') return value\n throw new Error('payment provider must be toss or portone')\n}\n\nexport function registerCommerceSessionCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const checkout = program\n .command('checkout')\n .description('Checkout management')\n\n checkout\n .command('create')\n .description('Create a Checkout from a server-authoritative Cart')\n .option('--data-stdin', 'Read capability and customer JSON from stdin')\n .option('--data-file <path>', 'Read capability and customer JSON from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'checkout',\n CreateServerCheckoutParamsSchema,\n )\n if (opts.dryRun) {\n printResult(sensitiveDryRunResult('checkout create'), getFormat())\n return\n }\n printResult(\n await getClient().commerce.checkouts.create(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n checkout\n .command('retrieve <checkoutId>')\n .description('Retrieve a Checkout by ID with server credentials')\n .action(async (checkoutId: string) => {\n try {\n printResult(\n await getClient().commerce.checkouts.retrieve({ checkoutId }),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n checkout\n .command('query')\n .description('Query lightweight Checkouts with server credentials')\n .option('--params <json>', 'Checkout query parameters (JSON)', '{}')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n parseJson(opts.params, 'params'),\n 'checkout query',\n CanonicalCheckoutQuerySchema,\n )\n printResult(\n await getClient().commerce.checkouts.query(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n const sessions = program\n .command('payment-session')\n .description('PaymentSession management')\n\n sessions\n .command('create')\n .description('Create a canonical provider-configured PaymentSession')\n .option('--data-stdin', 'Read canonical create parameters from stdin')\n .option('--data-file <path>', 'Read canonical create parameters from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'payment-session',\n CreatePaymentSessionParamsSchema,\n )\n if (opts.dryRun) {\n printResult(\n sensitiveDryRunResult('payment-session create'),\n getFormat(),\n )\n return\n }\n const paymentSessions = getClient().commerce.paymentSessions\n const result =\n data.provider === 'portone'\n ? await paymentSessions.createPortOne(data)\n : await paymentSessions.create(data)\n printResult(result, getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n sessions\n .command('retrieve <paymentSessionId>')\n .description('Retrieve a PaymentSession')\n .requiredOption(\n '--provider <provider>',\n 'Payment provider (toss or portone)',\n )\n .action(async (paymentSessionId: string, opts) => {\n try {\n const provider = paymentProvider(opts.provider)\n const paymentSessions = getClient().commerce.paymentSessions\n printResult(\n provider === 'portone'\n ? await paymentSessions.retrievePortOne({ paymentSessionId })\n : await paymentSessions.retrieve({ paymentSessionId }),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n sessions\n .command('cancel')\n .description('Cancel a PaymentSession and release its payment slot')\n .option('--data-stdin', 'Read session ID and idempotency key from stdin')\n .option(\n '--data-file <path>',\n 'Read session ID and idempotency key from file',\n )\n .requiredOption(\n '--provider <provider>',\n 'Payment provider (toss or portone)',\n )\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'payment-session cancel',\n CancelServerPaymentSessionParamsSchema,\n )\n const provider = paymentProvider(opts.provider)\n if (opts.dryRun) {\n printResult(\n sensitiveDryRunResult('payment-session cancel'),\n getFormat(),\n )\n return\n }\n const paymentSessions = getClient().commerce.paymentSessions\n printResult(\n provider === 'portone'\n ? await paymentSessions.cancelPortOne(data)\n : await paymentSessions.cancel(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n\n sessions\n .command('confirm-toss')\n .description('Confirm a Toss authorization with the typed server action')\n .option('--data-stdin', 'Read Toss confirmation params from stdin')\n .option('--data-file <path>', 'Read Toss confirmation params from file')\n .option('--dry-run', 'Validate inputs without executing')\n .action(async (opts) => {\n try {\n const data = parseWithSchema(\n await readSensitiveJsonObject(opts),\n 'payment-session confirm-toss',\n ConfirmTossPaymentSessionParamsSchema,\n )\n if (opts.dryRun) {\n printResult(\n sensitiveDryRunResult('payment-session confirm-toss'),\n getFormat(),\n )\n return\n }\n printResult(\n await getClient().commerce.paymentSessions.confirm(data),\n getFormat(),\n )\n } catch (error) {\n exitWithError(error)\n }\n })\n}\n","import type {\n ProductDetailParams,\n ProductFallbackLocaleOption,\n ProductLocaleOption,\n} from '@01.software/sdk'\n\nexport interface ProductDetailCliOptions {\n id?: string\n slug?: string\n market?: string\n locale?: string\n fallbackLocale?: string\n}\n\nfunction invalidOption(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 parseLocale(\n value: string | undefined,\n): ProductLocaleOption | undefined {\n if (value == null) return undefined\n if (value === 'ko' || value === 'en' || value === 'all') return value\n throw invalidOption('--locale must be one of: ko, en, all', 'locale', value)\n}\n\nfunction parseFallbackLocale(\n value: string | undefined,\n): ProductFallbackLocaleOption | undefined {\n if (value == null) return undefined\n if (value === 'ko' || value === 'en') return value\n if (value === 'none') return false\n throw invalidOption(\n '--fallback-locale must be one of: ko, en, none',\n 'fallbackLocale',\n value,\n )\n}\n\nexport function productDetailParamsFromOptions(\n options: ProductDetailCliOptions,\n): ProductDetailParams {\n const hasId = typeof options.id === 'string' && options.id.length > 0\n const hasSlug = typeof options.slug === 'string' && options.slug.length > 0\n\n if (hasId === hasSlug) {\n throw invalidOption(\n 'Exactly one of --id or --slug is required.',\n 'product',\n { id: options.id, slug: options.slug },\n )\n }\n\n const locale = parseLocale(options.locale)\n const fallbackLocale = parseFallbackLocale(options.fallbackLocale)\n const identifier = hasId ? { id: options.id! } : { slug: options.slug! }\n\n return {\n ...identifier,\n ...(options.market !== undefined ? { market: options.market } : {}),\n ...(locale !== undefined ? { locale } : {}),\n ...(fallbackLocale !== undefined ? { fallbackLocale } : {}),\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'\nimport {\n productDetailParamsFromOptions,\n type ProductDetailCliOptions,\n} from '../lib/product-detail-options.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('detail')\n .description('Get shaped product detail by slug or ID')\n .option('--slug <slug>', 'Product slug')\n .option('--id <id>', 'Product ID')\n .option('--market <market>', 'Market slug')\n .option('--locale <locale>', 'Locale: ko, en, or all')\n .option('--fallback-locale <locale>', 'Fallback locale: ko, en, or none')\n .action(async (opts: ProductDetailCliOptions) => {\n try {\n const params = productDetailParamsFromOptions(opts)\n const client = getClient()\n const result = await client.commerce.product.detail(params)\n printResult(result, getFormat())\n } catch (e) {\n exitWithError(e)\n }\n })\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('--country-code <code>', 'Destination country code')\n .option('--region-code <code>', 'Destination region code')\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.countryCode ? { countryCode: opts.countryCode } : {}),\n ...(opts.regionCode ? { regionCode: opts.regionCode } : {}),\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\nconst EXCHANGE_TIMEOUT_MS = 30_000\nconst MAX_EXCHANGE_RESPONSE_BYTES = 1024 * 1024\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 readBoundedResponseBody(\n response: Response,\n signal: AbortSignal,\n): Promise<string> {\n const contentLength = response.headers.get('content-length')\n if (\n contentLength !== null &&\n /^\\d+$/.test(contentLength) &&\n Number(contentLength) > MAX_EXCHANGE_RESPONSE_BYTES\n ) {\n void response.body?.cancel().catch(() => undefined)\n throw new Error('response body exceeded 1 MiB')\n }\n\n const reader = response.body?.getReader()\n if (!reader) return ''\n\n const decoder = new TextDecoder()\n let body = ''\n let totalBytes = 0\n let completed = false\n let rejectAbort!: (reason?: unknown) => void\n const aborted = new Promise<never>((_, reject) => {\n rejectAbort = reject\n })\n const onAbort = () => rejectAbort(new Error('request timed out'))\n signal.addEventListener('abort', onAbort, { once: true })\n if (signal.aborted) onAbort()\n\n try {\n while (true) {\n const { done, value } = await Promise.race([reader.read(), aborted])\n if (done) {\n completed = true\n return body + decoder.decode()\n }\n totalBytes += value.byteLength\n if (totalBytes > MAX_EXCHANGE_RESPONSE_BYTES) {\n throw new Error('response body exceeded 1 MiB')\n }\n body += decoder.decode(value, { stream: true })\n }\n } finally {\n signal.removeEventListener('abort', onAbort)\n if (!completed) void reader.cancel().catch(() => undefined)\n }\n}\n\nexport async function exchangeCode(\n code: string,\n options: {\n fetchImpl?: typeof fetch\n timeoutMs?: number\n } = {},\n): Promise<ExchangeResponse | null> {\n const url = `${WEB_URL}/api/cli/exchange`\n const fetchImpl = options.fetchImpl ?? fetch\n const timeoutMs = options.timeoutMs ?? EXCHANGE_TIMEOUT_MS\n const controller = new AbortController()\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n let rejectTimeout!: (reason?: unknown) => void\n const timedOut = new Promise<never>((_, reject) => {\n rejectTimeout = reject\n })\n try {\n timeoutId = setTimeout(() => {\n controller.abort()\n rejectTimeout(new Error('request timed out'))\n }, timeoutMs)\n const res = await Promise.race([\n fetchImpl(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code }),\n signal: controller.signal,\n }),\n timedOut,\n ])\n const body = await Promise.race([\n readBoundedResponseBody(res, controller.signal),\n timedOut,\n ])\n if (!res.ok) {\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 let data: Partial<ExchangeResponse>\n try {\n data = JSON.parse(body) as Partial<ExchangeResponse>\n } catch {\n console.error(pc.red(`Exchange failed: malformed response from ${url}`))\n return null\n }\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 } finally {\n clearTimeout(timeoutId)\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, {\n 'Content-Type': 'text/html; charset=utf-8',\n Connection: 'close',\n })\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, {\n 'Content-Type': 'text/html; charset=utf-8',\n Connection: 'close',\n })\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, {\n 'Content-Type': 'text/html; charset=utf-8',\n Connection: 'close',\n })\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, {\n 'Content-Type': 'text/html; charset=utf-8',\n Connection: 'close',\n })\n .end(\n ERROR_HTML(\n 'Invalid or expired code. Start over with \"01 login\".',\n ),\n )\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, {\n 'Content-Type': 'text/html; charset=utf-8',\n Connection: 'close',\n })\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) +\n '...' +\n 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 {\n getAgentPlanOperations,\n type AgentPlanOperation,\n} from '../lib/agent-plan-allowlist.js'\nimport {\n exitWithAgentError,\n printAgentSuccess,\n resolveAgentPrintOptions,\n validateAgentOutputTarget,\n} from '../lib/agent-output.js'\nimport {\n parseSelect,\n validateCollection,\n type CliCollection,\n} from '../lib/collections.js'\nimport {\n productDetailParamsFromOptions,\n type ProductDetailCliOptions,\n} from '../lib/product-detail-options.js'\nimport { registerAgentPlanCommands } from './agent-plan.js'\n\nconst AGENT_PROTOCOL_VERSION = '1'\n\ntype AgentReadOperation = 'query' | 'get' | 'detail'\ntype AgentPlanOperationName = `plan:${AgentPlanOperation}`\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 discovery: {\n context: {\n counts: boolean\n }\n schema: {\n mode: 'effective'\n }\n doctor: {\n appIntegration: boolean\n }\n }\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\nexport function 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 Exclude<AgentReadOperation, 'detail'>[]\nconst AGENT_PRODUCT_OPERATIONS = [\n 'detail',\n] as const satisfies readonly AgentReadOperation[]\nexport function buildAgentManifest(): AgentManifest {\n const collections = {} as AgentManifest['collections']\n for (const collection of SERVER_COLLECTIONS) {\n const operations: AgentOperation[] = [\n ...AGENT_READ_OPERATIONS,\n ...(collection === 'products' ? AGENT_PRODUCT_OPERATIONS : []),\n ...getAgentPlanOperations(collection).map(\n (operation): AgentPlanOperationName => `plan:${operation}`,\n ),\n ]\n collections[collection] = {\n operations,\n fields: buildStableAgentFields(),\n }\n }\n\n return {\n version: AGENT_PROTOCOL_VERSION,\n discovery: {\n context: { counts: true },\n schema: { mode: 'effective' },\n doctor: { appIntegration: true },\n },\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): Command {\n const agent = configureAgentParser(\n program\n .command('agent')\n .description('Machine-stable CLI namespace for coding agents')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action((_opts: object, command: Command) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n printAgentSuccess(buildAgentManifest(), outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n }),\n )\n\n configureAgentParser(\n agent\n .command('context')\n .description('Get the active tenant context')\n .option('--counts', 'Include collection document counts')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(async (opts: { counts?: boolean }, command: Command) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n const client = getClient()\n const result = opts.counts\n ? await client.tenant.context({ includeCounts: true })\n : await client.tenant.context()\n printAgentSuccess(result, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n }),\n )\n\n configureAgentParser(\n agent\n .command('schema <collection>')\n .description('Get the effective field schema for a collection')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(async (collection: string, _opts: object, command: Command) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n const col = validateAgentCollection(collection)\n const client = getClient()\n const result = await client.tenant.collectionSchema(col)\n printAgentSuccess(result, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\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 command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\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, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n id: string | undefined,\n opts: { select?: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\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, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n },\n ),\n )\n\n const product = configureAgentParser(\n agent.command('product').description('Shaped product reads'),\n )\n\n configureAgentParser(\n product\n .command('detail')\n .description('Get shaped product detail by slug or ID')\n .option('--slug <slug>', 'Product slug')\n .option('--id <id>', 'Product ID')\n .option('--market <market>', 'Market slug')\n .option('--locale <locale>', 'Locale: ko, en, or all')\n .option('--fallback-locale <locale>', 'Fallback locale: ko, en, or none')\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n opts: ProductDetailCliOptions & { pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n const params = productDetailParamsFromOptions(opts)\n const client = getClient()\n const result = await client.commerce.product.detail(params)\n printAgentSuccess(result, outputOptions)\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n },\n ),\n )\n\n registerAgentPlanCommands(agent, getClient)\n\n return agent\n}\n","import { SERVER_COLLECTIONS } from '@01.software/sdk'\nimport { agentPlanError } from './agent-output.js'\n\nexport type AgentPlanOperation = 'create' | 'update' | 'delete'\ntype ServerCollection = (typeof SERVER_COLLECTIONS)[number]\n\nexport const AGENT_PLAN_CAPABILITIES = {\n articles: ['create', 'update', 'delete'],\n 'article-categories': ['create', 'update', 'delete'],\n 'article-tags': ['create', 'update', 'delete'],\n links: ['create', 'update', 'delete'],\n 'link-categories': ['create', 'update', 'delete'],\n 'link-tags': ['create', 'update', 'delete'],\n documents: ['create', 'update'],\n 'document-categories': ['create', 'update'],\n 'document-types': ['create', 'update'],\n canvases: ['create', 'update', 'delete'],\n 'canvas-categories': ['create', 'update', 'delete'],\n 'canvas-tags': ['create', 'update', 'delete'],\n} as const satisfies Partial<\n Record<ServerCollection, readonly AgentPlanOperation[]>\n>\n\nexport type AgentPlanCollection = keyof typeof AGENT_PLAN_CAPABILITIES\n\nconst SERVER_COLLECTION_SET = new Set<string>(SERVER_COLLECTIONS)\nconst AGENT_PLAN_OPERATIONS = new Set<AgentPlanOperation>([\n 'create',\n 'update',\n 'delete',\n])\n\nexport function assertAgentPlanCapabilityMatrix(\n matrix: Readonly<Record<string, readonly string[]>>,\n): void {\n for (const [collection, operations] of Object.entries(matrix)) {\n if (!SERVER_COLLECTION_SET.has(collection)) {\n throw new Error(\n `Agent plan capability collection \"${collection}\" is not a ServerCollection.`,\n )\n }\n if (operations.length === 0) {\n throw new Error(\n `Agent plan capability collection \"${collection}\" has no operations.`,\n )\n }\n\n const seen = new Set<string>()\n for (const operation of operations) {\n if (!AGENT_PLAN_OPERATIONS.has(operation as AgentPlanOperation)) {\n throw new Error(\n `Agent plan capability operation \"${operation}\" is invalid for \"${collection}\".`,\n )\n }\n if (seen.has(operation)) {\n throw new Error(\n `Agent plan capability operation \"${operation}\" is duplicated for \"${collection}\".`,\n )\n }\n seen.add(operation)\n }\n }\n}\n\nassertAgentPlanCapabilityMatrix(AGENT_PLAN_CAPABILITIES)\n\nexport function isAgentPlanCollection(\n collection: string,\n): collection is AgentPlanCollection {\n return Object.prototype.hasOwnProperty.call(\n AGENT_PLAN_CAPABILITIES,\n collection,\n )\n}\n\nexport function assertAgentPlanCollection(\n collection: string,\n): 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 getAgentPlanOperations(\n collection: ServerCollection,\n): readonly AgentPlanOperation[] {\n return isAgentPlanCollection(collection)\n ? AGENT_PLAN_CAPABILITIES[collection]\n : []\n}\n\nexport function isAgentPlanCapability(\n collection: string,\n operation: string,\n): collection is AgentPlanCollection {\n if (!isAgentPlanCollection(collection)) return false\n return (AGENT_PLAN_CAPABILITIES[collection] as readonly string[]).includes(\n operation,\n )\n}\n\nexport function assertAgentPlanCapability(\n collection: string,\n operation: AgentPlanOperation,\n): AgentPlanCollection {\n if (isAgentPlanCapability(collection, operation)) {\n return collection\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Operation \"${operation}\" is not supported for collection \"${collection}\" in agent plan mutations.`,\n )\n}\n\nexport function assertAgentPlanOperation(\n operation: string,\n): AgentPlanOperation {\n if (AGENT_PLAN_OPERATIONS.has(operation as AgentPlanOperation)) {\n return operation as AgentPlanOperation\n }\n throw agentPlanError(\n 'UNSUPPORTED_OPERATION',\n `Operation \"${operation}\" is not supported for agent plan mutations.`,\n )\n}\n","import { randomBytes } from 'node:crypto'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport type { Command } from 'commander'\nimport { 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 retryable: boolean\n retryAfter?: number\n }\n}\n\nexport interface AgentPrintOptions {\n pretty?: boolean\n outputFile?: string\n}\n\ninterface AgentCommandOutputOptions {\n pretty?: boolean\n outputFile?: string\n}\n\ninterface AgentOutputReceipt {\n outputFile: string\n bytes: number\n}\n\nconst AGENT_OUTPUT_FILE_MODE = 0o600\nconst isWin32 = process.platform === 'win32'\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 invalidOutputTarget(message: string, outputFile: string): Error {\n const error = new Error(message)\n Object.assign(error, {\n type: 'validation',\n code: 'invalid_argument',\n field: 'outputFile',\n detail: { message, field: 'outputFile', value: outputFile },\n })\n return error\n}\n\nfunction assertSafeAgentOutputTarget(outputFile: string): void {\n let stat: fs.Stats\n try {\n stat = fs.lstatSync(outputFile)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return\n throw error\n }\n\n if (stat.isSymbolicLink()) {\n throw invalidOutputTarget(\n `Refusing to write Agent output through a symlink: ${outputFile}.`,\n outputFile,\n )\n }\n if (!stat.isFile()) {\n throw invalidOutputTarget(\n `Refusing to write Agent output to a non-regular file: ${outputFile}.`,\n outputFile,\n )\n }\n if (!isWin32 && stat.nlink > 1) {\n throw invalidOutputTarget(\n `Refusing to write Agent output to a file with multiple hard links: ${outputFile}.`,\n outputFile,\n )\n }\n}\n\nfunction writeAgentOutputFile(\n requestedPath: string,\n content: string,\n): AgentOutputReceipt {\n const outputFile = path.resolve(requestedPath)\n assertSafeAgentOutputTarget(outputFile)\n\n const tempFile = path.join(\n path.dirname(outputFile),\n `.${path.basename(outputFile)}.${randomBytes(12).toString('hex')}.tmp`,\n )\n let tempFd: number | undefined\n\n try {\n tempFd = fs.openSync(tempFile, 'wx', AGENT_OUTPUT_FILE_MODE)\n if (!isWin32) {\n fs.fchmodSync(tempFd, AGENT_OUTPUT_FILE_MODE)\n }\n fs.writeFileSync(tempFd, content, { encoding: 'utf8' })\n fs.closeSync(tempFd)\n tempFd = undefined\n fs.renameSync(tempFile, outputFile)\n } catch (error) {\n if (tempFd !== undefined) {\n try {\n fs.closeSync(tempFd)\n } catch {\n // Best-effort descriptor cleanup after a failed temp write.\n }\n }\n try {\n fs.unlinkSync(tempFile)\n } catch {\n // Best-effort cleanup after a failed temp write or atomic rename.\n }\n throw error\n }\n\n return {\n outputFile,\n bytes: Buffer.byteLength(content, 'utf8'),\n }\n}\n\nexport function resolveAgentPrintOptions(command: Command): AgentPrintOptions {\n const options = command.optsWithGlobals<AgentCommandOutputOptions>()\n return {\n pretty: Boolean(options.pretty),\n outputFile: options.outputFile,\n }\n}\n\nexport function validateAgentOutputTarget(options: AgentPrintOptions): void {\n if (options.outputFile !== undefined) {\n assertSafeAgentOutputTarget(path.resolve(options.outputFile))\n }\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\nfunction isSdkUsageLimitError(error: unknown): boolean {\n const raw = asRecord(error)\n return raw?.name === 'UsageLimitError' || raw?.code === 'USAGE_LIMIT_ERROR'\n}\n\nfunction agentErrorEnvelope(\n code: AgentErrorCode,\n message: string,\n retryable: boolean,\n retryAfter?: number,\n): AgentErrorEnvelope {\n return {\n error: {\n code,\n message,\n retryable,\n ...(typeof retryAfter === 'number' ? { retryAfter } : {}),\n },\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 agentErrorEnvelope(agentCode as AgentErrorCode, message, false)\n }\n\n const adminError = classifyError(error)\n\n if (isRawNotFound(error) || adminError.code === 'not_found') {\n return agentErrorEnvelope('NOT_FOUND', message, false)\n }\n\n if (adminError.type === 'permission') {\n return agentErrorEnvelope('AUTH_FAILED', message, false)\n }\n\n if (adminError.type === 'validation' && adminError.code !== 'unknown') {\n return agentErrorEnvelope('INVALID_INPUT', message, false)\n }\n\n const retryable =\n !isSdkUsageLimitError(error) &&\n (adminError.type === 'network' || adminError.type === 'degraded')\n const retryAfter =\n retryable &&\n adminError.type === 'degraded' &&\n adminError.code === 'rate_limited'\n ? adminError.retryAfter\n : undefined\n\n return agentErrorEnvelope('INTERNAL', message, retryable, retryAfter)\n}\n\nexport function printAgentSuccess(\n data: unknown,\n options: AgentPrintOptions = {},\n): void {\n const output = stringifyAgentJson(data, options)\n if (options.outputFile !== undefined) {\n const receipt = writeAgentOutputFile(options.outputFile, output)\n console.log(JSON.stringify(receipt))\n return\n }\n console.log(output)\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 { 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 isAgentPlanCapability,\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 if (!isAgentPlanCapability(collection, operation)) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Stored plan has unsupported collection operation.',\n )\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 if (!isAgentPlanCapability(plan.collection, plan.operation)) {\n throw agentPlanError(\n 'PLAN_MISMATCH',\n 'Stored plan has unsupported collection operation.',\n )\n }\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 assertAgentPlanCapability,\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 resolveAgentPrintOptions,\n validateAgentOutputTarget,\n type AgentPrintOptions,\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 assertAgentPlanCapability>,\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 outputOptions: AgentPrintOptions\n getClient: () => ResolvedClient\n}): Promise<void> {\n const collection = assertAgentPlanCapability(\n input.collection,\n input.operation,\n )\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 input.outputOptions,\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n await runPlanAction({\n operation: 'create',\n collection,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n outputOptions,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n id: string,\n opts: { dataStdin?: boolean; dataFile?: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n await runPlanAction({\n operation: 'update',\n collection,\n documentId: id,\n dataStdin: opts.dataStdin,\n dataFile: opts.dataFile,\n outputOptions,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n collection: string,\n id: string,\n opts: { pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\n await runPlanAction({\n operation: 'delete',\n collection,\n documentId: id,\n outputOptions,\n getClient,\n })\n } catch (error) {\n exitWithAgentError(error, outputOptions)\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 success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(\n async (\n planTokenRaw: string,\n opts: { hash: string; pretty?: boolean },\n command: Command,\n ) => {\n const outputOptions = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(outputOptions)\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 outputOptions,\n )\n } catch (error) {\n exitWithAgentError(error, outputOptions)\n }\n },\n ),\n )\n}\n","import { Command } from 'commander'\nimport type { ResolvedClient } from '../lib/client.js'\nimport type { ConfigureEmbeddedAdminBindingInput } from '../lib/embedded-admin-management.js'\nimport { exitWithError, printResult } from '../lib/output.js'\n\nexport function registerEmbeddedAppCommands(\n program: Command,\n getClient: () => ResolvedClient,\n getFormat: () => string,\n) {\n const embeddedApp = program\n .command('embedded-app')\n .description('Manage the active tenant embedded admin app binding')\n\n embeddedApp\n .command('show')\n .description('Show the active tenant embedded app binding')\n .action(async () => {\n try {\n const result = await getClient().embeddedAdmin.show()\n printResult(result, getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n\n embeddedApp\n .command('configure')\n .description('Configure and enable the active tenant embedded app')\n .requiredOption('--label <label>', 'Display label shown in Console')\n .requiredOption('--origin <origin>', 'Exact HTTPS app origin')\n .option('--path <path>', 'Relative app path', '/')\n .option('--dry-run', 'Validate inputs without executing')\n .action(\n async (\n options: ConfigureEmbeddedAdminBindingInput & { dryRun?: boolean },\n ) => {\n try {\n const client = getClient()\n const input = {\n label: options.label,\n origin: options.origin,\n path: options.path,\n }\n const binding = client.embeddedAdmin.validateConfiguration(input)\n if (options.dryRun) {\n printResult(\n {\n action: 'embedded app configure',\n binding,\n dryRun: true,\n valid: true,\n },\n getFormat(),\n )\n return\n }\n\n const result = await client.embeddedAdmin.configure(input)\n printResult(result, getFormat())\n } catch (error) {\n exitWithError(error)\n }\n },\n )\n\n embeddedApp\n .command('disable')\n .description('Disable the active tenant embedded app binding')\n .option('--dry-run', 'Validate without executing')\n .action(async (options: { dryRun?: boolean }) => {\n try {\n const client = getClient()\n client.embeddedAdmin.validateManagementAccess()\n if (options.dryRun) {\n printResult(\n {\n action: 'embedded app disable',\n dryRun: true,\n valid: true,\n },\n getFormat(),\n )\n return\n }\n\n const result = await client.embeddedAdmin.disable()\n printResult(result, getFormat())\n } catch (error) {\n exitWithError(error)\n }\n })\n}\n","import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { join, resolve } from 'node:path'\nimport { satisfies, validRange } from 'semver'\nimport {\n TenantIntrospectionApi,\n TENANT_CONTEXT_PATH,\n} from '@01.software/sdk/server'\nimport { getExitCode } from './output.js'\nimport {\n CLI_I18N_EN,\n CLI_I18N_KO,\n type DoctorActionKey,\n type DoctorInputMessageKey,\n} from './i18n.js'\n\ndeclare const __DEFAULT_API_URL__: string\n\nexport type DoctorStatus = 'ready' | 'attention' | 'blocked'\n\nexport type { DoctorActionKey } from './i18n.js'\n\nexport interface DoctorCheck {\n id:\n | 'project.package-json'\n | 'node.engine'\n | 'sdk.declaration'\n | 'sdk.installation'\n | 'env.app-credentials'\n | 'tenant.context'\n | 'origin.cors'\n status: DoctorStatus\n /** Stable remediation key. Human copy is localized at render time. */\n action: DoctorActionKey\n exitCode?: number\n}\n\nexport interface DoctorResult {\n version: 1\n status: DoctorStatus\n exitCode: number\n checks: DoctorCheck[]\n}\n\nexport interface DoctorOptions {\n cwd?: string\n envFile?: string\n origin?: string\n /** Test seam. The production command always uses the SDK client. */\n tenantContext?: (credentials: {\n publishableKey: string\n secretKey: string\n apiUrl: string\n }) => Promise<unknown>\n /** Test seam. Production uses the documented diagnostic-only OPTIONS probe. */\n originProbe?: (input: {\n origin: string\n apiUrl: string\n publishableKey: string\n }) => Promise<'allowed' | 'denied' | 'indeterminate'>\n}\n\ntype EnvDeclaration = { key: string; value: string; file: string }\ntype DoctorEnv = {\n values: ReadonlyMap<string, EnvDeclaration>\n ambiguousKeys: ReadonlySet<string>\n invalid: boolean\n}\n\nconst PUBLIC_ENV_PREFIXES = [\n 'NEXT_PUBLIC_',\n 'VITE_',\n 'REACT_APP_',\n 'PUBLIC_',\n] as const\nconst APP_ENV_PREFIXES = ['', ...PUBLIC_ENV_PREFIXES] as const\nconst envKey = (prefix: (typeof APP_ENV_PREFIXES)[number], suffix: string) =>\n `${prefix}${suffix}`\nconst PUBLISHABLE_KEYS = APP_ENV_PREFIXES.map((prefix) =>\n envKey(prefix, 'SOFTWARE_PUBLISHABLE_KEY'),\n)\nconst SECRET_KEYS = APP_ENV_PREFIXES.map((prefix) =>\n envKey(prefix, 'SOFTWARE_SECRET_KEY'),\n)\n// Keep the runtime API target exactly aligned with the SDK resolver. Other\n// framework-public prefixes are still inspected for accidental secret exposure,\n// but they do not silently become an SDK target.\nconst SDK_API_URL_KEYS = [\n 'SOFTWARE_API_URL',\n 'NEXT_PUBLIC_SOFTWARE_API_URL',\n] as const\nexport class DoctorInputError extends Error {\n readonly field: 'envFile' | 'origin'\n\n constructor(field: 'envFile' | 'origin' = 'envFile') {\n const message =\n field === 'origin'\n ? '--origin must be an absolute http(s) URL.'\n : '--app-env-file must name a readable regular environment file.'\n super(message)\n Object.assign(this, {\n type: 'validation',\n code: 'invalid_argument',\n field,\n detail: {\n message,\n field,\n },\n })\n this.field = field\n }\n}\n\n/**\n * Keep Agent error messages stable and English while selecting deterministic,\n * field-specific Human remediation through the locale table.\n */\nexport function doctorInputMessageKey(\n error: unknown,\n): DoctorInputMessageKey | undefined {\n if (!(error instanceof DoctorInputError)) return undefined\n return error.field === 'origin'\n ? 'DoctorOriginInputInvalid'\n : 'DoctorEnvFileInvalid'\n}\n\nfunction statusFromChecks(checks: readonly DoctorCheck[]): DoctorStatus {\n if (checks.some((check) => check.status === 'blocked')) return 'blocked'\n if (checks.some((check) => check.status === 'attention')) return 'attention'\n return 'ready'\n}\n\n/** Existing Human CLI exit codes, with validation taking deterministic priority. */\nfunction compositeExitCode(checks: readonly DoctorCheck[]): number {\n const codes = checks\n .map((check) => check.exitCode)\n .filter((code): code is number => typeof code === 'number')\n for (const preferred of [3, 2, 6, 4, 5, 1]) {\n if (codes.includes(preferred)) return preferred\n }\n // Attention is an actionable diagnostic, not a failed command.\n return 0\n}\n\nfunction check(\n id: DoctorCheck['id'],\n status: DoctorStatus,\n action: DoctorActionKey,\n exitCode?: number,\n): DoctorCheck {\n return { id, status, action, ...(exitCode !== undefined && { exitCode }) }\n}\n\nfunction readPackage(cwd: string): Record<string, unknown> | null {\n const path = join(cwd, 'package.json')\n if (!existsSync(path)) return null\n try {\n const value: unknown = JSON.parse(readFileSync(path, 'utf8'))\n return value && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : null\n } catch {\n return null\n }\n}\n\nexport function nodeEngineCheck(\n engine: unknown,\n nodeVersion = process.versions.node,\n): DoctorCheck {\n if (engine === undefined)\n return check('node.engine', 'attention', 'DoctorNodeEngineNotDeclared')\n if (typeof engine !== 'string')\n return check('node.engine', 'attention', 'DoctorNodeEngineAttention')\n const range = validRange(engine)\n if (!range)\n return check('node.engine', 'attention', 'DoctorNodeEngineAttention')\n return satisfies(nodeVersion, range)\n ? check('node.engine', 'ready', 'DoctorNodeEngineReady')\n : check('node.engine', 'attention', 'DoctorNodeEngineAttention')\n}\n\nfunction parseEnv(content: string, file: string): EnvDeclaration[] {\n const declarations: EnvDeclaration[] = []\n for (const line of content.split(/\\r?\\n/)) {\n const match = line.match(\n /^\\s*(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*?)\\s*$/,\n )\n if (!match) continue\n let value = match[2] ?? ''\n if (\n value.length >= 2 &&\n ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\")))\n ) {\n value = value.slice(1, -1)\n } else {\n value = value.replace(/\\s+#.*$/, '')\n }\n declarations.push({ key: match[1]!, value: value.trim(), file })\n }\n return declarations\n}\n\nfunction readEnvFile(file: string): EnvDeclaration[] | null {\n try {\n if (!lstatSync(file).isFile()) return null\n return parseEnv(readFileSync(file, 'utf8'), file)\n } catch {\n return null\n }\n}\n\nfunction existsIncludingSymlink(file: string): boolean {\n try {\n lstatSync(file)\n return true\n } catch {\n return false\n }\n}\n\nfunction resolveEnv(declarations: readonly EnvDeclaration[]): DoctorEnv {\n const values = new Map<string, EnvDeclaration>()\n const ambiguousKeys = new Set<string>()\n const declaredInFile = new Set<string>()\n for (const declaration of declarations) {\n const identity = `${declaration.file}\\0${declaration.key}`\n if (declaredInFile.has(identity)) ambiguousKeys.add(declaration.key)\n declaredInFile.add(identity)\n // Files arrive in normal dotenv precedence order: later layers override.\n values.set(declaration.key, declaration)\n }\n return { values, ambiguousKeys, invalid: false }\n}\n\nfunction envFilesForPackage(\n pkg: Record<string, unknown> | null,\n): readonly string[] {\n const deps = {\n ...((pkg?.dependencies as Record<string, unknown> | undefined) ?? {}),\n ...((pkg?.devDependencies as Record<string, unknown> | undefined) ?? {}),\n }\n if ('next' in deps || 'react-scripts' in deps) {\n return ['.env', '.env.development', '.env.local', '.env.development.local']\n }\n if ('vite' in deps) {\n return ['.env', '.env.local', '.env.development', '.env.development.local']\n }\n // Generic/server apps have no framework-defined development layer. Reading\n // only the universal files avoids silently claiming Vite/Next precedence.\n return ['.env', '.env.local']\n}\n\nfunction readDoctorEnv(\n cwd: string,\n pkg: Record<string, unknown> | null,\n explicit?: string,\n): DoctorEnv | null {\n if (explicit !== undefined) {\n const file = resolve(cwd, explicit)\n const declarations = readEnvFile(file)\n if (!declarations) throw new DoctorInputError()\n return resolveEnv(declarations)\n }\n\n const declarations: EnvDeclaration[] = []\n let found = false\n for (const name of envFilesForPackage(pkg)) {\n const file = join(cwd, name)\n if (!existsIncludingSymlink(file)) continue\n found = true\n const parsed = readEnvFile(file)\n if (!parsed)\n return { values: new Map(), ambiguousKeys: new Set(), invalid: true }\n declarations.push(...parsed)\n }\n return found ? resolveEnv(declarations) : null\n}\n\nfunction normalizeOrigin(origin: string): string {\n try {\n const value = new URL(origin)\n if (\n (value.protocol !== 'http:' && value.protocol !== 'https:') ||\n value.username ||\n value.password ||\n value.origin === 'null'\n ) {\n throw new TypeError('invalid origin')\n }\n return value.origin\n } catch {\n throw new DoctorInputError('origin')\n }\n}\n\nfunction resolveDoctorApiUrl(env: DoctorEnv): string | null {\n const buildDefault =\n typeof __DEFAULT_API_URL__ === 'string'\n ? __DEFAULT_API_URL__\n : 'https://api.01.software'\n // Mirror SDK runtime precedence, but only from the inspected app files.\n // Ambient CLI process variables must never redirect the diagnostic target.\n const configured = SDK_API_URL_KEYS.map(\n (key) => env.values.get(key)?.value,\n ).find((value): value is string => Boolean(value))\n const value = configured ?? buildDefault\n try {\n return new URL(value).toString().replace(/\\/$/, '')\n } catch {\n return null\n }\n}\n\ntype AppCredentials =\n | { ok: true; publishableKey: string; secretKey: string; apiUrl: string }\n | { ok: false }\n\nfunction inspectAppCredentials(declarations: DoctorEnv | null): {\n credential: AppCredentials\n check: DoctorCheck\n} {\n if (!declarations || declarations.invalid) {\n return {\n credential: { ok: false },\n check: check(\n 'env.app-credentials',\n 'blocked',\n declarations?.invalid\n ? 'DoctorEnvFileInvalid'\n : 'DoctorEnvCredentialsBlocked',\n 3,\n ),\n }\n }\n\n const publicSecret = SECRET_KEYS.slice(1).some((key) =>\n declarations.values.has(key),\n )\n const publishable = PUBLISHABLE_KEYS.map((key) =>\n declarations.values.get(key),\n ).filter((value): value is EnvDeclaration => value !== undefined)\n const secret = declarations.values.get('SOFTWARE_SECRET_KEY')\n const ambiguous = [\n ...PUBLISHABLE_KEYS,\n ...SECRET_KEYS,\n ...SDK_API_URL_KEYS,\n ].some((key) => declarations.ambiguousKeys.has(key))\n const publishableKey = publishable[0]?.value ?? ''\n const secretKey = secret?.value ?? ''\n const apiUrl = resolveDoctorApiUrl(declarations)\n\n if (\n publicSecret ||\n ambiguous ||\n publishable.length !== 1 ||\n !secret ||\n !publishableKey ||\n !secretKey ||\n !publishableKey.startsWith('pk01_') ||\n !/^sk01_[a-f0-9]{40}$/.test(secretKey) ||\n !apiUrl\n ) {\n return {\n credential: { ok: false },\n check: check(\n 'env.app-credentials',\n 'blocked',\n 'DoctorEnvCredentialsBlocked',\n 3,\n ),\n }\n }\n\n return {\n credential: { ok: true, publishableKey, secretKey, apiUrl },\n check: check('env.app-credentials', 'ready', 'DoctorEnvCredentialsReady'),\n }\n}\n\nexport async function defaultOriginProbe(input: {\n origin: string\n apiUrl: string\n publishableKey: string\n}): Promise<'allowed' | 'denied' | 'indeterminate'> {\n try {\n const response = await fetch(new URL(TENANT_CONTEXT_PATH, input.apiUrl), {\n method: 'OPTIONS',\n signal: AbortSignal.timeout(10_000),\n credentials: 'omit',\n headers: {\n Origin: input.origin,\n 'X-Publishable-Key': input.publishableKey,\n 'Access-Control-Request-Method': 'GET',\n 'Access-Control-Request-Headers': 'x-publishable-key',\n },\n })\n // Never inspect a response body. Only a CORS success/denial shape is\n // conclusive; wrong targets and transient transport responses are not.\n if (response.status === 403) return 'denied'\n if (\n !response.ok ||\n response.status === 408 ||\n response.status === 429 ||\n response.status === 404 ||\n response.status >= 500\n ) {\n return 'indeterminate'\n }\n const allowedOrigin = response.headers.get('access-control-allow-origin')\n const allowsCredentials =\n response.headers\n .get('access-control-allow-credentials')\n ?.toLowerCase() === 'true'\n if (allowedOrigin === input.origin) return 'allowed'\n if (allowedOrigin === '*' && !allowsCredentials) return 'allowed'\n return 'denied'\n } catch {\n return 'indeterminate'\n }\n}\n\nexport async function runDoctor(\n options: DoctorOptions = {},\n): Promise<DoctorResult> {\n const cwd = options.cwd ?? process.cwd()\n const origin =\n options.origin === undefined ? undefined : normalizeOrigin(options.origin)\n const checks: DoctorCheck[] = []\n const pkg = readPackage(cwd)\n checks.push(\n pkg\n ? check('project.package-json', 'ready', 'DoctorProjectPackageJsonReady')\n : check(\n 'project.package-json',\n 'blocked',\n 'DoctorProjectPackageJsonBlocked',\n 3,\n ),\n )\n\n const engine = (pkg?.engines as Record<string, unknown> | undefined)?.node\n checks.push(nodeEngineCheck(engine))\n\n const deps = {\n ...((pkg?.dependencies as Record<string, unknown> | undefined) ?? {}),\n ...((pkg?.devDependencies as Record<string, unknown> | undefined) ?? {}),\n }\n checks.push(\n '@01.software/sdk' in deps\n ? check('sdk.declaration', 'ready', 'DoctorSdkDeclarationReady')\n : check('sdk.declaration', 'blocked', 'DoctorSdkDeclarationBlocked', 3),\n )\n let sdkInstalled = false\n try {\n createRequire(join(cwd, 'package.json')).resolve('@01.software/sdk/server')\n sdkInstalled = true\n } catch {\n // Installation is deliberately a non-mutating inspection.\n }\n checks.push(\n sdkInstalled\n ? check('sdk.installation', 'ready', 'DoctorSdkInstallationReady')\n : check(\n 'sdk.installation',\n 'attention',\n 'DoctorSdkInstallationAttention',\n ),\n )\n\n const inspected = inspectAppCredentials(\n readDoctorEnv(cwd, pkg, options.envFile),\n )\n checks.push(inspected.check)\n if (inspected.credential.ok) {\n const { publishableKey, secretKey, apiUrl } = inspected.credential\n try {\n if (options.tenantContext) {\n await options.tenantContext({ publishableKey, secretKey, apiUrl })\n } else {\n await new TenantIntrospectionApi({\n publishableKey,\n secretKey,\n apiUrl,\n }).context()\n }\n checks.push(check('tenant.context', 'ready', 'DoctorTenantContextReady'))\n } catch (error) {\n checks.push(\n check(\n 'tenant.context',\n 'blocked',\n 'DoctorTenantContextBlocked',\n getExitCode(error),\n ),\n )\n }\n\n if (origin) {\n const outcome = await (options.originProbe ?? defaultOriginProbe)({\n origin,\n apiUrl,\n publishableKey,\n })\n checks.push(\n outcome === 'allowed'\n ? check('origin.cors', 'ready', 'DoctorOriginCorsReady')\n : outcome === 'denied'\n ? check('origin.cors', 'blocked', 'DoctorOriginCorsBlocked', 2)\n : check('origin.cors', 'attention', 'DoctorOriginCorsAttention'),\n )\n }\n } else {\n checks.push(\n check('tenant.context', 'blocked', 'DoctorTenantContextBlocked', 3),\n )\n if (origin)\n checks.push(\n check('origin.cors', 'attention', 'DoctorOriginCorsAttention'),\n )\n }\n\n return {\n version: 1,\n status: statusFromChecks(checks),\n exitCode: compositeExitCode(checks),\n checks,\n }\n}\n\nfunction actionText(key: DoctorActionKey, locale: 'ko' | 'en'): string {\n const table = locale === 'ko' ? CLI_I18N_KO : CLI_I18N_EN\n return table[key]\n}\n\nexport function doctorHumanLines(\n result: DoctorResult,\n locale: 'ko' | 'en',\n): string[] {\n const copy =\n locale === 'ko'\n ? {\n status: '상태',\n ready: '준비됨',\n attention: '확인 필요',\n blocked: '차단됨',\n }\n : {\n status: 'Status',\n ready: 'ready',\n attention: 'attention',\n blocked: 'blocked',\n }\n return [\n `${copy.status}: ${copy[result.status]}`,\n ...result.checks.map(\n (item) =>\n `[${copy[item.status]}] ${item.id}: ${actionText(item.action, locale)}`,\n ),\n ]\n}\n","import { Command } from 'commander'\nimport { detectLocale } from '../lib/i18n.js'\nimport {\n doctorHumanLines,\n doctorInputMessageKey,\n runDoctor,\n} from '../lib/doctor.js'\nimport {\n getExitCode,\n printError,\n printJson,\n printResult,\n} from '../lib/output.js'\nimport {\n agentErrorExitCode,\n printAgentError,\n printAgentSuccess,\n resolveAgentPrintOptions,\n validateAgentOutputTarget,\n} from '../lib/agent-output.js'\nimport { configureAgentParser } from './agent.js'\n\ntype DoctorCliOptions = { appEnvFile?: string; origin?: string }\n\nfunction selectedHumanFormat(command: Command): string | undefined {\n const options = command.optsWithGlobals<{ format?: string }>()\n return options.format ?? process.env.OUTPUT_FORMAT\n}\n\nexport function registerDoctorCommands(program: Command, agent: Command): void {\n program\n .command('doctor')\n .description('Check local app integration without exposing credentials')\n .option('--app-env-file <path>', 'Read one explicit app environment file')\n .option('--origin <origin>', 'Optionally probe one browser origin for CORS')\n .action(async (options: DoctorCliOptions, command: Command) => {\n const format = selectedHumanFormat(command)\n try {\n const result = await runDoctor({\n envFile: options.appEnvFile,\n origin: options.origin,\n })\n if (format === 'json') {\n printJson(result)\n } else if (format === 'ndjson') {\n printResult(result, 'ndjson')\n } else {\n for (const line of doctorHumanLines(result, detectLocale()))\n console.log(line)\n }\n // Let Node drain stdout before it exits; only Human CLI observes this\n // diagnostic's compatibility exit code.\n process.exitCode = result.exitCode\n } catch (error) {\n printError(error, {\n format: format ?? 'table',\n headlineKey: doctorInputMessageKey(error),\n })\n process.exitCode = getExitCode(error)\n }\n })\n\n configureAgentParser(\n agent\n .command('doctor')\n .description('Check local app integration with stable JSON output')\n .option('--app-env-file <path>', 'Read one explicit app environment file')\n .option(\n '--origin <origin>',\n 'Optionally probe one browser origin for CORS',\n )\n .option('--pretty', 'Print 2-space indented success JSON')\n .option(\n '--output-file <path>',\n 'Write success JSON to a secure file and print a receipt',\n )\n .action(async (options: DoctorCliOptions, command: Command) => {\n const output = resolveAgentPrintOptions(command)\n try {\n validateAgentOutputTarget(output)\n const result = await runDoctor({\n envFile: options.appEnvFile,\n origin: options.origin,\n })\n printAgentSuccess(result, output)\n // A completed diagnostic is Agent success even when it reports an\n // actionable blocked/attention status. Its payload carries details.\n process.exitCode = 0\n } catch (error) {\n const envelope = printAgentError(error, output)\n process.exitCode = agentErrorExitCode(envelope.error.code)\n }\n }),\n )\n}\n"],"mappings":"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","names":["createRequire","path","path","console","operation","t","readFileSync","readFileSync","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","randomBytes","URL","pc","pc","t","resolve","URL","randomBytes","SERVER_COLLECTIONS","SERVER_COLLECTIONS","SERVER_COLLECTIONS","SERVER_COLLECTIONS","randomBytes","randomBytes","SERVER_COLLECTIONS","operation","operation","homedir","join","createHash","join","homedir","operation","operation","current","readFileSync","readFileSync","path","invalidInput","plan","invalidInput","handleCommanderError","configureAgentParser","SERVER_COLLECTIONS","operation","existsSync","lstatSync","readFileSync","join","resolve","TenantIntrospectionApi","check","path","join","existsSync","readFileSync","lstatSync","resolve","declarations","value","TenantIntrospectionApi","configureAgentParser","require","createRequire"]}
|