@bigcommerce/catalyst 1.0.0-alpha.2 → 1.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/cli.js +1661 -311
  2. package/dist/cli.js.map +1 -1
  3. package/package.json +11 -2
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/lib/logger.ts","../src/cli/lib/telemetry.ts","../package.json","../src/cli/lib/project-config.ts","../src/cli/program.ts","../src/cli/commands/auth.ts","../src/cli/lib/auth.ts","../src/cli/lib/project.ts","../src/cli/commands/build.ts","../src/cli/lib/get-module-cli-path.ts","../src/cli/lib/wrangler-config.ts","../src/cli/commands/deploy.ts","../src/cli/lib/deployment-errors.ts","../src/cli/lib/resolve-credentials.ts","../src/cli/commands/logs.ts","../src/cli/lib/shared-options.ts","../src/cli/commands/project.ts","../src/cli/commands/start.ts","../src/cli/commands/telemetry.ts","../src/cli/commands/version.ts","../src/cli/hooks/telemetry.ts","../src/cli/index.ts"],"sourcesContent":["import { createConsola } from 'consola';\n\nexport const consola = createConsola({\n level: process.env.CONSOLA_LEVEL ? parseInt(process.env.CONSOLA_LEVEL, 10) : 3,\n});\n","import { Analytics } from '@segment/analytics-node';\nimport Conf from 'conf';\nimport { randomBytes, randomUUID } from 'node:crypto';\n\nimport PACKAGE_INFO from '../../../package.json';\n\nimport { getProjectConfig, ProjectConfigSchema } from './project-config';\n\nconst TELEMETRY_KEY_ENABLED = 'telemetry.enabled';\nconst TELEMETRY_KEY_ID = `telemetry.anonymousId`;\n\nexport class Telemetry {\n readonly sessionId: string;\n readonly analytics: Analytics;\n readonly startTime: number;\n commandName = 'unknown';\n\n private projectConfig: Conf<ProjectConfigSchema>;\n private CATALYST_TELEMETRY_DISABLED: string | undefined;\n\n private readonly projectName = 'catalyst-cli';\n private readonly projectVersion = PACKAGE_INFO.version;\n\n constructor() {\n this.CATALYST_TELEMETRY_DISABLED = process.env.CATALYST_TELEMETRY_DISABLED;\n\n this.projectConfig = getProjectConfig();\n\n this.sessionId = randomUUID();\n this.startTime = Date.now();\n this.analytics = new Analytics({\n writeKey: process.env.CLI_SEGMENT_WRITE_KEY ?? 'not-a-valid-segment-write-key',\n });\n }\n\n durationMs(): number {\n return Date.now() - this.startTime;\n }\n\n async track(eventName: string, payload: Record<string, unknown>) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.track({\n event: eventName,\n anonymousId: this.getAnonymousId(),\n properties: {\n ...payload,\n sessionId: this.sessionId,\n nodeVersion: process.version,\n platform: process.platform,\n arch: process.arch,\n cliVersion: PACKAGE_INFO.version,\n },\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n async identify(storeHash?: string) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n if (!storeHash) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.identify({\n userId: storeHash,\n anonymousId: this.getAnonymousId(),\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n setEnabled = (_enabled: boolean) => {\n const enabled = Boolean(_enabled);\n\n this.projectConfig.set('telemetry.enabled', enabled);\n };\n\n isEnabled() {\n return (\n !this.CATALYST_TELEMETRY_DISABLED &&\n this.projectConfig.get<typeof TELEMETRY_KEY_ENABLED, boolean>(TELEMETRY_KEY_ENABLED, true)\n );\n }\n\n private getAnonymousId(): string {\n const val = this.projectConfig.get<typeof TELEMETRY_KEY_ID, string>(TELEMETRY_KEY_ID);\n\n if (val) {\n return val;\n }\n\n const generated = randomBytes(32).toString('hex');\n\n this.projectConfig.set(TELEMETRY_KEY_ID, generated);\n\n return generated;\n }\n}\n\nlet telemetryInstance: Telemetry | undefined;\n\n// Singleton so the pre-hook, post-hook, error handler, and command bodies all\n// share one sessionId for correlation. resetTelemetry() is for test isolation.\nexport function getTelemetry(): Telemetry {\n telemetryInstance ??= new Telemetry();\n\n return telemetryInstance;\n}\n\nexport function resetTelemetry(): void {\n telemetryInstance = undefined;\n}\n","{\n \"name\": \"@bigcommerce/catalyst\",\n \"version\": \"1.0.0-alpha.1\",\n \"type\": \"module\",\n \"bin\": {\n \"catalyst\": \"dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"templates\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \"^20.0.0 || ^22.0.0 || ^24.0.0\"\n },\n \"dependencies\": {\n \"@segment/analytics-node\": \"^2.2.1\",\n \"adm-zip\": \"^0.5.16\",\n \"commander\": \"^14.0.0\",\n \"conf\": \"^13.1.0\",\n \"consola\": \"^3.4.2\",\n \"dotenv\": \"^16.5.0\",\n \"execa\": \"^9.6.0\",\n \"open\": \"^10.1.0\",\n \"yocto-spinner\": \"^1.0.0\",\n \"zod\": \"^4.0.5\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.11.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@types/adm-zip\": \"^0.5.7\",\n \"@types/node\": \"^22.15.30\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^8.57.1\",\n \"msw\": \"^2.9.0\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@opennextjs/cloudflare\": \"1.17.3\"\n }\n}\n","import Conf from 'conf';\nimport { join } from 'path';\n\nexport interface ProjectConfigSchema {\n projectUuid: string;\n // Reserved for future use\n framework: 'catalyst';\n storeHash?: string;\n accessToken?: string;\n telemetry: {\n enabled: boolean;\n anonymousId: string;\n };\n}\n\nexport function getProjectConfig() {\n return new Conf<ProjectConfigSchema>({\n cwd: join(process.cwd(), '.bigcommerce'),\n projectSuffix: '',\n configName: 'project',\n schema: {\n projectUuid: { type: 'string', format: 'uuid' },\n framework: {\n type: 'string',\n enum: ['catalyst'],\n default: 'catalyst',\n },\n storeHash: { type: 'string' },\n accessToken: { type: 'string' },\n telemetry: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n anonymousId: { type: 'string' },\n },\n },\n },\n });\n}\n","import { Option } from '@commander-js/extra-typings';\nimport { Command } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { config } from 'dotenv';\nimport { resolve } from 'node:path';\n\nimport PACKAGE_INFO from '../../package.json';\n\nimport { auth } from './commands/auth';\nimport { build } from './commands/build';\nimport { deploy } from './commands/deploy';\nimport { logs } from './commands/logs';\nimport { project } from './commands/project';\nimport { start } from './commands/start';\nimport { telemetry } from './commands/telemetry';\nimport { version } from './commands/version';\nimport { telemetryPostHook, telemetryPreHook } from './hooks/telemetry';\nimport { consola } from './lib/logger';\n\nexport const program = new Command();\n\nconsola.log(colorize('cyanBright', `◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('CLI tool for Catalyst development')\n .addOption(\n new Option(\n '--env-path <path>',\n 'Path to environment file to load (relative to current working directory)',\n // We are using argParser, because commander loads in environment variables before executing hooks.\n ).argParser((value) => {\n if (value) {\n const envFilePath = resolve(process.cwd(), value);\n const result = config({\n path: envFilePath,\n override: true,\n });\n\n if (result.error) {\n const errCode =\n 'code' in result.error && typeof result.error.code === 'string'\n ? result.error.code\n : undefined;\n const message =\n errCode === 'ENOENT'\n ? `Env file not found: ${envFilePath}`\n : `Failed to load --env-path ${value}: ${result.error.message}`;\n\n throw new Error(message);\n }\n\n consola.log(colorize('cyanBright', `Loaded environment variables from ${envFilePath}\\n`));\n }\n\n return value;\n }),\n )\n .addCommand(version)\n .addCommand(start)\n .addCommand(build)\n .addCommand(deploy)\n .addCommand(logs)\n .addCommand(project)\n .addCommand(auth)\n .addCommand(telemetry)\n .hook('preAction', telemetryPreHook)\n .hook('postAction', telemetryPostHook);\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport open from 'open';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { DEFAULT_LOGIN_URL, requestDeviceCode, waitForDeviceToken } from '../lib/auth';\nimport { consola } from '../lib/logger';\nimport { fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\n\nconst StoreProfileSchema = z.object({\n data: z.object({\n store_name: z.string(),\n }),\n});\n\nasync function fetchStoreProfile(storeHash: string, accessToken: string, apiHost: string) {\n const response = await fetch(`https://${apiHost}/stores/${storeHash}/v3/settings/store/profile`, {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const result = StoreProfileSchema.safeParse(res);\n\n if (!result.success) {\n throw new Error('Unexpected response from store profile API');\n }\n\n return result.data.data;\n}\n\nconst whoami = new Command('whoami')\n .description('Verify stored credentials and display store/project info.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.info('Not logged in: no credentials found.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n return;\n }\n\n const store = await fetchStoreProfile(storeHash, accessToken, options.apiHost);\n\n const projectUuid = config.get('projectUuid');\n\n if (projectUuid) {\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n const linkedProject = projects.find((p) => p.uuid === projectUuid);\n\n if (linkedProject) {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), connected to project ${linkedProject.name} (${projectUuid})`,\n );\n } else {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), project ${projectUuid} not found`,\n );\n }\n } else {\n consola.info(`Logged in to ${store.store_name} (${storeHash})`);\n }\n\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (message.includes('401') || message.includes('403')) {\n consola.error(`Not logged in: invalid credentials (${message})`);\n } else {\n consola.error(`Failed to verify credentials: ${message}`);\n }\n\n process.exit(1);\n }\n });\n\nconst login = new Command('login')\n .description('Authenticate via browser using the OAuth device code flow.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--login-url <url>', 'BigCommerce login URL.')\n .env('BIGCOMMERCE_LOGIN_URL')\n .default(DEFAULT_LOGIN_URL),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (storeHash && accessToken) {\n consola.info(`Already logged in to store ${storeHash}.`);\n consola.info('Run `catalyst auth logout` first to re-authenticate.');\n process.exit(0);\n\n return;\n }\n\n const deviceCode = await requestDeviceCode(options.loginUrl);\n\n consola.info(\n `${colorize('yellow', 'Your one-time code:')} ${colorize('bold', deviceCode.user_code)}`,\n );\n\n try {\n await open(deviceCode.verification_uri);\n consola.info(`Opened ${deviceCode.verification_uri} in your browser.`);\n } catch {\n consola.info(\n `Open ${deviceCode.verification_uri} in your browser and enter the code above.`,\n );\n }\n\n const spinner = yoctoSpinner().start('Waiting for authentication...');\n\n const credentials = await waitForDeviceToken(\n options.loginUrl,\n deviceCode.device_code,\n deviceCode.interval,\n );\n\n spinner.success('Authentication complete.');\n\n config.set('storeHash', credentials.store_hash);\n config.set('accessToken', credentials.access_token);\n\n consola.success(`Logged in to store ${credentials.store_hash}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Login failed: ${message}`);\n process.exit(1);\n }\n });\n\nconst logout = new Command('logout')\n .description('Remove stored credentials for the current project.')\n .action(() => {\n try {\n const config = getProjectConfig();\n\n const storeHash = config.get('storeHash');\n const accessToken = config.get('accessToken');\n\n if (!storeHash && !accessToken) {\n consola.info('Not logged in: no credentials found.');\n process.exit(0);\n\n return;\n }\n\n config.delete('storeHash');\n config.delete('accessToken');\n\n consola.success(`Logged out from store ${storeHash ?? 'unknown'}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Logout failed: ${message}`);\n process.exit(1);\n }\n });\n\nexport const auth = new Command('auth')\n .description('Manage authentication for the BigCommerce CLI.')\n .addCommand(whoami)\n .addCommand(login)\n .addCommand(logout);\n","import { z } from 'zod';\n\nexport const DEVICE_OAUTH_CLIENT_ID = 's1q4io7mah2lm1i6uwp9yl1eit80n3b';\nexport const DEVICE_OAUTH_SCOPES = [\n 'store_v2_information',\n 'store_infrastructure_deployments_manage',\n 'store_infrastructure_logs_read_only',\n 'store_infrastructure_projects_manage',\n].join(' ');\nexport const DEFAULT_LOGIN_URL = 'https://login.bigcommerce.com';\n\nexport const DeviceCodeResponseSchema = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n});\n\nexport const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string(),\n});\n\nexport async function requestDeviceCode(loginUrl: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n client_id: DEVICE_OAUTH_CLIENT_ID,\n scopes: DEVICE_OAUTH_SCOPES,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to request device code: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeResponseSchema.parse(res);\n}\n\nexport async function pollDeviceToken(loginUrl: string, deviceCode: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n return null;\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeSuccessSchema.parse(res);\n}\n\nexport async function waitForDeviceToken(\n loginUrl: string,\n deviceCode: string,\n interval: number,\n): Promise<z.infer<typeof DeviceCodeSuccessSchema>> {\n const credentials = await pollDeviceToken(loginUrl, deviceCode);\n\n if (credentials) {\n return credentials;\n }\n\n await new Promise((resolve) => {\n setTimeout(resolve, interval * 1000);\n });\n\n return waitForDeviceToken(loginUrl, deviceCode, interval);\n}\n","import { z } from 'zod';\n\nimport { getTelemetry } from './telemetry';\n\nconst fetchProjectsSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.string(),\n name: z.string(),\n }),\n ),\n});\n\nexport interface ProjectListItem {\n uuid: string;\n name: string;\n}\n\nexport async function fetchProjects(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<ProjectListItem[]> {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n },\n );\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = fetchProjectsSchema.parse(res);\n\n return data;\n}\n\nconst createProjectSchema = z.object({\n data: z.object({\n uuid: z.string(),\n name: z.string(),\n date_created: z.coerce.date(),\n date_modified: z.coerce.date(),\n }),\n});\n\nexport interface CreateProjectResult {\n uuid: string;\n name: string;\n date_created: Date;\n date_modified: Date;\n}\n\nexport async function createProject(\n name: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<CreateProjectResult> {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n body: JSON.stringify({ name }),\n },\n );\n\n if (response.status === 502) {\n throw new Error('Failed to create project, is the name already in use?');\n }\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (response.status === 422) {\n throw new Error(\n \"The project name you entered doesn't meet the requirements. It must be 3–32 characters long and use only letters, numbers, hyphens (-), underscores (_), and periods (.)\",\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to create project: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = createProjectSchema.parse(res);\n\n return data;\n}\n","import { Command, Option } from 'commander';\nimport { execa } from 'execa';\nimport { copyFile, cp, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { getModuleCliPath } from '../lib/get-module-cli-path';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { getWranglerConfig } from '../lib/wrangler-config';\n\nconst WRANGLER_VERSION = '4.24.3';\n\nexport async function buildCatalystProject(projectUuid: string): Promise<void> {\n const coreDir = process.cwd();\n const openNextOutDir = join(coreDir, '.open-next');\n const bigcommerceDistDir = join(coreDir, '.bigcommerce', 'dist');\n\n const wranglerConfig = getWranglerConfig(projectUuid);\n\n consola.start('Copying templates...');\n\n await copyFile(\n join(getModuleCliPath(), 'templates', 'open-next.config.ts'),\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n );\n await writeFile(\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n JSON.stringify(wranglerConfig, null, 2),\n );\n\n consola.success('Templates copied');\n\n consola.start('Building project...');\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'build',\n '--skipWranglerConfigCheck',\n '--openNextConfigPath',\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n await execa(\n 'pnpm',\n [\n 'dlx',\n `wrangler@${WRANGLER_VERSION}`,\n 'deploy',\n '--config',\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n '--keep-vars',\n '--outdir',\n bigcommerceDistDir,\n '--dry-run',\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n consola.success('Project built');\n\n await cp(join(openNextOutDir, 'assets'), join(bigcommerceDistDir, 'assets'), {\n recursive: true,\n force: true,\n });\n}\n\nexport const build = new Command('build')\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'Project UUID to be included in the deployment configuration.',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run `catalyst project create` or `catalyst project link` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await buildCatalystProject(projectUuid);\n });\n","/* eslint-disable no-underscore-dangle */\n\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getModuleCliPath() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n return join(__dirname, '..');\n}\n","export function getWranglerConfig(projectUuid: string) {\n return {\n $schema: 'node_modules/wrangler/config-schema.json',\n main: '../.open-next/worker.js',\n name: `project-${projectUuid}`,\n compatibility_date: '2025-09-15',\n compatibility_flags: ['nodejs_compat', 'global_fetch_strictly_public'],\n observability: {\n enabled: true,\n head_sampling_rate: 0.05,\n logs: {\n enabled: true,\n head_sampling_rate: 1,\n invocation_logs: false,\n },\n },\n assets: {\n directory: '../.open-next/assets',\n binding: 'ASSETS',\n },\n services: [\n {\n binding: 'WORKER_SELF_REFERENCE',\n service: `project-${projectUuid}`,\n },\n ],\n r2_buckets: [\n {\n binding: 'NEXT_INC_CACHE_R2_BUCKET',\n bucket_name: `project-${projectUuid}`,\n },\n ],\n durable_objects: {\n bindings: [\n {\n name: 'NEXT_CACHE_DO_QUEUE',\n class_name: 'DOQueueHandler',\n },\n {\n name: 'NEXT_TAG_CACHE_DO_SHARDED',\n class_name: 'DOShardedTagCache',\n },\n {\n name: 'NEXT_CACHE_DO_PURGE',\n class_name: 'BucketCachePurge',\n },\n ],\n },\n migrations: [\n {\n tag: 'v1',\n new_sqlite_classes: ['DOQueueHandler', 'DOShardedTagCache', 'BucketCachePurge'],\n },\n ],\n };\n}\n","import AdmZip from 'adm-zip';\nimport { Command, Option } from 'commander';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { getDeploymentErrorMessage } from '../lib/deployment-errors';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport { getTelemetry } from '../lib/telemetry';\n\nimport { buildCatalystProject } from './build';\n\nconst stepsEnum = z.enum([\n 'initializing',\n 'downloading',\n 'unzipping',\n 'processing',\n 'deploying',\n 'finalizing',\n 'complete',\n]);\n\nconst STEPS: Record<z.infer<typeof stepsEnum>, string> = {\n initializing: 'Initializing...',\n downloading: 'Downloading...',\n unzipping: 'Unzipping...',\n processing: 'Processing...',\n deploying: 'Deploying...',\n finalizing: 'Finalizing...',\n complete: 'Complete',\n};\n\nconst UploadSignatureSchema = z.object({\n data: z.object({\n upload_url: z.url(),\n upload_uuid: z.string(),\n }),\n});\n\nconst CreateDeploymentSchema = z.object({\n data: z.object({\n deployment_uuid: z.uuid(),\n }),\n});\n\nconst ProjectSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.uuid(),\n name: z.string(),\n }),\n ),\n});\n\nconst DeploymentStatusSchema = z.object({\n deployment_uuid: z.uuid(),\n deployment_status: z.enum(['queued', 'in_progress', 'failed', 'completed']),\n event: z\n .object({\n step: stepsEnum,\n progress: z.number(),\n })\n .nullable(),\n deployment_url: z.string().nullable(),\n error: z\n .object({\n code: z.number(),\n })\n .optional(),\n});\n\nexport const generateBundleZip = async () => {\n consola.info('Generating bundle...');\n\n const bigcommerceDir = join(process.cwd(), '.bigcommerce');\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n // Check if .bigcommerce/dist exists\n try {\n await access(distDir);\n } catch {\n throw new Error(`Dist directory not found: ${distDir}`);\n }\n\n // Check if .bigcommerce/dist is not empty\n const buildDirContents = await readdir(distDir);\n\n if (buildDirContents.length === 0) {\n throw new Error(`Dist directory is empty: ${distDir}`);\n }\n\n const outputZip = join(bigcommerceDir, 'bundle.zip');\n\n // Use AdmZip to create the zip\n const zip = new AdmZip();\n\n zip.addLocalFolder(distDir, 'output');\n zip.writeZip(outputZip);\n\n consola.success(`Bundle created at: ${outputZip}`);\n};\n\nexport const generateUploadSignature = async (\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Generating upload signature...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/uploads`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n body: JSON.stringify({}),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch upload signature: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = UploadSignatureSchema.parse(res);\n\n consola.success('Upload signature generated.');\n\n return data;\n};\n\nexport const uploadBundleZip = async (uploadUrl: string) => {\n consola.info('Uploading bundle...');\n\n const zipPath = join(process.cwd(), '.bigcommerce', 'bundle.zip');\n\n // Read the zip file as a buffer\n const fileBuffer = await readFile(zipPath);\n\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/zip',\n },\n body: fileBuffer,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to upload bundle: ${response.status} ${response.statusText}`);\n }\n\n consola.success('Bundle uploaded successfully.');\n\n return true;\n};\n\nexport const parseEnvironmentVariables = (secretOption?: string[]) => {\n return secretOption?.map((envVar) => {\n const [key, value] = envVar.split('=');\n\n if (!key || !value) {\n throw new Error(`Invalid secret format: ${envVar}. Expected format: KEY=VALUE`);\n }\n\n return {\n type: 'secret' as const,\n key: key.trim(),\n value: value.trim(),\n };\n });\n};\n\nexport const createDeployment = async (\n projectUuid: string,\n uploadUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n environmentVariables?: Array<{ type: 'secret' | 'plain_text'; key: string; value: string }>,\n) => {\n consola.info('Creating deployment...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n body: JSON.stringify({\n project_uuid: projectUuid,\n upload_uuid: uploadUuid,\n environment_variables: environmentVariables,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to create deployment: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = CreateDeploymentSchema.parse(res);\n\n consola.success('Deployment started...');\n\n return data;\n};\n\nexport const getDeploymentStatus = async (\n deploymentUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Fetching deployment status...');\n\n const spinner = yoctoSpinner().start('Fetching...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/${deploymentUuid}/events`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to open event stream: ${response.status} ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new Error('Failed to read event stream.');\n }\n\n const decoder = new TextDecoder();\n let done = false;\n let deploymentUrl: string | undefined;\n\n while (!done) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n let json: unknown;\n\n if (value) {\n const chunk = decoder.decode(value, { stream: true }).trim();\n const split = chunk\n .split('\\n\\n')\n .map((s) => s.replace('data:', '').trim())\n .filter(Boolean);\n\n // eslint-disable-next-line no-loop-func\n split.forEach((event) => {\n try {\n json = JSON.parse(event);\n } catch (error) {\n consola.warn(`Failed to parse event, dropping from stream. Event: ${event}`, error);\n\n return;\n }\n\n const data = DeploymentStatusSchema.parse(json);\n\n if (data.error) {\n throw new Error(\n `Deployment failed (error code ${data.error.code}): ${getDeploymentErrorMessage(data.error.code)}`,\n );\n }\n\n if (data.event && STEPS[data.event.step] !== spinner.text) {\n spinner.text = STEPS[data.event.step];\n }\n\n if (data.deployment_url) {\n console.log(data.deployment_url);\n deploymentUrl = data.deployment_url;\n }\n });\n }\n\n done = streamDone;\n }\n\n spinner.success('Deployment completed successfully.\\n');\n\n if (deploymentUrl) {\n consola.success(`View your deployment at: ${deploymentUrl}`);\n }\n};\n\nexport const fetchProject = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = ProjectSchema.parse(res);\n\n return data.find((project) => project.uuid === projectUuid);\n};\n\nexport const deploy = new Command('deploy')\n .description('Deploy your application to Cloudflare.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel. Read from .bigcommerce/project.json when not provided.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account. Read from .bigcommerce/project.json when not provided.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce intrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects).',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .addOption(\n new Option(\n '--secret <value>',\n 'Secret to set for the deployment (repeatable). Format: --secret KEY=VALUE',\n ).argParser((value: string, previous: string[] = []) => {\n return previous.concat([value]);\n }),\n )\n .option('--dry-run', 'Run the command to generate the bundle without uploading or deploying.')\n .option(\n '--prebuilt',\n 'Skip the build step. Requires .bigcommerce/dist/ to already contain build output.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n const telemetry = getTelemetry();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await telemetry.identify(storeHash);\n\n if (options.prebuilt) {\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n try {\n await access(distDir);\n } catch {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n const contents = await readdir(distDir);\n\n if (contents.length === 0) {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n consola.info('Using existing build output (--prebuilt).');\n } else {\n await buildCatalystProject(projectUuid);\n }\n\n await generateBundleZip();\n\n if (options.dryRun) {\n consola.info('Dry run enabled — skipping upload and deployment steps.');\n consola.info('Next steps (skipped):');\n consola.info('- Generate upload signature');\n consola.info('- Upload bundle.zip');\n consola.info('- Create deployment');\n\n process.exit(0);\n }\n\n const uploadSignature = await generateUploadSignature(storeHash, accessToken, options.apiHost);\n\n await uploadBundleZip(uploadSignature.upload_url);\n\n const environmentVariables = parseEnvironmentVariables(options.secret);\n\n const { deployment_uuid: deploymentUuid } = await createDeployment(\n projectUuid,\n uploadSignature.upload_uuid,\n storeHash,\n accessToken,\n options.apiHost,\n environmentVariables,\n );\n\n await getDeploymentStatus(deploymentUuid, storeHash, accessToken, options.apiHost);\n });\n","const ERROR_MESSAGES: Record<number, string> = {\n 10: 'Something went wrong on our end. Please try again. If the issue persists, contact support.',\n 20: \"We couldn't retrieve your bundle. This is usually a temporary issue — please try deploying again. If the problem continues, contact support.\",\n 30: 'Your bundle could not be extracted. This may mean your build output is too large (max 64 MB compressed / 512 MB uncompressed) or the archive is corrupted. Try reducing your build size or rebuilding your project and deploying again.',\n 40: `There's a problem with your build output. This could be caused by:\n- A worker.js file larger than 40 MB\n- An individual asset file larger than 25 MB\n- More than 1,000 total files in the bundle`,\n 50: 'Deployment failed. This is usually a temporary issue — please try again. If the problem persists, contact support.',\n 60: \"Your code was deployed, but we couldn't determine your deployment URL. Please try deploying again. If the issue persists, contact support.\",\n};\n\nexport function getDeploymentErrorMessage(code: number): string {\n return (\n ERROR_MESSAGES[code] ??\n `Deployment failed with an unexpected error (code: ${code}). Please try again. If the issue persists, contact support.`\n );\n}\n","import Conf from 'conf';\n\nimport { consola } from './logger';\nimport { ProjectConfigSchema } from './project-config';\n\nexport function resolveCredentials(\n options: { storeHash?: string; accessToken?: string },\n config: Conf<ProjectConfigSchema>,\n): { storeHash: string; accessToken: string } {\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.error('Missing credentials.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n // Unreachable in production; prevents continuation when process.exit is mocked in tests.\n throw new Error('Missing credentials');\n }\n\n return { storeHash, accessToken };\n}\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { z } from 'zod';\n\nimport { consola } from '../lib/logger';\nimport {\n accessTokenOption,\n apiHostOption,\n projectUuidOption,\n resolveProjectUuid,\n storeHashOption,\n} from '../lib/shared-options';\nimport { Telemetry } from '../lib/telemetry';\n\ntype LogFormat = 'json' | 'pretty' | 'default' | 'short' | 'request';\n\nconst telemetry = new Telemetry();\n\nconst DEFAULT_CONNECTION_TTL_MS = 1 * 60 * 1000; // 1 minute\nconst MAX_RETRIES = 5;\n\nconst isFatalStatusCode = (status: number) => status >= 400 && status < 500;\n\nconst LEVEL_COLORS: Record<string, Parameters<typeof colorize>[0]> = {\n INFO: 'green',\n WARN: 'yellow',\n ERROR: 'red',\n DEBUG: 'gray',\n};\n\nconst LogEventSchema = z\n .object({\n uuid: z.string(),\n project_uuid: z.string(),\n request: z.object({\n method: z.string(),\n url: z.string(),\n status_code: z.number(),\n }),\n logs: z.array(\n z.object({\n timestamp: z.string(),\n level: z.string(),\n messages: z.array(z.unknown()),\n }),\n ),\n exceptions: z.array(z.unknown()),\n timestamp: z.string(),\n })\n .loose();\n\nclass StreamError extends Error {\n fatal: boolean;\n\n constructor(message: string, fatal: boolean) {\n super(message);\n this.fatal = fatal;\n }\n}\n\nconst formatMessages = (messages: unknown[]) =>\n messages.map((m) => (typeof m === 'string' ? m : JSON.stringify(m))).join(' ');\n\nconst formatLogEvent = (\n event: z.infer<typeof LogEventSchema>,\n format: 'default' | 'short' | 'request',\n) => {\n const { request, logs: logEntries, exceptions } = event;\n\n logEntries.forEach((entry) => {\n const msg = formatMessages(entry.messages);\n const level = entry.level.toUpperCase();\n const coloredLevel = colorize(LEVEL_COLORS[level] ?? 'white', level);\n\n switch (format) {\n case 'short':\n consola.log(msg);\n break;\n\n case 'request':\n consola.log(\n `[${entry.timestamp}] [${coloredLevel}] ${request.method} ${request.url}` +\n ` (${request.status_code}) ${msg}`,\n );\n break;\n\n default:\n consola.log(`[${entry.timestamp}] [${coloredLevel}] ${msg}`);\n break;\n }\n });\n\n exceptions.forEach((exception) => {\n consola.error(`[${event.timestamp}] EXCEPTION`, exception);\n });\n};\n\nexport const parseSSEEvent = (raw: string): string | null => {\n const joined = raw\n .split('\\n')\n .flatMap((line) => (line.startsWith('data:') ? [line.slice(5).trim()] : []))\n .join('\\n');\n\n return joined.length > 0 ? joined : null;\n};\n\nconst processLogEvent = (event: string, format: LogFormat) => {\n if (format === 'json') {\n process.stdout.write(`${event}\\n`);\n\n return;\n }\n\n try {\n const parsed: unknown = JSON.parse(event);\n const logEvent = LogEventSchema.parse(parsed);\n\n if (format === 'pretty') {\n consola.log(JSON.stringify(logEvent, null, 2));\n } else {\n formatLogEvent(logEvent, format);\n }\n } catch {\n consola.warn(`Failed to parse log event: ${event}`);\n }\n};\n\nconst openLogStream = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/logs/${projectUuid}/tail`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n },\n },\n );\n\n if (!response.ok) {\n throw new StreamError(\n `Failed to open log stream: ${response.status} ${response.statusText}`,\n isFatalStatusCode(response.status),\n );\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new StreamError('Failed to read log stream.', true);\n }\n\n return reader;\n};\n\nexport const tailLogs = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n format: LogFormat,\n connectionTtlMs = DEFAULT_CONNECTION_TTL_MS,\n) => {\n consola.info('Tailing logs...');\n\n let retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const reader = await openLogStream(projectUuid, storeHash, accessToken, apiHost);\n const decoder = new TextDecoder();\n const connectTime = Date.now();\n let buffer = '';\n\n retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n\n if (value) {\n buffer += decoder.decode(value, { stream: true });\n\n const parts = buffer.split('\\n\\n');\n\n // Last element is either empty (complete event) or a partial chunk to carry over\n buffer = parts.pop() ?? '';\n\n parts\n .map((raw) => parseSSEEvent(raw))\n .filter((event): event is string => event !== null)\n .forEach((event) => processLogEvent(event, format));\n }\n\n if (streamDone || Date.now() - connectTime >= connectionTtlMs) {\n void reader.cancel();\n break;\n }\n }\n } catch (error) {\n if (error instanceof StreamError && error.fatal) {\n throw error;\n }\n\n const isServerDisconnect = error instanceof TypeError && error.message === 'terminated';\n\n if (isServerDisconnect) {\n consola.warn('Log stream closed by server, reconnecting...');\n } else {\n retries += 1;\n\n if (retries >= MAX_RETRIES) {\n throw new Error(`Failed to connect to log stream after ${MAX_RETRIES} retries.`);\n }\n\n consola.warn(\n `Log stream disconnected, reconnecting (attempt ${retries}/${MAX_RETRIES})...`,\n error,\n );\n }\n }\n }\n};\n\nconst tail = new Command('tail')\n .description('Tail live logs from your deployed application.')\n .addOption(storeHashOption().makeOptionMandatory())\n .addOption(accessTokenOption().makeOptionMandatory())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .addOption(\n new Option('--format <format>', 'Output format for log events.')\n .choices(['json', 'pretty', 'default', 'short', 'request'])\n .default('default'),\n )\n .action(async (options) => {\n try {\n await telemetry.identify(options.storeHash);\n\n const projectUuid = resolveProjectUuid(options);\n\n await tailLogs(\n projectUuid,\n options.storeHash,\n options.accessToken,\n options.apiHost,\n options.format,\n );\n } catch (error) {\n consola.error(error);\n process.exit(1);\n }\n });\n\nconst query = new Command('query')\n .description('Query historical logs from your deployed application.')\n .addOption(storeHashOption().makeOptionMandatory())\n .addOption(accessTokenOption().makeOptionMandatory())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .action((_options) => {\n consola.error('The query command is not yet implemented.');\n process.exit(1);\n });\n\nexport const logs = new Command('logs')\n .description('View logs from your deployed application.')\n .addCommand(tail, { isDefault: true })\n .addCommand(query);\n","import { Option } from 'commander';\n\nimport { getProjectConfig } from './project-config';\n\nexport const storeHashOption = () =>\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('BIGCOMMERCE_STORE_HASH');\n\nexport const accessTokenOption = () =>\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('BIGCOMMERCE_ACCESS_TOKEN');\n\nexport const apiHostOption = () =>\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com');\n\nexport const projectUuidOption = () =>\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects).',\n ).env('BIGCOMMERCE_PROJECT_UUID');\n\nexport const resolveProjectUuid = (options: { projectUuid?: string }) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n return projectUuid;\n};\n","import { Command, Option } from 'commander';\n\nimport { consola } from '../lib/logger';\nimport { createProject, fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst list = new Command('list')\n .description('List BigCommerce infrastructure projects for your store.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n if (projects.length === 0) {\n consola.info('No projects found.');\n process.exit(0);\n\n return;\n }\n\n projects.forEach((p) => {\n consola.log(`${p.name} (${p.uuid})`);\n });\n\n process.exit(0);\n });\n\nconst create = new Command('create')\n .description(\n 'Create a new BigCommerce infrastructure project and link it to your local Catalyst project.',\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', data.uuid);\n config.set('storeHash', storeHash);\n config.set('accessToken', accessToken);\n consola.success('Project UUID written to .bigcommerce/project.json.');\n\n process.exit(0);\n });\n\nexport const link = new Command('link')\n .description(\n 'Link your local Catalyst project to a BigCommerce infrastructure project. You can provide a project UUID directly, or fetch and select from available projects using your store credentials.',\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects). Use this to link directly without fetching projects.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n\n const writeProjectConfig = (\n uuid: string,\n credentials?: { storeHash: string; accessToken: string },\n ) => {\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', uuid);\n\n if (credentials) {\n config.set('storeHash', credentials.storeHash);\n config.set('accessToken', credentials.accessToken);\n }\n\n consola.success('Project UUID written to .bigcommerce/project.json.');\n };\n\n if (options.projectUuid) {\n writeProjectConfig(options.projectUuid);\n\n process.exit(0);\n\n return;\n }\n\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n const promptOptions = [\n ...projects.map((proj) => ({\n label: proj.name,\n value: proj.uuid,\n hint: proj.uuid,\n })),\n {\n label: 'Create a new project',\n value: 'create',\n hint: 'Create a new infrastructure project for this BigCommerce store.',\n },\n ];\n\n let projectUuid = await consola.prompt(\n 'Select a project or create a new project (Press <enter> to select).',\n {\n type: 'select',\n options: promptOptions,\n cancel: 'reject',\n },\n );\n\n if (projectUuid === 'create') {\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n projectUuid = data.uuid;\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n }\n\n writeProjectConfig(projectUuid, { storeHash, accessToken });\n\n process.exit(0);\n });\n\nexport const project = new Command('project')\n .description('Manage your BigCommerce infrastructure project.')\n .addCommand(create)\n .addCommand(list)\n .addCommand(link);\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { existsSync, lstatSync, symlinkSync } from 'node:fs';\nimport { join, relative } from 'node:path';\n\nimport { consola } from '../lib/logger';\n\nexport const start = new Command('start')\n .description(\n 'Start a local preview of your Catalyst storefront using the OpenNext Cloudflare adapter.',\n )\n .action(async () => {\n const envLocal = join(process.cwd(), '.env.local');\n const devVars = join(process.cwd(), '.bigcommerce', '.dev.vars');\n\n if (existsSync(envLocal)) {\n if (!existsSync(devVars)) {\n const target = relative(join(process.cwd(), '.bigcommerce'), envLocal);\n\n symlinkSync(target, devVars);\n consola.success('Symlinked .bigcommerce/.dev.vars → .env.local');\n } else if (!lstatSync(devVars).isSymbolicLink()) {\n consola.warn(\n '.bigcommerce/.dev.vars already exists and is not a symlink. ' +\n 'Wrangler will use it instead of .env.local.',\n );\n }\n } else {\n consola.warn(\n 'No .env.local file found. The preview server may fail without environment variables.\\n' +\n 'Create a .env.local file in your project root with the required variables.',\n );\n }\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'preview',\n '--config',\n join('.bigcommerce', 'wrangler.jsonc'),\n ],\n {\n stdio: 'inherit',\n cwd: process.cwd(),\n },\n );\n });\n","import { Argument, Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\n\nimport { consola } from '../lib/logger';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst telemetryService = getTelemetry();\nlet isEnabled = telemetryService.isEnabled();\n\nexport const telemetry = new Command('telemetry')\n .addArgument(new Argument('[arg]').choices(['disable', 'enable', 'status']))\n .addOption(new Option('--enable', `Enables CLI telemetry collection.`).conflicts('disable'))\n .option('--disable', `Disables CLI telemetry collection.`)\n .action((arg, options) => {\n if (options.enable || arg === 'enable') {\n telemetryService.setEnabled(true);\n isEnabled = true;\n\n consola.success('Success!\\n');\n } else if (options.disable || arg === 'disable') {\n telemetryService.setEnabled(false);\n\n if (isEnabled) {\n consola.success('Your preference has been saved to .bigcommerce/project.json');\n } else {\n consola.info(`Catalyst CLI telemetry collection is already disabled.`);\n }\n\n isEnabled = false;\n } else {\n consola.info('Catalyst CLI Telemetry\\n');\n }\n\n consola.info(\n `Status: ${colorize('bold', isEnabled ? colorize('green', 'Enabled') : colorize('red', 'Disabled'))}`,\n );\n\n if (!isEnabled) {\n consola.info(\n `You have opted-out of Catalyst CLI telemetry. No data will be collected from your machine.`,\n );\n }\n });\n","import { Command } from 'commander';\n\nimport PACKAGE_INFO from '../../../package.json';\nimport { consola } from '../lib/logger';\n\nexport const version = new Command('version')\n .description('Display detailed version information.')\n .action(() => {\n consola.log('Version Information:');\n consola.log(`CLI Version: ${PACKAGE_INFO.version}`);\n consola.log(`Node Version: ${process.version}`);\n consola.log(`Platform: ${process.platform} (${process.arch})`);\n });\n","import { Command, type CommandUnknownOpts } from '@commander-js/extra-typings';\n\nimport { getTelemetry } from '../lib/telemetry';\n\nconst allowlistArguments = ['--keep-temp-dir', '--api-host', '--project-uuid'];\n\nfunction parseArguments(args: string[]) {\n return args.reduce<Record<string, string>>((result, arg, index, array) => {\n if (arg.includes('=')) {\n const [key, value] = arg.split('=');\n\n if (allowlistArguments.includes(key)) {\n return {\n ...result,\n [key]: value,\n };\n }\n }\n\n if (allowlistArguments.includes(arg)) {\n const nextValue =\n array[index + 1] && !array[index + 1].startsWith('--') ? array[index + 1] : null;\n\n if (nextValue && !nextValue.includes('--')) {\n return {\n ...result,\n [arg]: nextValue,\n };\n }\n }\n\n return result;\n }, {});\n}\n\nfunction getCommandPath(cmd: CommandUnknownOpts): string {\n const parts: string[] = [];\n let current: CommandUnknownOpts | null = cmd;\n\n while (current.parent) {\n parts.unshift(current.name());\n current = current.parent;\n }\n\n return parts.join(' ');\n}\n\nexport const telemetryPreHook = async (thisCommand: Command, actionCommand: CommandUnknownOpts) => {\n const telemetry = getTelemetry();\n const commandName = getCommandPath(actionCommand);\n\n telemetry.commandName = commandName;\n\n // Return the await to get a proper stack trace.\n // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression\n return await telemetry.track(commandName, {\n ...parseArguments(thisCommand.args),\n });\n};\n\nexport const telemetryPostHook = async () => {\n const telemetry = getTelemetry();\n\n await telemetry.track('command_completed', { durationMs: telemetry.durationMs() });\n await telemetry.analytics.closeAndFlush();\n};\n","#!/usr/bin/env node\nimport { consola } from './lib/logger';\nimport { getTelemetry } from './lib/telemetry';\nimport { program } from './program';\n\nconst handleFatalError = async (error: unknown) => {\n const telemetry = getTelemetry();\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorStack = error instanceof Error ? error.stack : undefined;\n\n try {\n await telemetry.track('error', {\n commandName: telemetry.commandName,\n errorMessage,\n errorStack,\n durationMs: telemetry.durationMs(),\n });\n await telemetry.analytics.closeAndFlush();\n } catch {\n // Don't mask the original error\n }\n\n consola.error(errorMessage);\n\n if (telemetry.isEnabled()) {\n consola.info(\n `\\nTrace ID: ${telemetry.sessionId}\\nShare this Trace ID with BigCommerce support.`,\n );\n } else {\n consola.info(\n '\\nEnable telemetry (`catalyst telemetry enable`) for improved troubleshooting with BigCommerce support.',\n );\n }\n\n process.exit(1);\n};\n\nprocess.on('uncaughtException', (error) => {\n void handleFatalError(error);\n});\n\nprocess.on('unhandledRejection', (reason) => {\n void handleFatalError(reason);\n});\n\nvoid (async () => {\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n await handleFatalError(error);\n }\n})();\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAEvB,IAAM,UAAU,cAAc;AAAA,EACnC,OAAO,MAA4B,SAAS,KAA2B,EAAE,IAAI;AAC/E,CAAC;;;ACJD,SAAS,iBAAiB;AAE1B,SAAS,aAAa,kBAAkB;;;ACFxC;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,KAAO;AAAA,IACL,UAAY;AAAA,EACd;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,KAAO;AAAA,IACP,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,OAAS;AAAA,EACX;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,cAAgB;AAAA,IACd,2BAA2B;AAAA,IAC3B,WAAW;AAAA,IACX,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,QAAU;AAAA,IACV,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,KAAO;AAAA,EACT;AAAA,EACA,iBAAmB;AAAA,IACjB,8BAA8B;AAAA,IAC9B,uCAAuC;AAAA,IACvC,+BAA+B;AAAA,IAC/B,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,QAAU;AAAA,IACV,KAAO;AAAA,IACP,UAAY;AAAA,IACZ,MAAQ;AAAA,IACR,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,kBAAoB;AAAA,IAClB,0BAA0B;AAAA,EAC5B;AACF;;;ACrDA,OAAO,UAAU;AACjB,SAAS,YAAY;AAcd,SAAS,mBAAmB;AACjC,SAAO,IAAI,KAA0B;AAAA,IACnC,KAAK,KAAK,QAAQ,IAAI,GAAG,cAAc;AAAA,IACvC,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN,aAAa,EAAE,MAAM,UAAU,QAAQ,OAAO;AAAA,MAC9C,WAAW;AAAA,QACT,MAAM;AAAA,QACN,MAAM,CAAC,UAAU;AAAA,QACjB,SAAS;AAAA,MACX;AAAA,MACA,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,aAAa,EAAE,MAAM,SAAS;AAAA,MAC9B,WAAW;AAAA,QACT,MAAM;AAAA,QACN,YAAY;AAAA,UACV,SAAS,EAAE,MAAM,UAAU;AAAA,UAC3B,aAAa,EAAE,MAAM,SAAS;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AF9BA,IAAM,wBAAwB;AAC9B,IAAM,mBAAmB;AAElB,IAAM,YAAN,MAAgB;AAAA,EAYrB,cAAc;AARd,uBAAc;AAKd,SAAiB,cAAc;AAC/B,SAAiB,iBAAiB,gBAAa;AAgE/C,sBAAa,CAAC,aAAsB;AAClC,YAAM,UAAU,QAAQ,QAAQ;AAEhC,WAAK,cAAc,IAAI,qBAAqB,OAAO;AAAA,IACrD;AAjEE,SAAK,8BAA8B,QAAQ,IAAI;AAE/C,SAAK,gBAAgB,iBAAiB;AAEtC,SAAK,YAAY,WAAW;AAC5B,SAAK,YAAY,KAAK,IAAI;AAC1B,SAAK,YAAY,IAAI,UAAU;AAAA,MAC7B,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,aAAqB;AACnB,WAAO,KAAK,IAAI,IAAI,KAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,MAAM,WAAmB,SAAkC;AAC/D,QAAI,CAAC,KAAK,UAAU,GAAG;AACrB,aAAO,QAAQ,QAAQ,MAAS;AAAA,IAClC;AAEA,SAAK,UAAU,MAAM;AAAA,MACnB,OAAO;AAAA,MACP,aAAa,KAAK,eAAe;AAAA,MACjC,YAAY;AAAA,QACV,GAAG;AAAA,QACH,WAAW,KAAK;AAAA,QAChB,aAAa,QAAQ;AAAA,QACrB,UAAU,QAAQ;AAAA,QAClB,MAAM,QAAQ;AAAA,QACd,YAAY,gBAAa;AAAA,MAC3B;AAAA,MACA,SAAS;AAAA,QACP,KAAK;AAAA,UACH,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,WAAoB;AACjC,QAAI,CAAC,KAAK,UAAU,GAAG;AACrB,aAAO,QAAQ,QAAQ,MAAS;AAAA,IAClC;AAEA,QAAI,CAAC,WAAW;AACd,aAAO,QAAQ,QAAQ,MAAS;AAAA,IAClC;AAEA,SAAK,UAAU,SAAS;AAAA,MACtB,QAAQ;AAAA,MACR,aAAa,KAAK,eAAe;AAAA,MACjC,SAAS;AAAA,QACP,KAAK;AAAA,UACH,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAQA,YAAY;AACV,WACE,CAAC,KAAK,+BACN,KAAK,cAAc,IAA2C,uBAAuB,IAAI;AAAA,EAE7F;AAAA,EAEQ,iBAAyB;AAC/B,UAAM,MAAM,KAAK,cAAc,IAAqC,gBAAgB;AAEpF,QAAI,KAAK;AACP,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,YAAY,EAAE,EAAE,SAAS,KAAK;AAEhD,SAAK,cAAc,IAAI,kBAAkB,SAAS;AAElD,WAAO;AAAA,EACT;AACF;AAEA,IAAI;AAIG,SAAS,eAA0B;AACxC,4CAAsB,IAAI,UAAU;AAEpC,SAAO;AACT;;;AGzHA,SAAS,UAAAA,eAAc;AACvB,SAAS,WAAAC,gBAAe;AACxB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,eAAe;;;ACJxB,SAAS,SAAS,cAAc;AAChC,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,OAAO,kBAAkB;AACzB,SAAS,KAAAC,UAAS;;;ACJlB,SAAS,SAAS;AAEX,IAAM,yBAAyB;AAC/B,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AACH,IAAM,oBAAoB;AAE1B,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,aAAa,EAAE,OAAO;AAAA,EACtB,WAAW,EAAE,OAAO;AAAA,EACpB,kBAAkB,EAAE,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,EACrB,UAAU,EAAE,OAAO;AACrB,CAAC;AAEM,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,cAAc,EAAE,OAAO;AAAA,EACvB,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO;AAAA,EAClB,SAAS,EAAE,OAAO;AACpB,CAAC;AAED,eAAsB,kBAAkB,UAAkB;AACxD,QAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,iBAAiB;AAAA,IACvD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU;AAAA,MACnB,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,kCAAkC,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,EAC5F;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AAEzC,SAAO,yBAAyB,MAAM,GAAG;AAC3C;AAEA,eAAsB,gBAAgB,UAAkB,YAAoB;AAC1E,QAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,iBAAiB;AAAA,IACvD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU;AAAA,MACnB,aAAa;AAAA,MACb,WAAW;AAAA,IACb,CAAC;AAAA,EACH,CAAC;AAED,MAAI,SAAS,WAAW,KAAK;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AAEzC,SAAO,wBAAwB,MAAM,GAAG;AAC1C;AAEA,eAAsB,mBACpB,UACA,YACA,UACkD;AAClD,QAAM,cAAc,MAAM,gBAAgB,UAAU,UAAU;AAE9D,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,QAAQ,CAACC,aAAY;AAC7B,eAAWA,UAAS,WAAW,GAAI;AAAA,EACrC,CAAC;AAED,SAAO,mBAAmB,UAAU,YAAY,QAAQ;AAC1D;;;AChFA,SAAS,KAAAC,UAAS;AAIlB,IAAM,sBAAsBC,GAAE,OAAO;AAAA,EACnC,MAAMA,GAAE;AAAA,IACNA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,OAAO;AAAA,MACf,MAAMA,GAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH;AACF,CAAC;AAOD,eAAsB,cACpB,WACA,aACA,SAC4B;AAC5B,QAAM,WAAW,MAAM;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS;AAAA,IACtC;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,oBAAoB,aAAa,EAAE;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,KAAK;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,6BAA6B,SAAS,UAAU,EAAE;AAAA,EACpE;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AAEzC,QAAM,EAAE,KAAK,IAAI,oBAAoB,MAAM,GAAG;AAE9C,SAAO;AACT;AAEA,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACnC,MAAMA,GAAE,OAAO;AAAA,IACb,MAAMA,GAAE,OAAO;AAAA,IACf,MAAMA,GAAE,OAAO;AAAA,IACf,cAAcA,GAAE,OAAO,KAAK;AAAA,IAC5B,eAAeA,GAAE,OAAO,KAAK;AAAA,EAC/B,CAAC;AACH,CAAC;AASD,eAAsB,cACpB,MACA,WACA,aACA,SAC8B;AAC9B,QAAM,WAAW,MAAM;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS;AAAA,IACtC;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,oBAAoB,aAAa,EAAE;AAAA,MACrC;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,KAAK,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,KAAK;AAC3B,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,MAAI,SAAS,WAAW,KAAK;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,KAAK;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,6BAA6B,SAAS,UAAU,EAAE;AAAA,EACpE;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AAEzC,QAAM,EAAE,KAAK,IAAI,oBAAoB,MAAM,GAAG;AAE9C,SAAO;AACT;;;AFrGA,IAAM,qBAAqBC,GAAE,OAAO;AAAA,EAClC,MAAMA,GAAE,OAAO;AAAA,IACb,YAAYA,GAAE,OAAO;AAAA,EACvB,CAAC;AACH,CAAC;AAED,eAAe,kBAAkB,WAAmB,aAAqB,SAAiB;AACxF,QAAM,WAAW,MAAM,MAAM,WAAW,OAAO,WAAW,SAAS,8BAA8B;AAAA,IAC/F,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,GAAG,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,EAC7D;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AACzC,QAAM,SAAS,mBAAmB,UAAU,GAAG;AAE/C,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAEA,SAAO,OAAO,KAAK;AACrB;AAEA,IAAM,SAAS,IAAI,QAAQ,QAAQ,EAChC,YAAY,2DAA2D,EACvE;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,qBAAqB;AAC7B,EACC;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAI,OAAO,qBAAqB,2DAA2D,EACxF,IAAI,sBAAsB,EAC1B,QAAQ,qBAAqB;AAClC,EACC,OAAO,OAAO,YAAY;AACzB,MAAI;AACF,UAAMC,UAAS,iBAAiB;AAEhC,UAAM,YAAY,QAAQ,aAAaA,QAAO,IAAI,WAAW;AAC7D,UAAM,cAAc,QAAQ,eAAeA,QAAO,IAAI,aAAa;AAEnE,QAAI,CAAC,aAAa,CAAC,aAAa;AAC9B,cAAQ,KAAK,sCAAsC;AACnD,cAAQ;AAAA,QACN;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAEd;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,kBAAkB,WAAW,aAAa,QAAQ,OAAO;AAE7E,UAAM,cAAcA,QAAO,IAAI,aAAa;AAE5C,QAAI,aAAa;AACf,YAAM,WAAW,MAAM,cAAc,WAAW,aAAa,QAAQ,OAAO;AAC5E,YAAM,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAEjE,UAAI,eAAe;AACjB,gBAAQ;AAAA,UACN,gBAAgB,MAAM,UAAU,KAAK,SAAS,2BAA2B,cAAc,IAAI,KAAK,WAAW;AAAA,QAC7G;AAAA,MACF,OAAO;AACL,gBAAQ;AAAA,UACN,gBAAgB,MAAM,UAAU,KAAK,SAAS,cAAc,WAAW;AAAA,QACzE;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,KAAK,gBAAgB,MAAM,UAAU,KAAK,SAAS,GAAG;AAAA,IAChE;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAErE,QAAI,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,KAAK,GAAG;AACtD,cAAQ,MAAM,uCAAuC,OAAO,GAAG;AAAA,IACjE,OAAO;AACL,cAAQ,MAAM,iCAAiC,OAAO,EAAE;AAAA,IAC1D;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,IAAM,QAAQ,IAAI,QAAQ,OAAO,EAC9B,YAAY,4DAA4D,EACxE;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,qBAAqB;AAC7B,EACC;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAI,OAAO,qBAAqB,wBAAwB,EACrD,IAAI,uBAAuB,EAC3B,QAAQ,iBAAiB;AAC9B,EACC,OAAO,OAAO,YAAY;AACzB,MAAI;AACF,UAAMA,UAAS,iBAAiB;AAEhC,UAAM,YAAY,QAAQ,aAAaA,QAAO,IAAI,WAAW;AAC7D,UAAM,cAAc,QAAQ,eAAeA,QAAO,IAAI,aAAa;AAEnE,QAAI,aAAa,aAAa;AAC5B,cAAQ,KAAK,8BAA8B,SAAS,GAAG;AACvD,cAAQ,KAAK,sDAAsD;AACnE,cAAQ,KAAK,CAAC;AAEd;AAAA,IACF;AAEA,UAAM,aAAa,MAAM,kBAAkB,QAAQ,QAAQ;AAE3D,YAAQ;AAAA,MACN,GAAG,SAAS,UAAU,qBAAqB,CAAC,IAAI,SAAS,QAAQ,WAAW,SAAS,CAAC;AAAA,IACxF;AAEA,QAAI;AACF,YAAM,KAAK,WAAW,gBAAgB;AACtC,cAAQ,KAAK,UAAU,WAAW,gBAAgB,mBAAmB;AAAA,IACvE,QAAQ;AACN,cAAQ;AAAA,QACN,QAAQ,WAAW,gBAAgB;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,UAAU,aAAa,EAAE,MAAM,+BAA+B;AAEpE,UAAM,cAAc,MAAM;AAAA,MACxB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAEA,YAAQ,QAAQ,0BAA0B;AAE1C,IAAAA,QAAO,IAAI,aAAa,YAAY,UAAU;AAC9C,IAAAA,QAAO,IAAI,eAAe,YAAY,YAAY;AAElD,YAAQ,QAAQ,sBAAsB,YAAY,UAAU,GAAG;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAErE,YAAQ,MAAM,iBAAiB,OAAO,EAAE;AACxC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,IAAM,SAAS,IAAI,QAAQ,QAAQ,EAChC,YAAY,oDAAoD,EAChE,OAAO,MAAM;AACZ,MAAI;AACF,UAAMA,UAAS,iBAAiB;AAEhC,UAAM,YAAYA,QAAO,IAAI,WAAW;AACxC,UAAM,cAAcA,QAAO,IAAI,aAAa;AAE5C,QAAI,CAAC,aAAa,CAAC,aAAa;AAC9B,cAAQ,KAAK,sCAAsC;AACnD,cAAQ,KAAK,CAAC;AAEd;AAAA,IACF;AAEA,IAAAA,QAAO,OAAO,WAAW;AACzB,IAAAA,QAAO,OAAO,aAAa;AAE3B,YAAQ,QAAQ,yBAAyB,aAAa,SAAS,GAAG;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAErE,YAAQ,MAAM,kBAAkB,OAAO,EAAE;AACzC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEI,IAAM,OAAO,IAAI,QAAQ,MAAM,EACnC,YAAY,gDAAgD,EAC5D,WAAW,MAAM,EACjB,WAAW,KAAK,EAChB,WAAW,MAAM;;;AGxNpB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,aAAa;AACtB,SAAS,UAAU,IAAI,iBAAiB;AACxC,SAAS,QAAAC,aAAY;;;ACDrB,SAAS,SAAS,QAAAC,aAAY;AAC9B,SAAS,qBAAqB;AAEvB,SAAS,mBAAmB;AACjC,QAAM,aAAa,cAAc,YAAY,GAAG;AAChD,QAAM,YAAY,QAAQ,UAAU;AAEpC,SAAOA,MAAK,WAAW,IAAI;AAC7B;;;ACVO,SAAS,kBAAkB,aAAqB;AACrD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM,WAAW,WAAW;AAAA,IAC5B,oBAAoB;AAAA,IACpB,qBAAqB,CAAC,iBAAiB,8BAA8B;AAAA,IACrE,eAAe;AAAA,MACb,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,oBAAoB;AAAA,QACpB,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,SAAS;AAAA,QACT,SAAS,WAAW,WAAW;AAAA,MACjC;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV;AAAA,QACE,SAAS;AAAA,QACT,aAAa,WAAW,WAAW;AAAA,MACrC;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV;AAAA,QACE,KAAK;AAAA,QACL,oBAAoB,CAAC,kBAAkB,qBAAqB,kBAAkB;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AACF;;;AF7CA,IAAM,mBAAmB;AAEzB,eAAsB,qBAAqB,aAAoC;AAC7E,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,iBAAiBC,MAAK,SAAS,YAAY;AACjD,QAAM,qBAAqBA,MAAK,SAAS,gBAAgB,MAAM;AAE/D,QAAM,iBAAiB,kBAAkB,WAAW;AAEpD,UAAQ,MAAM,sBAAsB;AAEpC,QAAM;AAAA,IACJA,MAAK,iBAAiB,GAAG,aAAa,qBAAqB;AAAA,IAC3DA,MAAK,SAAS,gBAAgB,qBAAqB;AAAA,EACrD;AACA,QAAM;AAAA,IACJA,MAAK,SAAS,gBAAgB,gBAAgB;AAAA,IAC9C,KAAK,UAAU,gBAAgB,MAAM,CAAC;AAAA,EACxC;AAEA,UAAQ,QAAQ,kBAAkB;AAElC,UAAQ,MAAM,qBAAqB;AAEnC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAA,MAAK,SAAS,gBAAgB,qBAAqB;AAAA,IACrD;AAAA,IACA;AAAA,MACE,QAAQ,CAAC,QAAQ,SAAS;AAAA,MAC1B,KAAK;AAAA,IACP;AAAA,EACF;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,MACE;AAAA,MACA,YAAY,gBAAgB;AAAA,MAC5B;AAAA,MACA;AAAA,MACAA,MAAK,SAAS,gBAAgB,gBAAgB;AAAA,MAC9C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE,QAAQ,CAAC,QAAQ,SAAS;AAAA,MAC1B,KAAK;AAAA,IACP;AAAA,EACF;AAEA,UAAQ,QAAQ,eAAe;AAE/B,QAAM,GAAGA,MAAK,gBAAgB,QAAQ,GAAGA,MAAK,oBAAoB,QAAQ,GAAG;AAAA,IAC3E,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,QAAQ,IAAIC,SAAQ,OAAO,EACrC;AAAA,EACC,IAAIC;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC,OAAO,OAAO,YAAY;AACzB,QAAMC,UAAS,iBAAiB;AAChC,QAAM,cAAc,QAAQ,eAAeA,QAAO,IAAI,aAAa;AAEnE,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,qBAAqB,WAAW;AACxC,CAAC;;;AG/FH,OAAO,YAAY;AACnB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,QAAQ,SAAS,gBAAgB;AAC1C,SAAS,QAAAC,aAAY;AACrB,OAAOC,mBAAkB;AACzB,SAAS,KAAAC,UAAS;;;ACLlB,IAAM,iBAAyC;AAAA,EAC7C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA;AAAA;AAAA,EAIJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAAS,0BAA0B,MAAsB;AAC9D,SACE,eAAe,IAAI,KACnB,qDAAqD,IAAI;AAE7D;;;ACZO,SAAS,mBACd,SACAC,SAC4C;AAC5C,QAAM,YAAY,QAAQ,aAAaA,QAAO,IAAI,WAAW;AAC7D,QAAM,cAAc,QAAQ,eAAeA,QAAO,IAAI,aAAa;AAEnE,MAAI,CAAC,aAAa,CAAC,aAAa;AAC9B,YAAQ,MAAM,sBAAsB;AACpC,YAAQ;AAAA,MACN;AAAA,IACF;AACA,YAAQ,KAAK,CAAC;AAGd,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AAEA,SAAO,EAAE,WAAW,YAAY;AAClC;;;AFTA,IAAM,YAAYC,GAAE,KAAK;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,QAAmD;AAAA,EACvD,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AACZ;AAEA,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,OAAO;AAAA,IACb,YAAYA,GAAE,IAAI;AAAA,IAClB,aAAaA,GAAE,OAAO;AAAA,EACxB,CAAC;AACH,CAAC;AAED,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,MAAMA,GAAE,OAAO;AAAA,IACb,iBAAiBA,GAAE,KAAK;AAAA,EAC1B,CAAC;AACH,CAAC;AAED,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EAC7B,MAAMA,GAAE;AAAA,IACNA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,KAAK;AAAA,MACb,MAAMA,GAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH;AACF,CAAC;AAED,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,iBAAiBA,GAAE,KAAK;AAAA,EACxB,mBAAmBA,GAAE,KAAK,CAAC,UAAU,eAAe,UAAU,WAAW,CAAC;AAAA,EAC1E,OAAOA,GACJ,OAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAUA,GAAE,OAAO;AAAA,EACrB,CAAC,EACA,SAAS;AAAA,EACZ,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,OAAOA,GACJ,OAAO;AAAA,IACN,MAAMA,GAAE,OAAO;AAAA,EACjB,CAAC,EACA,SAAS;AACd,CAAC;AAEM,IAAM,oBAAoB,YAAY;AAC3C,UAAQ,KAAK,sBAAsB;AAEnC,QAAM,iBAAiBC,MAAK,QAAQ,IAAI,GAAG,cAAc;AACzD,QAAM,UAAUA,MAAK,QAAQ,IAAI,GAAG,gBAAgB,MAAM;AAG1D,MAAI;AACF,UAAM,OAAO,OAAO;AAAA,EACtB,QAAQ;AACN,UAAM,IAAI,MAAM,6BAA6B,OAAO,EAAE;AAAA,EACxD;AAGA,QAAM,mBAAmB,MAAM,QAAQ,OAAO;AAE9C,MAAI,iBAAiB,WAAW,GAAG;AACjC,UAAM,IAAI,MAAM,4BAA4B,OAAO,EAAE;AAAA,EACvD;AAEA,QAAM,YAAYA,MAAK,gBAAgB,YAAY;AAGnD,QAAM,MAAM,IAAI,OAAO;AAEvB,MAAI,eAAe,SAAS,QAAQ;AACpC,MAAI,SAAS,SAAS;AAEtB,UAAQ,QAAQ,sBAAsB,SAAS,EAAE;AACnD;AAEO,IAAM,0BAA0B,OACrC,WACA,aACA,YACG;AACH,UAAQ,KAAK,gCAAgC;AAE7C,QAAM,WAAW,MAAM;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS;AAAA,IACtC;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,oBAAoB,aAAa,EAAE;AAAA,MACrC;AAAA,MACA,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,IACzB;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,qCAAqC,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,EAC/F;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AACzC,QAAM,EAAE,KAAK,IAAI,sBAAsB,MAAM,GAAG;AAEhD,UAAQ,QAAQ,6BAA6B;AAE7C,SAAO;AACT;AAEO,IAAM,kBAAkB,OAAO,cAAsB;AAC1D,UAAQ,KAAK,qBAAqB;AAElC,QAAM,UAAUA,MAAK,QAAQ,IAAI,GAAG,gBAAgB,YAAY;AAGhE,QAAM,aAAa,MAAM,SAAS,OAAO;AAEzC,QAAM,WAAW,MAAM,MAAM,WAAW;AAAA,IACtC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,4BAA4B,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,EACtF;AAEA,UAAQ,QAAQ,+BAA+B;AAE/C,SAAO;AACT;AAEO,IAAM,4BAA4B,CAAC,iBAA4B;AACpE,SAAO,cAAc,IAAI,CAAC,WAAW;AACnC,UAAM,CAAC,KAAK,KAAK,IAAI,OAAO,MAAM,GAAG;AAErC,QAAI,CAAC,OAAO,CAAC,OAAO;AAClB,YAAM,IAAI,MAAM,0BAA0B,MAAM,8BAA8B;AAAA,IAChF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,IAAI,KAAK;AAAA,MACd,OAAO,MAAM,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AACH;AAEO,IAAM,mBAAmB,OAC9B,aACA,YACA,WACA,aACA,SACA,yBACG;AACH,UAAQ,KAAK,wBAAwB;AAErC,QAAM,WAAW,MAAM;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS;AAAA,IACtC;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,oBAAoB,aAAa,EAAE;AAAA,MACrC;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,cAAc;AAAA,QACd,aAAa;AAAA,QACb,uBAAuB;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,gCAAgC,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,EAC1F;AAEA,QAAM,MAAe,MAAM,SAAS,KAAK;AACzC,QAAM,EAAE,KAAK,IAAI,uBAAuB,MAAM,GAAG;AAEjD,UAAQ,QAAQ,uBAAuB;AAEvC,SAAO;AACT;AAEO,IAAM,sBAAsB,OACjC,gBACA,WACA,aACA,YACG;AACH,UAAQ,KAAK,+BAA+B;AAE5C,QAAM,UAAUC,cAAa,EAAE,MAAM,aAAa;AAElD,QAAM,WAAW,MAAM;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS,kCAAkC,cAAc;AAAA,IACtF;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,oBAAoB,aAAa,EAAE;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,gCAAgC,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,EAC1F;AAEA,QAAM,SAAS,SAAS,MAAM,UAAU;AAExC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,OAAO;AACX,MAAI;AAEJ,SAAO,CAAC,MAAM;AAEZ,UAAM,EAAE,OAAO,MAAM,WAAW,IAAI,MAAM,OAAO,KAAK;AACtD,QAAI;AAEJ,QAAI,OAAO;AACT,YAAM,QAAQ,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC,EAAE,KAAK;AAC3D,YAAM,QAAQ,MACX,MAAM,MAAM,EACZ,IAAI,CAAC,MAAM,EAAE,QAAQ,SAAS,EAAE,EAAE,KAAK,CAAC,EACxC,OAAO,OAAO;AAGjB,YAAM,QAAQ,CAAC,UAAU;AACvB,YAAI;AACF,iBAAO,KAAK,MAAM,KAAK;AAAA,QACzB,SAAS,OAAO;AACd,kBAAQ,KAAK,uDAAuD,KAAK,IAAI,KAAK;AAElF;AAAA,QACF;AAEA,cAAM,OAAO,uBAAuB,MAAM,IAAI;AAE9C,YAAI,KAAK,OAAO;AACd,gBAAM,IAAI;AAAA,YACR,iCAAiC,KAAK,MAAM,IAAI,MAAM,0BAA0B,KAAK,MAAM,IAAI,CAAC;AAAA,UAClG;AAAA,QACF;AAEA,YAAI,KAAK,SAAS,MAAM,KAAK,MAAM,IAAI,MAAM,QAAQ,MAAM;AACzD,kBAAQ,OAAO,MAAM,KAAK,MAAM,IAAI;AAAA,QACtC;AAEA,YAAI,KAAK,gBAAgB;AACvB,kBAAQ,IAAI,KAAK,cAAc;AAC/B,0BAAgB,KAAK;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAEA,UAAQ,QAAQ,sCAAsC;AAEtD,MAAI,eAAe;AACjB,YAAQ,QAAQ,4BAA4B,aAAa,EAAE;AAAA,EAC7D;AACF;AA+BO,IAAM,SAAS,IAAIC,SAAQ,QAAQ,EACvC,YAAY,wCAAwC,EACpD;AAAA,EACC,IAAIC;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,qBAAqB;AAC7B,EACC;AAAA,EACC,IAAIA;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAIA,QAAO,qBAAqB,2DAA2D,EACxF,IAAI,sBAAsB,EAC1B,QAAQ,qBAAqB;AAClC,EACC;AAAA,EACC,IAAIA;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAIA;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,UAAU,CAAC,OAAe,WAAqB,CAAC,MAAM;AACtD,WAAO,SAAS,OAAO,CAAC,KAAK,CAAC;AAAA,EAChC,CAAC;AACH,EACC,OAAO,aAAa,wEAAwE,EAC5F;AAAA,EACC;AAAA,EACA;AACF,EACC,OAAO,OAAO,YAAY;AACzB,QAAMC,UAAS,iBAAiB;AAChC,QAAM,EAAE,WAAW,YAAY,IAAI,mBAAmB,SAASA,OAAM;AACrE,QAAMC,aAAY,aAAa;AAC/B,QAAM,cAAc,QAAQ,eAAeD,QAAO,IAAI,aAAa;AAEnE,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAMC,WAAU,SAAS,SAAS;AAElC,MAAI,QAAQ,UAAU;AACpB,UAAM,UAAUC,MAAK,QAAQ,IAAI,GAAG,gBAAgB,MAAM;AAE1D,QAAI;AACF,YAAM,OAAO,OAAO;AAAA,IACtB,QAAQ;AACN,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,QAAQ,OAAO;AAEtC,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,KAAK,2CAA2C;AAAA,EAC1D,OAAO;AACL,UAAM,qBAAqB,WAAW;AAAA,EACxC;AAEA,QAAM,kBAAkB;AAExB,MAAI,QAAQ,QAAQ;AAClB,YAAQ,KAAK,8DAAyD;AACtE,YAAQ,KAAK,uBAAuB;AACpC,YAAQ,KAAK,6BAA6B;AAC1C,YAAQ,KAAK,qBAAqB;AAClC,YAAQ,KAAK,qBAAqB;AAElC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,kBAAkB,MAAM,wBAAwB,WAAW,aAAa,QAAQ,OAAO;AAE7F,QAAM,gBAAgB,gBAAgB,UAAU;AAEhD,QAAM,uBAAuB,0BAA0B,QAAQ,MAAM;AAErE,QAAM,EAAE,iBAAiB,eAAe,IAAI,MAAM;AAAA,IAChD;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,QAAM,oBAAoB,gBAAgB,WAAW,aAAa,QAAQ,OAAO;AACnF,CAAC;;;AGxbH,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,YAAAC,iBAAgB;AACzB,SAAS,KAAAC,UAAS;;;ACFlB,SAAS,UAAAC,eAAc;AAIhB,IAAM,kBAAkB,MAC7B,IAAIC;AAAA,EACF;AAAA,EACA;AACF,EAAE,IAAI,wBAAwB;AAEzB,IAAM,oBAAoB,MAC/B,IAAIA;AAAA,EACF;AAAA,EACA;AACF,EAAE,IAAI,0BAA0B;AAE3B,IAAM,gBAAgB,MAC3B,IAAIA,QAAO,qBAAqB,2DAA2D,EACxF,IAAI,sBAAsB,EAC1B,QAAQ,qBAAqB;AAE3B,IAAM,oBAAoB,MAC/B,IAAIA;AAAA,EACF;AAAA,EACA;AACF,EAAE,IAAI,0BAA0B;AAE3B,IAAM,qBAAqB,CAAC,YAAsC;AACvE,QAAMC,UAAS,iBAAiB;AAChC,QAAM,cAAc,QAAQ,eAAeA,QAAO,IAAI,aAAa;AAEnE,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ADtBA,IAAM,YAAY,IAAI,UAAU;AAEhC,IAAM,4BAA4B,IAAI,KAAK;AAC3C,IAAM,cAAc;AAEpB,IAAM,oBAAoB,CAAC,WAAmB,UAAU,OAAO,SAAS;AAExE,IAAM,eAA+D;AAAA,EACnE,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,iBAAiBC,GACpB,OAAO;AAAA,EACN,MAAMA,GAAE,OAAO;AAAA,EACf,cAAcA,GAAE,OAAO;AAAA,EACvB,SAASA,GAAE,OAAO;AAAA,IAChB,QAAQA,GAAE,OAAO;AAAA,IACjB,KAAKA,GAAE,OAAO;AAAA,IACd,aAAaA,GAAE,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,MAAMA,GAAE;AAAA,IACNA,GAAE,OAAO;AAAA,MACP,WAAWA,GAAE,OAAO;AAAA,MACpB,OAAOA,GAAE,OAAO;AAAA,MAChB,UAAUA,GAAE,MAAMA,GAAE,QAAQ,CAAC;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EACA,YAAYA,GAAE,MAAMA,GAAE,QAAQ,CAAC;AAAA,EAC/B,WAAWA,GAAE,OAAO;AACtB,CAAC,EACA,MAAM;AAET,IAAM,cAAN,cAA0B,MAAM;AAAA,EAG9B,YAAY,SAAiB,OAAgB;AAC3C,UAAM,OAAO;AACb,SAAK,QAAQ;AAAA,EACf;AACF;AAEA,IAAM,iBAAiB,CAAC,aACtB,SAAS,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,IAAI,KAAK,UAAU,CAAC,CAAE,EAAE,KAAK,GAAG;AAE/E,IAAM,iBAAiB,CACrB,OACA,WACG;AACH,QAAM,EAAE,SAAS,MAAM,YAAY,WAAW,IAAI;AAElD,aAAW,QAAQ,CAAC,UAAU;AAC5B,UAAM,MAAM,eAAe,MAAM,QAAQ;AACzC,UAAM,QAAQ,MAAM,MAAM,YAAY;AACtC,UAAM,eAAeC,UAAS,aAAa,KAAK,KAAK,SAAS,KAAK;AAEnE,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,gBAAQ,IAAI,GAAG;AACf;AAAA,MAEF,KAAK;AACH,gBAAQ;AAAA,UACN,IAAI,MAAM,SAAS,MAAM,YAAY,KAAK,QAAQ,MAAM,IAAI,QAAQ,GAAG,KAChE,QAAQ,WAAW,KAAK,GAAG;AAAA,QACpC;AACA;AAAA,MAEF;AACE,gBAAQ,IAAI,IAAI,MAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE;AAC3D;AAAA,IACJ;AAAA,EACF,CAAC;AAED,aAAW,QAAQ,CAAC,cAAc;AAChC,YAAQ,MAAM,IAAI,MAAM,SAAS,eAAe,SAAS;AAAA,EAC3D,CAAC;AACH;AAEO,IAAM,gBAAgB,CAAC,QAA+B;AAC3D,QAAM,SAAS,IACZ,MAAM,IAAI,EACV,QAAQ,CAAC,SAAU,KAAK,WAAW,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAE,EAC1E,KAAK,IAAI;AAEZ,SAAO,OAAO,SAAS,IAAI,SAAS;AACtC;AAEA,IAAM,kBAAkB,CAAC,OAAe,WAAsB;AAC5D,MAAI,WAAW,QAAQ;AACrB,YAAQ,OAAO,MAAM,GAAG,KAAK;AAAA,CAAI;AAEjC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,KAAK;AACxC,UAAM,WAAW,eAAe,MAAM,MAAM;AAE5C,QAAI,WAAW,UAAU;AACvB,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,IAC/C,OAAO;AACL,qBAAe,UAAU,MAAM;AAAA,IACjC;AAAA,EACF,QAAQ;AACN,YAAQ,KAAK,8BAA8B,KAAK,EAAE;AAAA,EACpD;AACF;AAEA,IAAM,gBAAgB,OACpB,aACA,WACA,aACA,YACG;AACH,QAAM,WAAW,MAAM;AAAA,IACrB,WAAW,OAAO,WAAW,SAAS,2BAA2B,WAAW;AAAA,IAC5E;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,8BAA8B,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,MACpE,kBAAkB,SAAS,MAAM;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,SAAS,SAAS,MAAM,UAAU;AAExC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,YAAY,8BAA8B,IAAI;AAAA,EAC1D;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,OACtB,aACA,WACA,aACA,SACA,QACA,kBAAkB,8BACf;AACH,UAAQ,KAAK,iBAAiB;AAE9B,MAAI,UAAU;AAGd,SAAO,MAAM;AACX,QAAI;AAEF,YAAM,SAAS,MAAM,cAAc,aAAa,WAAW,aAAa,OAAO;AAC/E,YAAM,UAAU,IAAI,YAAY;AAChC,YAAM,cAAc,KAAK,IAAI;AAC7B,UAAI,SAAS;AAEb,gBAAU;AAGV,aAAO,MAAM;AAEX,cAAM,EAAE,OAAO,MAAM,WAAW,IAAI,MAAM,OAAO,KAAK;AAEtD,YAAI,OAAO;AACT,oBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAEhD,gBAAM,QAAQ,OAAO,MAAM,MAAM;AAGjC,mBAAS,MAAM,IAAI,KAAK;AAExB,gBACG,IAAI,CAAC,QAAQ,cAAc,GAAG,CAAC,EAC/B,OAAO,CAAC,UAA2B,UAAU,IAAI,EACjD,QAAQ,CAAC,UAAU,gBAAgB,OAAO,MAAM,CAAC;AAAA,QACtD;AAEA,YAAI,cAAc,KAAK,IAAI,IAAI,eAAe,iBAAiB;AAC7D,eAAK,OAAO,OAAO;AACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,eAAe,MAAM,OAAO;AAC/C,cAAM;AAAA,MACR;AAEA,YAAM,qBAAqB,iBAAiB,aAAa,MAAM,YAAY;AAE3E,UAAI,oBAAoB;AACtB,gBAAQ,KAAK,8CAA8C;AAAA,MAC7D,OAAO;AACL,mBAAW;AAEX,YAAI,WAAW,aAAa;AAC1B,gBAAM,IAAI,MAAM,yCAAyC,WAAW,WAAW;AAAA,QACjF;AAEA,gBAAQ;AAAA,UACN,kDAAkD,OAAO,IAAI,WAAW;AAAA,UACxE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,OAAO,IAAIC,SAAQ,MAAM,EAC5B,YAAY,gDAAgD,EAC5D,UAAU,gBAAgB,EAAE,oBAAoB,CAAC,EACjD,UAAU,kBAAkB,EAAE,oBAAoB,CAAC,EACnD,UAAU,cAAc,CAAC,EACzB,UAAU,kBAAkB,CAAC,EAC7B;AAAA,EACC,IAAIC,QAAO,qBAAqB,+BAA+B,EAC5D,QAAQ,CAAC,QAAQ,UAAU,WAAW,SAAS,SAAS,CAAC,EACzD,QAAQ,SAAS;AACtB,EACC,OAAO,OAAO,YAAY;AACzB,MAAI;AACF,UAAM,UAAU,SAAS,QAAQ,SAAS;AAE1C,UAAM,cAAc,mBAAmB,OAAO;AAE9C,UAAM;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,KAAK;AACnB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,IAAM,QAAQ,IAAID,SAAQ,OAAO,EAC9B,YAAY,uDAAuD,EACnE,UAAU,gBAAgB,EAAE,oBAAoB,CAAC,EACjD,UAAU,kBAAkB,EAAE,oBAAoB,CAAC,EACnD,UAAU,cAAc,CAAC,EACzB,UAAU,kBAAkB,CAAC,EAE7B,OAAO,CAAC,aAAa;AACpB,UAAQ,MAAM,2CAA2C;AACzD,UAAQ,KAAK,CAAC;AAChB,CAAC;AAEI,IAAM,OAAO,IAAIA,SAAQ,MAAM,EACnC,YAAY,2CAA2C,EACvD,WAAW,MAAM,EAAE,WAAW,KAAK,CAAC,EACpC,WAAW,KAAK;;;AEtRnB,SAAS,WAAAE,UAAS,UAAAC,eAAc;AAQhC,IAAM,OAAO,IAAIC,SAAQ,MAAM,EAC5B,YAAY,0DAA0D,EACtE;AAAA,EACC,IAAIC;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,qBAAqB;AAC7B,EACC;AAAA,EACC,IAAIA;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAIA,QAAO,qBAAqB,2DAA2D,EACxF,IAAI,sBAAsB,EAC1B,QAAQ,qBAAqB;AAClC,EACC,OAAO,OAAO,YAAY;AACzB,QAAMC,UAAS,iBAAiB;AAChC,QAAM,EAAE,WAAW,YAAY,IAAI,mBAAmB,SAASA,OAAM;AAErE,QAAM,aAAa,EAAE,SAAS,SAAS;AAEvC,UAAQ,MAAM,sBAAsB;AAEpC,QAAM,WAAW,MAAM,cAAc,WAAW,aAAa,QAAQ,OAAO;AAE5E,UAAQ,QAAQ,mBAAmB;AAEnC,MAAI,SAAS,WAAW,GAAG;AACzB,YAAQ,KAAK,oBAAoB;AACjC,YAAQ,KAAK,CAAC;AAEd;AAAA,EACF;AAEA,WAAS,QAAQ,CAAC,MAAM;AACtB,YAAQ,IAAI,GAAG,EAAE,IAAI,KAAK,EAAE,IAAI,GAAG;AAAA,EACrC,CAAC;AAED,UAAQ,KAAK,CAAC;AAChB,CAAC;AAEH,IAAM,SAAS,IAAIF,SAAQ,QAAQ,EAChC;AAAA,EACC;AACF,EACC;AAAA,EACC,IAAIC;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,qBAAqB;AAC7B,EACC;AAAA,EACC,IAAIA;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAIA,QAAO,qBAAqB,2DAA2D,EACxF,IAAI,sBAAsB,EAC1B,QAAQ,qBAAqB;AAClC,EACC,OAAO,OAAO,YAAY;AACzB,QAAMC,UAAS,iBAAiB;AAChC,QAAM,EAAE,WAAW,YAAY,IAAI,mBAAmB,SAASA,OAAM;AAErE,QAAM,aAAa,EAAE,SAAS,SAAS;AAEvC,QAAM,iBAAiB,MAAM,QAAQ,OAAO,qCAAqC;AAAA,IAC/E,MAAM;AAAA,EACR,CAAC;AAED,QAAM,OAAO,MAAM,cAAc,gBAAgB,WAAW,aAAa,QAAQ,OAAO;AAExF,UAAQ,QAAQ,YAAY,KAAK,IAAI,yBAAyB;AAE9D,UAAQ,MAAM,sDAAsD;AACpE,EAAAA,QAAO,IAAI,eAAe,KAAK,IAAI;AACnC,EAAAA,QAAO,IAAI,aAAa,SAAS;AACjC,EAAAA,QAAO,IAAI,eAAe,WAAW;AACrC,UAAQ,QAAQ,oDAAoD;AAEpE,UAAQ,KAAK,CAAC;AAChB,CAAC;AAEI,IAAM,OAAO,IAAIF,SAAQ,MAAM,EACnC;AAAA,EACC;AACF,EACC;AAAA,EACC,IAAIC;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,qBAAqB;AAC7B,EACC;AAAA,EACC,IAAIA;AAAA,IACF;AAAA,IACA;AAAA,EACF,EAAE,IAAI,uBAAuB;AAC/B,EACC;AAAA,EACC,IAAIA,QAAO,qBAAqB,2DAA2D,EACxF,IAAI,sBAAsB,EAC1B,QAAQ,qBAAqB;AAClC,EACC;AAAA,EACC;AAAA,EACA;AACF,EACC,OAAO,OAAO,YAAY;AACzB,QAAMC,UAAS,iBAAiB;AAEhC,QAAM,qBAAqB,CACzB,MACA,gBACG;AACH,YAAQ,MAAM,sDAAsD;AACpE,IAAAA,QAAO,IAAI,eAAe,IAAI;AAE9B,QAAI,aAAa;AACf,MAAAA,QAAO,IAAI,aAAa,YAAY,SAAS;AAC7C,MAAAA,QAAO,IAAI,eAAe,YAAY,WAAW;AAAA,IACnD;AAEA,YAAQ,QAAQ,oDAAoD;AAAA,EACtE;AAEA,MAAI,QAAQ,aAAa;AACvB,uBAAmB,QAAQ,WAAW;AAEtC,YAAQ,KAAK,CAAC;AAEd;AAAA,EACF;AAEA,QAAM,EAAE,WAAW,YAAY,IAAI,mBAAmB,SAASA,OAAM;AAErE,QAAM,aAAa,EAAE,SAAS,SAAS;AAEvC,UAAQ,MAAM,sBAAsB;AAEpC,QAAM,WAAW,MAAM,cAAc,WAAW,aAAa,QAAQ,OAAO;AAE5E,UAAQ,QAAQ,mBAAmB;AAEnC,QAAM,gBAAgB;AAAA,IACpB,GAAG,SAAS,IAAI,CAAC,UAAU;AAAA,MACzB,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,IACb,EAAE;AAAA,IACF;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AAEA,MAAI,cAAc,MAAM,QAAQ;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,gBAAgB,UAAU;AAC5B,UAAM,iBAAiB,MAAM,QAAQ,OAAO,qCAAqC;AAAA,MAC/E,MAAM;AAAA,IACR,CAAC;AAED,UAAM,OAAO,MAAM,cAAc,gBAAgB,WAAW,aAAa,QAAQ,OAAO;AAExF,kBAAc,KAAK;AAEnB,YAAQ,QAAQ,YAAY,KAAK,IAAI,yBAAyB;AAAA,EAChE;AAEA,qBAAmB,aAAa,EAAE,WAAW,YAAY,CAAC;AAE1D,UAAQ,KAAK,CAAC;AAChB,CAAC;AAEI,IAAM,UAAU,IAAIF,SAAQ,SAAS,EACzC,YAAY,iDAAiD,EAC7D,WAAW,MAAM,EACjB,WAAW,IAAI,EACf,WAAW,IAAI;;;ACzMlB,SAAS,WAAAG,gBAAe;AACxB,SAAS,SAAAC,cAAa;AACtB,SAAS,YAAY,WAAW,mBAAmB;AACnD,SAAS,QAAAC,OAAM,gBAAgB;AAIxB,IAAM,QAAQ,IAAIC,SAAQ,OAAO,EACrC;AAAA,EACC;AACF,EACC,OAAO,YAAY;AAClB,QAAM,WAAWC,MAAK,QAAQ,IAAI,GAAG,YAAY;AACjD,QAAM,UAAUA,MAAK,QAAQ,IAAI,GAAG,gBAAgB,WAAW;AAE/D,MAAI,WAAW,QAAQ,GAAG;AACxB,QAAI,CAAC,WAAW,OAAO,GAAG;AACxB,YAAM,SAAS,SAASA,MAAK,QAAQ,IAAI,GAAG,cAAc,GAAG,QAAQ;AAErE,kBAAY,QAAQ,OAAO;AAC3B,cAAQ,QAAQ,oDAA+C;AAAA,IACjE,WAAW,CAAC,UAAU,OAAO,EAAE,eAAe,GAAG;AAC/C,cAAQ;AAAA,QACN;AAAA,MAEF;AAAA,IACF;AAAA,EACF,OAAO;AACL,YAAQ;AAAA,MACN;AAAA,IAEF;AAAA,EACF;AAEA,QAAMC;AAAA,IACJ;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAD,MAAK,gBAAgB,gBAAgB;AAAA,IACvC;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,KAAK,QAAQ,IAAI;AAAA,IACnB;AAAA,EACF;AACF,CAAC;;;AChDH,SAAS,UAAU,WAAAE,UAAS,UAAAC,eAAc;AAC1C,SAAS,YAAAC,iBAAgB;AAKzB,IAAM,mBAAmB,aAAa;AACtC,IAAI,YAAY,iBAAiB,UAAU;AAEpC,IAAMC,aAAY,IAAIC,SAAQ,WAAW,EAC7C,YAAY,IAAI,SAAS,OAAO,EAAE,QAAQ,CAAC,WAAW,UAAU,QAAQ,CAAC,CAAC,EAC1E,UAAU,IAAIC,QAAO,YAAY,mCAAmC,EAAE,UAAU,SAAS,CAAC,EAC1F,OAAO,aAAa,oCAAoC,EACxD,OAAO,CAAC,KAAK,YAAY;AACxB,MAAI,QAAQ,UAAU,QAAQ,UAAU;AACtC,qBAAiB,WAAW,IAAI;AAChC,gBAAY;AAEZ,YAAQ,QAAQ,YAAY;AAAA,EAC9B,WAAW,QAAQ,WAAW,QAAQ,WAAW;AAC/C,qBAAiB,WAAW,KAAK;AAEjC,QAAI,WAAW;AACb,cAAQ,QAAQ,6DAA6D;AAAA,IAC/E,OAAO;AACL,cAAQ,KAAK,wDAAwD;AAAA,IACvE;AAEA,gBAAY;AAAA,EACd,OAAO;AACL,YAAQ,KAAK,0BAA0B;AAAA,EACzC;AAEA,UAAQ;AAAA,IACN,WAAWC,UAAS,QAAQ,YAAYA,UAAS,SAAS,SAAS,IAAIA,UAAS,OAAO,UAAU,CAAC,CAAC;AAAA,EACrG;AAEA,MAAI,CAAC,WAAW;AACd,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AC1CH,SAAS,WAAAC,gBAAe;AAKjB,IAAM,UAAU,IAAIC,SAAQ,SAAS,EACzC,YAAY,uCAAuC,EACnD,OAAO,MAAM;AACZ,UAAQ,IAAI,sBAAsB;AAClC,UAAQ,IAAI,gBAAgB,gBAAa,OAAO,EAAE;AAClD,UAAQ,IAAI,iBAAiB,QAAQ,OAAO,EAAE;AAC9C,UAAQ,IAAI,aAAa,QAAQ,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAC/D,CAAC;;;ACRH,IAAM,qBAAqB,CAAC,mBAAmB,cAAc,gBAAgB;AAE7E,SAAS,eAAe,MAAgB;AACtC,SAAO,KAAK,OAA+B,CAAC,QAAQ,KAAK,OAAO,UAAU;AACxE,QAAI,IAAI,SAAS,GAAG,GAAG;AACrB,YAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,GAAG;AAElC,UAAI,mBAAmB,SAAS,GAAG,GAAG;AACpC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,CAAC,GAAG,GAAG;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,QAAI,mBAAmB,SAAS,GAAG,GAAG;AACpC,YAAM,YACJ,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,EAAE,WAAW,IAAI,IAAI,MAAM,QAAQ,CAAC,IAAI;AAE9E,UAAI,aAAa,CAAC,UAAU,SAAS,IAAI,GAAG;AAC1C,eAAO;AAAA,UACL,GAAG;AAAA,UACH,CAAC,GAAG,GAAG;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAEA,SAAS,eAAe,KAAiC;AACvD,QAAM,QAAkB,CAAC;AACzB,MAAI,UAAqC;AAEzC,SAAO,QAAQ,QAAQ;AACrB,UAAM,QAAQ,QAAQ,KAAK,CAAC;AAC5B,cAAU,QAAQ;AAAA,EACpB;AAEA,SAAO,MAAM,KAAK,GAAG;AACvB;AAEO,IAAM,mBAAmB,OAAO,aAAsB,kBAAsC;AACjG,QAAMC,aAAY,aAAa;AAC/B,QAAM,cAAc,eAAe,aAAa;AAEhD,EAAAA,WAAU,cAAc;AAIxB,SAAO,MAAMA,WAAU,MAAM,aAAa;AAAA,IACxC,GAAG,eAAe,YAAY,IAAI;AAAA,EACpC,CAAC;AACH;AAEO,IAAM,oBAAoB,YAAY;AAC3C,QAAMA,aAAY,aAAa;AAE/B,QAAMA,WAAU,MAAM,qBAAqB,EAAE,YAAYA,WAAU,WAAW,EAAE,CAAC;AACjF,QAAMA,WAAU,UAAU,cAAc;AAC1C;;;AhB9CO,IAAM,UAAU,IAAIC,SAAQ;AAEnC,QAAQ,IAAIC,UAAS,cAAc,UAAK,gBAAa,IAAI,KAAK,gBAAa,OAAO;AAAA,CAAI,CAAC;AAEvF,QACG,KAAK,gBAAa,IAAI,EACtB,QAAQ,gBAAa,OAAO,EAC5B,YAAY,mCAAmC,EAC/C;AAAA,EACC,IAAIC;AAAA,IACF;AAAA,IACA;AAAA;AAAA,EAEF,EAAE,UAAU,CAAC,UAAU;AACrB,QAAI,OAAO;AACT,YAAM,cAAc,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAChD,YAAM,SAAS,OAAO;AAAA,QACpB,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAED,UAAI,OAAO,OAAO;AAChB,cAAM,UACJ,UAAU,OAAO,SAAS,OAAO,OAAO,MAAM,SAAS,WACnD,OAAO,MAAM,OACb;AACN,cAAM,UACJ,YAAY,WACR,uBAAuB,WAAW,KAClC,6BAA6B,KAAK,KAAK,OAAO,MAAM,OAAO;AAEjE,cAAM,IAAI,MAAM,OAAO;AAAA,MACzB;AAEA,cAAQ,IAAID,UAAS,cAAc,qCAAqC,WAAW;AAAA,CAAI,CAAC;AAAA,IAC1F;AAEA,WAAO;AAAA,EACT,CAAC;AACH,EACC,WAAW,OAAO,EAClB,WAAW,KAAK,EAChB,WAAW,KAAK,EAChB,WAAW,MAAM,EACjB,WAAW,IAAI,EACf,WAAW,OAAO,EAClB,WAAW,IAAI,EACf,WAAWE,UAAS,EACpB,KAAK,aAAa,gBAAgB,EAClC,KAAK,cAAc,iBAAiB;;;AiB/DvC,IAAM,mBAAmB,OAAO,UAAmB;AACjD,QAAMC,aAAY,aAAa;AAE/B,QAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,QAAM,aAAa,iBAAiB,QAAQ,MAAM,QAAQ;AAE1D,MAAI;AACF,UAAMA,WAAU,MAAM,SAAS;AAAA,MAC7B,aAAaA,WAAU;AAAA,MACvB;AAAA,MACA;AAAA,MACA,YAAYA,WAAU,WAAW;AAAA,IACnC,CAAC;AACD,UAAMA,WAAU,UAAU,cAAc;AAAA,EAC1C,QAAQ;AAAA,EAER;AAEA,UAAQ,MAAM,YAAY;AAE1B,MAAIA,WAAU,UAAU,GAAG;AACzB,YAAQ;AAAA,MACN;AAAA,YAAeA,WAAU,SAAS;AAAA;AAAA,IACpC;AAAA,EACF,OAAO;AACL,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,KAAK,CAAC;AAChB;AAEA,QAAQ,GAAG,qBAAqB,CAAC,UAAU;AACzC,OAAK,iBAAiB,KAAK;AAC7B,CAAC;AAED,QAAQ,GAAG,sBAAsB,CAAC,WAAW;AAC3C,OAAK,iBAAiB,MAAM;AAC9B,CAAC;AAED,MAAM,YAAY;AAChB,MAAI;AACF,UAAM,QAAQ,WAAW,QAAQ,IAAI;AAAA,EACvC,SAAS,OAAO;AACd,UAAM,iBAAiB,KAAK;AAAA,EAC9B;AACF,GAAG;","names":["Option","Command","colorize","z","resolve","z","z","z","config","Command","Option","join","join","join","Command","Option","config","Command","Option","join","yoctoSpinner","z","config","z","join","yoctoSpinner","Command","Option","config","telemetry","join","Command","Option","colorize","z","Option","Option","config","z","colorize","Command","Option","Command","Option","Command","Option","config","Command","execa","join","Command","join","execa","Command","Option","colorize","telemetry","Command","Option","colorize","Command","Command","telemetry","Command","colorize","Option","telemetry","telemetry"]}
1
+ {"version":3,"sources":["../src/cli/lib/logger.ts","../src/cli/lib/telemetry.ts","../package.json","../src/cli/lib/user-config.ts","../src/cli/program.ts","../src/cli/commands/auth.ts","../src/cli/lib/auth.ts","../src/cli/lib/project.ts","../src/cli/lib/project-config.ts","../src/cli/commands/build.ts","../src/cli/lib/get-module-cli-path.ts","../src/cli/lib/project-state.ts","../src/cli/lib/wrangler-config.ts","../src/cli/commands/create.ts","../src/cli/lib/build-workspace-packages.ts","../src/cli/lib/channels.ts","../src/cli/lib/clone-catalyst.ts","../src/cli/lib/checkout-ref.ts","../src/cli/lib/is-exec-exception.ts","../src/cli/lib/has-github-ssh.ts","../src/cli/lib/reset-branch-to-ref.ts","../src/cli/lib/commerce-hosting.ts","../src/cli/lib/sort-package-json.ts","../src/cli/lib/install-dependencies.ts","../src/cli/lib/localization.ts","../src/cli/lib/login.ts","../src/cli/lib/setup-core-project.ts","../src/cli/lib/shared-options.ts","../src/cli/lib/write-env.ts","../src/cli/commands/deploy.ts","../src/cli/lib/deployment-errors.ts","../src/cli/lib/resolve-credentials.ts","../src/cli/commands/logs.ts","../src/cli/commands/project.ts","../src/cli/commands/start.ts","../src/cli/commands/telemetry.ts","../src/cli/commands/version.ts","../src/cli/hooks/telemetry.ts","../src/cli/index.ts"],"sourcesContent":["import { createConsola } from 'consola';\n\nexport const consola = createConsola({\n level: process.env.CONSOLA_LEVEL ? parseInt(process.env.CONSOLA_LEVEL, 10) : 3,\n});\n","import { Analytics } from '@segment/analytics-node';\nimport Conf from 'conf';\nimport { randomBytes, randomUUID } from 'node:crypto';\n\nimport PACKAGE_INFO from '../../../package.json';\n\nimport { getUserConfig, UserConfigSchema } from './user-config';\n\nconst TELEMETRY_KEY_ENABLED = 'telemetry.enabled';\nconst TELEMETRY_KEY_ID = `telemetry.anonymousId`;\n\nexport class Telemetry {\n readonly correlationId: string;\n readonly analytics: Analytics;\n readonly startTime: number;\n commandName = 'unknown';\n\n private userConfig: Conf<UserConfigSchema>;\n private CATALYST_TELEMETRY_DISABLED: string | undefined;\n\n private readonly projectName = 'catalyst-cli';\n private readonly projectVersion = PACKAGE_INFO.version;\n\n constructor() {\n this.CATALYST_TELEMETRY_DISABLED = process.env.CATALYST_TELEMETRY_DISABLED;\n\n this.userConfig = getUserConfig();\n\n this.correlationId = randomUUID();\n this.startTime = Date.now();\n this.analytics = new Analytics({\n writeKey: process.env.CLI_SEGMENT_WRITE_KEY ?? 'not-a-valid-segment-write-key',\n });\n }\n\n durationMs(): number {\n return Date.now() - this.startTime;\n }\n\n async track(eventName: string, payload: Record<string, unknown>) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.track({\n event: eventName,\n anonymousId: this.getAnonymousId(),\n properties: {\n ...payload,\n correlationId: this.correlationId,\n nodeVersion: process.version,\n platform: process.platform,\n arch: process.arch,\n cliVersion: PACKAGE_INFO.version,\n },\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n async identify(storeHash?: string) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n if (!storeHash) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.identify({\n userId: storeHash,\n anonymousId: this.getAnonymousId(),\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n setEnabled = (_enabled: boolean) => {\n const enabled = Boolean(_enabled);\n\n this.userConfig.set('telemetry.enabled', enabled);\n };\n\n isEnabled() {\n return (\n !this.CATALYST_TELEMETRY_DISABLED &&\n this.userConfig.get<typeof TELEMETRY_KEY_ENABLED, boolean>(TELEMETRY_KEY_ENABLED, true)\n );\n }\n\n private getAnonymousId(): string {\n const val = this.userConfig.get<typeof TELEMETRY_KEY_ID, string>(TELEMETRY_KEY_ID);\n\n if (val) {\n return val;\n }\n\n const generated = randomBytes(32).toString('hex');\n\n this.userConfig.set(TELEMETRY_KEY_ID, generated);\n\n return generated;\n }\n}\n\nlet telemetryInstance: Telemetry | undefined;\n\n// Singleton so the pre-hook, post-hook, error handler, and command bodies all\n// share one correlationId. resetTelemetry() is for test isolation.\nexport function getTelemetry(): Telemetry {\n telemetryInstance ??= new Telemetry();\n\n return telemetryInstance;\n}\n\nexport function resetTelemetry(): void {\n telemetryInstance = undefined;\n}\n","{\n \"name\": \"@bigcommerce/catalyst\",\n \"version\": \"1.0.0-alpha.4\",\n \"type\": \"module\",\n \"bin\": {\n \"catalyst\": \"dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"templates\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \"^20.0.0 || ^22.0.0 || ^24.0.0\"\n },\n \"dependencies\": {\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@inquirer/prompts\": \"^7.5.3\",\n \"@segment/analytics-node\": \"^2.2.1\",\n \"adm-zip\": \"^0.5.16\",\n \"commander\": \"^14.0.0\",\n \"conf\": \"^13.1.0\",\n \"consola\": \"^3.4.2\",\n \"cross-spawn\": \"^7.0.6\",\n \"dotenv\": \"^16.5.0\",\n \"execa\": \"^9.6.0\",\n \"fs-extra\": \"^11.3.0\",\n \"lodash.kebabcase\": \"^4.1.1\",\n \"nypm\": \"^0.5.4\",\n \"open\": \"^10.1.0\",\n \"std-env\": \"^3.9.0\",\n \"yocto-spinner\": \"^1.0.0\",\n \"zod\": \"^4.0.5\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.11.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@types/adm-zip\": \"^0.5.7\",\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/lodash.kebabcase\": \"^4.1.9\",\n \"@types/node\": \"^22.15.30\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^8.57.1\",\n \"msw\": \"^2.9.0\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@opennextjs/cloudflare\": \"1.17.3\"\n }\n}\n","import Conf from 'conf';\n\nexport interface UserConfigSchema {\n telemetry: {\n enabled: boolean;\n anonymousId: string;\n };\n}\n\nlet userConfigInstance: Conf<UserConfigSchema> | undefined;\n\n// User-scoped config (per-machine, not per-project). Lives in the OS config dir\n// — keeping telemetry out of the user's working directory so commands like\n// `catalyst create` don't drop a stray `.bigcommerce/` next to where they're run.\nexport function getUserConfig(): Conf<UserConfigSchema> {\n userConfigInstance ??= new Conf<UserConfigSchema>({\n projectName: 'catalyst-cli',\n projectSuffix: '',\n configName: 'config',\n schema: {\n telemetry: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n anonymousId: { type: 'string' },\n },\n },\n },\n });\n\n return userConfigInstance;\n}\n\nexport function resetUserConfig(): void {\n userConfigInstance = undefined;\n}\n","import { Option } from '@commander-js/extra-typings';\nimport { Command } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { config } from 'dotenv';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport PACKAGE_INFO from '../../package.json';\n\nimport { auth } from './commands/auth';\nimport { build } from './commands/build';\nimport { create } from './commands/create';\nimport { deploy } from './commands/deploy';\nimport { logs } from './commands/logs';\nimport { project } from './commands/project';\nimport { start } from './commands/start';\nimport { telemetry } from './commands/telemetry';\nimport { version } from './commands/version';\nimport { telemetryPostHook, telemetryPreHook } from './hooks/telemetry';\nimport { consola } from './lib/logger';\n\n// Auto-load .env.local from cwd if present, matching Next.js convention.\n// `--env-path` (loaded later via argParser) overrides anything we load here.\nconst defaultEnvPath = resolve(process.cwd(), '.env.local');\n\nif (existsSync(defaultEnvPath)) {\n config({ path: defaultEnvPath });\n}\n\n// CATALYST_STORE_HASH falls back to BIGCOMMERCE_STORE_HASH so freshly-scaffolded\n// projects work without duplicating the same value under two names. Aliasing\n// here means every command's `.env('CATALYST_STORE_HASH')` binding picks it up\n// without per-command changes.\nif (!process.env.CATALYST_STORE_HASH && process.env.BIGCOMMERCE_STORE_HASH) {\n process.env.CATALYST_STORE_HASH = process.env.BIGCOMMERCE_STORE_HASH;\n}\n\nexport const program = new Command();\n\nconsola.log(colorize('cyanBright', `◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .summary('CLI tool for Catalyst development')\n .description(\n 'CLI tool for Catalyst development.\\n\\nConfiguration priority: flags > env file (--env-path) > process.env > .env.local (auto-loaded from cwd) > .bigcommerce/project.json.\\n\\nCATALYST_STORE_HASH falls back to BIGCOMMERCE_STORE_HASH if unset.\\n\\nRun `catalyst <command> --help` for details on a specific command.',\n )\n .configureHelp({ showGlobalOptions: true })\n .addOption(\n new Option(\n '--env-path <path>',\n 'Path to environment file to load (relative to current working directory)',\n // We are using argParser, because commander loads in environment variables before executing hooks.\n ).argParser((value) => {\n if (value) {\n const envFilePath = resolve(process.cwd(), value);\n const result = config({\n path: envFilePath,\n override: true,\n });\n\n if (result.error) {\n const errCode =\n 'code' in result.error && typeof result.error.code === 'string'\n ? result.error.code\n : undefined;\n const message =\n errCode === 'ENOENT'\n ? `Env file not found: ${envFilePath}`\n : `Failed to load --env-path ${value}: ${result.error.message}`;\n\n throw new Error(message);\n }\n\n consola.log(colorize('cyanBright', `Loaded environment variables from ${envFilePath}\\n`));\n }\n\n return value;\n }),\n )\n .addCommand(version)\n .addCommand(create)\n .addCommand(start)\n .addCommand(build)\n .addCommand(deploy)\n .addCommand(logs)\n .addCommand(project)\n .addCommand(auth)\n .addCommand(telemetry)\n .hook('preAction', telemetryPreHook)\n .hook('postAction', telemetryPostHook);\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport open from 'open';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { DEFAULT_LOGIN_URL, requestDeviceCode, waitForDeviceToken } from '../lib/auth';\nimport { consola } from '../lib/logger';\nimport { fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\n\nconst StoreProfileSchema = z.object({\n data: z.object({\n store_name: z.string(),\n }),\n});\n\nasync function fetchStoreProfile(storeHash: string, accessToken: string, apiHost: string) {\n const response = await fetch(`https://${apiHost}/stores/${storeHash}/v3/settings/store/profile`, {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const result = StoreProfileSchema.safeParse(res);\n\n if (!result.success) {\n throw new Error('Unexpected response from store profile API');\n }\n\n return result.data.data;\n}\n\nconst whoami = new Command('whoami')\n .configureHelp({ showGlobalOptions: true })\n .description('Verify stored credentials and display store/project info.')\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst auth whoami\n\n Logged in to My Store (abc123), connected to project my-project (43eba682-0c48-11f1-9bd5-827a48b0ce1e)`,\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com')\n .hideHelp(),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.info('Not logged in: no credentials found.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n return;\n }\n\n const store = await fetchStoreProfile(storeHash, accessToken, options.apiHost);\n\n const projectUuid = config.get('projectUuid');\n\n if (projectUuid) {\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n const linkedProject = projects.find((p) => p.uuid === projectUuid);\n\n if (linkedProject) {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), connected to project ${linkedProject.name} (${projectUuid})`,\n );\n } else {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), project ${projectUuid} not found`,\n );\n }\n } else {\n consola.info(`Logged in to ${store.store_name} (${storeHash})`);\n }\n\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (message.includes('401') || message.includes('403')) {\n consola.error(`Not logged in: invalid credentials (${message})`);\n } else {\n consola.error(`Failed to verify credentials: ${message}`);\n }\n\n process.exit(1);\n }\n });\n\nconst login = new Command('login')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'Authenticate via browser using the OAuth device code flow. If already logged in, displays current credentials and suggests running `catalyst auth logout` to re-authenticate.',\n )\n .addHelpText(\n 'after',\n `\nExamples:\n # Login via browser (recommended)\n $ catalyst auth login\n\n # Login with existing credentials (skips browser flow)\n $ catalyst auth login --store-hash <STORE_HASH> --access-token <ACCESS_TOKEN>`,\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--login-url <url>', 'BigCommerce login URL.')\n .env('BIGCOMMERCE_LOGIN_URL')\n .default(DEFAULT_LOGIN_URL)\n .hideHelp(),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (storeHash && accessToken) {\n consola.info(`Already logged in to store ${storeHash}.`);\n consola.info('Run `catalyst auth logout` first to re-authenticate.');\n process.exit(0);\n\n return;\n }\n\n const deviceCode = await requestDeviceCode(options.loginUrl);\n\n consola.info(\n `${colorize('yellow', 'Your one-time code:')} ${colorize('bold', deviceCode.user_code)}`,\n );\n\n try {\n await open(deviceCode.verification_uri);\n consola.info(`Opened ${deviceCode.verification_uri} in your browser.`);\n } catch {\n consola.info(\n `Open ${deviceCode.verification_uri} in your browser and enter the code above.`,\n );\n }\n\n const spinner = yoctoSpinner().start('Waiting for authentication...');\n\n const credentials = await waitForDeviceToken(\n options.loginUrl,\n deviceCode.device_code,\n deviceCode.interval,\n );\n\n spinner.success('Authentication complete.');\n\n config.set('storeHash', credentials.store_hash);\n config.set('accessToken', credentials.access_token);\n\n consola.success(`Logged in to store ${credentials.store_hash}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Login failed: ${message}`);\n process.exit(1);\n }\n });\n\nconst logout = new Command('logout')\n .configureHelp({ showGlobalOptions: true })\n .description('Remove stored credentials for the current project.')\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst auth logout`,\n )\n .action(() => {\n try {\n const config = getProjectConfig();\n\n const storeHash = config.get('storeHash');\n const accessToken = config.get('accessToken');\n\n if (!storeHash && !accessToken) {\n consola.info('Not logged in: no credentials found.');\n process.exit(0);\n\n return;\n }\n\n config.delete('storeHash');\n config.delete('accessToken');\n\n consola.success(`Logged out from store ${storeHash ?? 'unknown'}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Logout failed: ${message}`);\n process.exit(1);\n }\n });\n\nexport const auth = new Command('auth')\n .configureHelp({ showGlobalOptions: true })\n .description('Manage authentication for the BigCommerce CLI.')\n .addCommand(whoami)\n .addCommand(login)\n .addCommand(logout);\n","import { z } from 'zod';\n\nexport const DEVICE_OAUTH_CLIENT_ID = 'b8063bu6hhml4e0lqh22yut63atsbyv';\nexport const DEVICE_OAUTH_SCOPES = [\n 'store_v2_information',\n 'store_infrastructure_deployments_manage',\n 'store_infrastructure_logs_read_only',\n 'store_infrastructure_projects_manage',\n].join(' ');\nexport const DEFAULT_LOGIN_URL = 'https://login.bigcommerce.com';\n\nexport const DeviceCodeResponseSchema = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n});\n\nexport const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string(),\n});\n\nexport async function requestDeviceCode(loginUrl: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n client_id: DEVICE_OAUTH_CLIENT_ID,\n scopes: DEVICE_OAUTH_SCOPES,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to request device code: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeResponseSchema.parse(res);\n}\n\nexport async function pollDeviceToken(loginUrl: string, deviceCode: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n return null;\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeSuccessSchema.parse(res);\n}\n\nexport async function waitForDeviceToken(\n loginUrl: string,\n deviceCode: string,\n interval: number,\n): Promise<z.infer<typeof DeviceCodeSuccessSchema>> {\n const credentials = await pollDeviceToken(loginUrl, deviceCode);\n\n if (credentials) {\n return credentials;\n }\n\n await new Promise((resolve) => {\n setTimeout(resolve, interval * 1000);\n });\n\n return waitForDeviceToken(loginUrl, deviceCode, interval);\n}\n","import { z } from 'zod';\n\nimport { getTelemetry } from './telemetry';\n\nexport class InfrastructureProjectValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InfrastructureProjectValidationError';\n }\n}\n\nconst fetchProjectsSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.string(),\n name: z.string(),\n }),\n ),\n});\n\nexport interface ProjectListItem {\n uuid: string;\n name: string;\n}\n\nfunction projectsUrl(storeHash: string, apiHost: string) {\n return `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`;\n}\n\nfunction authHeaders(accessToken: string) {\n return {\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().correlationId,\n };\n}\n\nexport async function hasProjectsAccess(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<boolean> {\n const response = await fetch(projectsUrl(storeHash, apiHost), {\n method: 'GET',\n headers: authHeaders(accessToken),\n });\n\n if (response.status === 200) return true;\n if (response.status === 403) return false;\n\n throw new Error(\n `GET /v3/infrastructure/projects failed: ${response.status} ${response.statusText}`,\n );\n}\n\nexport async function fetchProjects(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<ProjectListItem[]> {\n const response = await fetch(projectsUrl(storeHash, apiHost), {\n method: 'GET',\n headers: authHeaders(accessToken),\n });\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = fetchProjectsSchema.parse(res);\n\n return data;\n}\n\nconst createProjectSchema = z.object({\n data: z.object({\n uuid: z.string(),\n name: z.string(),\n date_created: z.coerce.date(),\n date_modified: z.coerce.date(),\n }),\n});\n\nexport interface CreateProjectResult {\n uuid: string;\n name: string;\n date_created: Date;\n date_modified: Date;\n}\n\nconst validationErrorBodySchema = z.object({\n title: z.string().optional(),\n detail: z.string().optional(),\n errors: z.record(z.string(), z.string()).optional(),\n});\n\nfunction extractValidationMessage(body: unknown): string | null {\n const parsed = validationErrorBodySchema.safeParse(body);\n\n if (!parsed.success) return null;\n\n const { title, detail, errors } = parsed.data;\n\n if (errors && Object.keys(errors).length > 0) {\n return Object.values(errors).join('; ');\n }\n\n return detail ?? title ?? null;\n}\n\nexport async function createProject(\n name: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<CreateProjectResult> {\n const response = await fetch(projectsUrl(storeHash, apiHost), {\n method: 'POST',\n headers: {\n ...authHeaders(accessToken),\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ name }),\n });\n\n if (response.status === 400 || response.status === 422) {\n const body: unknown = await response.json().catch(() => null);\n const fallback =\n response.status === 422\n ? \"The project name you entered doesn't meet the requirements. It must be 3–32 characters long and use only letters, numbers, hyphens (-), underscores (_), and periods (.)\"\n : response.statusText;\n const message = extractValidationMessage(body) ?? fallback;\n\n throw new InfrastructureProjectValidationError(message);\n }\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n // TODO: TRAC-592 - remove this check once the API returns proper 400/422 with validation messages for duplicate names instead of 502\n if (response.status === 502) {\n throw new Error('Failed to create project, is the name already in use?');\n }\n\n if (!response.ok) {\n throw new Error(`Failed to create project: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = createProjectSchema.parse(res);\n\n return data;\n}\n\nexport async function deleteProject(\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<void> {\n const response = await fetch(`${projectsUrl(storeHash, apiHost)}/${projectUuid}`, {\n method: 'DELETE',\n headers: authHeaders(accessToken),\n });\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (response.status === 404) {\n throw new Error(`Project ${projectUuid} not found.`);\n }\n\n if (!response.ok) {\n throw new Error(`Failed to delete project: ${response.statusText}`);\n }\n}\n","import Conf from 'conf';\nimport { join } from 'path';\n\nexport interface ProjectConfigSchema {\n projectUuid: string;\n // Reserved for future use\n framework: 'catalyst';\n storeHash?: string;\n accessToken?: string;\n}\n\nexport function getProjectConfig() {\n return new Conf<ProjectConfigSchema>({\n cwd: join(process.cwd(), '.bigcommerce'),\n projectSuffix: '',\n configName: 'project',\n schema: {\n projectUuid: { type: 'string', format: 'uuid' },\n framework: {\n type: 'string',\n enum: ['catalyst'],\n default: 'catalyst',\n },\n storeHash: { type: 'string' },\n accessToken: { type: 'string' },\n },\n });\n}\n","import { Command, Option } from 'commander';\nimport { execa } from 'execa';\nimport { copyFile, cp, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { getModuleCliPath } from '../lib/get-module-cli-path';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { getProjectState } from '../lib/project-state';\nimport { getWranglerConfig } from '../lib/wrangler-config';\n\nconst WRANGLER_VERSION = '4.90.0';\n\nexport async function buildCatalystProject(projectUuid: string): Promise<void> {\n const coreDir = process.cwd();\n const openNextOutDir = join(coreDir, '.open-next');\n const bigcommerceDistDir = join(coreDir, '.bigcommerce', 'dist');\n\n const wranglerConfig = getWranglerConfig(projectUuid);\n\n consola.start('Copying templates...');\n\n await copyFile(\n join(getModuleCliPath(), 'templates', 'open-next.config.ts'),\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n );\n await writeFile(\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n JSON.stringify(wranglerConfig, null, 2),\n );\n\n consola.success('Templates copied');\n\n consola.start('Building project...');\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'build',\n '--skipWranglerConfigCheck',\n '--openNextConfigPath',\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n await execa(\n 'pnpm',\n [\n 'dlx',\n `wrangler@${WRANGLER_VERSION}`,\n 'deploy',\n '--config',\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n '--keep-vars',\n '--outdir',\n bigcommerceDistDir,\n '--dry-run',\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n consola.success('Project built');\n\n await cp(join(openNextOutDir, 'assets'), join(bigcommerceDistDir, 'assets'), {\n recursive: true,\n force: true,\n });\n}\n\nexport const build = new Command('build')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'Build your Catalyst project using the OpenNext/Cloudflare build pipeline. Also runs a Wrangler dry-run to generate deployment artifacts.',\n )\n .addHelpText(\n 'after',\n `\nExamples:\n $ catalyst build\n\n # Include project UUID\n $ catalyst build --project-uuid <UUID>`,\n )\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'Project UUID to be included in the deployment configuration.',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .action(async (options) => {\n // Project must be transformed (middleware swapped in, OpenNext dep installed)\n // before the OpenNext build pipeline can run. If it isn't, fall through to\n // `next build` so this command works for self-hosted Catalyst projects too.\n const state = getProjectState();\n\n if (!state.isTransformed) {\n consola.info('Project is not set up for Commerce Hosting — running `next build`.');\n consola.info('To deploy to Commerce Hosting, run `catalyst deploy`.');\n\n await execa('pnpm', ['exec', 'next', 'build'], {\n stdio: 'inherit',\n cwd: process.cwd(),\n });\n\n return;\n }\n\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run `catalyst project create` or `catalyst project link` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await buildCatalystProject(projectUuid);\n });\n","/* eslint-disable no-underscore-dangle */\n\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getModuleCliPath() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n return join(__dirname, '..');\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { z } from 'zod';\n\nconst projectJsonSchema = z.looseObject({\n projectUuid: z.string().optional(),\n});\n\nconst packageJsonSchema = z.looseObject({\n dependencies: z.record(z.string(), z.string()).optional(),\n});\n\nexport interface ProjectState {\n projectUuid: string | undefined;\n hasMiddleware: boolean;\n hasProxy: boolean;\n hasOpenNextDep: boolean;\n\n // Derived signals — `isLinked` reflects intent (UUID registered via\n // `catalyst project create` or commerce-hosting setup); `isTransformed`\n // reflects on-disk readiness (middleware.ts swapped in, OpenNext dep\n // installed). A deploy needs both, but `catalyst build` only cares about\n // `isTransformed` so it can dispatch to OpenNext vs `next build`.\n isLinked: boolean;\n isTransformed: boolean;\n isFullySetUp: boolean;\n}\n\nconst safeReadJson = (path: string): unknown => {\n try {\n return JSON.parse(readFileSync(path, 'utf-8'));\n } catch {\n return null;\n }\n};\n\n// Read-only inspection of a Catalyst project at `cwd` (typically `core/`).\n// Avoids `getProjectConfig()` deliberately — that would instantiate `Conf`\n// and create `.bigcommerce/` as a side effect.\nexport function getProjectState(cwd: string = process.cwd()): ProjectState {\n const projectJson = projectJsonSchema.safeParse(\n safeReadJson(join(cwd, '.bigcommerce', 'project.json')),\n );\n const projectUuid = projectJson.success ? projectJson.data.projectUuid : undefined;\n\n const hasMiddleware = existsSync(join(cwd, 'middleware.ts'));\n const hasProxy = existsSync(join(cwd, 'proxy.ts'));\n\n const pkgJson = packageJsonSchema.safeParse(safeReadJson(join(cwd, 'package.json')));\n const hasOpenNextDep = pkgJson.success\n ? Boolean(pkgJson.data.dependencies?.['@opennextjs/cloudflare'])\n : false;\n\n const isLinked = Boolean(projectUuid);\n const isTransformed = hasMiddleware && !hasProxy && hasOpenNextDep;\n const isFullySetUp = isLinked && isTransformed;\n\n return {\n projectUuid,\n hasMiddleware,\n hasProxy,\n hasOpenNextDep,\n isLinked,\n isTransformed,\n isFullySetUp,\n };\n}\n","export function getWranglerConfig(projectUuid: string) {\n return {\n $schema: 'node_modules/wrangler/config-schema.json',\n main: '../.open-next/worker.js',\n name: `project-${projectUuid}`,\n compatibility_date: '2025-09-15',\n compatibility_flags: ['nodejs_compat', 'global_fetch_strictly_public'],\n observability: {\n enabled: true,\n head_sampling_rate: 0.05,\n logs: {\n enabled: true,\n head_sampling_rate: 1,\n invocation_logs: false,\n },\n },\n assets: {\n directory: '../.open-next/assets',\n binding: 'ASSETS',\n },\n services: [\n {\n binding: 'WORKER_SELF_REFERENCE',\n service: `project-${projectUuid}`,\n },\n ],\n r2_buckets: [\n {\n binding: 'NEXT_INC_CACHE_R2_BUCKET',\n bucket_name: `project-${projectUuid}`,\n },\n ],\n durable_objects: {\n bindings: [\n {\n name: 'NEXT_CACHE_DO_QUEUE',\n class_name: 'DOQueueHandler',\n },\n {\n name: 'NEXT_TAG_CACHE_DO_SHARDED',\n class_name: 'DOShardedTagCache',\n },\n {\n name: 'NEXT_CACHE_DO_PURGE',\n class_name: 'BucketCachePurge',\n },\n ],\n },\n migrations: [\n {\n tag: 'v1',\n new_sqlite_classes: ['DOQueueHandler', 'DOShardedTagCache', 'BucketCachePurge'],\n },\n ],\n };\n}\n","import { Command, InvalidArgumentError, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport { execSync } from 'child_process';\nimport { colorize } from 'consola/utils';\nimport { pathExistsSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { join } from 'path';\n\nimport { DEFAULT_LOGIN_URL } from '../lib/auth';\nimport { buildWorkspacePackages } from '../lib/build-workspace-packages';\nimport {\n checkChannelEligibility,\n createChannel,\n fetchAvailableChannels,\n getChannelInit,\n} from '../lib/channels';\nimport { cloneCatalyst } from '../lib/clone-catalyst';\nimport { promptForCommerceHostingProject, setupCommerceHosting } from '../lib/commerce-hosting';\nimport { installDependencies } from '../lib/install-dependencies';\nimport { getAvailableLocales } from '../lib/localization';\nimport { consola } from '../lib/logger';\nimport { login } from '../lib/login';\nimport { hasProjectsAccess, type ProjectListItem } from '../lib/project';\nimport { setupCoreProject } from '../lib/setup-core-project';\nimport { accessTokenOption, storeHashOption } from '../lib/shared-options';\nimport { getTelemetry } from '../lib/telemetry';\nimport { writeEnv } from '../lib/write-env';\n\nfunction getPlatformCheckCommand(command: string): string {\n const isWindows = process.platform === 'win32';\n\n return isWindows ? `where.exe ${command}` : `which ${command}`;\n}\n\nfunction parseChannelId(value: string): number {\n const parsed = parseInt(value, 10);\n\n if (Number.isNaN(parsed)) {\n throw new InvalidArgumentError(`\"${value}\" is not a valid channel ID (expected a number).`);\n }\n\n return parsed;\n}\n\n// Variadic argParser: called once per `--env KEY=VALUE`, accumulating into a\n// merged record. Splits on the first `=` so values containing `=` are preserved.\nfunction parseEnvFlag(\n value: string,\n previous: Record<string, string> = {},\n): Record<string, string> {\n const eqIdx = value.indexOf('=');\n\n if (eqIdx <= 0) {\n throw new InvalidArgumentError(`Expected KEY=VALUE, got \"${value}\".`);\n }\n\n const key = value.substring(0, eqIdx);\n const val = value.substring(eqIdx + 1);\n\n if (!val) {\n throw new InvalidArgumentError(`Expected KEY=VALUE with non-empty value, got \"${value}\".`);\n }\n\n return { ...previous, [key]: val };\n}\n\nasync function handleChannelCreation(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n cliApiOrigin: string,\n) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n const availableLocales = await getAvailableLocales(storeHash, accessToken, apiHost);\n\n const storefrontLocale = await select({\n message: 'Which default language would you like to set for your channel?',\n default: 'en',\n choices: availableLocales,\n theme: {\n style: {\n help: () => colorize('dim', '(Select locale from the list or start typing the name)'),\n },\n },\n });\n\n const shouldAddAdditionalLocales = await select({\n message: 'Would you like to add additional languages?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n\n let additionalLocales: string[] = [];\n\n if (shouldAddAdditionalLocales) {\n const localeOptions = availableLocales\n .filter(({ value }) => value !== storefrontLocale)\n .map(({ name, value }) => ({ label: name, value, hint: value }));\n\n // consola's multiselect returns the value strings at runtime, but its typed\n // return is loose (the whole option array). Recursion + cast avoids the\n // no-await-in-loop / no-constant-condition lint hits and re-prompts on overflow.\n const pickLocales = async (): Promise<string[]> => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const selected = (await consola.prompt(\n 'Which additional languages would you like to add to your channel?',\n { type: 'multiselect', options: localeOptions, cancel: 'reject' },\n )) as unknown as string[];\n\n if (selected.length > 4) {\n consola.warn('You can only select up to 4 additional languages. Please try again.');\n\n return pickLocales();\n }\n\n return selected;\n };\n\n additionalLocales = await pickLocales();\n }\n\n const shouldInstallSampleData = await select({\n message: 'Would you like to install sample data?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n\n return createChannel(\n newChannelName,\n storefrontLocale,\n additionalLocales,\n shouldInstallSampleData,\n storeHash,\n accessToken,\n cliApiOrigin,\n );\n}\n\nasync function handleChannelSelection(storeHash: string, accessToken: string, apiHost: string) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n const channels = await fetchAvailableChannels(storeHash, accessToken, apiHost);\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: channels\n .sort((a, b) => {\n const aIndex = channelSortOrder.indexOf(a.platform);\n const bIndex = channelSortOrder.indexOf(b.platform);\n\n if (aIndex === -1 && bIndex === -1) {\n return 0;\n }\n\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n\n return aIndex - bIndex;\n })\n .map((ch) => ({\n name: ch.name,\n value: ch,\n description: `Channel Platform: ${\n ch.platform === 'bigcommerce'\n ? 'Stencil'\n : ch.platform.charAt(0).toUpperCase() + ch.platform.slice(1)\n }`,\n })),\n });\n\n return existingChannel.id;\n}\n\nasync function setupProject(options: {\n projectName?: string;\n projectDir: string;\n}): Promise<{ projectName: string; projectDir: string }> {\n let { projectName, projectDir } = options;\n\n if (!pathExistsSync(projectDir)) {\n consola.error(`--project-dir ${projectDir} is not a valid path`);\n process.exit(1);\n }\n\n if (projectName) {\n projectName = kebabCase(projectName);\n projectDir = join(options.projectDir, projectName);\n\n if (pathExistsSync(projectDir)) {\n consola.error(`${projectDir} already exists`);\n process.exit(1);\n }\n }\n\n if (!projectName) {\n const validateProjectName = (i: string) => {\n const formatted = kebabCase(i);\n\n if (!formatted) return 'Project name is required';\n\n const targetDir = join(options.projectDir, formatted);\n\n if (pathExistsSync(targetDir)) return `Destination '${targetDir}' already exists`;\n\n projectName = formatted;\n projectDir = targetDir;\n\n return true;\n };\n\n await input({\n message: 'What do you want to name your project directory?',\n default: 'my-catalyst-app',\n validate: validateProjectName,\n });\n }\n\n if (!projectName) throw new Error('Something went wrong, projectName is not defined');\n if (!projectDir) throw new Error('Something went wrong, projectDir is not defined');\n\n return { projectName, projectDir };\n}\n\nfunction checkRequiredTools() {\n try {\n execSync(getPlatformCheckCommand('git'), { stdio: 'ignore' });\n } catch {\n consola.error('git is required to create a Catalyst project');\n process.exit(1);\n }\n\n try {\n execSync(getPlatformCheckCommand('pnpm'), { stdio: 'ignore' });\n } catch {\n consola.error(\n 'pnpm is required to create a Catalyst project. Enable it by running `corepack enable pnpm`.',\n );\n process.exit(1);\n }\n}\n\nexport const create = new Command('create')\n .configureHelp({ showGlobalOptions: true })\n .description('Scaffold and connect a Catalyst storefront to your BigCommerce store.')\n .addHelpText(\n 'after',\n `\nExamples:\n # Interactive scaffold (default — self-hosted, no hosting prompt)\n $ catalyst create\n\n # Non-interactive: skip the project-name prompt\n $ catalyst create --project-name my-store\n\n # Eagerly set up Commerce Hosting at create time\n $ catalyst create --project-name my-store --hosting commerce`,\n )\n .option('--project-name <name>', 'Name of your Catalyst project')\n .option('--project-dir <dir>', 'Directory in which to create your project', process.cwd())\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .option('--channel-id <id>', 'BigCommerce channel ID', parseChannelId)\n .option('--storefront-token <token>', 'BigCommerce storefront token')\n .option(\n '--gh-ref <ref>',\n 'Clone a specific ref from the source repository',\n '@bigcommerce/catalyst-core@latest',\n )\n .option('--reset-main', 'Reset the main branch to the gh-ref')\n .option('--repository <repository>', 'GitHub repository to clone from', 'bigcommerce/catalyst')\n .option(\n '--env <vars...>',\n 'Arbitrary environment variables to set in .env.local. Format: KEY=VALUE (repeatable).',\n parseEnvFlag,\n )\n .addOption(\n new Option(\n '--hosting <mode>',\n 'Hosting mode: \"self-hosted\" (default) or \"commerce\" to set up Commerce Hosting at create time. When omitted, scaffolding is hosting-agnostic; run `catalyst deploy` later to opt in.',\n ).choices(['self-hosted', 'commerce'] as const),\n )\n .option(\n '--use-existing',\n 'Only used with --hosting commerce and --project-name. When the named project already exists on the store, reuse it instead of prompting. Has no effect without --hosting commerce.',\n )\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\n .hideHelp(),\n )\n .addOption(\n new Option('--login-url <url>', 'BigCommerce login URL.')\n .env('BIGCOMMERCE_LOGIN_URL')\n .default(DEFAULT_LOGIN_URL)\n .hideHelp(),\n )\n .addOption(\n new Option('--cli-api-origin <origin>', 'Catalyst CLI API origin')\n .default('https://cxm-prd.bigcommerceapp.com')\n .hideHelp(),\n )\n // eslint-disable-next-line complexity\n .action(async (options) => {\n const { ghRef, repository } = options;\n\n if (options.useExisting && options.hosting !== 'commerce') {\n consola.warn('--use-existing has no effect without --hosting commerce. Ignoring.');\n }\n\n checkRequiredTools();\n\n const { projectName, projectDir } = await setupProject({\n projectName: options.projectName,\n projectDir: options.projectDir,\n });\n\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n let channelId = options.channelId;\n let storefrontToken = options.storefrontToken;\n\n let envVars: Record<string, string> = {};\n\n // Always require store creds. `--channel-id` + `--storefront-token` aren't\n // enough on their own — the storefront also needs BIGCOMMERCE_STORE_HASH at\n // runtime, and downstream catalyst commands (deploy, project, ...) need an\n // access token. Device login covers the missing pieces; the user picks the\n // store during the OAuth flow regardless of any partial flags they passed.\n if (!storeHash || !accessToken) {\n const credentials = await login(options.loginUrl);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n const useCommerceHosting = options.hosting === 'commerce';\n\n await getTelemetry().identify(storeHash);\n\n // Seed env vars from local state when all three were flag-provided. Channel\n // resolution below overwrites this wholesale via `envVars = { ...initData.envVars }`,\n // which is fine — that path means the user wanted us to fetch fresh values.\n if (storeHash && channelId && storefrontToken) {\n envVars.BIGCOMMERCE_STORE_HASH = storeHash;\n envVars.BIGCOMMERCE_CHANNEL_ID = channelId.toString();\n envVars.BIGCOMMERCE_STOREFRONT_TOKEN = storefrontToken;\n }\n\n // Resolve channel only when we have creds and are missing channel info.\n if (storeHash && accessToken && (!channelId || !storefrontToken)) {\n const apiHost = `api.${options.bigcommerceHostname}`;\n const cliApiOrigin = options.cliApiOrigin;\n\n if (channelId && !storefrontToken) {\n const initData = await getChannelInit(channelId, storeHash, accessToken, cliApiOrigin);\n\n envVars = { ...initData.envVars };\n storefrontToken = initData.storefrontToken;\n } else if (!channelId) {\n const eligibility = await checkChannelEligibility(storeHash, accessToken, cliApiOrigin);\n\n if (!eligibility.eligible) {\n consola.warn(eligibility.message);\n }\n\n let shouldCreateChannel;\n\n if (eligibility.eligible) {\n shouldCreateChannel = await select({\n message: 'Would you like to create a new channel?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n }\n\n if (shouldCreateChannel) {\n const channelData = await handleChannelCreation(\n storeHash,\n accessToken,\n apiHost,\n cliApiOrigin,\n );\n\n channelId = channelData.channelId;\n storefrontToken = channelData.storefrontToken;\n envVars = { ...channelData.envVars };\n\n consola.success('Channel created successfully.');\n consola.warn(\n 'A preview storefront has been deployed in your BigCommerce control panel. This preview may look different from your local environment as it may be running different code. Additionally, it may take a few minutes for the channel storefront to be accessible.',\n );\n }\n\n if (!shouldCreateChannel) {\n channelId = await handleChannelSelection(storeHash, accessToken, apiHost);\n\n const initData = await getChannelInit(channelId, storeHash, accessToken, cliApiOrigin);\n\n envVars = { ...initData.envVars };\n storefrontToken = initData.storefrontToken;\n }\n }\n }\n\n if (options.env) {\n Object.assign(envVars, options.env);\n }\n\n if (options.storeHash) envVars.BIGCOMMERCE_STORE_HASH = options.storeHash;\n if (options.channelId) envVars.BIGCOMMERCE_CHANNEL_ID = options.channelId.toString();\n if (options.storefrontToken) envVars.BIGCOMMERCE_STOREFRONT_TOKEN = options.storefrontToken;\n\n if (useCommerceHosting && accessToken) {\n envVars.BIGCOMMERCE_ACCESS_TOKEN = accessToken;\n }\n\n // Pre-populate CATALYST_ACCESS_TOKEN so subsequent catalyst CLI commands\n // (`catalyst deploy`, `catalyst project ...`, etc.) work without re-auth.\n // CATALYST_STORE_HASH isn't written — the CLI falls back to BIGCOMMERCE_STORE_HASH\n // (already in envVars from the channel init response) at startup.\n if (accessToken) envVars.CATALYST_ACCESS_TOKEN = accessToken;\n\n // Resolve the Commerce Hosting project before cloning so credential checks\n // and prompts happen up-front. We defer the file mutations\n // (`setupCommerceHosting`) until after the clone.\n let commerceHostingProject: ProjectListItem | undefined;\n\n if (useCommerceHosting && storeHash && accessToken) {\n const apiHost = `api.${options.bigcommerceHostname}`;\n const hasAccess = await hasProjectsAccess(storeHash, accessToken, apiHost);\n\n if (!hasAccess) {\n consola.error(\n 'This store does not have access to the Infrastructure Projects API. Contact support@bigcommerce.com to enable it.',\n );\n process.exit(1);\n }\n\n commerceHostingProject = await promptForCommerceHostingProject(\n { storeHash, accessToken, apiHost },\n projectName,\n !!options.projectName,\n options.useExisting,\n );\n }\n\n consola.info(`Creating '${projectName}' at '${projectDir}'`);\n\n // Anything that mutates `projectDir` runs inside this block. If a step\n // fails, the directory is likely partially populated — surface that to the\n // user so they can clean up before retrying. We don't auto-delete because\n // they may want to inspect the partial state first.\n try {\n cloneCatalyst({ repository, projectName, projectDir, ghRef, resetMain: options.resetMain });\n setupCoreProject(projectDir);\n\n if (useCommerceHosting && commerceHostingProject && storeHash && accessToken) {\n setupCommerceHosting({\n projectDir,\n projectUuid: commerceHostingProject.uuid,\n storeHash,\n accessToken,\n });\n }\n\n // Write env before install/build — keeps env vars available to any future\n // workspace build script that might read them, and matters today for\n // postinstall scripts that may resolve env-driven config.\n writeEnv(projectDir, envVars);\n\n await installDependencies(projectDir);\n buildWorkspacePackages(projectDir);\n } catch (error) {\n if (pathExistsSync(projectDir)) {\n consola.warn(\n `Setup failed before completion. '${projectDir}' may be in a partial state — review and delete it before re-running 'catalyst create'.`,\n );\n }\n\n throw error;\n }\n\n consola.success(`Created '${projectName}' at '${projectDir}'`);\n consola.info('Next steps:');\n consola.info(colorize('yellow', ` cd ${projectName}/core && pnpm run dev`));\n\n if (useCommerceHosting) {\n consola.info(\n colorize(\n 'yellow',\n ` Run 'cd ${projectName}/core && pnpm run deploy' when ready to deploy to Commerce Hosting.`,\n ),\n );\n }\n });\n","import { execSync } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport yoctoSpinner from 'yocto-spinner';\n\nconst WORKSPACE_PACKAGES = ['packages/catalyst', 'packages/client'] as const;\n\n// Catalyst monorepo layouts ship pre-built workspace packages, but a fresh\n// clone needs them rebuilt before `core` can resolve them. Skip silently when\n// the layout doesn't match (e.g. flat repo, custom fork) so this stays a no-op\n// for non-monorepo scaffolds.\nexport const buildWorkspacePackages = (projectDir: string) => {\n const hasCore = existsSync(join(projectDir, 'core'));\n const hasAllWorkspacePackages = WORKSPACE_PACKAGES.every((pkg) =>\n existsSync(join(projectDir, pkg)),\n );\n\n if (!hasCore || !hasAllWorkspacePackages) return;\n\n WORKSPACE_PACKAGES.forEach((pkg) => {\n const spinner = yoctoSpinner().start(`Building ${pkg}...`);\n\n try {\n execSync('pnpm build', { cwd: join(projectDir, pkg), stdio: 'ignore' });\n spinner.success(`Built ${pkg}.`);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n\n spinner.error(`Failed to build ${pkg}: ${message}`);\n throw error;\n }\n });\n};\n","import { z } from 'zod';\n\nimport { getTelemetry } from './telemetry';\n\n// `origin` is the CLI-API gateway (configured via `--cli-api-origin`, default\n// `https://cxm-prd.bigcommerceapp.com`). Distinct from `apiHost` used for the\n// BC store API (api.bigcommerce.com).\nconst cliApiUrl = (origin: string, storeHash: string, path: string) =>\n `${origin}/stores/${storeHash}/cli-api/v3${path}`;\n\nconst channelsUrl = (storeHash: string, apiHost: string, query: Record<string, string> = {}) => {\n const params = new URLSearchParams(query).toString();\n\n return `https://${apiHost}/stores/${storeHash}/v3/channels${params ? `?${params}` : ''}`;\n};\n\nconst authHeaders = (accessToken: string) => ({\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().correlationId,\n Accept: 'application/json',\n});\n\n// envVars values are coerced to strings: the BC API returns mixed primitives\n// (e.g. BIGCOMMERCE_CHANNEL_ID is a number) but they all end up in .env.local as text.\nconst envVarsSchema = z.record(z.string(), z.coerce.string());\n\nconst channelSchema = z.object({\n id: z.number(),\n name: z.string(),\n platform: z.string(),\n});\n\nexport type Channel = z.infer<typeof channelSchema>;\n\nconst channelsResponseSchema = z.object({\n data: z.array(channelSchema),\n});\n\nconst initResponseSchema = z.object({\n data: z.object({\n storefront_api_token: z.string(),\n envVars: envVarsSchema,\n }),\n});\n\nconst createChannelResponseSchema = z.object({\n data: z.object({\n id: z.number(),\n storefront_api_token: z.string(),\n envVars: envVarsSchema,\n }),\n});\n\nconst eligibilityResponseSchema = z.object({\n data: z.object({\n eligible: z.boolean(),\n message: z.string(),\n }),\n});\n\nexport interface ChannelInit {\n storefrontToken: string;\n envVars: Record<string, string>;\n}\n\nexport async function getChannelInit(\n channelId: number | string,\n storeHash: string,\n accessToken: string,\n origin: string,\n): Promise<ChannelInit> {\n const response = await fetch(cliApiUrl(origin, storeHash, `/channels/${channelId}/init`), {\n method: 'GET',\n headers: authHeaders(accessToken),\n });\n\n if (!response.ok) {\n throw new Error(\n `GET /channels/${channelId}/init failed: ${response.status} ${response.statusText}`,\n );\n }\n\n const { data } = initResponseSchema.parse(await response.json());\n\n return { storefrontToken: data.storefront_api_token, envVars: data.envVars };\n}\n\nexport interface ChannelEligibility {\n eligible: boolean;\n message: string;\n}\n\nexport async function checkChannelEligibility(\n storeHash: string,\n accessToken: string,\n origin: string,\n): Promise<ChannelEligibility> {\n const response = await fetch(cliApiUrl(origin, storeHash, '/channels/catalyst/eligibility'), {\n method: 'GET',\n headers: authHeaders(accessToken),\n });\n\n if (!response.ok) {\n throw new Error(\n `GET /channels/catalyst/eligibility failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return eligibilityResponseSchema.parse(await response.json()).data;\n}\n\nexport interface CreatedChannel {\n channelId: number;\n storefrontToken: string;\n envVars: Record<string, string>;\n}\n\nexport async function createChannel(\n name: string,\n storefrontLocale: string,\n additionalLocales: string[],\n installSampleData: boolean,\n storeHash: string,\n accessToken: string,\n origin: string,\n): Promise<CreatedChannel> {\n const response = await fetch(cliApiUrl(origin, storeHash, '/channels/catalyst'), {\n method: 'POST',\n headers: { ...authHeaders(accessToken), 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name,\n initialData: { type: installSampleData ? 'sample' : 'none' },\n deployStorefront: true,\n devOrigin: 'http://localhost:3000',\n storefrontLanguage: storefrontLocale,\n additionalLocales,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`POST /channels/catalyst failed: ${response.status} ${response.statusText}`);\n }\n\n const { data } = createChannelResponseSchema.parse(await response.json());\n\n return {\n channelId: data.id,\n storefrontToken: data.storefront_api_token,\n envVars: data.envVars,\n };\n}\n\nexport async function fetchAvailableChannels(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<Channel[]> {\n const response = await fetch(\n channelsUrl(storeHash, apiHost, { available: 'true', type: 'storefront' }),\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().correlationId,\n Accept: 'application/json',\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`GET /v3/channels failed: ${response.status} ${response.statusText}`);\n }\n\n return channelsResponseSchema.parse(await response.json()).data;\n}\n","import { execSync } from 'child_process';\n\nimport { checkoutRef } from './checkout-ref';\nimport { hasGitHubSSH } from './has-github-ssh';\nimport { consola } from './logger';\nimport { resetBranchToRef } from './reset-branch-to-ref';\n\nexport const cloneCatalyst = ({\n repository,\n projectName,\n projectDir,\n ghRef,\n resetMain = false,\n}: {\n repository: string;\n projectName: string;\n projectDir: string;\n ghRef?: string;\n resetMain?: boolean;\n}) => {\n const useSSH = hasGitHubSSH();\n\n consola.info(`Cloning ${repository} using ${useSSH ? 'SSH' : 'HTTPS'}...`);\n\n const cloneCommand = `git clone ${\n useSSH ? `git@github.com:${repository}` : `https://github.com/${repository}`\n }.git${projectName ? ` ${projectName}` : ''}`;\n\n execSync(cloneCommand, { stdio: 'inherit' });\n\n execSync('git remote rename origin upstream', { cwd: projectDir, stdio: 'inherit' });\n\n if (ghRef) {\n if (resetMain) {\n execSync('git checkout -b main', { cwd: projectDir, stdio: 'inherit' });\n\n resetBranchToRef(projectDir, ghRef);\n\n consola.success(`Reset main to ${ghRef} successfully.`);\n\n return;\n }\n\n checkoutRef(projectDir, ghRef);\n }\n};\n","import { sync as spawnSync } from 'cross-spawn';\n\nimport { isExecException } from './is-exec-exception';\nimport { consola } from './logger';\n\nexport function checkoutRef(repoDir: string, ref: string): void {\n try {\n const spawn = spawnSync('git', ['checkout', ref, '--'], {\n cwd: repoDir,\n encoding: 'utf8',\n shell: false,\n });\n\n const stderr = spawn.stderr.trim();\n\n if (spawn.status !== 0 && stderr) {\n throw new Error(stderr);\n }\n\n consola.success(`Checked out ref ${ref} successfully.`);\n } catch (error: unknown) {\n if (isExecException(error)) {\n const stderr = error.stderr ? error.stderr.toString() : '';\n\n if (\n stderr.includes(`fatal: reference is not a tree: ${ref}`) ||\n stderr.includes(`fatal: ambiguous argument '${ref}'`) ||\n stderr.includes(`unknown revision or path not in the working tree`)\n ) {\n consola.error(`Ref '${ref}' not found in the repository.`);\n } else {\n consola.error(`Error checking out ref '${ref}':`, stderr.trim());\n }\n } else if (error instanceof Error) {\n consola.error(`Error checking out ref '${ref}':`, error.message);\n } else {\n consola.error(`Unknown error occurred while checking out ref '${ref}'.`);\n }\n\n consola.warn(`Falling back to the default branch.`);\n }\n}\n","import { ExecException } from 'node:child_process';\n\nexport function isExecException(error: unknown): error is ExecException {\n return typeof error === 'object' && error !== null && 'stdout' in error && 'stderr' in error;\n}\n","import { execSync } from 'child_process';\n\nimport { isExecException } from './is-exec-exception';\n\nexport function hasGitHubSSH(): boolean {\n try {\n const output = execSync('ssh -T git@github.com', {\n encoding: 'utf8',\n stdio: 'pipe',\n }).toString();\n\n return output.includes('successfully authenticated');\n } catch (error: unknown) {\n if (isExecException(error)) {\n const stdout = error.stdout ? error.stdout.toString() : '';\n const stderr = error.stderr ? error.stderr.toString() : '';\n const combinedOutput = stdout + stderr;\n\n if (combinedOutput.includes('successfully authenticated')) {\n return true;\n }\n }\n\n return false;\n }\n}\n","import { sync as spawnSync } from 'cross-spawn';\n\nexport function resetBranchToRef(projectDir: string, ghRef: string) {\n const spawn = spawnSync('git', ['reset', '--hard', ghRef, '--'], {\n cwd: projectDir,\n encoding: 'utf8',\n shell: false,\n });\n\n const stderr = spawn.stderr.trim();\n\n if (spawn.status !== 0 && stderr) {\n throw new Error(stderr);\n }\n}\n","import { input, select, Separator } from '@inquirer/prompts';\nimport { colorize } from 'consola/utils';\nimport {\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n symlinkSync,\n unlinkSync,\n writeFileSync,\n} from 'fs';\nimport { dirname, join } from 'path';\nimport { z } from 'zod';\n\nimport { consola } from './logger';\nimport {\n createProject,\n fetchProjects,\n InfrastructureProjectValidationError,\n type ProjectListItem,\n} from './project';\nimport { sortPackageJsonFields } from './sort-package-json';\n\nconst OPENNEXT_CLOUDFLARE_VERSION = '1.17.3';\n\nconst corePackageJsonSchema = z.looseObject({\n dependencies: z.record(z.string(), z.string()).optional(),\n});\n\nconst writeJson = (path: string, value: unknown) => {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`);\n};\n\nconst symlinkRootEnvToCore = (projectDir: string) => {\n const coreEnvPath = join(projectDir, 'core', '.env.local');\n\n if (lstatSync(coreEnvPath, { throwIfNoEntry: false })) return;\n\n try {\n symlinkSync('../.env.local', coreEnvPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n\n consola.warn(\n `Could not create symlink at core/.env.local: ${message}\\n` +\n 'On Windows, enable Developer Mode or run as administrator to allow symlinks.\\n' +\n 'You will need to keep .env.local and core/.env.local in sync manually.',\n );\n }\n};\n\nconst convertProxyToMiddleware = (projectDir: string) => {\n const proxyPath = join(projectDir, 'core', 'proxy.ts');\n const middlewarePath = join(projectDir, 'core', 'middleware.ts');\n\n if (!existsSync(proxyPath)) return;\n\n const contents = readFileSync(proxyPath, 'utf-8')\n .replace('export const proxy', 'export const middleware')\n .replace('export const config = {', \"export const config = {\\n runtime: 'experimental-edge',\");\n\n writeFileSync(middlewarePath, contents);\n unlinkSync(proxyPath);\n};\n\nexport const setupCommerceHosting = ({\n projectDir,\n projectUuid,\n storeHash,\n accessToken,\n}: {\n projectDir: string;\n projectUuid: string;\n storeHash?: string;\n accessToken?: string;\n}) => {\n const corePackageJsonPath = join(projectDir, 'core', 'package.json');\n const pkg = corePackageJsonSchema.parse(JSON.parse(readFileSync(corePackageJsonPath, 'utf-8')));\n\n pkg.dependencies = {\n ...pkg.dependencies,\n '@opennextjs/cloudflare': OPENNEXT_CLOUDFLARE_VERSION,\n };\n\n writeJson(corePackageJsonPath, sortPackageJsonFields(pkg));\n\n const projectJson: Record<string, string> = {\n projectUuid,\n framework: 'catalyst',\n };\n\n if (storeHash) projectJson.storeHash = storeHash;\n if (accessToken) projectJson.accessToken = accessToken;\n\n writeJson(join(projectDir, 'core', '.bigcommerce', 'project.json'), projectJson);\n\n symlinkRootEnvToCore(projectDir);\n convertProxyToMiddleware(projectDir);\n};\n\ninterface CommerceHostingApiContext {\n storeHash: string;\n accessToken: string;\n apiHost: string;\n}\n\n// Thrown by `selectOrCreateInfrastructureProject` when the user declines the\n// \"Would you like to create one?\" prompt that surfaces when no projects exist.\n// Callers translate this into a context-appropriate error (e.g. \"Cannot deploy\n// without being linked to a project\").\nexport class NoLinkedProjectError extends Error {\n constructor() {\n super('No infrastructure project linked: user declined to create one.');\n this.name = 'NoLinkedProjectError';\n }\n}\n\nasync function promptForNewProjectName(api: CommerceHostingApiContext): Promise<ProjectListItem> {\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(\n String(newProjectName),\n api.storeHash,\n api.accessToken,\n api.apiHost,\n );\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n\n return { uuid: data.uuid, name: data.name };\n}\n\n// Generic \"select an existing project, or create a new one\" prompt — used by\n// `catalyst project link` and by `catalyst deploy` when its linked project is\n// missing. Distinct from `promptForCommerceHostingProject` which has\n// default-name + auto-create semantics tailored to `catalyst create`.\n//\n// Pass `linkedProjectUuid` to decorate the matching project's label with\n// `[linked]` so the user can see which one is the current selection.\nexport async function selectOrCreateInfrastructureProject(\n api: CommerceHostingApiContext,\n linkedProjectUuid?: string,\n): Promise<ProjectListItem> {\n consola.start('Fetching projects...');\n\n const existingProjects = await fetchProjects(api.storeHash, api.accessToken, api.apiHost);\n\n consola.success('Projects fetched.');\n\n // No existing projects on the store — skip the select prompt and offer\n // creation directly. Declining means we have nothing to link to.\n if (existingProjects.length === 0) {\n const shouldCreate = await consola.prompt(\n 'There are not any hosting projects that you can link to yet. Would you like to create one?',\n { type: 'confirm', initial: true },\n );\n\n if (!shouldCreate) {\n throw new NoLinkedProjectError();\n }\n\n return promptForNewProjectName(api);\n }\n\n const promptOptions = [\n ...existingProjects.map((p) => ({\n label: p.uuid === linkedProjectUuid ? `${p.name} ${colorize('green', '[linked]')}` : p.name,\n value: p.uuid,\n hint: p.uuid,\n })),\n {\n label: 'Create a new project',\n value: 'create',\n hint: 'Create a new hosting project for this Catalyst storefront.',\n },\n ];\n\n const selected = await consola.prompt(\n 'Select a project or create a new project (Press <enter> to select).',\n { type: 'select', options: promptOptions, cancel: 'reject' },\n );\n\n if (selected === 'create') {\n return promptForNewProjectName(api);\n }\n\n const matched = existingProjects.find((p) => p.uuid === selected);\n\n if (!matched) {\n throw new Error(`Selected project ${String(selected)} not found in fetched list.`);\n }\n\n return matched;\n}\n\nexport async function promptForCommerceHostingProject(\n api: CommerceHostingApiContext,\n defaultName: string,\n autoUseDefaultName?: boolean,\n useExistingOnCollision?: boolean,\n): Promise<ProjectListItem> {\n const existingProjects = await fetchProjects(api.storeHash, api.accessToken, api.apiHost);\n const takenNames = existingProjects.map((project) => project.name);\n\n if (autoUseDefaultName) {\n return autoCreateCommerceHostingProject(\n api,\n defaultName,\n existingProjects,\n useExistingOnCollision,\n );\n }\n\n const conflict = existingProjects.find(\n (project) => project.name.toLowerCase() === defaultName.toLowerCase(),\n );\n\n if (!conflict) {\n return autoCreateCommerceHostingProject(\n api,\n defaultName,\n existingProjects,\n useExistingOnCollision,\n );\n }\n\n type Action = 'use-named' | 'select-from-list' | 'create';\n\n const hasOtherProjects = existingProjects.length > 1;\n\n const choices: Array<{ name: string; value: Action }> = [\n { name: `Use \"${conflict.name}\"`, value: 'use-named' },\n ];\n\n if (hasOtherProjects) {\n choices.push({ name: 'Select from my projects', value: 'select-from-list' });\n }\n\n choices.push({ name: 'Create a new project', value: 'create' });\n\n const action = await select<Action>({\n message: hasOtherProjects\n ? `It looks like you already have an existing Commerce Hosting project named \"${conflict.name}\". Would you like to use it, select from your projects, or create a new one?`\n : `It looks like you already have an existing Commerce Hosting project named \"${conflict.name}\". Would you like to use it, or create a new one?`,\n choices,\n });\n\n if (action === 'use-named') {\n consola.success(`Using existing Commerce Hosting project \"${conflict.name}\"`);\n\n return conflict;\n }\n\n if (action === 'create') {\n return promptAndCreateCommerceHostingProject(api, takenNames, defaultName);\n }\n\n const selected = await select<ProjectListItem | 'create-new'>({\n message: 'Which Commerce Hosting project would you like to use?',\n choices: [\n ...existingProjects.map((project) => ({\n name: project.name,\n value: project,\n description: project.uuid,\n })),\n new Separator(),\n { name: 'Create a new project', value: 'create-new' as const },\n ],\n });\n\n if (selected === 'create-new') {\n return promptAndCreateCommerceHostingProject(api, takenNames, defaultName);\n }\n\n consola.success(`Using existing Commerce Hosting project \"${selected.name}\"`);\n\n return selected;\n}\n\nexport async function promptAndCreateCommerceHostingProject(\n api: CommerceHostingApiContext,\n takenNames: readonly string[],\n defaultName?: string,\n): Promise<ProjectListItem> {\n const projectName = await input({\n message: 'What would you like to name your Commerce Hosting project?',\n default: defaultName,\n validate: (value) => {\n const trimmed = value.trim();\n\n if (!trimmed) return 'Project name is required';\n\n const conflict = takenNames.find((taken) => taken.toLowerCase() === trimmed.toLowerCase());\n\n if (conflict) {\n return `A Commerce Hosting project named \"${conflict}\" already exists`;\n }\n\n return true;\n },\n theme: {\n style: {\n help: () =>\n colorize(\n 'dim',\n '(The project that hosts your storefront on Commerce — often matches your folder name.)',\n ),\n },\n },\n });\n\n try {\n const created = await createProject(\n projectName.trim(),\n api.storeHash,\n api.accessToken,\n api.apiHost,\n );\n\n consola.success(`Commerce Hosting project \"${created.name}\" created successfully`);\n\n return { uuid: created.uuid, name: created.name };\n } catch (error) {\n if (error instanceof InfrastructureProjectValidationError) {\n consola.error(error.message);\n\n return promptAndCreateCommerceHostingProject(api, takenNames, defaultName);\n }\n\n throw error;\n }\n}\n\nasync function resolveCollisionChoice(\n existingName: string,\n useExistingOnCollision: boolean | undefined,\n): Promise<boolean> {\n if (useExistingOnCollision === true) return true;\n\n if (!process.stdin.isTTY) return false;\n\n return select<boolean>({\n message: `A Commerce Hosting project named \"${existingName}\" already exists. Use the existing project?`,\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n}\n\nasync function autoCreateCommerceHostingProject(\n api: CommerceHostingApiContext,\n name: string,\n existingProjects: readonly ProjectListItem[],\n useExistingOnCollision?: boolean,\n): Promise<ProjectListItem> {\n const existing = existingProjects.find(\n (project) => project.name.toLowerCase() === name.toLowerCase(),\n );\n\n if (existing) {\n const shouldUseExisting = await resolveCollisionChoice(existing.name, useExistingOnCollision);\n\n if (shouldUseExisting) {\n consola.success(`Using existing Commerce Hosting project \"${existing.name}\"`);\n\n return existing;\n }\n\n consola.error(\n 'Not reusing the existing project. Re-run with a different --project-name, or pass --use-existing to reuse it.',\n );\n process.exit(1);\n }\n\n try {\n const created = await createProject(name, api.storeHash, api.accessToken, api.apiHost);\n\n consola.success(`Commerce Hosting project \"${created.name}\" created successfully`);\n\n return { uuid: created.uuid, name: created.name };\n } catch (error) {\n if (error instanceof InfrastructureProjectValidationError) {\n consola.error(\n `Failed to create Commerce Hosting project \"${name}\": ${error.message}\\nRe-run with a different --project-name.`,\n );\n process.exit(1);\n }\n\n throw error;\n }\n}\n\n// Orchestrates prompt + file mutations. Callable from `catalyst create --hosting commerce`\n// (eager) and `catalyst deploy` (lazy). Idempotent — safe to re-run.\nexport async function runCommerceHostingSetup({\n api,\n projectDir,\n defaultProjectName,\n autoUseProjectName,\n useExistingOnCollision,\n}: {\n api: CommerceHostingApiContext;\n projectDir: string;\n defaultProjectName: string;\n autoUseProjectName?: boolean;\n useExistingOnCollision?: boolean;\n}): Promise<ProjectListItem> {\n const project = await promptForCommerceHostingProject(\n api,\n defaultProjectName,\n autoUseProjectName,\n useExistingOnCollision,\n );\n\n setupCommerceHosting({\n projectDir,\n projectUuid: project.uuid,\n storeHash: api.storeHash,\n accessToken: api.accessToken,\n });\n\n return project;\n}\n","// Canonical order for top-level fields in core/package.json. Anything not in\n// this list is appended afterwards in its original position relative to other\n// unknown keys, so we don't drop or reshuffle uncommon fields like `keywords`.\nconst FIELD_ORDER = [\n 'name',\n 'description',\n 'version',\n 'private',\n 'engines',\n 'scripts',\n 'dependencies',\n 'devDependencies',\n] as const;\n\nexport function sortPackageJsonFields<T extends Record<string, unknown>>(pkg: T): T {\n const ordered: Record<string, unknown> = {};\n\n FIELD_ORDER.forEach((field) => {\n if (field in pkg) {\n ordered[field] = pkg[field];\n }\n });\n\n Object.keys(pkg).forEach((key) => {\n if (!(key in ordered)) {\n ordered[key] = pkg[key];\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return ordered as T;\n}\n","import { installDependencies as installDeps } from 'nypm';\nimport yoctoSpinner from 'yocto-spinner';\n\nexport const installDependencies = async (projectDir: string) => {\n const spinner = yoctoSpinner().start('Installing dependencies. This could take a minute...');\n\n try {\n await installDeps({ cwd: projectDir, silent: true, packageManager: 'pnpm' });\n spinner.success('Dependencies installed successfully.');\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n\n spinner.error(`Failed to install dependencies: ${message}`);\n throw error;\n }\n};\n","import { z } from 'zod';\n\nimport { getTelemetry } from './telemetry';\n\nconst allowedLocales = [\n 'en',\n 'da',\n 'es-AR',\n 'es-CL',\n 'es-CO',\n 'es-MX',\n 'es-PE',\n 'es-419',\n 'es',\n 'it',\n 'nl',\n 'pl',\n 'pt',\n 'de',\n 'fr',\n 'ja',\n 'no',\n 'pt-BR',\n 'sv',\n];\n\nconst AvailableLocalesSuccessSchema = z.object({\n data: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n fallback: z.string().nullable(),\n is_supported: z.boolean(),\n }),\n ),\n});\n\nexport const getAvailableLocales = async (\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/settings/store/available-locales`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().correlationId,\n Accept: 'application/json',\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `GET /v3/settings/store/available-locales failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return AvailableLocalesSuccessSchema.parse(await response.json())\n .data.filter(({ id }) => allowedLocales.includes(id))\n .map(({ name, id }) => ({ name: `${name} (${id})`, value: id }));\n};\n","import { colorize } from 'consola/utils';\nimport open from 'open';\nimport yoctoSpinner from 'yocto-spinner';\n\nimport { requestDeviceCode, waitForDeviceToken } from './auth';\nimport { consola } from './logger';\n\nexport interface LoginResult {\n storeHash: string;\n accessToken: string;\n}\n\nexport async function login(loginUrl: string): Promise<LoginResult> {\n const deviceCode = await requestDeviceCode(loginUrl);\n\n consola.info(\n `${colorize('yellow', 'Your one-time code:')} ${colorize('bold', deviceCode.user_code)}`,\n );\n\n try {\n await open(deviceCode.verification_uri);\n consola.info(`Opened ${deviceCode.verification_uri} in your browser.`);\n } catch {\n consola.info(`Open ${deviceCode.verification_uri} in your browser and enter the code above.`);\n }\n\n const spinner = yoctoSpinner().start('Waiting for authentication...');\n\n const credentials = await waitForDeviceToken(\n loginUrl,\n deviceCode.device_code,\n deviceCode.interval,\n );\n\n spinner.success('Authentication complete.');\n\n return {\n storeHash: credentials.store_hash,\n accessToken: credentials.access_token,\n };\n}\n","import { mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { z } from 'zod';\n\nimport PACKAGE_INFO from '../../../package.json';\n\nimport { sortPackageJsonFields } from './sort-package-json';\n\nconst corePackageJsonSchema = z.looseObject({\n scripts: z.record(z.string(), z.string()).optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n});\n\nconst writeJson = (path: string, value: unknown) => {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`);\n};\n\n// Wires Catalyst CLI scripts and the `@bigcommerce/catalyst` dep into a freshly\n// cloned `core/`. Always runs at create time, regardless of hosting choice —\n// `catalyst build` / `catalyst start` / `catalyst deploy` dispatch on project\n// state, so these scripts work for self-hosted projects too without rewrite.\nexport const setupCoreProject = (projectDir: string) => {\n const corePackageJsonPath = join(projectDir, 'core', 'package.json');\n const pkg = corePackageJsonSchema.parse(JSON.parse(readFileSync(corePackageJsonPath, 'utf-8')));\n\n pkg.scripts = {\n ...pkg.scripts,\n build: 'npm run generate && catalyst build',\n start: 'catalyst start',\n deploy: 'npm run generate && catalyst deploy',\n };\n\n pkg.dependencies = {\n ...pkg.dependencies,\n '@bigcommerce/catalyst': PACKAGE_INFO.version,\n };\n\n writeJson(corePackageJsonPath, sortPackageJsonFields(pkg));\n};\n","import { Option } from 'commander';\n\nimport { getProjectConfig } from './project-config';\n\nexport const storeHashOption = () =>\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel. Read from .bigcommerce/project.json or .env when not provided.',\n ).env('CATALYST_STORE_HASH');\n\nexport const accessTokenOption = () =>\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account. Read from .bigcommerce/project.json or .env when not provided.',\n ).env('CATALYST_ACCESS_TOKEN');\n\nexport const apiHostOption = () =>\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com')\n .hideHelp();\n\nexport const projectUuidOption = () =>\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Read from .bigcommerce/project.json or .env when not provided.',\n ).env('CATALYST_PROJECT_UUID');\n\nexport const resolveProjectUuid = (options: { projectUuid?: string }) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n return projectUuid;\n};\n","import { outputFileSync } from 'fs-extra/esm';\nimport { join } from 'path';\n\n// Writes core/.env.local — Next.js (and all the catalyst CLI commands) read env vars\n// from there, since `core/` is the package they run inside.\nexport const writeEnv = (projectDir: string, envVars: Record<string, string>) => {\n outputFileSync(\n join(projectDir, 'core', '.env.local'),\n `${Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')}\\n`,\n );\n};\n","import AdmZip from 'adm-zip';\nimport { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport {\n NoLinkedProjectError,\n selectOrCreateInfrastructureProject,\n setupCommerceHosting,\n} from '../lib/commerce-hosting';\nimport { getDeploymentErrorMessage } from '../lib/deployment-errors';\nimport { installDependencies } from '../lib/install-dependencies';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { getProjectState } from '../lib/project-state';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport {\n accessTokenOption,\n apiHostOption,\n projectUuidOption,\n storeHashOption,\n} from '../lib/shared-options';\nimport { getTelemetry } from '../lib/telemetry';\n\nimport { buildCatalystProject } from './build';\n\nconst stepsEnum = z.enum([\n 'initializing',\n 'downloading',\n 'unzipping',\n 'processing',\n 'deploying',\n 'finalizing',\n 'complete',\n]);\n\nconst STEPS: Record<z.infer<typeof stepsEnum>, string> = {\n initializing: 'Initializing...',\n downloading: 'Downloading...',\n unzipping: 'Unzipping...',\n processing: 'Processing...',\n deploying: 'Deploying...',\n finalizing: 'Finalizing...',\n complete: 'Complete',\n};\n\nconst UploadSignatureSchema = z.object({\n data: z.object({\n upload_url: z.url(),\n upload_uuid: z.string(),\n }),\n});\n\nconst CreateDeploymentSchema = z.object({\n data: z.object({\n deployment_uuid: z.uuid(),\n }),\n});\n\nconst ProjectSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.uuid(),\n name: z.string(),\n }),\n ),\n});\n\nconst DeploymentStatusSchema = z.object({\n deployment_uuid: z.uuid(),\n deployment_status: z.enum(['queued', 'in_progress', 'failed', 'completed']),\n event: z\n .object({\n step: stepsEnum,\n progress: z.number(),\n })\n .nullable(),\n deployment_url: z.string().nullable(),\n error: z\n .object({\n code: z.number(),\n })\n .optional(),\n});\n\nexport const generateBundleZip = async () => {\n consola.info('Generating bundle...');\n\n const bigcommerceDir = join(process.cwd(), '.bigcommerce');\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n // Check if .bigcommerce/dist exists\n try {\n await access(distDir);\n } catch {\n throw new Error(`Dist directory not found: ${distDir}`);\n }\n\n // Check if .bigcommerce/dist is not empty\n const buildDirContents = await readdir(distDir);\n\n if (buildDirContents.length === 0) {\n throw new Error(`Dist directory is empty: ${distDir}`);\n }\n\n const outputZip = join(bigcommerceDir, 'bundle.zip');\n\n // Use AdmZip to create the zip\n const zip = new AdmZip();\n\n zip.addLocalFolder(distDir, 'output');\n zip.writeZip(outputZip);\n\n consola.success(`Bundle created at: ${outputZip}`);\n};\n\nexport const generateUploadSignature = async (\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Generating upload signature...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/uploads`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n body: JSON.stringify({}),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch upload signature: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = UploadSignatureSchema.parse(res);\n\n consola.success('Upload signature generated.');\n\n return data;\n};\n\nexport const uploadBundleZip = async (uploadUrl: string) => {\n consola.info('Uploading bundle...');\n\n const zipPath = join(process.cwd(), '.bigcommerce', 'bundle.zip');\n\n // Read the zip file as a buffer\n const fileBuffer = await readFile(zipPath);\n\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/zip',\n },\n body: fileBuffer,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to upload bundle: ${response.status} ${response.statusText}`);\n }\n\n consola.success('Bundle uploaded successfully.');\n\n return true;\n};\n\nexport const parseEnvironmentVariables = (secretOption?: string[]) => {\n return secretOption?.map((envVar) => {\n const [key, value] = envVar.split('=');\n\n if (!key || !value) {\n throw new Error(`Invalid secret format: ${envVar}. Expected format: KEY=VALUE`);\n }\n\n return {\n type: 'secret' as const,\n key: key.trim(),\n value: value.trim(),\n };\n });\n};\n\nconst AUTO_DETECT_SECRETS = [\n { key: 'BIGCOMMERCE_STORE_HASH', warnIfMissing: true },\n { key: 'BIGCOMMERCE_CHANNEL_ID', warnIfMissing: true },\n { key: 'BIGCOMMERCE_STOREFRONT_TOKEN', warnIfMissing: true },\n { key: 'BIGCOMMERCE_API_HOST', warnIfMissing: false },\n { key: 'BIGCOMMERCE_GRAPHQL_API_DOMAIN', warnIfMissing: false },\n { key: 'AUTH_SECRET', warnIfMissing: false },\n];\n\nexport const autoDetectSecrets = (\n environmentVariables?: Array<{ type: 'secret' | 'plain_text'; key: string; value: string }>,\n) => {\n const secrets = environmentVariables ?? [];\n const existingKeys = new Set(secrets.map((s) => s.key));\n\n AUTO_DETECT_SECRETS.forEach(({ key, warnIfMissing }) => {\n if (existingKeys.has(key)) {\n return;\n }\n\n const value = process.env[key];\n\n if (value) {\n secrets.push({ type: 'secret', key, value });\n } else if (warnIfMissing) {\n consola.warn(`${key} is not set in the environment and was not provided via --secret.`);\n }\n });\n\n return secrets;\n};\n\nexport const createDeployment = async (\n projectUuid: string,\n uploadUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n environmentVariables?: Array<{ type: 'secret' | 'plain_text'; key: string; value: string }>,\n) => {\n consola.info('Creating deployment...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n body: JSON.stringify({\n project_uuid: projectUuid,\n upload_uuid: uploadUuid,\n environment_variables: environmentVariables,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to create deployment: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = CreateDeploymentSchema.parse(res);\n\n consola.success('Deployment started...');\n\n return data;\n};\n\nexport const getDeploymentStatus = async (\n deploymentUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Fetching deployment status...');\n\n const spinner = yoctoSpinner().start('Fetching...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/${deploymentUuid}/events`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to open event stream: ${response.status} ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new Error('Failed to read event stream.');\n }\n\n const decoder = new TextDecoder();\n let done = false;\n let deploymentUrl: string | undefined;\n\n while (!done) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n let json: unknown;\n\n if (value) {\n const chunk = decoder.decode(value, { stream: true }).trim();\n const split = chunk\n .split('\\n\\n')\n .map((s) => s.replace('data:', '').trim())\n .filter(Boolean);\n\n // eslint-disable-next-line no-loop-func\n split.forEach((event) => {\n try {\n json = JSON.parse(event);\n } catch (error) {\n consola.warn(`Failed to parse event, dropping from stream. Event: ${event}`, error);\n\n return;\n }\n\n const data = DeploymentStatusSchema.parse(json);\n\n if (data.error) {\n throw new Error(\n `Deployment failed (error code ${data.error.code}): ${getDeploymentErrorMessage(data.error.code)}`,\n );\n }\n\n if (data.event && STEPS[data.event.step] !== spinner.text) {\n spinner.text = STEPS[data.event.step];\n }\n\n if (data.deployment_url) {\n deploymentUrl = data.deployment_url;\n }\n });\n }\n\n done = streamDone;\n }\n\n spinner.success('Deployment completed successfully.');\n\n if (deploymentUrl) {\n const url = deploymentUrl.startsWith('https://') ? deploymentUrl : `https://${deploymentUrl}`;\n\n consola.success(`View your deployment at: ${colorize('blue', url)}`);\n }\n};\n\nexport const fetchProject = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = ProjectSchema.parse(res);\n\n return data.find((project) => project.uuid === projectUuid);\n};\n\nexport const deploy = new Command('deploy')\n .configureHelp({ showGlobalOptions: true })\n .description('Deploy your application to Cloudflare.')\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst deploy --secret BIGCOMMERCE_STORE_HASH=<YOUR_STORE_HASH> --secret BIGCOMMERCE_STOREFRONT_TOKEN=<YOUR_STOREFRONT_TOKEN>`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .addOption(\n new Option(\n '--secret <value>',\n 'Secret to set for the deployment (repeatable). Format: --secret KEY=VALUE',\n ).argParser((value: string, previous: string[] = []) => {\n return previous.concat([value]);\n }),\n )\n .option('--dry-run', 'Run the command to generate the bundle without uploading or deploying.')\n .option(\n '--prebuilt',\n 'Skip the build step. Requires .bigcommerce/dist/ to already contain build output.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n const telemetry = getTelemetry();\n\n await telemetry.identify(storeHash);\n\n // Resolve a *valid* projectUuid before doing any expensive build/upload\n // work. If the linked UUID no longer exists on the server (e.g. project\n // deleted out from under us), prompt the user to pick a new one rather\n // than failing mid-deploy.\n const linkedProjectUuid = options.projectUuid ?? config.get('projectUuid');\n let projectUuid: string;\n\n const promptForProject = async (): Promise<{ uuid: string; name: string }> => {\n try {\n return await selectOrCreateInfrastructureProject({\n storeHash,\n accessToken,\n apiHost: options.apiHost,\n });\n } catch (error) {\n if (error instanceof NoLinkedProjectError) {\n consola.info(\n \"When you're ready to create a project, run `catalyst project create` or re-run `catalyst deploy`.\",\n );\n process.exit(0);\n }\n\n throw error;\n }\n };\n\n if (linkedProjectUuid) {\n const existing = await fetchProject(\n linkedProjectUuid,\n storeHash,\n accessToken,\n options.apiHost,\n );\n\n if (existing) {\n projectUuid = linkedProjectUuid;\n } else {\n consola.warn(\n `The linked project (${linkedProjectUuid}) no longer exists on this store. It may have been deleted.`,\n );\n\n const selected = await promptForProject();\n\n projectUuid = selected.uuid;\n config.set('projectUuid', projectUuid);\n consola.success(`Linked project \"${selected.name}\".`);\n }\n } else {\n consola.info('No project is currently linked.');\n\n const selected = await promptForProject();\n\n projectUuid = selected.uuid;\n config.set('projectUuid', projectUuid);\n consola.success(`Linked project \"${selected.name}\".`);\n }\n\n // The OpenNext build pipeline requires the project to be transformed\n // (proxy.ts → middleware.ts, @opennextjs/cloudflare installed). Run setup\n // here so first-run `catalyst deploy` works on a fresh self-hosted scaffold\n // without forcing the user to re-run after a separate setup step.\n if (!getProjectState().isTransformed) {\n const shouldSetup = await consola.prompt(\n 'Your project is not yet set up for Commerce Hosting deployments. Would you like to run the Commerce Hosting setup now?',\n { type: 'confirm', initial: true },\n );\n\n if (!shouldSetup) {\n consola.info(\"When you're ready to deploy, re-run `catalyst deploy` to complete setup.\");\n process.exit(0);\n }\n\n const projectDir = dirname(process.cwd());\n\n setupCommerceHosting({ projectDir, projectUuid, storeHash, accessToken });\n consola.success('Commerce Hosting setup complete.');\n\n await installDependencies(projectDir);\n }\n\n if (options.prebuilt) {\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n try {\n await access(distDir);\n } catch {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n const contents = await readdir(distDir);\n\n if (contents.length === 0) {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n consola.info('Using existing build output (--prebuilt).');\n } else {\n await buildCatalystProject(projectUuid);\n }\n\n await generateBundleZip();\n\n if (options.dryRun) {\n consola.info('Dry run enabled — skipping upload and deployment steps.');\n consola.info('Next steps (skipped):');\n consola.info('- Generate upload signature');\n consola.info('- Upload bundle.zip');\n consola.info('- Create deployment');\n\n process.exit(0);\n }\n\n const uploadSignature = await generateUploadSignature(storeHash, accessToken, options.apiHost);\n\n await uploadBundleZip(uploadSignature.upload_url);\n\n const environmentVariables = autoDetectSecrets(parseEnvironmentVariables(options.secret));\n\n const { deployment_uuid: deploymentUuid } = await createDeployment(\n projectUuid,\n uploadSignature.upload_uuid,\n storeHash,\n accessToken,\n options.apiHost,\n environmentVariables,\n );\n\n await getDeploymentStatus(deploymentUuid, storeHash, accessToken, options.apiHost);\n });\n","const ERROR_MESSAGES: Record<number, string> = {\n 10: 'Something went wrong on our end. Please try again. If the issue persists, contact support.',\n 20: \"We couldn't retrieve your bundle. This is usually a temporary issue — please try deploying again. If the problem continues, contact support.\",\n 30: 'Your bundle could not be extracted. This may mean your build output is too large (max 64 MB compressed / 512 MB uncompressed) or the archive is corrupted. Try reducing your build size or rebuilding your project and deploying again.',\n 40: `There's a problem with your build output. This could be caused by:\n- A worker.js file larger than 40 MB\n- An individual asset file larger than 25 MB\n- More than 1,000 total files in the bundle`,\n 50: 'Deployment failed. This is usually a temporary issue — please try again. If the problem persists, contact support.',\n 60: \"Your code was deployed, but we couldn't determine your deployment URL. Please try deploying again. If the issue persists, contact support.\",\n};\n\nexport function getDeploymentErrorMessage(code: number): string {\n return (\n ERROR_MESSAGES[code] ??\n `Deployment failed with an unexpected error (code: ${code}). Please try again. If the issue persists, contact support.`\n );\n}\n","import Conf from 'conf';\n\nimport { consola } from './logger';\nimport { ProjectConfigSchema } from './project-config';\n\nexport function resolveCredentials(\n options: { storeHash?: string; accessToken?: string },\n config: Conf<ProjectConfigSchema>,\n): { storeHash: string; accessToken: string } {\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.error('Missing credentials.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n // Unreachable in production; prevents continuation when process.exit is mocked in tests.\n throw new Error('Missing credentials');\n }\n\n return { storeHash, accessToken };\n}\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { z } from 'zod';\n\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport {\n accessTokenOption,\n apiHostOption,\n projectUuidOption,\n resolveProjectUuid,\n storeHashOption,\n} from '../lib/shared-options';\nimport { Telemetry } from '../lib/telemetry';\n\ntype LogFormat = 'json' | 'pretty' | 'default' | 'short' | 'request';\n\nconst telemetry = new Telemetry();\n\nconst DEFAULT_CONNECTION_TTL_MS = 1 * 60 * 1000; // 1 minute\nconst MAX_RETRIES = 5;\n\nconst isFatalStatusCode = (status: number) => status >= 400 && status < 500;\n\nconst LEVEL_COLORS: Record<string, Parameters<typeof colorize>[0]> = {\n INFO: 'green',\n WARN: 'yellow',\n ERROR: 'red',\n DEBUG: 'gray',\n};\n\nconst LogEventSchema = z\n .object({\n uuid: z.string(),\n project_uuid: z.string(),\n request: z.object({\n method: z.string(),\n url: z.string(),\n status_code: z.number(),\n }),\n logs: z.array(\n z.object({\n timestamp: z.string(),\n level: z.string(),\n messages: z.array(z.unknown()),\n }),\n ),\n exceptions: z.array(z.unknown()),\n timestamp: z.string(),\n })\n .loose();\n\nclass StreamError extends Error {\n fatal: boolean;\n\n constructor(message: string, fatal: boolean) {\n super(message);\n this.fatal = fatal;\n }\n}\n\nconst formatMessages = (messages: unknown[]) =>\n messages.map((m) => (typeof m === 'string' ? m : JSON.stringify(m))).join(' ');\n\nconst formatLogEvent = (\n event: z.infer<typeof LogEventSchema>,\n format: 'default' | 'short' | 'request',\n) => {\n const { request, logs: logEntries, exceptions } = event;\n\n logEntries.forEach((entry) => {\n const msg = formatMessages(entry.messages);\n const level = entry.level.toUpperCase();\n const coloredLevel = colorize(LEVEL_COLORS[level] ?? 'white', level);\n\n switch (format) {\n case 'short':\n consola.log(msg);\n break;\n\n case 'request':\n consola.log(\n `[${entry.timestamp}] [${coloredLevel}] ${request.method} ${request.url}` +\n ` (${request.status_code}) ${msg}`,\n );\n break;\n\n default:\n consola.log(`[${entry.timestamp}] [${coloredLevel}] ${msg}`);\n break;\n }\n });\n\n exceptions.forEach((exception) => {\n consola.error(`[${event.timestamp}] EXCEPTION`, exception);\n });\n};\n\nexport const parseSSEEvent = (raw: string): string | null => {\n const joined = raw\n .split('\\n')\n .flatMap((line) => (line.startsWith('data:') ? [line.slice(5).trim()] : []))\n .join('\\n');\n\n return joined.length > 0 ? joined : null;\n};\n\nconst processLogEvent = (event: string, format: LogFormat) => {\n if (format === 'json') {\n process.stdout.write(`${event}\\n`);\n\n return;\n }\n\n try {\n const parsed: unknown = JSON.parse(event);\n const logEvent = LogEventSchema.parse(parsed);\n\n if (format === 'pretty') {\n consola.log(JSON.stringify(logEvent, null, 2));\n } else {\n formatLogEvent(logEvent, format);\n }\n } catch {\n consola.warn(`Failed to parse log event: ${event}`);\n }\n};\n\nconst openLogStream = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/logs/${projectUuid}/tail`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n },\n },\n );\n\n if (!response.ok) {\n throw new StreamError(\n `Failed to open log stream: ${response.status} ${response.statusText}`,\n isFatalStatusCode(response.status),\n );\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new StreamError('Failed to read log stream.', true);\n }\n\n return reader;\n};\n\nexport const tailLogs = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n format: LogFormat,\n connectionTtlMs = DEFAULT_CONNECTION_TTL_MS,\n) => {\n consola.info('Tailing logs...');\n\n let retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const reader = await openLogStream(projectUuid, storeHash, accessToken, apiHost);\n const decoder = new TextDecoder();\n const connectTime = Date.now();\n let buffer = '';\n\n retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n\n if (value) {\n buffer += decoder.decode(value, { stream: true });\n\n const parts = buffer.split('\\n\\n');\n\n // Last element is either empty (complete event) or a partial chunk to carry over\n buffer = parts.pop() ?? '';\n\n parts\n .map((raw) => parseSSEEvent(raw))\n .filter((event): event is string => event !== null)\n .forEach((event) => processLogEvent(event, format));\n }\n\n if (streamDone || Date.now() - connectTime >= connectionTtlMs) {\n void reader.cancel();\n break;\n }\n }\n } catch (error) {\n if (error instanceof StreamError && error.fatal) {\n throw error;\n }\n\n const isServerDisconnect = error instanceof TypeError && error.message === 'terminated';\n\n if (isServerDisconnect) {\n consola.warn('Log stream closed by server, reconnecting...');\n } else {\n retries += 1;\n\n if (retries >= MAX_RETRIES) {\n throw new Error(`Failed to connect to log stream after ${MAX_RETRIES} retries.`);\n }\n\n consola.warn(\n `Log stream disconnected, reconnecting (attempt ${retries}/${MAX_RETRIES})...`,\n error,\n );\n }\n }\n }\n};\n\nconst tail = new Command('tail')\n .configureHelp({ showGlobalOptions: true })\n .description('Tail live logs from your deployed application.')\n .addHelpText(\n 'after',\n `\nExamples:\n $ catalyst logs tail\n\n # Tail logs with request format\n $ catalyst logs tail --format request\n\n # Tail logs as raw JSON (useful for piping to other tools)\n $ catalyst logs tail --format json`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .addOption(\n new Option('--format <format>', 'Output format for log events.')\n .choices(['json', 'pretty', 'default', 'short', 'request'])\n .default('default'),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await telemetry.identify(storeHash);\n\n const projectUuid = resolveProjectUuid(options);\n\n await tailLogs(projectUuid, storeHash, accessToken, options.apiHost, options.format);\n } catch (error) {\n consola.error(error);\n process.exit(1);\n }\n });\n\nconst query = new Command('query')\n .configureHelp({ showGlobalOptions: true })\n .description('Query historical logs from your deployed application.')\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst logs query`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .action((options) => {\n const config = getProjectConfig();\n\n resolveCredentials(options, config);\n\n consola.error('The query command is not yet implemented.');\n process.exit(1);\n });\n\nexport const logs = new Command('logs')\n .configureHelp({ showGlobalOptions: true })\n .description('View logs from your deployed application.')\n .addCommand(tail, { isDefault: true })\n .addCommand(query);\n","import { Command } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { dirname } from 'node:path';\n\nimport {\n NoLinkedProjectError,\n selectOrCreateInfrastructureProject,\n setupCommerceHosting,\n} from '../lib/commerce-hosting';\nimport { installDependencies } from '../lib/install-dependencies';\nimport { consola } from '../lib/logger';\nimport { createProject, deleteProject, fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\nimport { getProjectState } from '../lib/project-state';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport {\n accessTokenOption,\n apiHostOption,\n projectUuidOption,\n storeHashOption,\n} from '../lib/shared-options';\nimport { getTelemetry } from '../lib/telemetry';\n\n// `catalyst project link` runs from inside `core/`, so the project root (which\n// `setupCommerceHosting` and `installDependencies` expect) is one level up.\nasync function offerCommerceHostingSetup(\n projectUuid: string,\n credentials?: { storeHash: string; accessToken: string },\n) {\n if (getProjectState().isTransformed) return;\n\n const shouldSetup = await consola.prompt(\n 'Your project has been linked, but is not fully set up for Commerce Hosting deployments yet. Would you like to run the setup now?',\n { type: 'confirm', initial: true },\n );\n\n if (!shouldSetup) return;\n\n const projectDir = dirname(process.cwd());\n\n setupCommerceHosting({\n projectDir,\n projectUuid,\n storeHash: credentials?.storeHash,\n accessToken: credentials?.accessToken,\n });\n\n consola.success('Commerce Hosting setup complete.');\n\n await installDependencies(projectDir);\n}\n\nconst list = new Command('list')\n .configureHelp({ showGlobalOptions: true })\n .description('List BigCommerce infrastructure projects for your store.')\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst project list`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n if (projects.length === 0) {\n consola.info('No projects found.');\n process.exit(0);\n\n return;\n }\n\n const linkedProjectUuid = config.get('projectUuid');\n\n projects.forEach((p) => {\n const marker = p.uuid === linkedProjectUuid ? ` ${colorize('green', '[linked]')}` : '';\n\n consola.log(`${p.name} (${p.uuid})${marker}`);\n });\n\n process.exit(0);\n });\n\nconst create = new Command('create')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'Create a new BigCommerce infrastructure project and link it to your local Catalyst project.',\n )\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst project create`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', data.uuid);\n config.set('storeHash', storeHash);\n config.set('accessToken', accessToken);\n consola.success('Project UUID written to .bigcommerce/project.json.');\n\n process.exit(0);\n });\n\nexport const link = new Command('link')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'Link your local Catalyst project to a BigCommerce infrastructure project. You can provide a project UUID directly, or fetch and select from available projects using your store credentials.',\n )\n .addHelpText(\n 'after',\n `\nExamples:\n # Link interactively (prompts to select or create)\n $ catalyst project link\n\n # Link using a project UUID directly\n $ catalyst project link --project-uuid <UUID>`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .action(async (options) => {\n const config = getProjectConfig();\n\n const writeProjectConfig = (\n uuid: string,\n credentials?: { storeHash: string; accessToken: string },\n ) => {\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', uuid);\n\n if (credentials) {\n config.set('storeHash', credentials.storeHash);\n config.set('accessToken', credentials.accessToken);\n }\n\n consola.success('Project UUID written to .bigcommerce/project.json.');\n };\n\n if (options.projectUuid) {\n writeProjectConfig(options.projectUuid);\n await offerCommerceHostingSetup(options.projectUuid);\n\n process.exit(0);\n\n return;\n }\n\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n let selected;\n\n try {\n selected = await selectOrCreateInfrastructureProject(\n { storeHash, accessToken, apiHost: options.apiHost },\n config.get('projectUuid'),\n );\n } catch (error) {\n if (error instanceof NoLinkedProjectError) {\n consola.info(\n \"When you're ready to create a project, run `catalyst project create` or re-run `catalyst project link`.\",\n );\n process.exit(0);\n\n // Unreachable in production; prevents continuation when process.exit is mocked in tests.\n throw error;\n }\n\n throw error;\n }\n\n writeProjectConfig(selected.uuid, { storeHash, accessToken });\n await offerCommerceHostingSetup(selected.uuid, { storeHash, accessToken });\n\n process.exit(0);\n });\n\nconst del = new Command('delete')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'Permanently delete a BigCommerce infrastructure project. This action is irreversible.',\n )\n .addHelpText(\n 'after',\n `\nExamples:\n # Select a project to delete interactively\n $ catalyst project delete\n\n # Delete a specific project (still prompts for confirmation)\n $ catalyst project delete --project-uuid <UUID>\n\n # Skip the confirmation prompt\n $ catalyst project delete --project-uuid <UUID> --force`,\n )\n .addOption(storeHashOption())\n .addOption(accessTokenOption())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .option('--force', 'Skip the confirmation prompt before deleting.')\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n let targetUuid: string | undefined = options.projectUuid;\n let targetName: string | undefined;\n\n if (!targetUuid) {\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n if (projects.length === 0) {\n consola.info('No projects found.');\n process.exit(0);\n\n return;\n }\n\n const linkedProjectUuid = config.get('projectUuid');\n\n const selected = await consola.prompt(\n 'Select a project to delete (Press <enter> to select).',\n {\n type: 'select',\n options: [\n ...projects.map((p) => ({\n label:\n p.uuid === linkedProjectUuid\n ? `${p.name} ${colorize('green', '[linked]')}`\n : p.name,\n value: p.uuid,\n hint: p.uuid,\n })),\n { label: 'Cancel', value: 'cancel', hint: 'Exit without deleting any project.' },\n ],\n cancel: 'reject',\n },\n );\n\n if (selected === 'cancel') {\n consola.info('Aborted. No project was deleted.');\n process.exit(0);\n\n return;\n }\n\n const matched = projects.find((p) => p.uuid === selected);\n\n if (!matched) {\n throw new Error(`Selected project ${String(selected)} not found in fetched list.`);\n }\n\n targetUuid = matched.uuid;\n targetName = matched.name;\n }\n\n if (!options.force) {\n const label = targetName ? `\"${targetName}\" (${targetUuid})` : targetUuid;\n\n const confirmed = await consola.prompt(\n `Are you sure you want to delete project ${label}? This action is irreversible and will permanently destroy the project and all of its data.`,\n { type: 'confirm', initial: false },\n );\n\n if (!confirmed) {\n consola.info('Aborted. No project was deleted.');\n process.exit(0);\n\n return;\n }\n }\n\n consola.start(`Deleting project ${targetUuid}...`);\n\n await deleteProject(targetUuid, storeHash, accessToken, options.apiHost);\n\n consola.success(`Project ${targetUuid} deleted.`);\n\n if (config.get('projectUuid') === targetUuid) {\n config.delete('projectUuid');\n consola.info('Removed project UUID from .bigcommerce/project.json.');\n }\n\n process.exit(0);\n });\n\nexport const project = new Command('project')\n .configureHelp({ showGlobalOptions: true })\n .description('Manage your BigCommerce infrastructure project.')\n .addCommand(create)\n .addCommand(list)\n .addCommand(link)\n .addCommand(del);\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { existsSync, lstatSync, symlinkSync } from 'node:fs';\nimport { join, relative } from 'node:path';\n\nimport { consola } from '../lib/logger';\nimport { getProjectState } from '../lib/project-state';\n\nexport const start = new Command('start')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'Start a local preview of your Catalyst storefront using the OpenNext Cloudflare adapter.',\n )\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst start`,\n )\n .action(async () => {\n // Project must be transformed before the OpenNext preview can run. If it\n // isn't, fall through to `next start` so this command works for self-hosted\n // Catalyst projects too.\n const state = getProjectState();\n\n if (!state.isTransformed) {\n consola.info('Project is not set up for Commerce Hosting — running `next start`.');\n\n await execa('pnpm', ['exec', 'next', 'start'], {\n stdio: 'inherit',\n cwd: process.cwd(),\n });\n\n return;\n }\n\n const envLocal = join(process.cwd(), '.env.local');\n const devVars = join(process.cwd(), '.bigcommerce', '.dev.vars');\n\n if (existsSync(envLocal)) {\n if (!existsSync(devVars)) {\n const target = relative(join(process.cwd(), '.bigcommerce'), envLocal);\n\n symlinkSync(target, devVars);\n consola.success('Symlinked .bigcommerce/.dev.vars → .env.local');\n } else if (!lstatSync(devVars).isSymbolicLink()) {\n consola.warn(\n '.bigcommerce/.dev.vars already exists and is not a symlink. ' +\n 'Wrangler will use it instead of .env.local.',\n );\n }\n } else {\n consola.warn(\n 'No .env.local file found. The preview server may fail without environment variables.\\n' +\n 'Create a .env.local file in your project root with the required variables.',\n );\n }\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'preview',\n '--config',\n join('.bigcommerce', 'wrangler.jsonc'),\n ],\n {\n stdio: 'inherit',\n cwd: process.cwd(),\n },\n );\n });\n","import { Argument, Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\n\nimport { consola } from '../lib/logger';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst telemetryService = getTelemetry();\nlet isEnabled = telemetryService.isEnabled();\n\nexport const telemetry = new Command('telemetry')\n .configureHelp({ showGlobalOptions: true })\n .description(\n 'View or change CLI telemetry collection status. Enabling telemetry helps BigCommerce support diagnose and troubleshoot errors you encounter when using the CLI.',\n )\n .addHelpText(\n 'after',\n `\nExamples:\n # Show telemetry status\n $ catalyst telemetry\n\n # Enable telemetry collection\n $ catalyst telemetry enable\n\n # Disable telemetry collection\n $ catalyst telemetry --disable`,\n )\n .addArgument(new Argument('[arg]').choices(['disable', 'enable', 'status']))\n .addOption(new Option('--enable', `Enables CLI telemetry collection.`).conflicts('disable'))\n .option('--disable', `Disables CLI telemetry collection.`)\n .action((arg, options) => {\n if (options.enable || arg === 'enable') {\n telemetryService.setEnabled(true);\n isEnabled = true;\n\n consola.success('Success!\\n');\n } else if (options.disable || arg === 'disable') {\n telemetryService.setEnabled(false);\n\n if (isEnabled) {\n consola.success('Your preference has been saved.');\n } else {\n consola.info(`Catalyst CLI telemetry collection is already disabled.`);\n }\n\n isEnabled = false;\n } else {\n consola.info('Catalyst CLI Telemetry\\n');\n }\n\n consola.info(\n `Status: ${colorize('bold', isEnabled ? colorize('green', 'Enabled') : colorize('red', 'Disabled'))}`,\n );\n\n if (!isEnabled) {\n consola.info(\n `You have opted-out of Catalyst CLI telemetry. No data will be collected from your machine.`,\n );\n }\n });\n","import { Command } from 'commander';\n\nimport PACKAGE_INFO from '../../../package.json';\nimport { consola } from '../lib/logger';\n\nexport const version = new Command('version')\n .configureHelp({ showGlobalOptions: true })\n .description('Display detailed version information.')\n .addHelpText(\n 'after',\n `\nExample:\n $ catalyst version`,\n )\n .action(() => {\n consola.log('Version Information:');\n consola.log(`CLI Version: ${PACKAGE_INFO.version}`);\n consola.log(`Node Version: ${process.version}`);\n consola.log(`Platform: ${process.platform} (${process.arch})`);\n });\n","import { Command, type CommandUnknownOpts } from '@commander-js/extra-typings';\n\nimport { getTelemetry } from '../lib/telemetry';\n\nconst allowlistArguments = ['--keep-temp-dir', '--api-host', '--project-uuid'];\n\nfunction parseArguments(args: string[]) {\n return args.reduce<Record<string, string>>((result, arg, index, array) => {\n if (arg.includes('=')) {\n const [key, value] = arg.split('=');\n\n if (allowlistArguments.includes(key)) {\n return {\n ...result,\n [key]: value,\n };\n }\n }\n\n if (allowlistArguments.includes(arg)) {\n const nextValue =\n array[index + 1] && !array[index + 1].startsWith('--') ? array[index + 1] : null;\n\n if (nextValue && !nextValue.includes('--')) {\n return {\n ...result,\n [arg]: nextValue,\n };\n }\n }\n\n return result;\n }, {});\n}\n\nfunction getCommandPath(cmd: CommandUnknownOpts): string {\n const parts: string[] = [];\n let current: CommandUnknownOpts | null = cmd;\n\n while (current.parent) {\n parts.unshift(current.name());\n current = current.parent;\n }\n\n return parts.join(' ');\n}\n\nexport const telemetryPreHook = async (thisCommand: Command, actionCommand: CommandUnknownOpts) => {\n const telemetry = getTelemetry();\n const commandName = getCommandPath(actionCommand);\n\n telemetry.commandName = commandName;\n\n // Return the await to get a proper stack trace.\n // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression\n return await telemetry.track(commandName, {\n ...parseArguments(thisCommand.args),\n });\n};\n\nexport const telemetryPostHook = async () => {\n const telemetry = getTelemetry();\n\n await telemetry.track('command_completed', { durationMs: telemetry.durationMs() });\n await telemetry.analytics.closeAndFlush();\n};\n","#!/usr/bin/env node\nimport { consola } from './lib/logger';\nimport { getTelemetry } from './lib/telemetry';\nimport { program } from './program';\n\nconst handleFatalError = async (error: unknown) => {\n const telemetry = getTelemetry();\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorStack = error instanceof Error ? error.stack : undefined;\n\n try {\n await telemetry.track('error', {\n commandName: telemetry.commandName,\n errorMessage,\n errorStack,\n durationMs: telemetry.durationMs(),\n });\n await telemetry.analytics.closeAndFlush();\n } catch {\n // Don't mask the original error\n }\n\n consola.error(errorMessage);\n\n if (telemetry.isEnabled()) {\n consola.info(\n `Correlation ID: ${telemetry.correlationId}\\nShare this Correlation ID with BigCommerce support.`,\n );\n } else {\n consola.info(\n 'Enable telemetry (`catalyst telemetry enable`) for improved troubleshooting with BigCommerce support.',\n );\n }\n\n process.exit(1);\n};\n\nprocess.on('uncaughtException', (error) => {\n void handleFatalError(error);\n});\n\nprocess.on('unhandledRejection', (reason) => {\n void handleFatalError(reason);\n});\n\nvoid (async () => {\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n await handleFatalError(error);\n }\n})();\n"],"mappings":"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","names":["Option","Command","colorize","existsSync","z","resolve","z","z","Conf","z","config","Command","Option","join","join","join","z","join","Command","Option","config","Command","Option","input","select","execSync","colorize","join","existsSync","join","yoctoSpinner","z","query","authHeaders","z","execSync","execSync","execSync","spawnSync","execSync","colorize","existsSync","readFileSync","dirname","join","z","z","dirname","join","existsSync","readFileSync","colorize","project","yoctoSpinner","z","z","colorize","open","yoctoSpinner","login","colorize","open","yoctoSpinner","mkdirSync","readFileSync","writeFileSync","dirname","join","z","corePackageJsonSchema","z","writeJson","mkdirSync","dirname","writeFileSync","join","readFileSync","Option","Option","config","join","input","select","colorize","join","execSync","Command","Option","login","Command","Option","colorize","dirname","join","yoctoSpinner","z","config","z","join","yoctoSpinner","colorize","project","Command","Option","config","telemetry","dirname","Command","Option","colorize","z","z","colorize","Command","Option","config","Command","colorize","dirname","dirname","Command","config","colorize","create","Command","execa","existsSync","lstatSync","symlinkSync","join","Command","execa","join","existsSync","symlinkSync","lstatSync","Command","Option","colorize","telemetry","Command","Option","colorize","Command","Command","telemetry","existsSync","Command","colorize","Option","telemetry","telemetry"]}