@bigcommerce/create-catalyst 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -76,7 +76,7 @@ var package_default = {
76
76
  node: "^20.0.0 || ^22.0.0"
77
77
  },
78
78
  dependencies: {
79
- "@commander-js/extra-typings": "^13.1.0",
79
+ "@commander-js/extra-typings": "^14.0.0",
80
80
  "@iarna/toml": "^2.2.5",
81
81
  "@inquirer/core": "^10.1.13",
82
82
  "@inquirer/figures": "^1.0.12",
@@ -85,7 +85,7 @@ var package_default = {
85
85
  "@segment/analytics-node": "^2.2.1",
86
86
  "ansi-escapes": "^7.0.0",
87
87
  chalk: "^5.4.1",
88
- commander: "^13.1.0",
88
+ commander: "^14.0.0",
89
89
  conf: "^13.1.0",
90
90
  "cross-spawn": "^7.0.6",
91
91
  dotenv: "^16.5.0",
@@ -115,7 +115,7 @@ var package_default = {
115
115
  eslint: "^8.57.1",
116
116
  jest: "^29.7.0",
117
117
  msw: "^2.9.0",
118
- prettier: "^3.5.3",
118
+ prettier: "^3.6.2",
119
119
  tsup: "^8.5.0",
120
120
  typescript: "^5.8.3"
121
121
  }
@@ -230,7 +230,7 @@ var multiSelect = createPrompt(
230
230
  },
231
231
  []
232
232
  );
233
- useKeypress((key, rl) => __async(void 0, null, function* () {
233
+ useKeypress((key, rl) => __async(null, null, function* () {
234
234
  clearTimeout(searchTimeoutRef.current);
235
235
  if (isEnterKey(key)) {
236
236
  const selection = items.filter(isChecked);
@@ -574,17 +574,17 @@ import { installDependencies as installDeps } from "nypm";
574
574
 
575
575
  // src/utils/spinner.ts
576
576
  import { oraPromise } from "ora";
577
- var spinner = (action, oraOpts) => __async(void 0, null, function* () {
577
+ var spinner = (action, oraOpts) => __async(null, null, function* () {
578
578
  return oraPromise(action, __spreadValues({
579
579
  spinner: "triangle"
580
580
  }, oraOpts)).catch(() => process.exit(1));
581
581
  });
582
582
 
583
583
  // src/utils/install-dependencies.ts
584
- var installAllDeps = (projectDir) => __async(void 0, null, function* () {
584
+ var installAllDeps = (projectDir) => __async(null, null, function* () {
585
585
  yield installDeps({ cwd: projectDir, silent: true, packageManager: "pnpm" });
586
586
  });
587
- var installDependencies = (projectDir) => __async(void 0, null, function* () {
587
+ var installDependencies = (projectDir) => __async(null, null, function* () {
588
588
  return spinner(installAllDeps(projectDir), {
589
589
  text: `Installing dependencies. This could take a minute...`,
590
590
  successText: `Dependencies installed successfully`,
@@ -625,7 +625,7 @@ var AvailableLocalesSuccessSchema = z.object({
625
625
  })
626
626
  )
627
627
  });
628
- var getAvailableLocales = (bc) => __async(void 0, null, function* () {
628
+ var getAvailableLocales = (bc) => __async(null, null, function* () {
629
629
  const response = yield bc.fetch("/v3/settings/store/available-locales");
630
630
  if (!response.ok) {
631
631
  throw new Error(
@@ -1165,7 +1165,7 @@ var create = new Command("create").description("Command to scaffold and connect
1165
1165
  new Option("--bigcommerce-hostname <hostname>", "BigCommerce hostname").default("bigcommerce.com").hideHelp()
1166
1166
  ).addOption(
1167
1167
  new Option("--cli-api-origin <origin>", "Catalyst CLI API origin").default("https://cxm-prd.bigcommerceapp.com").hideHelp()
1168
- ).action((options) => __async(void 0, null, function* () {
1168
+ ).action((options) => __async(null, null, function* () {
1169
1169
  const { ghRef, repository } = options;
1170
1170
  checkRequiredTools();
1171
1171
  const { projectName, projectDir } = yield setupProject({
@@ -1365,7 +1365,7 @@ var init = new Command2("init").description("Connect a BigCommerce store with an
1365
1365
  new Option2("--bigcommerce-hostname <hostname>", "BigCommerce hostname").default("bigcommerce.com").hideHelp()
1366
1366
  ).addOption(
1367
1367
  new Option2("--cli-api-origin <origin>", "Catalyst CLI API origin").default("https://cxm-prd.bigcommerceapp.com").hideHelp()
1368
- ).action((options) => __async(void 0, null, function* () {
1368
+ ).action((options) => __async(null, null, function* () {
1369
1369
  const projectDir = process.cwd();
1370
1370
  let storeHash = options.storeHash;
1371
1371
  let accessToken = options.accessToken;
@@ -1474,7 +1474,7 @@ var ManifestSchema = z4.object({
1474
1474
  devDependencies: z4.object({ add: z4.array(z4.string()) }),
1475
1475
  environmentVariables: z4.array(z4.string())
1476
1476
  });
1477
- var integration = new Command3("integration").argument("<integration-name>", "Formatted name of the integration").option("--commit-hash <hash>", "Override integration source branch with a specific commit hash").action((integrationNameRaw, options) => __async(void 0, null, function* () {
1477
+ var integration = new Command3("integration").argument("<integration-name>", "Formatted name of the integration").option("--commit-hash <hash>", "Override integration source branch with a specific commit hash").action((integrationNameRaw, options) => __async(null, null, function* () {
1478
1478
  const integrationName = z4.string().transform(kebabCase2).parse(integrationNameRaw);
1479
1479
  const manifest = {
1480
1480
  name: integrationName,
@@ -1501,7 +1501,7 @@ var integration = new Command3("integration").argument("<integration-name>", "Fo
1501
1501
  dependencies: z4.object({}).passthrough(),
1502
1502
  devDependencies: z4.object({}).passthrough()
1503
1503
  });
1504
- const getPackageDeps = (ref) => __async(void 0, null, function* () {
1504
+ const getPackageDeps = (ref) => __async(null, null, function* () {
1505
1505
  const { stdout } = yield exec(`git show ${ref}:core/package.json`);
1506
1506
  return PackageDependenciesSchema.parse(JSON.parse(stdout));
1507
1507
  });
@@ -1596,7 +1596,7 @@ function parseArguments(args) {
1596
1596
  return result;
1597
1597
  }, {});
1598
1598
  }
1599
- var telemetryPreHook = (command) => __async(void 0, null, function* () {
1599
+ var telemetryPreHook = (command) => __async(null, null, function* () {
1600
1600
  const availableCommands = command.commands.map((cmd) => cmd._name);
1601
1601
  const [commandName = "create", ...args] = command.args;
1602
1602
  if (!availableCommands.includes(commandName)) {
@@ -1604,7 +1604,7 @@ var telemetryPreHook = (command) => __async(void 0, null, function* () {
1604
1604
  }
1605
1605
  return yield telemetry5.track(commandName, __spreadValues({}, parseArguments(args)));
1606
1606
  });
1607
- var telemetryPostHook = () => __async(void 0, null, function* () {
1607
+ var telemetryPostHook = () => __async(null, null, function* () {
1608
1608
  yield telemetry5.analytics.closeAndFlush();
1609
1609
  });
1610
1610
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json","../src/commands/create.ts","../src/prompts/multi-select/multi-select.ts","../src/prompts/multi-select/helpers.ts","../src/utils/user-agent.ts","../src/utils/https.ts","../src/utils/cli-api.ts","../src/utils/clone-catalyst.ts","../src/utils/checkout-ref.ts","../src/utils/is-exec-exception.ts","../src/utils/has-github-ssh.ts","../src/utils/reset-branch-to-ref.ts","../src/utils/install-dependencies.ts","../src/utils/spinner.ts","../src/utils/localization.ts","../src/utils/login.ts","../src/utils/auth.ts","../src/utils/parse.ts","../src/utils/config.ts","../src/utils/telemetry/telemetry.ts","../src/utils/write-env.ts","../src/commands/init.ts","../src/commands/integration.ts","../src/commands/telemetry.ts","../src/utils/telemetry/index.ts","../src/hooks/telemetry.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { program } from '@commander-js/extra-typings';\nimport chalk from 'chalk';\n\nimport PACKAGE_INFO from '../package.json';\n\nimport { create } from './commands/create';\nimport { init } from './commands/init';\nimport { integration } from './commands/integration';\nimport { telemetry } from './commands/telemetry';\nimport { telemetryPostHook, telemetryPreHook } from './hooks/telemetry';\n\nconsole.log(chalk.cyanBright(`\\n◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('A command line tool to create a new Catalyst project.')\n .addCommand(create, { isDefault: true })\n .addCommand(init)\n .addCommand(integration)\n .addCommand(telemetry)\n .hook('preAction', telemetryPreHook)\n .hook('postAction', telemetryPostHook);\n\nprogram.parse(process.argv);\n","{\n \"name\": \"@bigcommerce/create-catalyst\",\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"bin\": \"bin/index.cjs\",\n \"files\": [\n \"bin\",\n \"dist\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"jest\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \"^20.0.0 || ^22.0.0\"\n },\n \"dependencies\": {\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@iarna/toml\": \"^2.2.5\",\n \"@inquirer/core\": \"^10.1.13\",\n \"@inquirer/figures\": \"^1.0.12\",\n \"@inquirer/prompts\": \"^7.5.3\",\n \"@inquirer/type\": \"^3.0.7\",\n \"@segment/analytics-node\": \"^2.2.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"conf\": \"^13.1.0\",\n \"cross-spawn\": \"^7.0.6\",\n \"dotenv\": \"^16.5.0\",\n \"fs-extra\": \"^11.3.0\",\n \"giget\": \"^1.2.5\",\n \"lodash.kebabcase\": \"^4.1.1\",\n \"nypm\": \"^0.5.4\",\n \"open\": \"^10.1.2\",\n \"ora\": \"^8.2.0\",\n \"semver\": \"^7.7.2\",\n \"std-env\": \"^3.9.0\",\n \"zod\": \"^3.25.51\",\n \"zod-validation-error\": \"^3.4.1\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.11.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@swc/core\": \"^1.11.31\",\n \"@swc/jest\": \"^0.2.38\",\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^29.5.14\",\n \"@types/lodash.kebabcase\": \"^4.1.9\",\n \"@types/node\": \"^22.15.30\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/semver\": \"^7.7.0\",\n \"eslint\": \"^8.57.1\",\n \"jest\": \"^29.7.0\",\n \"msw\": \"^2.9.0\",\n \"prettier\": \"^3.5.3\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\"\n }\n}\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { pathExistsSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { join } from 'path';\n\nimport { multiSelect } from '../prompts/multi-select';\nimport { CliApi } from '../utils/cli-api';\nimport { cloneCatalyst } from '../utils/clone-catalyst';\nimport { Https } from '../utils/https';\nimport { installDependencies } from '../utils/install-dependencies';\nimport { getAvailableLocales } from '../utils/localization';\nimport { login, storeCredentials } from '../utils/login';\nimport { Telemetry } from '../utils/telemetry/telemetry';\nimport { writeEnv } from '../utils/write-env';\n\ninterface Channel {\n id: number;\n name: string;\n platform: string;\n}\n\ninterface ChannelsResponse {\n data: Channel[];\n}\n\ninterface InitResponse {\n data: {\n makeswift_dev_api_key: string;\n storefront_api_token: string;\n envVars: Record<string, string>;\n };\n}\n\ninterface CreateChannelResponse {\n data: {\n id: number;\n storefront_api_token: string;\n envVars: Record<string, string>;\n };\n}\n\ninterface EligibilityResponse {\n data: {\n eligible: boolean;\n message: string;\n };\n}\n\nfunction getPlatformCheckCommand(command: string): string {\n const isWindows = process.platform === 'win32';\n\n return isWindows ? `where.exe ${command}` : `which ${command}`;\n}\n\nconst telemetry = new Telemetry();\n\nasync function handleChannelCreation(bc: Https, cliApi: CliApi) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n let availableLocales = [];\n\n try {\n availableLocales = await getAvailableLocales(bc);\n } catch (error) {\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n\n process.exit(1);\n }\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: () => chalk.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 additionalLocales = await multiSelect({\n choices: availableLocales.filter(({ value }) => value !== storefrontLocale),\n message: 'Which additional languages would you like to add to your channel?',\n theme: {\n style: {\n help: () => chalk.dim('(Select locale from the list or start typing the name)'),\n },\n },\n validate: (selections) => {\n if (selections.length > 4) {\n return 'You can only select up to 4 additional languages';\n }\n\n return true;\n },\n });\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 const response = await cliApi.createChannel(\n newChannelName,\n storefrontLocale,\n additionalLocales,\n shouldInstallSampleData,\n );\n\n if (!response.ok) {\n console.error(\n chalk.red(`\\nPOST /channels/catalyst failed: ${response.status} ${response.statusText}\\n`),\n );\n process.exit(1);\n }\n\n const channelData: unknown = await response.json();\n\n if (!isCreateChannelResponse(channelData)) {\n console.error(chalk.red('\\nUnexpected response format from create channel endpoint\\n'));\n process.exit(1);\n }\n\n return {\n channelId: channelData.data.id,\n storefrontToken: channelData.data.storefront_api_token,\n envVars: channelData.data.envVars,\n };\n}\n\nasync function handleChannelSelection(bc: Https) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n const channelsResponse = await bc.fetch('/v3/channels?available=true&type=storefront');\n\n if (!channelsResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /v3/channels failed: ${channelsResponse.status} ${channelsResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const availableChannels: unknown = await channelsResponse.json();\n\n if (!isChannelsResponse(availableChannels)) {\n console.error(chalk.red('\\nUnexpected response format from channels endpoint\\n'));\n process.exit(1);\n }\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort((a: Channel, b: Channel) => {\n const aIndex = channelSortOrder.indexOf(a.platform);\n const bIndex = channelSortOrder.indexOf(b.platform);\n\n // If both platforms are not in the sort order, maintain their original order\n if (aIndex === -1 && bIndex === -1) {\n return 0;\n }\n\n // If one platform is not in the sort order, it should go to the end\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n\n // If both platforms are in the sort order, use their relative positions\n return aIndex - bIndex;\n })\n .map((ch: Channel) => ({\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 getChannelInit(cliApi: CliApi, channelId: number) {\n const initResponse = await cliApi.getChannelInit(channelId);\n\n if (!initResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /channels/${channelId}/init failed: ${initResponse.status} ${initResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const initData: unknown = await initResponse.json();\n\n if (!isInitResponse(initData)) {\n console.error(chalk.red('\\nUnexpected response format from init endpoint\\n'));\n process.exit(1);\n }\n\n return {\n storefrontToken: initData.data.storefront_api_token,\n envVars: initData.data.envVars,\n };\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 console.error(chalk.red(`Error: --projectDir ${projectDir} is not a valid path\\n`));\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 console.error(chalk.red(`Error: ${projectDir} already exists\\n`));\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 is the name of your project?',\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 console.error(chalk.red('Error: git is required to create a Catalyst project\\n'));\n process.exit(1);\n }\n\n try {\n execSync(getPlatformCheckCommand('pnpm'), { stdio: 'ignore' });\n } catch {\n console.error(chalk.red('Error: pnpm is required to create a Catalyst project\\n'));\n console.error(chalk.yellow('Tip: Enable it by running `corepack enable pnpm`\\n'));\n process.exit(1);\n }\n}\n\nexport const create = new Command('create')\n .description('Command to scaffold and connect a Catalyst storefront to your BigCommerce store')\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 .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .option('--channel-id <id>', 'BigCommerce channel ID')\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('--env <vars...>', 'Arbitrary environment variables to set in .env.local')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\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 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;\n let storefrontToken = options.storefrontToken;\n let credentials;\n\n if (options.channelId) {\n channelId = parseInt(options.channelId, 10);\n }\n\n let envVars: Record<string, string> = {};\n\n // Get credentials if needed\n if ((!storeHash || !accessToken) && (!channelId || !storefrontToken)) {\n credentials = await login(`https://login.${options.bigcommerceHostname}`);\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n // If store hash, channel ID, and storefront token are all provided, skip channel selection/creation\n if (storeHash && channelId && storefrontToken) {\n envVars.BIGCOMMERCE_STORE_HASH = storeHash;\n envVars.BIGCOMMERCE_CHANNEL_ID = channelId.toString();\n envVars.BIGCOMMERCE_STOREFRONT_API_TOKEN = storefrontToken;\n } else {\n if (!storeHash || !accessToken) {\n // Create project without credentials\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n cloneCatalyst({ repository, projectName, projectDir, ghRef, resetMain: options.resetMain });\n await installDependencies(projectDir);\n\n // Add any CLI-provided env vars\n if (options.env) {\n const cliEnvVars = options.env.reduce<Record<string, string>>((acc, env) => {\n const [key, value] = env.split('=');\n\n if (key && value) {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n\n Object.assign(envVars, cliEnvVars);\n }\n\n // Write env vars even if we don't have store credentials\n writeEnv(projectDir, envVars);\n\n console.log(\n [\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n `Next steps:`,\n Object.keys(envVars).length > 0\n ? chalk.yellow(`\\n- cd ${projectName} && pnpm run dev\\n`)\n : [\n chalk.yellow(`\\n- cd ${projectName} && cp .env.example .env.local`),\n chalk.yellow(`\\n- Populate .env.local with your BigCommerce API credentials\\n`),\n ].join(''),\n ].join('\\n'),\n );\n\n process.exit(0);\n }\n\n // At this point we should have a storeHash and can identify the account\n await telemetry.identify(storeHash);\n\n if (!channelId || !storefrontToken) {\n const bc = new Https({\n baseUrl: `https://api.${options.bigcommerceHostname}/stores/${storeHash}`,\n accessToken,\n });\n\n const cliApi = new CliApi({\n origin: options.cliApiOrigin,\n storeHash,\n accessToken,\n });\n\n // If we have channelId but no storefrontToken, just get the init data\n if (channelId && !storefrontToken) {\n const initData = await getChannelInit(cliApi, channelId);\n\n envVars = { ...initData.envVars };\n storefrontToken = initData.storefrontToken;\n } else if (!channelId) {\n const eligibilityResponse = await cliApi.checkEligibility();\n\n if (!eligibilityResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /channels/catalyst/eligibility failed: ${eligibilityResponse.status} ${eligibilityResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const eligibilityData: unknown = await eligibilityResponse.json();\n\n if (!isEligibilityResponse(eligibilityData)) {\n console.error(chalk.red('\\nUnexpected response format from eligibility endpoint\\n'));\n process.exit(1);\n }\n\n if (!eligibilityData.data.eligible) {\n console.warn(chalk.yellow(eligibilityData.data.message));\n }\n\n let shouldCreateChannel;\n\n if (eligibilityData.data.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(bc, cliApi);\n\n channelId = channelData.channelId;\n storefrontToken = channelData.storefrontToken;\n envVars = { ...channelData.envVars };\n\n console.log(chalk.green(`Channel created successfully`));\n console.warn(\n chalk.yellow(\n '\\nNote: 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.',\n ),\n );\n }\n\n if (!shouldCreateChannel) {\n channelId = await handleChannelSelection(bc);\n\n const initData = await getChannelInit(cliApi, channelId);\n\n envVars = { ...initData.envVars };\n storefrontToken = initData.storefrontToken;\n }\n }\n }\n }\n\n // Add any CLI-provided env vars as overrides\n if (options.env) {\n const cliEnvVars = options.env.reduce<Record<string, string>>((acc, env) => {\n const [key, value] = env.split('=');\n\n if (key && value) {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n\n Object.assign(envVars, cliEnvVars);\n }\n\n // Add store hash, channel ID, and storefront token to envVars if provided\n if (options.storeHash) {\n envVars.BIGCOMMERCE_STORE_HASH = options.storeHash;\n }\n\n if (options.channelId) {\n envVars.BIGCOMMERCE_CHANNEL_ID = options.channelId;\n }\n\n if (options.storefrontToken) {\n envVars.BIGCOMMERCE_STOREFRONT_TOKEN = options.storefrontToken;\n }\n\n if (!channelId) throw new Error('Something went wrong, channelId is not defined');\n if (!storefrontToken) throw new Error('Something went wrong, storefrontToken is not defined');\n\n // Create the project with all necessary configuration\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n cloneCatalyst({ repository, projectName, projectDir, ghRef, resetMain: options.resetMain });\n await installDependencies(projectDir);\n\n // Write env vars\n writeEnv(projectDir, envVars);\n\n // Store credentials after successful project creation\n if (credentials) {\n storeCredentials(projectDir, credentials);\n }\n\n console.log(\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n '\\nNext steps:\\n',\n chalk.yellow(`\\ncd ${projectName} && pnpm run dev\\n`),\n );\n });\n\nfunction isInitResponse(response: unknown): response is InitResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'storefront_api_token' in response.data &&\n 'envVars' in response.data\n );\n}\n\nfunction isEligibilityResponse(response: unknown): response is EligibilityResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'eligible' in response.data &&\n 'message' in response.data\n );\n}\n\nfunction isCreateChannelResponse(response: unknown): response is CreateChannelResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'id' in response.data &&\n 'storefront_api_token' in response.data &&\n 'envVars' in response.data\n );\n}\n\nfunction isChannelsResponse(response: unknown): response is ChannelsResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n Array.isArray(response.data) &&\n response.data.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n 'name' in item &&\n 'platform' in item,\n )\n );\n}\n","import {\n createPrompt,\n isBackspaceKey,\n isDownKey,\n isEnterKey,\n isNumberKey,\n isSpaceKey,\n isUpKey,\n makeTheme,\n Separator,\n type Status,\n useEffect,\n useKeypress,\n useMemo,\n usePagination,\n usePrefix,\n useRef,\n useState,\n ValidationError,\n} from '@inquirer/core';\nimport ansiEscapes from 'ansi-escapes';\n\nimport { isChecked, isSelectable, normalizeChoices, selectTheme, toggle } from './helpers';\nimport { Item, MultiSelectConfig, SelectTheme } from './types';\n\nexport const multiSelect = createPrompt(\n <Value>(config: MultiSelectConfig<Value>, done: (value: Value[]) => void) => {\n const theme = makeTheme<SelectTheme>(selectTheme, config.theme);\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n const firstRender = useRef(true);\n const [items, setItems] = useState<ReadonlyArray<Item<Value>>>(\n normalizeChoices(config.choices),\n );\n const [status, setStatus] = useState<Status>('idle');\n const [errorMsg, setError] = useState<string>();\n const prefix = usePrefix({ status, theme });\n const { instructions, loop = true, pageSize = 7, required, validate = () => true } = config;\n\n const bounds = useMemo(() => {\n const first = items.findIndex(isSelectable);\n const last = items.findLastIndex(isSelectable);\n\n if (first === -1) {\n throw new ValidationError(\n '[multi select prompt] No selectable choices. All choices are disabled.',\n );\n }\n\n return { first, last };\n }, [items]);\n\n const [showHelpTip, setShowHelpTip] = useState(true);\n const [active, setActive] = useState(bounds.first);\n\n useEffect(\n () => () => {\n clearTimeout(searchTimeoutRef.current);\n },\n [],\n );\n\n // eslint-disable-next-line complexity\n useKeypress(async (key, rl) => {\n clearTimeout(searchTimeoutRef.current);\n\n if (isEnterKey(key)) {\n const selection = items.filter(isChecked);\n const isValid = await validate([...selection]);\n\n if (required && !items.some(isChecked)) {\n setError('At least one choice must be selected');\n } else if (isValid === true) {\n setStatus('done');\n done(selection.map((choice) => choice.value));\n } else {\n setError(isValid || 'You must select a valid value');\n }\n } else if (isUpKey(key) || isDownKey(key)) {\n rl.clearLine(0);\n\n if (\n loop ||\n (isUpKey(key) && active !== bounds.first) ||\n (isDownKey(key) && active !== bounds.last)\n ) {\n const offset = isUpKey(key) ? -1 : 1;\n let next = active;\n\n do {\n next = (next + offset + items.length) % items.length;\n } while (!isSelectable(items[next]));\n\n setActive(next);\n }\n } else if (isNumberKey(key)) {\n rl.clearLine(0);\n\n const position = Number(key.name) - 1;\n\n if (isSelectable(items[position])) {\n setActive(position);\n }\n } else if (isBackspaceKey(key)) {\n rl.clearLine(0);\n } else if (isSpaceKey(key)) {\n rl.clearLine(0);\n setShowHelpTip(false);\n\n const nextItems = items.map((choice, i) => (i === active ? toggle(choice) : choice));\n const selection = nextItems.filter(isChecked);\n const isValid = await validate([...selection]);\n\n if (isValid === true) {\n setError(undefined);\n setItems(nextItems);\n } else {\n setError(isValid || 'You must select a valid value');\n }\n } else {\n // Default to search\n const searchTerm = rl.line.toLowerCase();\n const matchIndex = items.findIndex((item) =>\n Separator.isSeparator(item) || !isSelectable(item)\n ? false\n : item.name.toLowerCase().startsWith(searchTerm),\n );\n\n if (matchIndex !== -1) {\n setActive(matchIndex);\n }\n\n searchTimeoutRef.current = setTimeout(() => {\n rl.clearLine(0);\n }, 700);\n }\n });\n\n const message = theme.style.message(config.message, status);\n\n let helpTipTop = '';\n let helpTipBottom = '';\n let description: string | undefined;\n\n if (\n theme.helpMode === 'always' ||\n (theme.helpMode === 'auto' && showHelpTip && (instructions === undefined || instructions))\n ) {\n if (typeof instructions === 'string') {\n helpTipTop = instructions;\n } else {\n const keys = [\n `${theme.style.key('space')} to select`,\n `${theme.style.key('enter')} to proceed`,\n ];\n\n helpTipTop = ` (Press ${keys.filter((key) => key !== '').join(', ')})`;\n }\n\n if (\n items.length > pageSize &&\n (theme.helpMode === 'always' ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (theme.helpMode === 'auto' && firstRender.current))\n ) {\n helpTipBottom = `\\n${theme.style.help('(Use arrow keys to reveal more choices)')}`;\n firstRender.current = false;\n }\n }\n\n const page = usePagination({\n items,\n active,\n renderItem({ item, isActive }) {\n if (Separator.isSeparator(item)) {\n return ` ${item.separator}`;\n }\n\n if (item.disabled) {\n return theme.style.disabledChoice(\n `${item.name} ${typeof item.disabled === 'string' ? item.disabled : '(disabled)'}`,\n );\n }\n\n if (isActive) {\n description = item.description;\n }\n\n const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked;\n const color = isActive ? theme.style.highlight : (x: string) => x;\n const cursor = isActive ? theme.icon.cursor : ` `;\n\n return color(`${cursor}${checkbox} ${item.name}`);\n },\n pageSize,\n loop,\n });\n\n if (status === 'done') {\n return `${prefix} ${message} ${theme.style.answer(theme.style.renderSelectedChoices(items.filter(isChecked), items))}`;\n }\n\n const selectedChoices =\n items.filter(isChecked).length > 0\n ? ` (${theme.style.answer(theme.style.renderSelectedChoices(items.filter(isChecked), items))})`\n : '';\n const choiceDescription = description ? `\\n${theme.style.description(description)}` : ``;\n\n let error = '';\n\n if (errorMsg) {\n error = `\\n${theme.style.error(errorMsg)}`;\n }\n\n return `${prefix} ${message}${selectedChoices}${helpTipTop}\\n${page}${helpTipBottom}${choiceDescription}${error}${ansiEscapes.cursorHide}`;\n },\n);\n\nexport { Separator } from '@inquirer/core';\n","import { Separator } from '@inquirer/core';\nimport figures from '@inquirer/figures';\nimport chalk from 'chalk';\n\nimport { Choice, Item, NormalizedChoice, SelectTheme } from './types';\n\nexport const selectTheme: SelectTheme = {\n helpMode: 'auto',\n icon: {\n checked: chalk.green(figures.circleFilled),\n unchecked: figures.circle,\n cursor: figures.pointer,\n },\n style: {\n description: (text: string) => chalk.cyan(text),\n disabledChoice: (text: string) => chalk.dim(`- ${text}`),\n renderSelectedChoices: (selectedChoices) =>\n selectedChoices.map((choice) => choice.short).join(', '),\n },\n};\n\nexport const isSelectable = <Value>(item: Item<Value>): item is NormalizedChoice<Value> =>\n !Separator.isSeparator(item) && !item.disabled;\n\nexport const isChecked = <Value>(item: Item<Value>): item is NormalizedChoice<Value> =>\n isSelectable(item) && Boolean(item.checked);\n\nexport const toggle = <Value>(item: Item<Value>): Item<Value> =>\n isSelectable(item) ? { ...item, checked: !item.checked } : item;\n\nexport const normalizeChoices = <Value>(\n choices: ReadonlyArray<string | Choice<Value> | Separator>,\n): Array<Item<Value>> =>\n choices.map((choice) => {\n if (Separator.isSeparator(choice)) {\n return choice;\n }\n\n if (typeof choice === 'string') {\n return {\n checked: false,\n disabled: false,\n name: choice,\n short: choice,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n value: choice as Value,\n };\n }\n\n const name = choice.name ?? String(choice.value);\n\n return {\n checked: choice.checked ?? false,\n description: choice.description,\n disabled: choice.disabled ?? false,\n name,\n short: choice.short ?? name,\n value: choice.value,\n };\n });\n","import {\n isDevelopment,\n isLinux,\n isMacOS,\n isProduction,\n isTest,\n isWindows,\n nodeVersion,\n process,\n provider,\n runtime,\n} from 'std-env';\n\nimport packageInfo from '../../package.json';\n\nconst { name, version } = packageInfo;\n\nconst getOS = () => {\n if (isWindows) return 'Windows';\n if (isMacOS) return 'macOS';\n if (isLinux) return 'Linux';\n\n return 'Unknown OS';\n};\n\nconst getEnv = () => {\n if (isDevelopment) return 'Development';\n if (isTest) return 'Test';\n if (isProduction) return 'Production';\n};\n\nconst getPlatform = () => {\n const os = getOS();\n const env = getEnv();\n\n const keysOfInterest = [\n os,\n env,\n runtime,\n provider,\n `Node ${nodeVersion}`,\n process.env.NODE_ENV,\n ].filter(Boolean);\n\n return keysOfInterest.join('; ');\n};\n\nconst detectedPlatform = getPlatform();\n\nexport const getCLIUserAgent = (platform?: string, extensions?: string): string => {\n const userAgentParts = [`${name}/${version}`];\n\n const platformValue = platform ?? detectedPlatform;\n\n userAgentParts.push(`(${platformValue})`);\n\n if (extensions) {\n userAgentParts.push(extensions);\n }\n\n return userAgentParts.join(' ');\n};\n","import { getCLIUserAgent } from './user-agent';\n\ninterface HttpsConfig {\n baseUrl: string;\n accessToken?: string;\n}\n\nexport class Https {\n private baseUrl: string;\n private accessToken?: string;\n private userAgent: string;\n\n constructor({ baseUrl, accessToken }: HttpsConfig) {\n this.baseUrl = baseUrl;\n this.accessToken = accessToken;\n this.userAgent = getCLIUserAgent();\n }\n\n async fetch(path: string, opts: RequestInit = {}) {\n const { headers = {}, ...rest } = opts;\n\n const options = {\n headers: {\n ...Object.fromEntries(new Headers(headers)),\n Accept: 'application/json',\n 'User-Agent': this.userAgent,\n ...(this.accessToken && { 'X-Auth-Token': this.accessToken }),\n },\n ...rest,\n };\n\n return fetch(`${this.baseUrl}${path}`, options);\n }\n}\n","import { Https } from './https';\n\ninterface CliApiConfig {\n origin: string;\n storeHash: string;\n accessToken: string;\n}\n\nexport class CliApi {\n private client: Https;\n\n constructor({ origin, storeHash, accessToken }: CliApiConfig) {\n this.client = new Https({\n baseUrl: `${origin}/stores/${storeHash}/cli-api/v3`,\n accessToken,\n });\n }\n\n async getChannelInit(channelId: number | string) {\n return this.client.fetch(`/channels/${channelId}/init`, {\n method: 'GET',\n });\n }\n\n async checkEligibility() {\n return this.client.fetch('/channels/catalyst/eligibility', {\n method: 'GET',\n });\n }\n\n async createChannel(\n name: string,\n storefrontLocale: string,\n additionalLocales: string[],\n installSampleData = false,\n ) {\n return this.client.fetch('/channels/catalyst', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name,\n initialData: {\n type: installSampleData ? 'sample' : 'none',\n },\n deployStorefront: true,\n devOrigin: 'http://localhost:3000',\n storefrontLanguage: storefrontLocale,\n additionalLocales,\n }),\n });\n }\n}\n","import { execSync } from 'child_process';\n\nimport { checkoutRef } from './checkout-ref';\nimport { hasGitHubSSH } from './has-github-ssh';\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 console.log(`Cloning ${repository} using ${useSSH ? 'SSH' : 'HTTPS'}...\\n`);\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 console.log();\n\n execSync('git remote rename origin upstream', { cwd: projectDir, stdio: 'inherit' });\n console.log();\n\n if (ghRef) {\n if (resetMain) {\n // Create and checkout a new main branch\n execSync('git checkout -b main', { cwd: projectDir, stdio: 'inherit' });\n\n // Reset it to the specified ref\n resetBranchToRef(projectDir, ghRef);\n\n console.log(`Reset main to ${ghRef} successfully.\\n`);\n\n return;\n }\n\n checkoutRef(projectDir, ghRef);\n\n console.log();\n }\n};\n","import { sync as spawnSync } from 'cross-spawn';\n\nimport { isExecException } from './is-exec-exception';\n\nexport function checkoutRef(repoDir: string, ref: string): void {\n try {\n // Attempt to checkout the specified ref\n const spawn = spawnSync('git', ['checkout', ref, '--'], {\n cwd: repoDir,\n encoding: 'utf8',\n // Explicitly set shell to false to avoid shell injection\n // Don't use shell: true as it's a security risk\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 console.log(`Checked out ref ${ref} successfully.`);\n } catch (error: unknown) {\n // Handle the error safely according to ESLint rules\n if (isExecException(error)) {\n const stderr = error.stderr ? error.stderr.toString() : '';\n\n // Check if the error message indicates that the ref was not found\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 console.error(`Ref '${ref}' not found in the repository.`);\n } else {\n console.error(`Error checking out ref '${ref}':`, stderr.trim());\n }\n } else if (error instanceof Error) {\n // General error handling\n console.error(`Error checking out ref '${ref}':`, error.message);\n } else {\n // Unknown error type\n console.error(`Unknown error occurred while checking out ref '${ref}'.`);\n }\n\n console.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 // Attempt to connect to GitHub via SSH and capture the output\n const output = execSync('ssh -T git@github.com', {\n encoding: 'utf8',\n stdio: 'pipe',\n }).toString();\n\n // Check the output for successful authentication\n return output.includes('successfully authenticated');\n } catch (error: unknown) {\n // Use the type guard to check if error is an ExecException\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 // Check if the output indicates successful authentication\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 // Explicitly set shell to false to avoid shell injection\n // Don't use shell: true as it's a security risk\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 chalk from 'chalk';\nimport { installDependencies as installDeps } from 'nypm';\n\nimport { spinner } from './spinner';\n\nconst installAllDeps = async (projectDir: string) => {\n await installDeps({ cwd: projectDir, silent: true, packageManager: 'pnpm' });\n};\n\nexport const installDependencies = async (projectDir: string) =>\n spinner(installAllDeps(projectDir), {\n text: `Installing dependencies. This could take a minute...`,\n successText: `Dependencies installed successfully`,\n failText: (err) => chalk.red(`Failed to install dependencies: ${err.message}`),\n });\n","import { type Ora, oraPromise, type PromiseOptions } from 'ora';\n\nexport const spinner = async <T>(\n action: PromiseLike<T> | ((spinner: Ora) => PromiseLike<T>),\n oraOpts: PromiseOptions<T>,\n) => {\n return oraPromise(action, {\n spinner: 'triangle',\n ...oraOpts,\n }).catch(() => process.exit(1));\n};\n","import { z } from 'zod';\n\nimport { Https } from './https';\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 (bc: Https) => {\n const response = await bc.fetch('/v3/settings/store/available-locales');\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 chalk from 'chalk';\nimport open from 'open';\nimport { createInterface } from 'readline';\n\nimport { Auth } from './auth';\nimport { Config } from './config';\nimport { spinner } from './spinner';\n\ninterface LoginResult {\n storeHash: string;\n accessToken: string;\n}\n\ninterface DeviceCodeCredentials {\n store_hash: string;\n access_token: string;\n}\n\nasync function pollDeviceCode(\n auth: Auth,\n deviceCode: string,\n interval: number,\n): Promise<DeviceCodeCredentials | null> {\n try {\n const credentials = await auth.checkDeviceCode(deviceCode);\n\n return credentials;\n } catch {\n await new Promise((resolve) => setTimeout(resolve, interval * 1000));\n\n return null;\n }\n}\n\nasync function waitForCredentials(\n auth: Auth,\n deviceCode: string,\n interval: number,\n): Promise<DeviceCodeCredentials> {\n const credentials = await pollDeviceCode(auth, deviceCode, interval);\n\n if (credentials) {\n return credentials;\n }\n\n return waitForCredentials(auth, deviceCode, interval);\n}\n\nasync function waitForKeyPress(prompt: string): Promise<boolean> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // Enable raw mode to get individual keystrokes\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n return new Promise((resolve) => {\n process.stdin.once('data', (data) => {\n // Restore normal stdin mode\n process.stdin.setRawMode(false);\n process.stdin.pause();\n rl.close();\n\n // Only proceed if Enter was pressed (13 or 10 are the ASCII codes for CR and LF)\n const shouldProceed = data[0] === 13 || data[0] === 10;\n\n // Add a newline since we're in raw mode\n process.stdout.write('\\n');\n\n resolve(shouldProceed);\n });\n\n // Display the prompt\n rl.write(prompt);\n });\n}\n\nexport async function login(baseUrl: string): Promise<LoginResult> {\n const auth = new Auth({ baseUrl });\n\n const deviceCode = await auth.getDeviceCode();\n\n console.log(\n chalk.yellow('\\n! First copy your one-time code: ') + chalk.bold(deviceCode.user_code),\n );\n console.log(`Press Enter to open ${deviceCode.verification_uri} in your browser...`);\n\n const shouldOpenUrl = await waitForKeyPress('');\n\n if (shouldOpenUrl) {\n await open(deviceCode.verification_uri);\n }\n\n const credentials = await spinner(\n () => waitForCredentials(auth, deviceCode.device_code, deviceCode.interval),\n { text: 'Waiting for authentication...', successText: 'Authentication complete' },\n );\n\n return {\n storeHash: credentials.store_hash,\n accessToken: credentials.access_token,\n };\n}\n\nexport function storeCredentials(projectDir: string, credentials: LoginResult): void {\n const config = new Config(projectDir);\n\n config.setAuth(credentials.storeHash, credentials.accessToken);\n}\n","import { z } from 'zod';\n\nimport { Https } from './https';\nimport { parse } from './parse';\n\ninterface AuthConfig {\n baseUrl: string;\n}\n\nexport class Auth {\n private client: Https;\n private readonly DEVICE_OAUTH_CLIENT_ID = 's1q4io7mah2lm1i6uwp9yl1eit80n3b';\n\n constructor({ baseUrl }: AuthConfig) {\n this.client = new Https({ baseUrl });\n }\n\n async getDeviceCode() {\n const response = await this.client.fetch('/device/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n scopes: [\n 'store_channel_settings',\n 'store_sites',\n 'store_storefront_api',\n 'store_v2_content',\n 'store_v2_information',\n 'store_v2_products',\n 'store_cart',\n ].join(' '),\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n const DeviceCodeSchema = 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\n return parse(await response.json(), DeviceCodeSchema);\n }\n\n async checkDeviceCode(deviceCode: string) {\n const response = await this.client.fetch('/device/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n throw new Error('Device code not yet verified');\n }\n\n const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string().url(),\n });\n\n return parse(await response.json(), DeviceCodeSuccessSchema);\n }\n}\n","import * as z from 'zod';\nimport { fromZodError } from 'zod-validation-error';\n\nexport const parse = <T>(data: unknown, schema: z.Schema<T>): T => {\n try {\n return schema.parse(data);\n } catch (error) {\n if (error instanceof z.ZodError) {\n console.error(fromZodError(error).toString());\n }\n\n process.exit(1);\n }\n};\n","import { parse as parseTOML, stringify as stringifyTOML } from '@iarna/toml';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\n\ninterface CatalystConfig {\n auth?: {\n storeHash?: string;\n accessToken?: string;\n };\n}\n\ninterface TomlRecord {\n [key: string]: string | number | boolean | TomlRecord | TomlRecord[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isCatalystConfig(obj: unknown): obj is CatalystConfig {\n if (!isRecord(obj)) {\n return false;\n }\n\n if ('auth' in obj) {\n if (!isRecord(obj.auth)) {\n return false;\n }\n\n const { storeHash, accessToken } = obj.auth;\n\n return (\n (storeHash === undefined || typeof storeHash === 'string') &&\n (accessToken === undefined || typeof accessToken === 'string')\n );\n }\n\n return true;\n}\n\nexport class Config {\n private configPath: string;\n private config: CatalystConfig;\n\n constructor(projectDir: string) {\n this.configPath = join(projectDir, '.catalyst');\n this.config = this.read();\n }\n\n getAuth(): { storeHash?: string; accessToken?: string } {\n return this.config.auth ?? {};\n }\n\n setAuth(storeHash: string, accessToken: string): void {\n this.config.auth = { storeHash, accessToken };\n this.save();\n }\n\n save(): void {\n const configObj: TomlRecord = {};\n\n if (this.config.auth?.storeHash && this.config.auth.accessToken) {\n configObj.auth = {\n storeHash: this.config.auth.storeHash,\n accessToken: this.config.auth.accessToken,\n };\n }\n\n const dir = dirname(this.configPath);\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const preamble = `# DO NOT commit this file to your repository!\n# This file contains sensitive configuration specific to your local CLI setup.\n# It includes authentication tokens and store-specific information.\n# If using version control, make sure to add .catalyst to your .gitignore file.\n\n`;\n\n writeFileSync(this.configPath, preamble + stringifyTOML(configObj));\n }\n\n private read(): CatalystConfig {\n if (!existsSync(this.configPath)) {\n return {};\n }\n\n try {\n const contents = readFileSync(this.configPath, 'utf-8');\n const parsed = parseTOML(contents);\n\n if (isCatalystConfig(parsed)) {\n return parsed;\n }\n\n console.warn('Invalid config format in .catalyst file, using defaults');\n\n return {};\n } catch {\n console.warn('Failed to parse .catalyst config file, using defaults');\n\n return {};\n }\n }\n}\n","import { Analytics } from '@segment/analytics-node';\nimport Conf from 'conf';\nimport { randomBytes } from 'crypto';\n\nimport PACKAGE_INFO from '../../../package.json';\n\n// This is the key that stores whether or not telemetry is enabled or disabled.\nconst TELEMETRY_KEY_ENABLED = 'telemetry.enabled';\n\n// This is a quasi-persistent identifier used to dedupe recurring events.\nconst TELEMETRY_KEY_ID = `telemetry.anonymousId`;\n\ninterface Config {\n telemetry: {\n enabled: boolean;\n anonymousId: string;\n };\n}\n\nexport class Telemetry {\n readonly sessionId: string;\n readonly analytics: Analytics;\n\n private conf: Conf<Config> | null;\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 try {\n this.conf = new Conf({\n projectName: this.projectName,\n projectVersion: this.projectVersion,\n });\n } catch {\n this.conf = null;\n }\n\n this.sessionId = randomBytes(32).toString('hex');\n this.analytics = new Analytics({\n writeKey: process.env.CLI_SEGMENT_WRITE_KEY ?? 'not-a-valid-segment-write-key',\n });\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 },\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.conf?.set(TELEMETRY_KEY_ENABLED, enabled);\n\n return this.conf?.path;\n };\n\n isEnabled(): boolean {\n return (\n !this.CATALYST_TELEMETRY_DISABLED &&\n !!this.conf &&\n this.conf.get<typeof TELEMETRY_KEY_ENABLED, boolean>(TELEMETRY_KEY_ENABLED, true)\n );\n }\n\n private getAnonymousId(): string {\n const val = this.conf?.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.conf?.set(TELEMETRY_KEY_ID, generated);\n\n return generated;\n }\n}\n","import { outputFileSync } from 'fs-extra/esm';\nimport { join } from 'path';\n\nexport const writeEnv = (projectDir: string, envVars: Record<string, string>) => {\n outputFileSync(\n join(projectDir, '.env.local'),\n `${Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')}\\n`,\n );\n};\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { select } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nimport { CliApi } from '../utils/cli-api';\nimport { Config } from '../utils/config';\nimport { Https } from '../utils/https';\nimport { login, storeCredentials } from '../utils/login';\nimport { Telemetry } from '../utils/telemetry/telemetry';\nimport { writeEnv } from '../utils/write-env';\n\ninterface Channel {\n id: number;\n name: string;\n platform: string;\n}\n\ninterface ChannelsResponse {\n data: Channel[];\n}\n\ninterface InitResponse {\n data: {\n makeswift_dev_api_key: string;\n storefront_api_token: string;\n envVars: Record<string, string>;\n };\n}\n\nfunction isChannelsResponse(response: unknown): response is ChannelsResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n Array.isArray(response.data) &&\n response.data.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n 'name' in item &&\n 'platform' in item,\n )\n );\n}\n\nfunction isInitResponse(response: unknown): response is InitResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'storefront_api_token' in response.data &&\n 'envVars' in response.data\n );\n}\n\nconst telemetry = new Telemetry();\n\nexport const init = new Command('init')\n .description('Connect a BigCommerce store with an existing Catalyst project')\n .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .option('--env <vars...>', 'Arbitrary environment variables to set in .env.local')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\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 .action(async (options) => {\n const projectDir = process.cwd();\n\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n\n // Check for stored credentials\n if (!storeHash || !accessToken) {\n const config = new Config(projectDir);\n const storedAuth = config.getAuth();\n\n storeHash = storeHash ?? storedAuth.storeHash;\n accessToken = accessToken ?? storedAuth.accessToken;\n }\n\n if (!storeHash || !accessToken) {\n const credentials = await login(`https://login.${options.bigcommerceHostname}`);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n\n // Store credentials after successful authentication\n storeCredentials(projectDir, credentials);\n }\n\n await telemetry.identify(storeHash);\n\n const bc = new Https({\n baseUrl: `https://api.${options.bigcommerceHostname}/stores/${storeHash}`,\n accessToken,\n });\n\n const cliApi = new CliApi({\n origin: options.cliApiOrigin,\n storeHash,\n accessToken,\n });\n\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n const channelsResponse = await bc.fetch('/v3/channels?available=true&type=storefront');\n\n if (!channelsResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /v3/channels failed: ${channelsResponse.status} ${channelsResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const availableChannels: unknown = await channelsResponse.json();\n\n if (!isChannelsResponse(availableChannels)) {\n console.error(chalk.red('\\nUnexpected response format from channels endpoint\\n'));\n process.exit(1);\n }\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort(\n (a: Channel, b: Channel) =>\n channelSortOrder.indexOf(a.platform) - channelSortOrder.indexOf(b.platform),\n )\n .map((ch: Channel) => ({\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 const channelId = existingChannel.id;\n\n // Get channel init data\n const initResponse = await cliApi.getChannelInit(channelId);\n\n if (!initResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /channels/${channelId}/init failed: ${initResponse.status} ${initResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const initData: unknown = await initResponse.json();\n\n if (!isInitResponse(initData)) {\n console.error(chalk.red('\\nUnexpected response format from init endpoint\\n'));\n process.exit(1);\n }\n\n const envVars = { ...initData.data.envVars };\n\n // Add any CLI-provided env vars as overrides\n if (options.env) {\n const cliEnvVars = options.env.reduce<Record<string, string>>((acc, env) => {\n const [key, value] = env.split('=');\n\n if (key && value) {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n\n Object.assign(envVars, cliEnvVars);\n }\n\n writeEnv(projectDir, envVars);\n\n console.log(chalk.green(`\\n.env.local file created for channel ${existingChannel.name}!\\n`));\n console.log(chalk.green(`\\nNext steps:\\n`));\n console.log(chalk.yellow(`\\npnpm run dev\\n`));\n });\n","import { Command } from '@commander-js/extra-typings';\nimport { exec as execCb } from 'child_process';\nimport { parse } from 'dotenv';\nimport { outputFileSync, writeJsonSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { coerce, compare } from 'semver';\nimport { promisify } from 'util';\nimport { z } from 'zod';\n\nconst exec = promisify(execCb);\n\nexport const ManifestSchema = z.object({\n name: z.string(),\n dependencies: z.object({ add: z.array(z.string()) }),\n devDependencies: z.object({ add: z.array(z.string()) }),\n environmentVariables: z.array(z.string()),\n});\n\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport const integration = new Command('integration')\n .argument('<integration-name>', 'Formatted name of the integration')\n .option('--commit-hash <hash>', 'Override integration source branch with a specific commit hash')\n .action(async (integrationNameRaw, options) => {\n // @todo check for integration name conflicts\n const integrationName = z.string().transform(kebabCase).parse(integrationNameRaw);\n\n const manifest: Manifest = {\n name: integrationName,\n dependencies: { add: [] },\n devDependencies: { add: [] },\n environmentVariables: [],\n };\n\n await exec('git fetch --tags');\n\n const { stdout: headRefStdOut } = await exec('git rev-parse --abbrev-ref HEAD');\n let [sourceRef] = headRefStdOut.split('\\n');\n\n if (options.commitHash) {\n sourceRef = options.commitHash;\n }\n\n const { stdout: catalystTags } = await exec('git tag --list @bigcommerce/catalyst-core@\\\\*');\n const [latestCoreTag] = catalystTags\n .split('\\n')\n .filter(Boolean)\n .sort((a, b) => {\n const versionA = coerce(a.replace('@bigcommerce/catalyst-core@', ''));\n const versionB = coerce(b.replace('@bigcommerce/catalyst-core@', ''));\n\n if (versionA && versionB) {\n return compare(versionA, versionB);\n }\n\n return 0;\n })\n .reverse();\n\n const PackageDependenciesSchema = z.object({\n dependencies: z.object({}).passthrough(),\n devDependencies: z.object({}).passthrough(),\n });\n\n const getPackageDeps = async (ref: string) => {\n const { stdout } = await exec(`git show ${ref}:core/package.json`);\n\n return PackageDependenciesSchema.parse(JSON.parse(stdout));\n };\n\n const integrationJson = await getPackageDeps(sourceRef);\n const latestCoreTagJson = await getPackageDeps(latestCoreTag);\n\n const diffObjectKeys = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n return Object.keys(a).filter((key) => !Object.keys(b).includes(key));\n };\n\n manifest.dependencies.add = diffObjectKeys(\n integrationJson.dependencies,\n latestCoreTagJson.dependencies,\n );\n manifest.devDependencies.add = diffObjectKeys(\n integrationJson.devDependencies,\n latestCoreTagJson.devDependencies,\n );\n\n const { stdout: latestCoreEnv } = await exec(`git show ${latestCoreTag}:core/.env.example`);\n const { stdout: integrationEnv } = await exec(`git show ${sourceRef}:core/.env.example`);\n\n manifest.environmentVariables = diffObjectKeys(parse(integrationEnv), parse(latestCoreEnv));\n\n const { stdout: integrationDiff } = await exec(\n `git diff ${latestCoreTag}...${sourceRef} -- ':(exclude)core/package.json' ':(exclude)pnpm-lock.yaml'`,\n );\n\n outputFileSync(`integrations/${integrationName}/integration.patch`, integrationDiff);\n writeJsonSync(`integrations/${integrationName}/manifest.json`, manifest, {\n spaces: 2,\n });\n\n console.log('Integration created successfully.');\n });\n","import { Argument, Command, Option } from '@commander-js/extra-typings';\n\nimport { catalystTelemetry, CatalystTelemetryOptions } from '../utils/telemetry';\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: string | undefined, options: CatalystTelemetryOptions) =>\n catalystTelemetry(options, arg),\n );\n","import chalk from 'chalk';\n\nimport { Telemetry } from './telemetry';\n\nexport interface CatalystTelemetryOptions {\n enable?: boolean;\n disable?: boolean;\n}\n\nconst telemetry = new Telemetry();\nlet isEnabled = telemetry.isEnabled();\n\nconst catalystTelemetry = (options: CatalystTelemetryOptions, arg: string | undefined) => {\n if (options.enable || arg === 'enable') {\n telemetry.setEnabled(true);\n isEnabled = true;\n\n console.log('Success!');\n } else if (options.disable || arg === 'disable') {\n const path = telemetry.setEnabled(false);\n\n if (isEnabled) {\n console.log(`Your preference has been saved${path ? ` to ${path}` : ''}`);\n } else {\n console.log(`Catalyst CLI telemetry collection is already disabled.`);\n }\n\n isEnabled = false;\n } else {\n console.log('Catalyst CLI Telemetry');\n }\n\n console.log(\n `\\nStatus: ${chalk.bold(isEnabled ? chalk.green('Enabled') : chalk.red('Disabled'))}`,\n );\n\n if (!isEnabled) {\n console.log(\n `\\nYou have opted-out of Catalyst CLI telemetry.\\nNo data will be collected from your machine.`,\n );\n }\n};\n\nexport { catalystTelemetry };\n","import { Command } from '@commander-js/extra-typings';\n\nimport { Telemetry } from '../utils/telemetry/telemetry';\n\nconst telemetry = new Telemetry();\n\nconst allowlistArguments = ['--gh-ref', '--repository', '--project-name'];\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\nexport const telemetryPreHook = async (command: Command) => {\n // @ts-expect-error _name is a private property\n const availableCommands = command.commands.map((cmd) => cmd._name); // eslint-disable-line @typescript-eslint/no-unsafe-return, no-underscore-dangle\n\n const [commandName = 'create', ...args] = command.args;\n\n // When running `npm create @bigcommerce/catalyst`, the command defaults to\n // the `create` command but commander doesn't pass it as part of the arguments.\n // We need to handle this case separately.\n if (!availableCommands.includes(commandName)) {\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('create', {\n ...parseArguments(args),\n });\n }\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(args),\n });\n};\n\nexport const telemetryPostHook = async () => {\n await telemetry.analytics.closeAndFlush();\n};\n"],"mappings":"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","names":["chalk","chalk","execSync","join","Separator","name","Separator","Separator","process","process","name","execSync","spawnSync","execSync","chalk","chalk","name","chalk","z","z","z","chalk","join","isWindows","chalk","join","execSync","Command","Option","select","chalk","isChannelsResponse","isInitResponse","telemetry","Command","Option","chalk","select","Command","parse","outputFileSync","kebabCase","z","z","Command","kebabCase","parse","outputFileSync","Command","Option","chalk","telemetry","chalk","telemetry","Command","Option","telemetry","chalk","telemetry"]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/commands/create.ts","../src/prompts/multi-select/multi-select.ts","../src/prompts/multi-select/helpers.ts","../src/utils/user-agent.ts","../src/utils/https.ts","../src/utils/cli-api.ts","../src/utils/clone-catalyst.ts","../src/utils/checkout-ref.ts","../src/utils/is-exec-exception.ts","../src/utils/has-github-ssh.ts","../src/utils/reset-branch-to-ref.ts","../src/utils/install-dependencies.ts","../src/utils/spinner.ts","../src/utils/localization.ts","../src/utils/login.ts","../src/utils/auth.ts","../src/utils/parse.ts","../src/utils/config.ts","../src/utils/telemetry/telemetry.ts","../src/utils/write-env.ts","../src/commands/init.ts","../src/commands/integration.ts","../src/commands/telemetry.ts","../src/utils/telemetry/index.ts","../src/hooks/telemetry.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { program } from '@commander-js/extra-typings';\nimport chalk from 'chalk';\n\nimport PACKAGE_INFO from '../package.json';\n\nimport { create } from './commands/create';\nimport { init } from './commands/init';\nimport { integration } from './commands/integration';\nimport { telemetry } from './commands/telemetry';\nimport { telemetryPostHook, telemetryPreHook } from './hooks/telemetry';\n\nconsole.log(chalk.cyanBright(`\\n◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('A command line tool to create a new Catalyst project.')\n .addCommand(create, { isDefault: true })\n .addCommand(init)\n .addCommand(integration)\n .addCommand(telemetry)\n .hook('preAction', telemetryPreHook)\n .hook('postAction', telemetryPostHook);\n\nprogram.parse(process.argv);\n","{\n \"name\": \"@bigcommerce/create-catalyst\",\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"bin\": \"bin/index.cjs\",\n \"files\": [\n \"bin\",\n \"dist\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"jest\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \"^20.0.0 || ^22.0.0\"\n },\n \"dependencies\": {\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@iarna/toml\": \"^2.2.5\",\n \"@inquirer/core\": \"^10.1.13\",\n \"@inquirer/figures\": \"^1.0.12\",\n \"@inquirer/prompts\": \"^7.5.3\",\n \"@inquirer/type\": \"^3.0.7\",\n \"@segment/analytics-node\": \"^2.2.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^14.0.0\",\n \"conf\": \"^13.1.0\",\n \"cross-spawn\": \"^7.0.6\",\n \"dotenv\": \"^16.5.0\",\n \"fs-extra\": \"^11.3.0\",\n \"giget\": \"^1.2.5\",\n \"lodash.kebabcase\": \"^4.1.1\",\n \"nypm\": \"^0.5.4\",\n \"open\": \"^10.1.2\",\n \"ora\": \"^8.2.0\",\n \"semver\": \"^7.7.2\",\n \"std-env\": \"^3.9.0\",\n \"zod\": \"^3.25.51\",\n \"zod-validation-error\": \"^3.4.1\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.11.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@swc/core\": \"^1.11.31\",\n \"@swc/jest\": \"^0.2.38\",\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^29.5.14\",\n \"@types/lodash.kebabcase\": \"^4.1.9\",\n \"@types/node\": \"^22.15.30\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/semver\": \"^7.7.0\",\n \"eslint\": \"^8.57.1\",\n \"jest\": \"^29.7.0\",\n \"msw\": \"^2.9.0\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\"\n }\n}\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { pathExistsSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { join } from 'path';\n\nimport { multiSelect } from '../prompts/multi-select';\nimport { CliApi } from '../utils/cli-api';\nimport { cloneCatalyst } from '../utils/clone-catalyst';\nimport { Https } from '../utils/https';\nimport { installDependencies } from '../utils/install-dependencies';\nimport { getAvailableLocales } from '../utils/localization';\nimport { login, storeCredentials } from '../utils/login';\nimport { Telemetry } from '../utils/telemetry/telemetry';\nimport { writeEnv } from '../utils/write-env';\n\ninterface Channel {\n id: number;\n name: string;\n platform: string;\n}\n\ninterface ChannelsResponse {\n data: Channel[];\n}\n\ninterface InitResponse {\n data: {\n makeswift_dev_api_key: string;\n storefront_api_token: string;\n envVars: Record<string, string>;\n };\n}\n\ninterface CreateChannelResponse {\n data: {\n id: number;\n storefront_api_token: string;\n envVars: Record<string, string>;\n };\n}\n\ninterface EligibilityResponse {\n data: {\n eligible: boolean;\n message: string;\n };\n}\n\nfunction getPlatformCheckCommand(command: string): string {\n const isWindows = process.platform === 'win32';\n\n return isWindows ? `where.exe ${command}` : `which ${command}`;\n}\n\nconst telemetry = new Telemetry();\n\nasync function handleChannelCreation(bc: Https, cliApi: CliApi) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n let availableLocales = [];\n\n try {\n availableLocales = await getAvailableLocales(bc);\n } catch (error) {\n if (error instanceof Error) {\n console.error(chalk.red(error.message));\n }\n\n process.exit(1);\n }\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: () => chalk.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 additionalLocales = await multiSelect({\n choices: availableLocales.filter(({ value }) => value !== storefrontLocale),\n message: 'Which additional languages would you like to add to your channel?',\n theme: {\n style: {\n help: () => chalk.dim('(Select locale from the list or start typing the name)'),\n },\n },\n validate: (selections) => {\n if (selections.length > 4) {\n return 'You can only select up to 4 additional languages';\n }\n\n return true;\n },\n });\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 const response = await cliApi.createChannel(\n newChannelName,\n storefrontLocale,\n additionalLocales,\n shouldInstallSampleData,\n );\n\n if (!response.ok) {\n console.error(\n chalk.red(`\\nPOST /channels/catalyst failed: ${response.status} ${response.statusText}\\n`),\n );\n process.exit(1);\n }\n\n const channelData: unknown = await response.json();\n\n if (!isCreateChannelResponse(channelData)) {\n console.error(chalk.red('\\nUnexpected response format from create channel endpoint\\n'));\n process.exit(1);\n }\n\n return {\n channelId: channelData.data.id,\n storefrontToken: channelData.data.storefront_api_token,\n envVars: channelData.data.envVars,\n };\n}\n\nasync function handleChannelSelection(bc: Https) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n const channelsResponse = await bc.fetch('/v3/channels?available=true&type=storefront');\n\n if (!channelsResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /v3/channels failed: ${channelsResponse.status} ${channelsResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const availableChannels: unknown = await channelsResponse.json();\n\n if (!isChannelsResponse(availableChannels)) {\n console.error(chalk.red('\\nUnexpected response format from channels endpoint\\n'));\n process.exit(1);\n }\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort((a: Channel, b: Channel) => {\n const aIndex = channelSortOrder.indexOf(a.platform);\n const bIndex = channelSortOrder.indexOf(b.platform);\n\n // If both platforms are not in the sort order, maintain their original order\n if (aIndex === -1 && bIndex === -1) {\n return 0;\n }\n\n // If one platform is not in the sort order, it should go to the end\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n\n // If both platforms are in the sort order, use their relative positions\n return aIndex - bIndex;\n })\n .map((ch: Channel) => ({\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 getChannelInit(cliApi: CliApi, channelId: number) {\n const initResponse = await cliApi.getChannelInit(channelId);\n\n if (!initResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /channels/${channelId}/init failed: ${initResponse.status} ${initResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const initData: unknown = await initResponse.json();\n\n if (!isInitResponse(initData)) {\n console.error(chalk.red('\\nUnexpected response format from init endpoint\\n'));\n process.exit(1);\n }\n\n return {\n storefrontToken: initData.data.storefront_api_token,\n envVars: initData.data.envVars,\n };\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 console.error(chalk.red(`Error: --projectDir ${projectDir} is not a valid path\\n`));\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 console.error(chalk.red(`Error: ${projectDir} already exists\\n`));\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 is the name of your project?',\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 console.error(chalk.red('Error: git is required to create a Catalyst project\\n'));\n process.exit(1);\n }\n\n try {\n execSync(getPlatformCheckCommand('pnpm'), { stdio: 'ignore' });\n } catch {\n console.error(chalk.red('Error: pnpm is required to create a Catalyst project\\n'));\n console.error(chalk.yellow('Tip: Enable it by running `corepack enable pnpm`\\n'));\n process.exit(1);\n }\n}\n\nexport const create = new Command('create')\n .description('Command to scaffold and connect a Catalyst storefront to your BigCommerce store')\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 .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .option('--channel-id <id>', 'BigCommerce channel ID')\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('--env <vars...>', 'Arbitrary environment variables to set in .env.local')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\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 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;\n let storefrontToken = options.storefrontToken;\n let credentials;\n\n if (options.channelId) {\n channelId = parseInt(options.channelId, 10);\n }\n\n let envVars: Record<string, string> = {};\n\n // Get credentials if needed\n if ((!storeHash || !accessToken) && (!channelId || !storefrontToken)) {\n credentials = await login(`https://login.${options.bigcommerceHostname}`);\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n // If store hash, channel ID, and storefront token are all provided, skip channel selection/creation\n if (storeHash && channelId && storefrontToken) {\n envVars.BIGCOMMERCE_STORE_HASH = storeHash;\n envVars.BIGCOMMERCE_CHANNEL_ID = channelId.toString();\n envVars.BIGCOMMERCE_STOREFRONT_API_TOKEN = storefrontToken;\n } else {\n if (!storeHash || !accessToken) {\n // Create project without credentials\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n cloneCatalyst({ repository, projectName, projectDir, ghRef, resetMain: options.resetMain });\n await installDependencies(projectDir);\n\n // Add any CLI-provided env vars\n if (options.env) {\n const cliEnvVars = options.env.reduce<Record<string, string>>((acc, env) => {\n const [key, value] = env.split('=');\n\n if (key && value) {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n\n Object.assign(envVars, cliEnvVars);\n }\n\n // Write env vars even if we don't have store credentials\n writeEnv(projectDir, envVars);\n\n console.log(\n [\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n `Next steps:`,\n Object.keys(envVars).length > 0\n ? chalk.yellow(`\\n- cd ${projectName} && pnpm run dev\\n`)\n : [\n chalk.yellow(`\\n- cd ${projectName} && cp .env.example .env.local`),\n chalk.yellow(`\\n- Populate .env.local with your BigCommerce API credentials\\n`),\n ].join(''),\n ].join('\\n'),\n );\n\n process.exit(0);\n }\n\n // At this point we should have a storeHash and can identify the account\n await telemetry.identify(storeHash);\n\n if (!channelId || !storefrontToken) {\n const bc = new Https({\n baseUrl: `https://api.${options.bigcommerceHostname}/stores/${storeHash}`,\n accessToken,\n });\n\n const cliApi = new CliApi({\n origin: options.cliApiOrigin,\n storeHash,\n accessToken,\n });\n\n // If we have channelId but no storefrontToken, just get the init data\n if (channelId && !storefrontToken) {\n const initData = await getChannelInit(cliApi, channelId);\n\n envVars = { ...initData.envVars };\n storefrontToken = initData.storefrontToken;\n } else if (!channelId) {\n const eligibilityResponse = await cliApi.checkEligibility();\n\n if (!eligibilityResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /channels/catalyst/eligibility failed: ${eligibilityResponse.status} ${eligibilityResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const eligibilityData: unknown = await eligibilityResponse.json();\n\n if (!isEligibilityResponse(eligibilityData)) {\n console.error(chalk.red('\\nUnexpected response format from eligibility endpoint\\n'));\n process.exit(1);\n }\n\n if (!eligibilityData.data.eligible) {\n console.warn(chalk.yellow(eligibilityData.data.message));\n }\n\n let shouldCreateChannel;\n\n if (eligibilityData.data.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(bc, cliApi);\n\n channelId = channelData.channelId;\n storefrontToken = channelData.storefrontToken;\n envVars = { ...channelData.envVars };\n\n console.log(chalk.green(`Channel created successfully`));\n console.warn(\n chalk.yellow(\n '\\nNote: 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.',\n ),\n );\n }\n\n if (!shouldCreateChannel) {\n channelId = await handleChannelSelection(bc);\n\n const initData = await getChannelInit(cliApi, channelId);\n\n envVars = { ...initData.envVars };\n storefrontToken = initData.storefrontToken;\n }\n }\n }\n }\n\n // Add any CLI-provided env vars as overrides\n if (options.env) {\n const cliEnvVars = options.env.reduce<Record<string, string>>((acc, env) => {\n const [key, value] = env.split('=');\n\n if (key && value) {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n\n Object.assign(envVars, cliEnvVars);\n }\n\n // Add store hash, channel ID, and storefront token to envVars if provided\n if (options.storeHash) {\n envVars.BIGCOMMERCE_STORE_HASH = options.storeHash;\n }\n\n if (options.channelId) {\n envVars.BIGCOMMERCE_CHANNEL_ID = options.channelId;\n }\n\n if (options.storefrontToken) {\n envVars.BIGCOMMERCE_STOREFRONT_TOKEN = options.storefrontToken;\n }\n\n if (!channelId) throw new Error('Something went wrong, channelId is not defined');\n if (!storefrontToken) throw new Error('Something went wrong, storefrontToken is not defined');\n\n // Create the project with all necessary configuration\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n cloneCatalyst({ repository, projectName, projectDir, ghRef, resetMain: options.resetMain });\n await installDependencies(projectDir);\n\n // Write env vars\n writeEnv(projectDir, envVars);\n\n // Store credentials after successful project creation\n if (credentials) {\n storeCredentials(projectDir, credentials);\n }\n\n console.log(\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n '\\nNext steps:\\n',\n chalk.yellow(`\\ncd ${projectName} && pnpm run dev\\n`),\n );\n });\n\nfunction isInitResponse(response: unknown): response is InitResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'storefront_api_token' in response.data &&\n 'envVars' in response.data\n );\n}\n\nfunction isEligibilityResponse(response: unknown): response is EligibilityResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'eligible' in response.data &&\n 'message' in response.data\n );\n}\n\nfunction isCreateChannelResponse(response: unknown): response is CreateChannelResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'id' in response.data &&\n 'storefront_api_token' in response.data &&\n 'envVars' in response.data\n );\n}\n\nfunction isChannelsResponse(response: unknown): response is ChannelsResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n Array.isArray(response.data) &&\n response.data.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n 'name' in item &&\n 'platform' in item,\n )\n );\n}\n","import {\n createPrompt,\n isBackspaceKey,\n isDownKey,\n isEnterKey,\n isNumberKey,\n isSpaceKey,\n isUpKey,\n makeTheme,\n Separator,\n type Status,\n useEffect,\n useKeypress,\n useMemo,\n usePagination,\n usePrefix,\n useRef,\n useState,\n ValidationError,\n} from '@inquirer/core';\nimport ansiEscapes from 'ansi-escapes';\n\nimport { isChecked, isSelectable, normalizeChoices, selectTheme, toggle } from './helpers';\nimport { Item, MultiSelectConfig, SelectTheme } from './types';\n\nexport const multiSelect = createPrompt(\n <Value>(config: MultiSelectConfig<Value>, done: (value: Value[]) => void) => {\n const theme = makeTheme<SelectTheme>(selectTheme, config.theme);\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n const firstRender = useRef(true);\n const [items, setItems] = useState<ReadonlyArray<Item<Value>>>(\n normalizeChoices(config.choices),\n );\n const [status, setStatus] = useState<Status>('idle');\n const [errorMsg, setError] = useState<string>();\n const prefix = usePrefix({ status, theme });\n const { instructions, loop = true, pageSize = 7, required, validate = () => true } = config;\n\n const bounds = useMemo(() => {\n const first = items.findIndex(isSelectable);\n const last = items.findLastIndex(isSelectable);\n\n if (first === -1) {\n throw new ValidationError(\n '[multi select prompt] No selectable choices. All choices are disabled.',\n );\n }\n\n return { first, last };\n }, [items]);\n\n const [showHelpTip, setShowHelpTip] = useState(true);\n const [active, setActive] = useState(bounds.first);\n\n useEffect(\n () => () => {\n clearTimeout(searchTimeoutRef.current);\n },\n [],\n );\n\n // eslint-disable-next-line complexity\n useKeypress(async (key, rl) => {\n clearTimeout(searchTimeoutRef.current);\n\n if (isEnterKey(key)) {\n const selection = items.filter(isChecked);\n const isValid = await validate([...selection]);\n\n if (required && !items.some(isChecked)) {\n setError('At least one choice must be selected');\n } else if (isValid === true) {\n setStatus('done');\n done(selection.map((choice) => choice.value));\n } else {\n setError(isValid || 'You must select a valid value');\n }\n } else if (isUpKey(key) || isDownKey(key)) {\n rl.clearLine(0);\n\n if (\n loop ||\n (isUpKey(key) && active !== bounds.first) ||\n (isDownKey(key) && active !== bounds.last)\n ) {\n const offset = isUpKey(key) ? -1 : 1;\n let next = active;\n\n do {\n next = (next + offset + items.length) % items.length;\n } while (!isSelectable(items[next]));\n\n setActive(next);\n }\n } else if (isNumberKey(key)) {\n rl.clearLine(0);\n\n const position = Number(key.name) - 1;\n\n if (isSelectable(items[position])) {\n setActive(position);\n }\n } else if (isBackspaceKey(key)) {\n rl.clearLine(0);\n } else if (isSpaceKey(key)) {\n rl.clearLine(0);\n setShowHelpTip(false);\n\n const nextItems = items.map((choice, i) => (i === active ? toggle(choice) : choice));\n const selection = nextItems.filter(isChecked);\n const isValid = await validate([...selection]);\n\n if (isValid === true) {\n setError(undefined);\n setItems(nextItems);\n } else {\n setError(isValid || 'You must select a valid value');\n }\n } else {\n // Default to search\n const searchTerm = rl.line.toLowerCase();\n const matchIndex = items.findIndex((item) =>\n Separator.isSeparator(item) || !isSelectable(item)\n ? false\n : item.name.toLowerCase().startsWith(searchTerm),\n );\n\n if (matchIndex !== -1) {\n setActive(matchIndex);\n }\n\n searchTimeoutRef.current = setTimeout(() => {\n rl.clearLine(0);\n }, 700);\n }\n });\n\n const message = theme.style.message(config.message, status);\n\n let helpTipTop = '';\n let helpTipBottom = '';\n let description: string | undefined;\n\n if (\n theme.helpMode === 'always' ||\n (theme.helpMode === 'auto' && showHelpTip && (instructions === undefined || instructions))\n ) {\n if (typeof instructions === 'string') {\n helpTipTop = instructions;\n } else {\n const keys = [\n `${theme.style.key('space')} to select`,\n `${theme.style.key('enter')} to proceed`,\n ];\n\n helpTipTop = ` (Press ${keys.filter((key) => key !== '').join(', ')})`;\n }\n\n if (\n items.length > pageSize &&\n (theme.helpMode === 'always' ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (theme.helpMode === 'auto' && firstRender.current))\n ) {\n helpTipBottom = `\\n${theme.style.help('(Use arrow keys to reveal more choices)')}`;\n firstRender.current = false;\n }\n }\n\n const page = usePagination({\n items,\n active,\n renderItem({ item, isActive }) {\n if (Separator.isSeparator(item)) {\n return ` ${item.separator}`;\n }\n\n if (item.disabled) {\n return theme.style.disabledChoice(\n `${item.name} ${typeof item.disabled === 'string' ? item.disabled : '(disabled)'}`,\n );\n }\n\n if (isActive) {\n description = item.description;\n }\n\n const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked;\n const color = isActive ? theme.style.highlight : (x: string) => x;\n const cursor = isActive ? theme.icon.cursor : ` `;\n\n return color(`${cursor}${checkbox} ${item.name}`);\n },\n pageSize,\n loop,\n });\n\n if (status === 'done') {\n return `${prefix} ${message} ${theme.style.answer(theme.style.renderSelectedChoices(items.filter(isChecked), items))}`;\n }\n\n const selectedChoices =\n items.filter(isChecked).length > 0\n ? ` (${theme.style.answer(theme.style.renderSelectedChoices(items.filter(isChecked), items))})`\n : '';\n const choiceDescription = description ? `\\n${theme.style.description(description)}` : ``;\n\n let error = '';\n\n if (errorMsg) {\n error = `\\n${theme.style.error(errorMsg)}`;\n }\n\n return `${prefix} ${message}${selectedChoices}${helpTipTop}\\n${page}${helpTipBottom}${choiceDescription}${error}${ansiEscapes.cursorHide}`;\n },\n);\n\nexport { Separator } from '@inquirer/core';\n","import { Separator } from '@inquirer/core';\nimport figures from '@inquirer/figures';\nimport chalk from 'chalk';\n\nimport { Choice, Item, NormalizedChoice, SelectTheme } from './types';\n\nexport const selectTheme: SelectTheme = {\n helpMode: 'auto',\n icon: {\n checked: chalk.green(figures.circleFilled),\n unchecked: figures.circle,\n cursor: figures.pointer,\n },\n style: {\n description: (text: string) => chalk.cyan(text),\n disabledChoice: (text: string) => chalk.dim(`- ${text}`),\n renderSelectedChoices: (selectedChoices) =>\n selectedChoices.map((choice) => choice.short).join(', '),\n },\n};\n\nexport const isSelectable = <Value>(item: Item<Value>): item is NormalizedChoice<Value> =>\n !Separator.isSeparator(item) && !item.disabled;\n\nexport const isChecked = <Value>(item: Item<Value>): item is NormalizedChoice<Value> =>\n isSelectable(item) && Boolean(item.checked);\n\nexport const toggle = <Value>(item: Item<Value>): Item<Value> =>\n isSelectable(item) ? { ...item, checked: !item.checked } : item;\n\nexport const normalizeChoices = <Value>(\n choices: ReadonlyArray<string | Choice<Value> | Separator>,\n): Array<Item<Value>> =>\n choices.map((choice) => {\n if (Separator.isSeparator(choice)) {\n return choice;\n }\n\n if (typeof choice === 'string') {\n return {\n checked: false,\n disabled: false,\n name: choice,\n short: choice,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n value: choice as Value,\n };\n }\n\n const name = choice.name ?? String(choice.value);\n\n return {\n checked: choice.checked ?? false,\n description: choice.description,\n disabled: choice.disabled ?? false,\n name,\n short: choice.short ?? name,\n value: choice.value,\n };\n });\n","import {\n isDevelopment,\n isLinux,\n isMacOS,\n isProduction,\n isTest,\n isWindows,\n nodeVersion,\n process,\n provider,\n runtime,\n} from 'std-env';\n\nimport packageInfo from '../../package.json';\n\nconst { name, version } = packageInfo;\n\nconst getOS = () => {\n if (isWindows) return 'Windows';\n if (isMacOS) return 'macOS';\n if (isLinux) return 'Linux';\n\n return 'Unknown OS';\n};\n\nconst getEnv = () => {\n if (isDevelopment) return 'Development';\n if (isTest) return 'Test';\n if (isProduction) return 'Production';\n};\n\nconst getPlatform = () => {\n const os = getOS();\n const env = getEnv();\n\n const keysOfInterest = [\n os,\n env,\n runtime,\n provider,\n `Node ${nodeVersion}`,\n process.env.NODE_ENV,\n ].filter(Boolean);\n\n return keysOfInterest.join('; ');\n};\n\nconst detectedPlatform = getPlatform();\n\nexport const getCLIUserAgent = (platform?: string, extensions?: string): string => {\n const userAgentParts = [`${name}/${version}`];\n\n const platformValue = platform ?? detectedPlatform;\n\n userAgentParts.push(`(${platformValue})`);\n\n if (extensions) {\n userAgentParts.push(extensions);\n }\n\n return userAgentParts.join(' ');\n};\n","import { getCLIUserAgent } from './user-agent';\n\ninterface HttpsConfig {\n baseUrl: string;\n accessToken?: string;\n}\n\nexport class Https {\n private baseUrl: string;\n private accessToken?: string;\n private userAgent: string;\n\n constructor({ baseUrl, accessToken }: HttpsConfig) {\n this.baseUrl = baseUrl;\n this.accessToken = accessToken;\n this.userAgent = getCLIUserAgent();\n }\n\n async fetch(path: string, opts: RequestInit = {}) {\n const { headers = {}, ...rest } = opts;\n\n const options = {\n headers: {\n ...Object.fromEntries(new Headers(headers)),\n Accept: 'application/json',\n 'User-Agent': this.userAgent,\n ...(this.accessToken && { 'X-Auth-Token': this.accessToken }),\n },\n ...rest,\n };\n\n return fetch(`${this.baseUrl}${path}`, options);\n }\n}\n","import { Https } from './https';\n\ninterface CliApiConfig {\n origin: string;\n storeHash: string;\n accessToken: string;\n}\n\nexport class CliApi {\n private client: Https;\n\n constructor({ origin, storeHash, accessToken }: CliApiConfig) {\n this.client = new Https({\n baseUrl: `${origin}/stores/${storeHash}/cli-api/v3`,\n accessToken,\n });\n }\n\n async getChannelInit(channelId: number | string) {\n return this.client.fetch(`/channels/${channelId}/init`, {\n method: 'GET',\n });\n }\n\n async checkEligibility() {\n return this.client.fetch('/channels/catalyst/eligibility', {\n method: 'GET',\n });\n }\n\n async createChannel(\n name: string,\n storefrontLocale: string,\n additionalLocales: string[],\n installSampleData = false,\n ) {\n return this.client.fetch('/channels/catalyst', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name,\n initialData: {\n type: installSampleData ? 'sample' : 'none',\n },\n deployStorefront: true,\n devOrigin: 'http://localhost:3000',\n storefrontLanguage: storefrontLocale,\n additionalLocales,\n }),\n });\n }\n}\n","import { execSync } from 'child_process';\n\nimport { checkoutRef } from './checkout-ref';\nimport { hasGitHubSSH } from './has-github-ssh';\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 console.log(`Cloning ${repository} using ${useSSH ? 'SSH' : 'HTTPS'}...\\n`);\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 console.log();\n\n execSync('git remote rename origin upstream', { cwd: projectDir, stdio: 'inherit' });\n console.log();\n\n if (ghRef) {\n if (resetMain) {\n // Create and checkout a new main branch\n execSync('git checkout -b main', { cwd: projectDir, stdio: 'inherit' });\n\n // Reset it to the specified ref\n resetBranchToRef(projectDir, ghRef);\n\n console.log(`Reset main to ${ghRef} successfully.\\n`);\n\n return;\n }\n\n checkoutRef(projectDir, ghRef);\n\n console.log();\n }\n};\n","import { sync as spawnSync } from 'cross-spawn';\n\nimport { isExecException } from './is-exec-exception';\n\nexport function checkoutRef(repoDir: string, ref: string): void {\n try {\n // Attempt to checkout the specified ref\n const spawn = spawnSync('git', ['checkout', ref, '--'], {\n cwd: repoDir,\n encoding: 'utf8',\n // Explicitly set shell to false to avoid shell injection\n // Don't use shell: true as it's a security risk\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 console.log(`Checked out ref ${ref} successfully.`);\n } catch (error: unknown) {\n // Handle the error safely according to ESLint rules\n if (isExecException(error)) {\n const stderr = error.stderr ? error.stderr.toString() : '';\n\n // Check if the error message indicates that the ref was not found\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 console.error(`Ref '${ref}' not found in the repository.`);\n } else {\n console.error(`Error checking out ref '${ref}':`, stderr.trim());\n }\n } else if (error instanceof Error) {\n // General error handling\n console.error(`Error checking out ref '${ref}':`, error.message);\n } else {\n // Unknown error type\n console.error(`Unknown error occurred while checking out ref '${ref}'.`);\n }\n\n console.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 // Attempt to connect to GitHub via SSH and capture the output\n const output = execSync('ssh -T git@github.com', {\n encoding: 'utf8',\n stdio: 'pipe',\n }).toString();\n\n // Check the output for successful authentication\n return output.includes('successfully authenticated');\n } catch (error: unknown) {\n // Use the type guard to check if error is an ExecException\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 // Check if the output indicates successful authentication\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 // Explicitly set shell to false to avoid shell injection\n // Don't use shell: true as it's a security risk\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 chalk from 'chalk';\nimport { installDependencies as installDeps } from 'nypm';\n\nimport { spinner } from './spinner';\n\nconst installAllDeps = async (projectDir: string) => {\n await installDeps({ cwd: projectDir, silent: true, packageManager: 'pnpm' });\n};\n\nexport const installDependencies = async (projectDir: string) =>\n spinner(installAllDeps(projectDir), {\n text: `Installing dependencies. This could take a minute...`,\n successText: `Dependencies installed successfully`,\n failText: (err) => chalk.red(`Failed to install dependencies: ${err.message}`),\n });\n","import { type Ora, oraPromise, type PromiseOptions } from 'ora';\n\nexport const spinner = async <T>(\n action: PromiseLike<T> | ((spinner: Ora) => PromiseLike<T>),\n oraOpts: PromiseOptions<T>,\n) => {\n return oraPromise(action, {\n spinner: 'triangle',\n ...oraOpts,\n }).catch(() => process.exit(1));\n};\n","import { z } from 'zod';\n\nimport { Https } from './https';\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 (bc: Https) => {\n const response = await bc.fetch('/v3/settings/store/available-locales');\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 chalk from 'chalk';\nimport open from 'open';\nimport { createInterface } from 'readline';\n\nimport { Auth } from './auth';\nimport { Config } from './config';\nimport { spinner } from './spinner';\n\ninterface LoginResult {\n storeHash: string;\n accessToken: string;\n}\n\ninterface DeviceCodeCredentials {\n store_hash: string;\n access_token: string;\n}\n\nasync function pollDeviceCode(\n auth: Auth,\n deviceCode: string,\n interval: number,\n): Promise<DeviceCodeCredentials | null> {\n try {\n const credentials = await auth.checkDeviceCode(deviceCode);\n\n return credentials;\n } catch {\n await new Promise((resolve) => setTimeout(resolve, interval * 1000));\n\n return null;\n }\n}\n\nasync function waitForCredentials(\n auth: Auth,\n deviceCode: string,\n interval: number,\n): Promise<DeviceCodeCredentials> {\n const credentials = await pollDeviceCode(auth, deviceCode, interval);\n\n if (credentials) {\n return credentials;\n }\n\n return waitForCredentials(auth, deviceCode, interval);\n}\n\nasync function waitForKeyPress(prompt: string): Promise<boolean> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // Enable raw mode to get individual keystrokes\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n return new Promise((resolve) => {\n process.stdin.once('data', (data) => {\n // Restore normal stdin mode\n process.stdin.setRawMode(false);\n process.stdin.pause();\n rl.close();\n\n // Only proceed if Enter was pressed (13 or 10 are the ASCII codes for CR and LF)\n const shouldProceed = data[0] === 13 || data[0] === 10;\n\n // Add a newline since we're in raw mode\n process.stdout.write('\\n');\n\n resolve(shouldProceed);\n });\n\n // Display the prompt\n rl.write(prompt);\n });\n}\n\nexport async function login(baseUrl: string): Promise<LoginResult> {\n const auth = new Auth({ baseUrl });\n\n const deviceCode = await auth.getDeviceCode();\n\n console.log(\n chalk.yellow('\\n! First copy your one-time code: ') + chalk.bold(deviceCode.user_code),\n );\n console.log(`Press Enter to open ${deviceCode.verification_uri} in your browser...`);\n\n const shouldOpenUrl = await waitForKeyPress('');\n\n if (shouldOpenUrl) {\n await open(deviceCode.verification_uri);\n }\n\n const credentials = await spinner(\n () => waitForCredentials(auth, deviceCode.device_code, deviceCode.interval),\n { text: 'Waiting for authentication...', successText: 'Authentication complete' },\n );\n\n return {\n storeHash: credentials.store_hash,\n accessToken: credentials.access_token,\n };\n}\n\nexport function storeCredentials(projectDir: string, credentials: LoginResult): void {\n const config = new Config(projectDir);\n\n config.setAuth(credentials.storeHash, credentials.accessToken);\n}\n","import { z } from 'zod';\n\nimport { Https } from './https';\nimport { parse } from './parse';\n\ninterface AuthConfig {\n baseUrl: string;\n}\n\nexport class Auth {\n private client: Https;\n private readonly DEVICE_OAUTH_CLIENT_ID = 's1q4io7mah2lm1i6uwp9yl1eit80n3b';\n\n constructor({ baseUrl }: AuthConfig) {\n this.client = new Https({ baseUrl });\n }\n\n async getDeviceCode() {\n const response = await this.client.fetch('/device/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n scopes: [\n 'store_channel_settings',\n 'store_sites',\n 'store_storefront_api',\n 'store_v2_content',\n 'store_v2_information',\n 'store_v2_products',\n 'store_cart',\n ].join(' '),\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n const DeviceCodeSchema = 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\n return parse(await response.json(), DeviceCodeSchema);\n }\n\n async checkDeviceCode(deviceCode: string) {\n const response = await this.client.fetch('/device/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n throw new Error('Device code not yet verified');\n }\n\n const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string().url(),\n });\n\n return parse(await response.json(), DeviceCodeSuccessSchema);\n }\n}\n","import * as z from 'zod';\nimport { fromZodError } from 'zod-validation-error';\n\nexport const parse = <T>(data: unknown, schema: z.Schema<T>): T => {\n try {\n return schema.parse(data);\n } catch (error) {\n if (error instanceof z.ZodError) {\n console.error(fromZodError(error).toString());\n }\n\n process.exit(1);\n }\n};\n","import { parse as parseTOML, stringify as stringifyTOML } from '@iarna/toml';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\n\ninterface CatalystConfig {\n auth?: {\n storeHash?: string;\n accessToken?: string;\n };\n}\n\ninterface TomlRecord {\n [key: string]: string | number | boolean | TomlRecord | TomlRecord[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isCatalystConfig(obj: unknown): obj is CatalystConfig {\n if (!isRecord(obj)) {\n return false;\n }\n\n if ('auth' in obj) {\n if (!isRecord(obj.auth)) {\n return false;\n }\n\n const { storeHash, accessToken } = obj.auth;\n\n return (\n (storeHash === undefined || typeof storeHash === 'string') &&\n (accessToken === undefined || typeof accessToken === 'string')\n );\n }\n\n return true;\n}\n\nexport class Config {\n private configPath: string;\n private config: CatalystConfig;\n\n constructor(projectDir: string) {\n this.configPath = join(projectDir, '.catalyst');\n this.config = this.read();\n }\n\n getAuth(): { storeHash?: string; accessToken?: string } {\n return this.config.auth ?? {};\n }\n\n setAuth(storeHash: string, accessToken: string): void {\n this.config.auth = { storeHash, accessToken };\n this.save();\n }\n\n save(): void {\n const configObj: TomlRecord = {};\n\n if (this.config.auth?.storeHash && this.config.auth.accessToken) {\n configObj.auth = {\n storeHash: this.config.auth.storeHash,\n accessToken: this.config.auth.accessToken,\n };\n }\n\n const dir = dirname(this.configPath);\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const preamble = `# DO NOT commit this file to your repository!\n# This file contains sensitive configuration specific to your local CLI setup.\n# It includes authentication tokens and store-specific information.\n# If using version control, make sure to add .catalyst to your .gitignore file.\n\n`;\n\n writeFileSync(this.configPath, preamble + stringifyTOML(configObj));\n }\n\n private read(): CatalystConfig {\n if (!existsSync(this.configPath)) {\n return {};\n }\n\n try {\n const contents = readFileSync(this.configPath, 'utf-8');\n const parsed = parseTOML(contents);\n\n if (isCatalystConfig(parsed)) {\n return parsed;\n }\n\n console.warn('Invalid config format in .catalyst file, using defaults');\n\n return {};\n } catch {\n console.warn('Failed to parse .catalyst config file, using defaults');\n\n return {};\n }\n }\n}\n","import { Analytics } from '@segment/analytics-node';\nimport Conf from 'conf';\nimport { randomBytes } from 'crypto';\n\nimport PACKAGE_INFO from '../../../package.json';\n\n// This is the key that stores whether or not telemetry is enabled or disabled.\nconst TELEMETRY_KEY_ENABLED = 'telemetry.enabled';\n\n// This is a quasi-persistent identifier used to dedupe recurring events.\nconst TELEMETRY_KEY_ID = `telemetry.anonymousId`;\n\ninterface Config {\n telemetry: {\n enabled: boolean;\n anonymousId: string;\n };\n}\n\nexport class Telemetry {\n readonly sessionId: string;\n readonly analytics: Analytics;\n\n private conf: Conf<Config> | null;\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 try {\n this.conf = new Conf({\n projectName: this.projectName,\n projectVersion: this.projectVersion,\n });\n } catch {\n this.conf = null;\n }\n\n this.sessionId = randomBytes(32).toString('hex');\n this.analytics = new Analytics({\n writeKey: process.env.CLI_SEGMENT_WRITE_KEY ?? 'not-a-valid-segment-write-key',\n });\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 },\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.conf?.set(TELEMETRY_KEY_ENABLED, enabled);\n\n return this.conf?.path;\n };\n\n isEnabled(): boolean {\n return (\n !this.CATALYST_TELEMETRY_DISABLED &&\n !!this.conf &&\n this.conf.get<typeof TELEMETRY_KEY_ENABLED, boolean>(TELEMETRY_KEY_ENABLED, true)\n );\n }\n\n private getAnonymousId(): string {\n const val = this.conf?.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.conf?.set(TELEMETRY_KEY_ID, generated);\n\n return generated;\n }\n}\n","import { outputFileSync } from 'fs-extra/esm';\nimport { join } from 'path';\n\nexport const writeEnv = (projectDir: string, envVars: Record<string, string>) => {\n outputFileSync(\n join(projectDir, '.env.local'),\n `${Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')}\\n`,\n );\n};\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { select } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nimport { CliApi } from '../utils/cli-api';\nimport { Config } from '../utils/config';\nimport { Https } from '../utils/https';\nimport { login, storeCredentials } from '../utils/login';\nimport { Telemetry } from '../utils/telemetry/telemetry';\nimport { writeEnv } from '../utils/write-env';\n\ninterface Channel {\n id: number;\n name: string;\n platform: string;\n}\n\ninterface ChannelsResponse {\n data: Channel[];\n}\n\ninterface InitResponse {\n data: {\n makeswift_dev_api_key: string;\n storefront_api_token: string;\n envVars: Record<string, string>;\n };\n}\n\nfunction isChannelsResponse(response: unknown): response is ChannelsResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n Array.isArray(response.data) &&\n response.data.every(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n 'name' in item &&\n 'platform' in item,\n )\n );\n}\n\nfunction isInitResponse(response: unknown): response is InitResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n typeof response.data === 'object' &&\n response.data !== null &&\n 'storefront_api_token' in response.data &&\n 'envVars' in response.data\n );\n}\n\nconst telemetry = new Telemetry();\n\nexport const init = new Command('init')\n .description('Connect a BigCommerce store with an existing Catalyst project')\n .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .option('--env <vars...>', 'Arbitrary environment variables to set in .env.local')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\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 .action(async (options) => {\n const projectDir = process.cwd();\n\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n\n // Check for stored credentials\n if (!storeHash || !accessToken) {\n const config = new Config(projectDir);\n const storedAuth = config.getAuth();\n\n storeHash = storeHash ?? storedAuth.storeHash;\n accessToken = accessToken ?? storedAuth.accessToken;\n }\n\n if (!storeHash || !accessToken) {\n const credentials = await login(`https://login.${options.bigcommerceHostname}`);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n\n // Store credentials after successful authentication\n storeCredentials(projectDir, credentials);\n }\n\n await telemetry.identify(storeHash);\n\n const bc = new Https({\n baseUrl: `https://api.${options.bigcommerceHostname}/stores/${storeHash}`,\n accessToken,\n });\n\n const cliApi = new CliApi({\n origin: options.cliApiOrigin,\n storeHash,\n accessToken,\n });\n\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n const channelsResponse = await bc.fetch('/v3/channels?available=true&type=storefront');\n\n if (!channelsResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /v3/channels failed: ${channelsResponse.status} ${channelsResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const availableChannels: unknown = await channelsResponse.json();\n\n if (!isChannelsResponse(availableChannels)) {\n console.error(chalk.red('\\nUnexpected response format from channels endpoint\\n'));\n process.exit(1);\n }\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort(\n (a: Channel, b: Channel) =>\n channelSortOrder.indexOf(a.platform) - channelSortOrder.indexOf(b.platform),\n )\n .map((ch: Channel) => ({\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 const channelId = existingChannel.id;\n\n // Get channel init data\n const initResponse = await cliApi.getChannelInit(channelId);\n\n if (!initResponse.ok) {\n console.error(\n chalk.red(\n `\\nGET /channels/${channelId}/init failed: ${initResponse.status} ${initResponse.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const initData: unknown = await initResponse.json();\n\n if (!isInitResponse(initData)) {\n console.error(chalk.red('\\nUnexpected response format from init endpoint\\n'));\n process.exit(1);\n }\n\n const envVars = { ...initData.data.envVars };\n\n // Add any CLI-provided env vars as overrides\n if (options.env) {\n const cliEnvVars = options.env.reduce<Record<string, string>>((acc, env) => {\n const [key, value] = env.split('=');\n\n if (key && value) {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n\n Object.assign(envVars, cliEnvVars);\n }\n\n writeEnv(projectDir, envVars);\n\n console.log(chalk.green(`\\n.env.local file created for channel ${existingChannel.name}!\\n`));\n console.log(chalk.green(`\\nNext steps:\\n`));\n console.log(chalk.yellow(`\\npnpm run dev\\n`));\n });\n","import { Command } from '@commander-js/extra-typings';\nimport { exec as execCb } from 'child_process';\nimport { parse } from 'dotenv';\nimport { outputFileSync, writeJsonSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { coerce, compare } from 'semver';\nimport { promisify } from 'util';\nimport { z } from 'zod';\n\nconst exec = promisify(execCb);\n\nexport const ManifestSchema = z.object({\n name: z.string(),\n dependencies: z.object({ add: z.array(z.string()) }),\n devDependencies: z.object({ add: z.array(z.string()) }),\n environmentVariables: z.array(z.string()),\n});\n\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport const integration = new Command('integration')\n .argument('<integration-name>', 'Formatted name of the integration')\n .option('--commit-hash <hash>', 'Override integration source branch with a specific commit hash')\n .action(async (integrationNameRaw, options) => {\n // @todo check for integration name conflicts\n const integrationName = z.string().transform(kebabCase).parse(integrationNameRaw);\n\n const manifest: Manifest = {\n name: integrationName,\n dependencies: { add: [] },\n devDependencies: { add: [] },\n environmentVariables: [],\n };\n\n await exec('git fetch --tags');\n\n const { stdout: headRefStdOut } = await exec('git rev-parse --abbrev-ref HEAD');\n let [sourceRef] = headRefStdOut.split('\\n');\n\n if (options.commitHash) {\n sourceRef = options.commitHash;\n }\n\n const { stdout: catalystTags } = await exec('git tag --list @bigcommerce/catalyst-core@\\\\*');\n const [latestCoreTag] = catalystTags\n .split('\\n')\n .filter(Boolean)\n .sort((a, b) => {\n const versionA = coerce(a.replace('@bigcommerce/catalyst-core@', ''));\n const versionB = coerce(b.replace('@bigcommerce/catalyst-core@', ''));\n\n if (versionA && versionB) {\n return compare(versionA, versionB);\n }\n\n return 0;\n })\n .reverse();\n\n const PackageDependenciesSchema = z.object({\n dependencies: z.object({}).passthrough(),\n devDependencies: z.object({}).passthrough(),\n });\n\n const getPackageDeps = async (ref: string) => {\n const { stdout } = await exec(`git show ${ref}:core/package.json`);\n\n return PackageDependenciesSchema.parse(JSON.parse(stdout));\n };\n\n const integrationJson = await getPackageDeps(sourceRef);\n const latestCoreTagJson = await getPackageDeps(latestCoreTag);\n\n const diffObjectKeys = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n return Object.keys(a).filter((key) => !Object.keys(b).includes(key));\n };\n\n manifest.dependencies.add = diffObjectKeys(\n integrationJson.dependencies,\n latestCoreTagJson.dependencies,\n );\n manifest.devDependencies.add = diffObjectKeys(\n integrationJson.devDependencies,\n latestCoreTagJson.devDependencies,\n );\n\n const { stdout: latestCoreEnv } = await exec(`git show ${latestCoreTag}:core/.env.example`);\n const { stdout: integrationEnv } = await exec(`git show ${sourceRef}:core/.env.example`);\n\n manifest.environmentVariables = diffObjectKeys(parse(integrationEnv), parse(latestCoreEnv));\n\n const { stdout: integrationDiff } = await exec(\n `git diff ${latestCoreTag}...${sourceRef} -- ':(exclude)core/package.json' ':(exclude)pnpm-lock.yaml'`,\n );\n\n outputFileSync(`integrations/${integrationName}/integration.patch`, integrationDiff);\n writeJsonSync(`integrations/${integrationName}/manifest.json`, manifest, {\n spaces: 2,\n });\n\n console.log('Integration created successfully.');\n });\n","import { Argument, Command, Option } from '@commander-js/extra-typings';\n\nimport { catalystTelemetry, CatalystTelemetryOptions } from '../utils/telemetry';\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: string | undefined, options: CatalystTelemetryOptions) =>\n catalystTelemetry(options, arg),\n );\n","import chalk from 'chalk';\n\nimport { Telemetry } from './telemetry';\n\nexport interface CatalystTelemetryOptions {\n enable?: boolean;\n disable?: boolean;\n}\n\nconst telemetry = new Telemetry();\nlet isEnabled = telemetry.isEnabled();\n\nconst catalystTelemetry = (options: CatalystTelemetryOptions, arg: string | undefined) => {\n if (options.enable || arg === 'enable') {\n telemetry.setEnabled(true);\n isEnabled = true;\n\n console.log('Success!');\n } else if (options.disable || arg === 'disable') {\n const path = telemetry.setEnabled(false);\n\n if (isEnabled) {\n console.log(`Your preference has been saved${path ? ` to ${path}` : ''}`);\n } else {\n console.log(`Catalyst CLI telemetry collection is already disabled.`);\n }\n\n isEnabled = false;\n } else {\n console.log('Catalyst CLI Telemetry');\n }\n\n console.log(\n `\\nStatus: ${chalk.bold(isEnabled ? chalk.green('Enabled') : chalk.red('Disabled'))}`,\n );\n\n if (!isEnabled) {\n console.log(\n `\\nYou have opted-out of Catalyst CLI telemetry.\\nNo data will be collected from your machine.`,\n );\n }\n};\n\nexport { catalystTelemetry };\n","import { Command } from '@commander-js/extra-typings';\n\nimport { Telemetry } from '../utils/telemetry/telemetry';\n\nconst telemetry = new Telemetry();\n\nconst allowlistArguments = ['--gh-ref', '--repository', '--project-name'];\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\nexport const telemetryPreHook = async (command: Command) => {\n // @ts-expect-error _name is a private property\n const availableCommands = command.commands.map((cmd) => cmd._name); // eslint-disable-line @typescript-eslint/no-unsafe-return, no-underscore-dangle\n\n const [commandName = 'create', ...args] = command.args;\n\n // When running `npm create @bigcommerce/catalyst`, the command defaults to\n // the `create` command but commander doesn't pass it as part of the arguments.\n // We need to handle this case separately.\n if (!availableCommands.includes(commandName)) {\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('create', {\n ...parseArguments(args),\n });\n }\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(args),\n });\n};\n\nexport const telemetryPostHook = async () => {\n await telemetry.analytics.closeAndFlush();\n};\n"],"mappings":"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","names":["chalk","chalk","execSync","join","Separator","name","Separator","Separator","process","process","name","execSync","spawnSync","execSync","chalk","chalk","name","chalk","z","z","z","chalk","join","isWindows","chalk","join","execSync","Command","Option","select","chalk","isChannelsResponse","isInitResponse","telemetry","Command","Option","chalk","select","Command","parse","outputFileSync","kebabCase","z","z","Command","kebabCase","parse","outputFileSync","Command","Option","chalk","telemetry","chalk","telemetry","Command","Option","telemetry","chalk","telemetry"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigcommerce/create-catalyst",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "bin": "bin/index.cjs",
6
6
  "files": [
@@ -11,7 +11,7 @@
11
11
  "node": "^20.0.0 || ^22.0.0"
12
12
  },
13
13
  "dependencies": {
14
- "@commander-js/extra-typings": "^13.1.0",
14
+ "@commander-js/extra-typings": "^14.0.0",
15
15
  "@iarna/toml": "^2.2.5",
16
16
  "@inquirer/core": "^10.1.13",
17
17
  "@inquirer/figures": "^1.0.12",
@@ -19,9 +19,9 @@
19
19
  "@inquirer/type": "^3.0.7",
20
20
  "@segment/analytics-node": "^2.2.1",
21
21
  "ansi-escapes": "^7.0.0",
22
- "chalk": "^5.4.1",
23
- "commander": "^13.1.0",
22
+ "commander": "^14.0.0",
24
23
  "conf": "^13.1.0",
24
+ "consola": "^3.4.2",
25
25
  "cross-spawn": "^7.0.6",
26
26
  "dotenv": "^16.5.0",
27
27
  "fs-extra": "^11.3.0",
@@ -49,7 +49,7 @@
49
49
  "eslint": "^8.57.1",
50
50
  "jest": "^29.7.0",
51
51
  "msw": "^2.9.0",
52
- "prettier": "^3.5.3",
52
+ "prettier": "^3.6.2",
53
53
  "tsup": "^8.5.0",
54
54
  "typescript": "^5.8.3",
55
55
  "@bigcommerce/eslint-config-catalyst": "^1.0.0"