@bigcommerce/catalyst 1.0.0-alpha.2 → 1.0.0-alpha.3
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/cli.js +47 -23
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ import { randomBytes, randomUUID } from "crypto";
|
|
|
13
13
|
// package.json
|
|
14
14
|
var package_default = {
|
|
15
15
|
name: "@bigcommerce/catalyst",
|
|
16
|
-
version: "1.0.0-alpha.
|
|
16
|
+
version: "1.0.0-alpha.2",
|
|
17
17
|
type: "module",
|
|
18
18
|
bin: {
|
|
19
19
|
catalyst: "dist/cli.js"
|
|
@@ -108,7 +108,7 @@ var Telemetry = class {
|
|
|
108
108
|
};
|
|
109
109
|
this.CATALYST_TELEMETRY_DISABLED = process.env.CATALYST_TELEMETRY_DISABLED;
|
|
110
110
|
this.projectConfig = getProjectConfig();
|
|
111
|
-
this.
|
|
111
|
+
this.correlationId = randomUUID();
|
|
112
112
|
this.startTime = Date.now();
|
|
113
113
|
this.analytics = new Analytics({
|
|
114
114
|
writeKey: "not-a-valid-segment-write-key"
|
|
@@ -126,7 +126,7 @@ var Telemetry = class {
|
|
|
126
126
|
anonymousId: this.getAnonymousId(),
|
|
127
127
|
properties: {
|
|
128
128
|
...payload,
|
|
129
|
-
|
|
129
|
+
correlationId: this.correlationId,
|
|
130
130
|
nodeVersion: process.version,
|
|
131
131
|
platform: process.platform,
|
|
132
132
|
arch: process.arch,
|
|
@@ -180,7 +180,7 @@ function getTelemetry() {
|
|
|
180
180
|
// src/cli/program.ts
|
|
181
181
|
import { Option as Option8 } from "@commander-js/extra-typings";
|
|
182
182
|
import { Command as Command9 } from "commander";
|
|
183
|
-
import { colorize as
|
|
183
|
+
import { colorize as colorize5 } from "consola/utils";
|
|
184
184
|
import { config } from "dotenv";
|
|
185
185
|
import { resolve } from "path";
|
|
186
186
|
|
|
@@ -272,7 +272,7 @@ async function fetchProjects(storeHash, accessToken, apiHost) {
|
|
|
272
272
|
method: "GET",
|
|
273
273
|
headers: {
|
|
274
274
|
"X-Auth-Token": accessToken,
|
|
275
|
-
"X-Correlation-Id": getTelemetry().
|
|
275
|
+
"X-Correlation-Id": getTelemetry().correlationId
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
278
|
);
|
|
@@ -305,7 +305,7 @@ async function createProject(name, storeHash, accessToken, apiHost) {
|
|
|
305
305
|
"X-Auth-Token": accessToken,
|
|
306
306
|
Accept: "application/json",
|
|
307
307
|
"Content-Type": "application/json",
|
|
308
|
-
"X-Correlation-Id": getTelemetry().
|
|
308
|
+
"X-Correlation-Id": getTelemetry().correlationId
|
|
309
309
|
},
|
|
310
310
|
body: JSON.stringify({ name })
|
|
311
311
|
}
|
|
@@ -631,6 +631,7 @@ var build = new Command2("build").addOption(
|
|
|
631
631
|
// src/cli/commands/deploy.ts
|
|
632
632
|
import AdmZip from "adm-zip";
|
|
633
633
|
import { Command as Command3, Option as Option3 } from "commander";
|
|
634
|
+
import { colorize as colorize2 } from "consola/utils";
|
|
634
635
|
import { access, readdir, readFile } from "fs/promises";
|
|
635
636
|
import { join as join4 } from "path";
|
|
636
637
|
import yoctoSpinner2 from "yocto-spinner";
|
|
@@ -746,7 +747,7 @@ var generateUploadSignature = async (storeHash, accessToken, apiHost) => {
|
|
|
746
747
|
"X-Auth-Token": accessToken,
|
|
747
748
|
"Content-Type": "application/json",
|
|
748
749
|
Accept: "application/json",
|
|
749
|
-
"X-Correlation-Id": getTelemetry().
|
|
750
|
+
"X-Correlation-Id": getTelemetry().correlationId
|
|
750
751
|
},
|
|
751
752
|
body: JSON.stringify({})
|
|
752
753
|
}
|
|
@@ -789,6 +790,30 @@ var parseEnvironmentVariables = (secretOption) => {
|
|
|
789
790
|
};
|
|
790
791
|
});
|
|
791
792
|
};
|
|
793
|
+
var AUTO_DETECT_SECRETS = [
|
|
794
|
+
{ key: "BIGCOMMERCE_STORE_HASH", warnIfMissing: true },
|
|
795
|
+
{ key: "BIGCOMMERCE_CHANNEL_ID", warnIfMissing: true },
|
|
796
|
+
{ key: "BIGCOMMERCE_STOREFRONT_TOKEN", warnIfMissing: true },
|
|
797
|
+
{ key: "BIGCOMMERCE_API_HOST", warnIfMissing: false },
|
|
798
|
+
{ key: "BIGCOMMERCE_GRAPHQL_API_DOMAIN", warnIfMissing: false },
|
|
799
|
+
{ key: "AUTH_SECRET", warnIfMissing: false }
|
|
800
|
+
];
|
|
801
|
+
var autoDetectSecrets = (environmentVariables) => {
|
|
802
|
+
const secrets = environmentVariables ?? [];
|
|
803
|
+
const existingKeys = new Set(secrets.map((s) => s.key));
|
|
804
|
+
AUTO_DETECT_SECRETS.forEach(({ key, warnIfMissing }) => {
|
|
805
|
+
if (existingKeys.has(key)) {
|
|
806
|
+
return;
|
|
807
|
+
}
|
|
808
|
+
const value = process.env[key];
|
|
809
|
+
if (value) {
|
|
810
|
+
secrets.push({ type: "secret", key, value });
|
|
811
|
+
} else if (warnIfMissing) {
|
|
812
|
+
consola.warn(`${key} is not set in the environment and was not provided via --secret.`);
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
return secrets;
|
|
816
|
+
};
|
|
792
817
|
var createDeployment = async (projectUuid, uploadUuid, storeHash, accessToken, apiHost, environmentVariables) => {
|
|
793
818
|
consola.info("Creating deployment...");
|
|
794
819
|
const response = await fetch(
|
|
@@ -799,7 +824,7 @@ var createDeployment = async (projectUuid, uploadUuid, storeHash, accessToken, a
|
|
|
799
824
|
"X-Auth-Token": accessToken,
|
|
800
825
|
"Content-Type": "application/json",
|
|
801
826
|
Accept: "application/json",
|
|
802
|
-
"X-Correlation-Id": getTelemetry().
|
|
827
|
+
"X-Correlation-Id": getTelemetry().correlationId
|
|
803
828
|
},
|
|
804
829
|
body: JSON.stringify({
|
|
805
830
|
project_uuid: projectUuid,
|
|
@@ -827,7 +852,7 @@ var getDeploymentStatus = async (deploymentUuid, storeHash, accessToken, apiHost
|
|
|
827
852
|
"X-Auth-Token": accessToken,
|
|
828
853
|
Accept: "text/event-stream",
|
|
829
854
|
Connection: "keep-alive",
|
|
830
|
-
"X-Correlation-Id": getTelemetry().
|
|
855
|
+
"X-Correlation-Id": getTelemetry().correlationId
|
|
831
856
|
}
|
|
832
857
|
}
|
|
833
858
|
);
|
|
@@ -864,16 +889,16 @@ var getDeploymentStatus = async (deploymentUuid, storeHash, accessToken, apiHost
|
|
|
864
889
|
spinner.text = STEPS[data.event.step];
|
|
865
890
|
}
|
|
866
891
|
if (data.deployment_url) {
|
|
867
|
-
console.log(data.deployment_url);
|
|
868
892
|
deploymentUrl = data.deployment_url;
|
|
869
893
|
}
|
|
870
894
|
});
|
|
871
895
|
}
|
|
872
896
|
done = streamDone;
|
|
873
897
|
}
|
|
874
|
-
spinner.success("Deployment completed successfully
|
|
898
|
+
spinner.success("Deployment completed successfully.");
|
|
875
899
|
if (deploymentUrl) {
|
|
876
|
-
|
|
900
|
+
const url = deploymentUrl.startsWith("https://") ? deploymentUrl : `https://${deploymentUrl}`;
|
|
901
|
+
consola.success(`View your deployment at: ${colorize2("blue", url)}`);
|
|
877
902
|
}
|
|
878
903
|
};
|
|
879
904
|
var deploy = new Command3("deploy").description("Deploy your application to Cloudflare.").addOption(
|
|
@@ -944,7 +969,7 @@ var deploy = new Command3("deploy").description("Deploy your application to Clou
|
|
|
944
969
|
}
|
|
945
970
|
const uploadSignature = await generateUploadSignature(storeHash, accessToken, options.apiHost);
|
|
946
971
|
await uploadBundleZip(uploadSignature.upload_url);
|
|
947
|
-
const environmentVariables = parseEnvironmentVariables(options.secret);
|
|
972
|
+
const environmentVariables = autoDetectSecrets(parseEnvironmentVariables(options.secret));
|
|
948
973
|
const { deployment_uuid: deploymentUuid } = await createDeployment(
|
|
949
974
|
projectUuid,
|
|
950
975
|
uploadSignature.upload_uuid,
|
|
@@ -958,7 +983,7 @@ var deploy = new Command3("deploy").description("Deploy your application to Clou
|
|
|
958
983
|
|
|
959
984
|
// src/cli/commands/logs.ts
|
|
960
985
|
import { Command as Command4, Option as Option5 } from "commander";
|
|
961
|
-
import { colorize as
|
|
986
|
+
import { colorize as colorize3 } from "consola/utils";
|
|
962
987
|
import { z as z5 } from "zod";
|
|
963
988
|
|
|
964
989
|
// src/cli/lib/shared-options.ts
|
|
@@ -1028,7 +1053,7 @@ var formatLogEvent = (event, format) => {
|
|
|
1028
1053
|
logEntries.forEach((entry) => {
|
|
1029
1054
|
const msg = formatMessages(entry.messages);
|
|
1030
1055
|
const level = entry.level.toUpperCase();
|
|
1031
|
-
const coloredLevel =
|
|
1056
|
+
const coloredLevel = colorize3(LEVEL_COLORS[level] ?? "white", level);
|
|
1032
1057
|
switch (format) {
|
|
1033
1058
|
case "short":
|
|
1034
1059
|
consola.log(msg);
|
|
@@ -1335,7 +1360,7 @@ var start = new Command6("start").description(
|
|
|
1335
1360
|
|
|
1336
1361
|
// src/cli/commands/telemetry.ts
|
|
1337
1362
|
import { Argument, Command as Command7, Option as Option7 } from "commander";
|
|
1338
|
-
import { colorize as
|
|
1363
|
+
import { colorize as colorize4 } from "consola/utils";
|
|
1339
1364
|
var telemetryService = getTelemetry();
|
|
1340
1365
|
var isEnabled = telemetryService.isEnabled();
|
|
1341
1366
|
var telemetry2 = new Command7("telemetry").addArgument(new Argument("[arg]").choices(["disable", "enable", "status"])).addOption(new Option7("--enable", `Enables CLI telemetry collection.`).conflicts("disable")).option("--disable", `Disables CLI telemetry collection.`).action((arg, options) => {
|
|
@@ -1355,7 +1380,7 @@ var telemetry2 = new Command7("telemetry").addArgument(new Argument("[arg]").cho
|
|
|
1355
1380
|
consola.info("Catalyst CLI Telemetry\n");
|
|
1356
1381
|
}
|
|
1357
1382
|
consola.info(
|
|
1358
|
-
`Status: ${
|
|
1383
|
+
`Status: ${colorize4("bold", isEnabled ? colorize4("green", "Enabled") : colorize4("red", "Disabled"))}`
|
|
1359
1384
|
);
|
|
1360
1385
|
if (!isEnabled) {
|
|
1361
1386
|
consola.info(
|
|
@@ -1423,7 +1448,7 @@ var telemetryPostHook = async () => {
|
|
|
1423
1448
|
|
|
1424
1449
|
// src/cli/program.ts
|
|
1425
1450
|
var program = new Command9();
|
|
1426
|
-
consola.log(
|
|
1451
|
+
consola.log(colorize5("cyanBright", `\u25E2 ${package_default.name} v${package_default.version}
|
|
1427
1452
|
`));
|
|
1428
1453
|
program.name(package_default.name).version(package_default.version).description("CLI tool for Catalyst development").addOption(
|
|
1429
1454
|
new Option8(
|
|
@@ -1442,7 +1467,7 @@ program.name(package_default.name).version(package_default.version).description(
|
|
|
1442
1467
|
const message = errCode === "ENOENT" ? `Env file not found: ${envFilePath}` : `Failed to load --env-path ${value}: ${result.error.message}`;
|
|
1443
1468
|
throw new Error(message);
|
|
1444
1469
|
}
|
|
1445
|
-
consola.log(
|
|
1470
|
+
consola.log(colorize5("cyanBright", `Loaded environment variables from ${envFilePath}
|
|
1446
1471
|
`));
|
|
1447
1472
|
}
|
|
1448
1473
|
return value;
|
|
@@ -1467,13 +1492,12 @@ var handleFatalError = async (error) => {
|
|
|
1467
1492
|
consola.error(errorMessage);
|
|
1468
1493
|
if (telemetry3.isEnabled()) {
|
|
1469
1494
|
consola.info(
|
|
1470
|
-
`
|
|
1471
|
-
|
|
1472
|
-
Share this Trace ID with BigCommerce support.`
|
|
1495
|
+
`Correlation ID: ${telemetry3.correlationId}
|
|
1496
|
+
Share this Correlation ID with BigCommerce support.`
|
|
1473
1497
|
);
|
|
1474
1498
|
} else {
|
|
1475
1499
|
consola.info(
|
|
1476
|
-
"
|
|
1500
|
+
"Enable telemetry (`catalyst telemetry enable`) for improved troubleshooting with BigCommerce support."
|
|
1477
1501
|
);
|
|
1478
1502
|
}
|
|
1479
1503
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/logger.ts","../src/cli/lib/telemetry.ts","../package.json","../src/cli/lib/project-config.ts","../src/cli/program.ts","../src/cli/commands/auth.ts","../src/cli/lib/auth.ts","../src/cli/lib/project.ts","../src/cli/commands/build.ts","../src/cli/lib/get-module-cli-path.ts","../src/cli/lib/wrangler-config.ts","../src/cli/commands/deploy.ts","../src/cli/lib/deployment-errors.ts","../src/cli/lib/resolve-credentials.ts","../src/cli/commands/logs.ts","../src/cli/lib/shared-options.ts","../src/cli/commands/project.ts","../src/cli/commands/start.ts","../src/cli/commands/telemetry.ts","../src/cli/commands/version.ts","../src/cli/hooks/telemetry.ts","../src/cli/index.ts"],"sourcesContent":["import { createConsola } from 'consola';\n\nexport const consola = createConsola({\n level: process.env.CONSOLA_LEVEL ? parseInt(process.env.CONSOLA_LEVEL, 10) : 3,\n});\n","import { Analytics } from '@segment/analytics-node';\nimport Conf from 'conf';\nimport { randomBytes, randomUUID } from 'node:crypto';\n\nimport PACKAGE_INFO from '../../../package.json';\n\nimport { getProjectConfig, ProjectConfigSchema } from './project-config';\n\nconst TELEMETRY_KEY_ENABLED = 'telemetry.enabled';\nconst TELEMETRY_KEY_ID = `telemetry.anonymousId`;\n\nexport class Telemetry {\n readonly sessionId: string;\n readonly analytics: Analytics;\n readonly startTime: number;\n commandName = 'unknown';\n\n private projectConfig: Conf<ProjectConfigSchema>;\n private CATALYST_TELEMETRY_DISABLED: string | undefined;\n\n private readonly projectName = 'catalyst-cli';\n private readonly projectVersion = PACKAGE_INFO.version;\n\n constructor() {\n this.CATALYST_TELEMETRY_DISABLED = process.env.CATALYST_TELEMETRY_DISABLED;\n\n this.projectConfig = getProjectConfig();\n\n this.sessionId = randomUUID();\n this.startTime = Date.now();\n this.analytics = new Analytics({\n writeKey: process.env.CLI_SEGMENT_WRITE_KEY ?? 'not-a-valid-segment-write-key',\n });\n }\n\n durationMs(): number {\n return Date.now() - this.startTime;\n }\n\n async track(eventName: string, payload: Record<string, unknown>) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.track({\n event: eventName,\n anonymousId: this.getAnonymousId(),\n properties: {\n ...payload,\n sessionId: this.sessionId,\n nodeVersion: process.version,\n platform: process.platform,\n arch: process.arch,\n cliVersion: PACKAGE_INFO.version,\n },\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n async identify(storeHash?: string) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n if (!storeHash) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.identify({\n userId: storeHash,\n anonymousId: this.getAnonymousId(),\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n setEnabled = (_enabled: boolean) => {\n const enabled = Boolean(_enabled);\n\n this.projectConfig.set('telemetry.enabled', enabled);\n };\n\n isEnabled() {\n return (\n !this.CATALYST_TELEMETRY_DISABLED &&\n this.projectConfig.get<typeof TELEMETRY_KEY_ENABLED, boolean>(TELEMETRY_KEY_ENABLED, true)\n );\n }\n\n private getAnonymousId(): string {\n const val = this.projectConfig.get<typeof TELEMETRY_KEY_ID, string>(TELEMETRY_KEY_ID);\n\n if (val) {\n return val;\n }\n\n const generated = randomBytes(32).toString('hex');\n\n this.projectConfig.set(TELEMETRY_KEY_ID, generated);\n\n return generated;\n }\n}\n\nlet telemetryInstance: Telemetry | undefined;\n\n// Singleton so the pre-hook, post-hook, error handler, and command bodies all\n// share one sessionId for correlation. resetTelemetry() is for test isolation.\nexport function getTelemetry(): Telemetry {\n telemetryInstance ??= new Telemetry();\n\n return telemetryInstance;\n}\n\nexport function resetTelemetry(): void {\n telemetryInstance = undefined;\n}\n","{\n \"name\": \"@bigcommerce/catalyst\",\n \"version\": \"1.0.0-alpha.1\",\n \"type\": \"module\",\n \"bin\": {\n \"catalyst\": \"dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"templates\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \"^20.0.0 || ^22.0.0 || ^24.0.0\"\n },\n \"dependencies\": {\n \"@segment/analytics-node\": \"^2.2.1\",\n \"adm-zip\": \"^0.5.16\",\n \"commander\": \"^14.0.0\",\n \"conf\": \"^13.1.0\",\n \"consola\": \"^3.4.2\",\n \"dotenv\": \"^16.5.0\",\n \"execa\": \"^9.6.0\",\n \"open\": \"^10.1.0\",\n \"yocto-spinner\": \"^1.0.0\",\n \"zod\": \"^4.0.5\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.11.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@types/adm-zip\": \"^0.5.7\",\n \"@types/node\": \"^22.15.30\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^8.57.1\",\n \"msw\": \"^2.9.0\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@opennextjs/cloudflare\": \"1.17.3\"\n }\n}\n","import Conf from 'conf';\nimport { join } from 'path';\n\nexport interface ProjectConfigSchema {\n projectUuid: string;\n // Reserved for future use\n framework: 'catalyst';\n storeHash?: string;\n accessToken?: string;\n telemetry: {\n enabled: boolean;\n anonymousId: string;\n };\n}\n\nexport function getProjectConfig() {\n return new Conf<ProjectConfigSchema>({\n cwd: join(process.cwd(), '.bigcommerce'),\n projectSuffix: '',\n configName: 'project',\n schema: {\n projectUuid: { type: 'string', format: 'uuid' },\n framework: {\n type: 'string',\n enum: ['catalyst'],\n default: 'catalyst',\n },\n storeHash: { type: 'string' },\n accessToken: { type: 'string' },\n telemetry: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n anonymousId: { type: 'string' },\n },\n },\n },\n });\n}\n","import { Option } from '@commander-js/extra-typings';\nimport { Command } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { config } from 'dotenv';\nimport { resolve } from 'node:path';\n\nimport PACKAGE_INFO from '../../package.json';\n\nimport { auth } from './commands/auth';\nimport { build } from './commands/build';\nimport { deploy } from './commands/deploy';\nimport { logs } from './commands/logs';\nimport { project } from './commands/project';\nimport { start } from './commands/start';\nimport { telemetry } from './commands/telemetry';\nimport { version } from './commands/version';\nimport { telemetryPostHook, telemetryPreHook } from './hooks/telemetry';\nimport { consola } from './lib/logger';\n\nexport const program = new Command();\n\nconsola.log(colorize('cyanBright', `◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('CLI tool for Catalyst development')\n .addOption(\n new Option(\n '--env-path <path>',\n 'Path to environment file to load (relative to current working directory)',\n // We are using argParser, because commander loads in environment variables before executing hooks.\n ).argParser((value) => {\n if (value) {\n const envFilePath = resolve(process.cwd(), value);\n const result = config({\n path: envFilePath,\n override: true,\n });\n\n if (result.error) {\n const errCode =\n 'code' in result.error && typeof result.error.code === 'string'\n ? result.error.code\n : undefined;\n const message =\n errCode === 'ENOENT'\n ? `Env file not found: ${envFilePath}`\n : `Failed to load --env-path ${value}: ${result.error.message}`;\n\n throw new Error(message);\n }\n\n consola.log(colorize('cyanBright', `Loaded environment variables from ${envFilePath}\\n`));\n }\n\n return value;\n }),\n )\n .addCommand(version)\n .addCommand(start)\n .addCommand(build)\n .addCommand(deploy)\n .addCommand(logs)\n .addCommand(project)\n .addCommand(auth)\n .addCommand(telemetry)\n .hook('preAction', telemetryPreHook)\n .hook('postAction', telemetryPostHook);\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport open from 'open';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { DEFAULT_LOGIN_URL, requestDeviceCode, waitForDeviceToken } from '../lib/auth';\nimport { consola } from '../lib/logger';\nimport { fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\n\nconst StoreProfileSchema = z.object({\n data: z.object({\n store_name: z.string(),\n }),\n});\n\nasync function fetchStoreProfile(storeHash: string, accessToken: string, apiHost: string) {\n const response = await fetch(`https://${apiHost}/stores/${storeHash}/v3/settings/store/profile`, {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const result = StoreProfileSchema.safeParse(res);\n\n if (!result.success) {\n throw new Error('Unexpected response from store profile API');\n }\n\n return result.data.data;\n}\n\nconst whoami = new Command('whoami')\n .description('Verify stored credentials and display store/project info.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.info('Not logged in: no credentials found.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n return;\n }\n\n const store = await fetchStoreProfile(storeHash, accessToken, options.apiHost);\n\n const projectUuid = config.get('projectUuid');\n\n if (projectUuid) {\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n const linkedProject = projects.find((p) => p.uuid === projectUuid);\n\n if (linkedProject) {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), connected to project ${linkedProject.name} (${projectUuid})`,\n );\n } else {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), project ${projectUuid} not found`,\n );\n }\n } else {\n consola.info(`Logged in to ${store.store_name} (${storeHash})`);\n }\n\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (message.includes('401') || message.includes('403')) {\n consola.error(`Not logged in: invalid credentials (${message})`);\n } else {\n consola.error(`Failed to verify credentials: ${message}`);\n }\n\n process.exit(1);\n }\n });\n\nconst login = new Command('login')\n .description('Authenticate via browser using the OAuth device code flow.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--login-url <url>', 'BigCommerce login URL.')\n .env('BIGCOMMERCE_LOGIN_URL')\n .default(DEFAULT_LOGIN_URL),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (storeHash && accessToken) {\n consola.info(`Already logged in to store ${storeHash}.`);\n consola.info('Run `catalyst auth logout` first to re-authenticate.');\n process.exit(0);\n\n return;\n }\n\n const deviceCode = await requestDeviceCode(options.loginUrl);\n\n consola.info(\n `${colorize('yellow', 'Your one-time code:')} ${colorize('bold', deviceCode.user_code)}`,\n );\n\n try {\n await open(deviceCode.verification_uri);\n consola.info(`Opened ${deviceCode.verification_uri} in your browser.`);\n } catch {\n consola.info(\n `Open ${deviceCode.verification_uri} in your browser and enter the code above.`,\n );\n }\n\n const spinner = yoctoSpinner().start('Waiting for authentication...');\n\n const credentials = await waitForDeviceToken(\n options.loginUrl,\n deviceCode.device_code,\n deviceCode.interval,\n );\n\n spinner.success('Authentication complete.');\n\n config.set('storeHash', credentials.store_hash);\n config.set('accessToken', credentials.access_token);\n\n consola.success(`Logged in to store ${credentials.store_hash}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Login failed: ${message}`);\n process.exit(1);\n }\n });\n\nconst logout = new Command('logout')\n .description('Remove stored credentials for the current project.')\n .action(() => {\n try {\n const config = getProjectConfig();\n\n const storeHash = config.get('storeHash');\n const accessToken = config.get('accessToken');\n\n if (!storeHash && !accessToken) {\n consola.info('Not logged in: no credentials found.');\n process.exit(0);\n\n return;\n }\n\n config.delete('storeHash');\n config.delete('accessToken');\n\n consola.success(`Logged out from store ${storeHash ?? 'unknown'}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Logout failed: ${message}`);\n process.exit(1);\n }\n });\n\nexport const auth = new Command('auth')\n .description('Manage authentication for the BigCommerce CLI.')\n .addCommand(whoami)\n .addCommand(login)\n .addCommand(logout);\n","import { z } from 'zod';\n\nexport const DEVICE_OAUTH_CLIENT_ID = 's1q4io7mah2lm1i6uwp9yl1eit80n3b';\nexport const DEVICE_OAUTH_SCOPES = [\n 'store_v2_information',\n 'store_infrastructure_deployments_manage',\n 'store_infrastructure_logs_read_only',\n 'store_infrastructure_projects_manage',\n].join(' ');\nexport const DEFAULT_LOGIN_URL = 'https://login.bigcommerce.com';\n\nexport const DeviceCodeResponseSchema = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n});\n\nexport const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string(),\n});\n\nexport async function requestDeviceCode(loginUrl: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n client_id: DEVICE_OAUTH_CLIENT_ID,\n scopes: DEVICE_OAUTH_SCOPES,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to request device code: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeResponseSchema.parse(res);\n}\n\nexport async function pollDeviceToken(loginUrl: string, deviceCode: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n return null;\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeSuccessSchema.parse(res);\n}\n\nexport async function waitForDeviceToken(\n loginUrl: string,\n deviceCode: string,\n interval: number,\n): Promise<z.infer<typeof DeviceCodeSuccessSchema>> {\n const credentials = await pollDeviceToken(loginUrl, deviceCode);\n\n if (credentials) {\n return credentials;\n }\n\n await new Promise((resolve) => {\n setTimeout(resolve, interval * 1000);\n });\n\n return waitForDeviceToken(loginUrl, deviceCode, interval);\n}\n","import { z } from 'zod';\n\nimport { getTelemetry } from './telemetry';\n\nconst fetchProjectsSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.string(),\n name: z.string(),\n }),\n ),\n});\n\nexport interface ProjectListItem {\n uuid: string;\n name: string;\n}\n\nexport async function fetchProjects(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<ProjectListItem[]> {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n },\n );\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = fetchProjectsSchema.parse(res);\n\n return data;\n}\n\nconst createProjectSchema = z.object({\n data: z.object({\n uuid: z.string(),\n name: z.string(),\n date_created: z.coerce.date(),\n date_modified: z.coerce.date(),\n }),\n});\n\nexport interface CreateProjectResult {\n uuid: string;\n name: string;\n date_created: Date;\n date_modified: Date;\n}\n\nexport async function createProject(\n name: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<CreateProjectResult> {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n body: JSON.stringify({ name }),\n },\n );\n\n if (response.status === 502) {\n throw new Error('Failed to create project, is the name already in use?');\n }\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (response.status === 422) {\n throw new Error(\n \"The project name you entered doesn't meet the requirements. It must be 3–32 characters long and use only letters, numbers, hyphens (-), underscores (_), and periods (.)\",\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to create project: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = createProjectSchema.parse(res);\n\n return data;\n}\n","import { Command, Option } from 'commander';\nimport { execa } from 'execa';\nimport { copyFile, cp, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { getModuleCliPath } from '../lib/get-module-cli-path';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { getWranglerConfig } from '../lib/wrangler-config';\n\nconst WRANGLER_VERSION = '4.24.3';\n\nexport async function buildCatalystProject(projectUuid: string): Promise<void> {\n const coreDir = process.cwd();\n const openNextOutDir = join(coreDir, '.open-next');\n const bigcommerceDistDir = join(coreDir, '.bigcommerce', 'dist');\n\n const wranglerConfig = getWranglerConfig(projectUuid);\n\n consola.start('Copying templates...');\n\n await copyFile(\n join(getModuleCliPath(), 'templates', 'open-next.config.ts'),\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n );\n await writeFile(\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n JSON.stringify(wranglerConfig, null, 2),\n );\n\n consola.success('Templates copied');\n\n consola.start('Building project...');\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'build',\n '--skipWranglerConfigCheck',\n '--openNextConfigPath',\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n await execa(\n 'pnpm',\n [\n 'dlx',\n `wrangler@${WRANGLER_VERSION}`,\n 'deploy',\n '--config',\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n '--keep-vars',\n '--outdir',\n bigcommerceDistDir,\n '--dry-run',\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n consola.success('Project built');\n\n await cp(join(openNextOutDir, 'assets'), join(bigcommerceDistDir, 'assets'), {\n recursive: true,\n force: true,\n });\n}\n\nexport const build = new Command('build')\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'Project UUID to be included in the deployment configuration.',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run `catalyst project create` or `catalyst project link` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await buildCatalystProject(projectUuid);\n });\n","/* eslint-disable no-underscore-dangle */\n\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getModuleCliPath() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n return join(__dirname, '..');\n}\n","export function getWranglerConfig(projectUuid: string) {\n return {\n $schema: 'node_modules/wrangler/config-schema.json',\n main: '../.open-next/worker.js',\n name: `project-${projectUuid}`,\n compatibility_date: '2025-09-15',\n compatibility_flags: ['nodejs_compat', 'global_fetch_strictly_public'],\n observability: {\n enabled: true,\n head_sampling_rate: 0.05,\n logs: {\n enabled: true,\n head_sampling_rate: 1,\n invocation_logs: false,\n },\n },\n assets: {\n directory: '../.open-next/assets',\n binding: 'ASSETS',\n },\n services: [\n {\n binding: 'WORKER_SELF_REFERENCE',\n service: `project-${projectUuid}`,\n },\n ],\n r2_buckets: [\n {\n binding: 'NEXT_INC_CACHE_R2_BUCKET',\n bucket_name: `project-${projectUuid}`,\n },\n ],\n durable_objects: {\n bindings: [\n {\n name: 'NEXT_CACHE_DO_QUEUE',\n class_name: 'DOQueueHandler',\n },\n {\n name: 'NEXT_TAG_CACHE_DO_SHARDED',\n class_name: 'DOShardedTagCache',\n },\n {\n name: 'NEXT_CACHE_DO_PURGE',\n class_name: 'BucketCachePurge',\n },\n ],\n },\n migrations: [\n {\n tag: 'v1',\n new_sqlite_classes: ['DOQueueHandler', 'DOShardedTagCache', 'BucketCachePurge'],\n },\n ],\n };\n}\n","import AdmZip from 'adm-zip';\nimport { Command, Option } from 'commander';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { getDeploymentErrorMessage } from '../lib/deployment-errors';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport { getTelemetry } from '../lib/telemetry';\n\nimport { buildCatalystProject } from './build';\n\nconst stepsEnum = z.enum([\n 'initializing',\n 'downloading',\n 'unzipping',\n 'processing',\n 'deploying',\n 'finalizing',\n 'complete',\n]);\n\nconst STEPS: Record<z.infer<typeof stepsEnum>, string> = {\n initializing: 'Initializing...',\n downloading: 'Downloading...',\n unzipping: 'Unzipping...',\n processing: 'Processing...',\n deploying: 'Deploying...',\n finalizing: 'Finalizing...',\n complete: 'Complete',\n};\n\nconst UploadSignatureSchema = z.object({\n data: z.object({\n upload_url: z.url(),\n upload_uuid: z.string(),\n }),\n});\n\nconst CreateDeploymentSchema = z.object({\n data: z.object({\n deployment_uuid: z.uuid(),\n }),\n});\n\nconst ProjectSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.uuid(),\n name: z.string(),\n }),\n ),\n});\n\nconst DeploymentStatusSchema = z.object({\n deployment_uuid: z.uuid(),\n deployment_status: z.enum(['queued', 'in_progress', 'failed', 'completed']),\n event: z\n .object({\n step: stepsEnum,\n progress: z.number(),\n })\n .nullable(),\n deployment_url: z.string().nullable(),\n error: z\n .object({\n code: z.number(),\n })\n .optional(),\n});\n\nexport const generateBundleZip = async () => {\n consola.info('Generating bundle...');\n\n const bigcommerceDir = join(process.cwd(), '.bigcommerce');\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n // Check if .bigcommerce/dist exists\n try {\n await access(distDir);\n } catch {\n throw new Error(`Dist directory not found: ${distDir}`);\n }\n\n // Check if .bigcommerce/dist is not empty\n const buildDirContents = await readdir(distDir);\n\n if (buildDirContents.length === 0) {\n throw new Error(`Dist directory is empty: ${distDir}`);\n }\n\n const outputZip = join(bigcommerceDir, 'bundle.zip');\n\n // Use AdmZip to create the zip\n const zip = new AdmZip();\n\n zip.addLocalFolder(distDir, 'output');\n zip.writeZip(outputZip);\n\n consola.success(`Bundle created at: ${outputZip}`);\n};\n\nexport const generateUploadSignature = async (\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Generating upload signature...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/uploads`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n body: JSON.stringify({}),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch upload signature: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = UploadSignatureSchema.parse(res);\n\n consola.success('Upload signature generated.');\n\n return data;\n};\n\nexport const uploadBundleZip = async (uploadUrl: string) => {\n consola.info('Uploading bundle...');\n\n const zipPath = join(process.cwd(), '.bigcommerce', 'bundle.zip');\n\n // Read the zip file as a buffer\n const fileBuffer = await readFile(zipPath);\n\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/zip',\n },\n body: fileBuffer,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to upload bundle: ${response.status} ${response.statusText}`);\n }\n\n consola.success('Bundle uploaded successfully.');\n\n return true;\n};\n\nexport const parseEnvironmentVariables = (secretOption?: string[]) => {\n return secretOption?.map((envVar) => {\n const [key, value] = envVar.split('=');\n\n if (!key || !value) {\n throw new Error(`Invalid secret format: ${envVar}. Expected format: KEY=VALUE`);\n }\n\n return {\n type: 'secret' as const,\n key: key.trim(),\n value: value.trim(),\n };\n });\n};\n\nexport const createDeployment = async (\n projectUuid: string,\n uploadUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n environmentVariables?: Array<{ type: 'secret' | 'plain_text'; key: string; value: string }>,\n) => {\n consola.info('Creating deployment...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n body: JSON.stringify({\n project_uuid: projectUuid,\n upload_uuid: uploadUuid,\n environment_variables: environmentVariables,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to create deployment: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = CreateDeploymentSchema.parse(res);\n\n consola.success('Deployment started...');\n\n return data;\n};\n\nexport const getDeploymentStatus = async (\n deploymentUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Fetching deployment status...');\n\n const spinner = yoctoSpinner().start('Fetching...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/${deploymentUuid}/events`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to open event stream: ${response.status} ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new Error('Failed to read event stream.');\n }\n\n const decoder = new TextDecoder();\n let done = false;\n let deploymentUrl: string | undefined;\n\n while (!done) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n let json: unknown;\n\n if (value) {\n const chunk = decoder.decode(value, { stream: true }).trim();\n const split = chunk\n .split('\\n\\n')\n .map((s) => s.replace('data:', '').trim())\n .filter(Boolean);\n\n // eslint-disable-next-line no-loop-func\n split.forEach((event) => {\n try {\n json = JSON.parse(event);\n } catch (error) {\n consola.warn(`Failed to parse event, dropping from stream. Event: ${event}`, error);\n\n return;\n }\n\n const data = DeploymentStatusSchema.parse(json);\n\n if (data.error) {\n throw new Error(\n `Deployment failed (error code ${data.error.code}): ${getDeploymentErrorMessage(data.error.code)}`,\n );\n }\n\n if (data.event && STEPS[data.event.step] !== spinner.text) {\n spinner.text = STEPS[data.event.step];\n }\n\n if (data.deployment_url) {\n console.log(data.deployment_url);\n deploymentUrl = data.deployment_url;\n }\n });\n }\n\n done = streamDone;\n }\n\n spinner.success('Deployment completed successfully.\\n');\n\n if (deploymentUrl) {\n consola.success(`View your deployment at: ${deploymentUrl}`);\n }\n};\n\nexport const fetchProject = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().sessionId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = ProjectSchema.parse(res);\n\n return data.find((project) => project.uuid === projectUuid);\n};\n\nexport const deploy = new Command('deploy')\n .description('Deploy your application to Cloudflare.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel. Read from .bigcommerce/project.json when not provided.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account. Read from .bigcommerce/project.json when not provided.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce intrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects).',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .addOption(\n new Option(\n '--secret <value>',\n 'Secret to set for the deployment (repeatable). Format: --secret KEY=VALUE',\n ).argParser((value: string, previous: string[] = []) => {\n return previous.concat([value]);\n }),\n )\n .option('--dry-run', 'Run the command to generate the bundle without uploading or deploying.')\n .option(\n '--prebuilt',\n 'Skip the build step. Requires .bigcommerce/dist/ to already contain build output.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n const telemetry = getTelemetry();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await telemetry.identify(storeHash);\n\n if (options.prebuilt) {\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n try {\n await access(distDir);\n } catch {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n const contents = await readdir(distDir);\n\n if (contents.length === 0) {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n consola.info('Using existing build output (--prebuilt).');\n } else {\n await buildCatalystProject(projectUuid);\n }\n\n await generateBundleZip();\n\n if (options.dryRun) {\n consola.info('Dry run enabled — skipping upload and deployment steps.');\n consola.info('Next steps (skipped):');\n consola.info('- Generate upload signature');\n consola.info('- Upload bundle.zip');\n consola.info('- Create deployment');\n\n process.exit(0);\n }\n\n const uploadSignature = await generateUploadSignature(storeHash, accessToken, options.apiHost);\n\n await uploadBundleZip(uploadSignature.upload_url);\n\n const environmentVariables = parseEnvironmentVariables(options.secret);\n\n const { deployment_uuid: deploymentUuid } = await createDeployment(\n projectUuid,\n uploadSignature.upload_uuid,\n storeHash,\n accessToken,\n options.apiHost,\n environmentVariables,\n );\n\n await getDeploymentStatus(deploymentUuid, storeHash, accessToken, options.apiHost);\n });\n","const ERROR_MESSAGES: Record<number, string> = {\n 10: 'Something went wrong on our end. Please try again. If the issue persists, contact support.',\n 20: \"We couldn't retrieve your bundle. This is usually a temporary issue — please try deploying again. If the problem continues, contact support.\",\n 30: 'Your bundle could not be extracted. This may mean your build output is too large (max 64 MB compressed / 512 MB uncompressed) or the archive is corrupted. Try reducing your build size or rebuilding your project and deploying again.',\n 40: `There's a problem with your build output. This could be caused by:\n- A worker.js file larger than 40 MB\n- An individual asset file larger than 25 MB\n- More than 1,000 total files in the bundle`,\n 50: 'Deployment failed. This is usually a temporary issue — please try again. If the problem persists, contact support.',\n 60: \"Your code was deployed, but we couldn't determine your deployment URL. Please try deploying again. If the issue persists, contact support.\",\n};\n\nexport function getDeploymentErrorMessage(code: number): string {\n return (\n ERROR_MESSAGES[code] ??\n `Deployment failed with an unexpected error (code: ${code}). Please try again. If the issue persists, contact support.`\n );\n}\n","import Conf from 'conf';\n\nimport { consola } from './logger';\nimport { ProjectConfigSchema } from './project-config';\n\nexport function resolveCredentials(\n options: { storeHash?: string; accessToken?: string },\n config: Conf<ProjectConfigSchema>,\n): { storeHash: string; accessToken: string } {\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.error('Missing credentials.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n // Unreachable in production; prevents continuation when process.exit is mocked in tests.\n throw new Error('Missing credentials');\n }\n\n return { storeHash, accessToken };\n}\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { z } from 'zod';\n\nimport { consola } from '../lib/logger';\nimport {\n accessTokenOption,\n apiHostOption,\n projectUuidOption,\n resolveProjectUuid,\n storeHashOption,\n} from '../lib/shared-options';\nimport { Telemetry } from '../lib/telemetry';\n\ntype LogFormat = 'json' | 'pretty' | 'default' | 'short' | 'request';\n\nconst telemetry = new Telemetry();\n\nconst DEFAULT_CONNECTION_TTL_MS = 1 * 60 * 1000; // 1 minute\nconst MAX_RETRIES = 5;\n\nconst isFatalStatusCode = (status: number) => status >= 400 && status < 500;\n\nconst LEVEL_COLORS: Record<string, Parameters<typeof colorize>[0]> = {\n INFO: 'green',\n WARN: 'yellow',\n ERROR: 'red',\n DEBUG: 'gray',\n};\n\nconst LogEventSchema = z\n .object({\n uuid: z.string(),\n project_uuid: z.string(),\n request: z.object({\n method: z.string(),\n url: z.string(),\n status_code: z.number(),\n }),\n logs: z.array(\n z.object({\n timestamp: z.string(),\n level: z.string(),\n messages: z.array(z.unknown()),\n }),\n ),\n exceptions: z.array(z.unknown()),\n timestamp: z.string(),\n })\n .loose();\n\nclass StreamError extends Error {\n fatal: boolean;\n\n constructor(message: string, fatal: boolean) {\n super(message);\n this.fatal = fatal;\n }\n}\n\nconst formatMessages = (messages: unknown[]) =>\n messages.map((m) => (typeof m === 'string' ? m : JSON.stringify(m))).join(' ');\n\nconst formatLogEvent = (\n event: z.infer<typeof LogEventSchema>,\n format: 'default' | 'short' | 'request',\n) => {\n const { request, logs: logEntries, exceptions } = event;\n\n logEntries.forEach((entry) => {\n const msg = formatMessages(entry.messages);\n const level = entry.level.toUpperCase();\n const coloredLevel = colorize(LEVEL_COLORS[level] ?? 'white', level);\n\n switch (format) {\n case 'short':\n consola.log(msg);\n break;\n\n case 'request':\n consola.log(\n `[${entry.timestamp}] [${coloredLevel}] ${request.method} ${request.url}` +\n ` (${request.status_code}) ${msg}`,\n );\n break;\n\n default:\n consola.log(`[${entry.timestamp}] [${coloredLevel}] ${msg}`);\n break;\n }\n });\n\n exceptions.forEach((exception) => {\n consola.error(`[${event.timestamp}] EXCEPTION`, exception);\n });\n};\n\nexport const parseSSEEvent = (raw: string): string | null => {\n const joined = raw\n .split('\\n')\n .flatMap((line) => (line.startsWith('data:') ? [line.slice(5).trim()] : []))\n .join('\\n');\n\n return joined.length > 0 ? joined : null;\n};\n\nconst processLogEvent = (event: string, format: LogFormat) => {\n if (format === 'json') {\n process.stdout.write(`${event}\\n`);\n\n return;\n }\n\n try {\n const parsed: unknown = JSON.parse(event);\n const logEvent = LogEventSchema.parse(parsed);\n\n if (format === 'pretty') {\n consola.log(JSON.stringify(logEvent, null, 2));\n } else {\n formatLogEvent(logEvent, format);\n }\n } catch {\n consola.warn(`Failed to parse log event: ${event}`);\n }\n};\n\nconst openLogStream = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/logs/${projectUuid}/tail`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n },\n },\n );\n\n if (!response.ok) {\n throw new StreamError(\n `Failed to open log stream: ${response.status} ${response.statusText}`,\n isFatalStatusCode(response.status),\n );\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new StreamError('Failed to read log stream.', true);\n }\n\n return reader;\n};\n\nexport const tailLogs = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n format: LogFormat,\n connectionTtlMs = DEFAULT_CONNECTION_TTL_MS,\n) => {\n consola.info('Tailing logs...');\n\n let retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const reader = await openLogStream(projectUuid, storeHash, accessToken, apiHost);\n const decoder = new TextDecoder();\n const connectTime = Date.now();\n let buffer = '';\n\n retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n\n if (value) {\n buffer += decoder.decode(value, { stream: true });\n\n const parts = buffer.split('\\n\\n');\n\n // Last element is either empty (complete event) or a partial chunk to carry over\n buffer = parts.pop() ?? '';\n\n parts\n .map((raw) => parseSSEEvent(raw))\n .filter((event): event is string => event !== null)\n .forEach((event) => processLogEvent(event, format));\n }\n\n if (streamDone || Date.now() - connectTime >= connectionTtlMs) {\n void reader.cancel();\n break;\n }\n }\n } catch (error) {\n if (error instanceof StreamError && error.fatal) {\n throw error;\n }\n\n const isServerDisconnect = error instanceof TypeError && error.message === 'terminated';\n\n if (isServerDisconnect) {\n consola.warn('Log stream closed by server, reconnecting...');\n } else {\n retries += 1;\n\n if (retries >= MAX_RETRIES) {\n throw new Error(`Failed to connect to log stream after ${MAX_RETRIES} retries.`);\n }\n\n consola.warn(\n `Log stream disconnected, reconnecting (attempt ${retries}/${MAX_RETRIES})...`,\n error,\n );\n }\n }\n }\n};\n\nconst tail = new Command('tail')\n .description('Tail live logs from your deployed application.')\n .addOption(storeHashOption().makeOptionMandatory())\n .addOption(accessTokenOption().makeOptionMandatory())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .addOption(\n new Option('--format <format>', 'Output format for log events.')\n .choices(['json', 'pretty', 'default', 'short', 'request'])\n .default('default'),\n )\n .action(async (options) => {\n try {\n await telemetry.identify(options.storeHash);\n\n const projectUuid = resolveProjectUuid(options);\n\n await tailLogs(\n projectUuid,\n options.storeHash,\n options.accessToken,\n options.apiHost,\n options.format,\n );\n } catch (error) {\n consola.error(error);\n process.exit(1);\n }\n });\n\nconst query = new Command('query')\n .description('Query historical logs from your deployed application.')\n .addOption(storeHashOption().makeOptionMandatory())\n .addOption(accessTokenOption().makeOptionMandatory())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .action((_options) => {\n consola.error('The query command is not yet implemented.');\n process.exit(1);\n });\n\nexport const logs = new Command('logs')\n .description('View logs from your deployed application.')\n .addCommand(tail, { isDefault: true })\n .addCommand(query);\n","import { Option } from 'commander';\n\nimport { getProjectConfig } from './project-config';\n\nexport const storeHashOption = () =>\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('BIGCOMMERCE_STORE_HASH');\n\nexport const accessTokenOption = () =>\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('BIGCOMMERCE_ACCESS_TOKEN');\n\nexport const apiHostOption = () =>\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com');\n\nexport const projectUuidOption = () =>\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects).',\n ).env('BIGCOMMERCE_PROJECT_UUID');\n\nexport const resolveProjectUuid = (options: { projectUuid?: string }) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n return projectUuid;\n};\n","import { Command, Option } from 'commander';\n\nimport { consola } from '../lib/logger';\nimport { createProject, fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst list = new Command('list')\n .description('List BigCommerce infrastructure projects for your store.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n if (projects.length === 0) {\n consola.info('No projects found.');\n process.exit(0);\n\n return;\n }\n\n projects.forEach((p) => {\n consola.log(`${p.name} (${p.uuid})`);\n });\n\n process.exit(0);\n });\n\nconst create = new Command('create')\n .description(\n 'Create a new BigCommerce infrastructure project and link it to your local Catalyst project.',\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', data.uuid);\n config.set('storeHash', storeHash);\n config.set('accessToken', accessToken);\n consola.success('Project UUID written to .bigcommerce/project.json.');\n\n process.exit(0);\n });\n\nexport const link = new Command('link')\n .description(\n 'Link your local Catalyst project to a BigCommerce infrastructure project. You can provide a project UUID directly, or fetch and select from available projects using your store credentials.',\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects). Use this to link directly without fetching projects.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n\n const writeProjectConfig = (\n uuid: string,\n credentials?: { storeHash: string; accessToken: string },\n ) => {\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', uuid);\n\n if (credentials) {\n config.set('storeHash', credentials.storeHash);\n config.set('accessToken', credentials.accessToken);\n }\n\n consola.success('Project UUID written to .bigcommerce/project.json.');\n };\n\n if (options.projectUuid) {\n writeProjectConfig(options.projectUuid);\n\n process.exit(0);\n\n return;\n }\n\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n const promptOptions = [\n ...projects.map((proj) => ({\n label: proj.name,\n value: proj.uuid,\n hint: proj.uuid,\n })),\n {\n label: 'Create a new project',\n value: 'create',\n hint: 'Create a new infrastructure project for this BigCommerce store.',\n },\n ];\n\n let projectUuid = await consola.prompt(\n 'Select a project or create a new project (Press <enter> to select).',\n {\n type: 'select',\n options: promptOptions,\n cancel: 'reject',\n },\n );\n\n if (projectUuid === 'create') {\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n projectUuid = data.uuid;\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n }\n\n writeProjectConfig(projectUuid, { storeHash, accessToken });\n\n process.exit(0);\n });\n\nexport const project = new Command('project')\n .description('Manage your BigCommerce infrastructure project.')\n .addCommand(create)\n .addCommand(list)\n .addCommand(link);\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { existsSync, lstatSync, symlinkSync } from 'node:fs';\nimport { join, relative } from 'node:path';\n\nimport { consola } from '../lib/logger';\n\nexport const start = new Command('start')\n .description(\n 'Start a local preview of your Catalyst storefront using the OpenNext Cloudflare adapter.',\n )\n .action(async () => {\n const envLocal = join(process.cwd(), '.env.local');\n const devVars = join(process.cwd(), '.bigcommerce', '.dev.vars');\n\n if (existsSync(envLocal)) {\n if (!existsSync(devVars)) {\n const target = relative(join(process.cwd(), '.bigcommerce'), envLocal);\n\n symlinkSync(target, devVars);\n consola.success('Symlinked .bigcommerce/.dev.vars → .env.local');\n } else if (!lstatSync(devVars).isSymbolicLink()) {\n consola.warn(\n '.bigcommerce/.dev.vars already exists and is not a symlink. ' +\n 'Wrangler will use it instead of .env.local.',\n );\n }\n } else {\n consola.warn(\n 'No .env.local file found. The preview server may fail without environment variables.\\n' +\n 'Create a .env.local file in your project root with the required variables.',\n );\n }\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'preview',\n '--config',\n join('.bigcommerce', 'wrangler.jsonc'),\n ],\n {\n stdio: 'inherit',\n cwd: process.cwd(),\n },\n );\n });\n","import { Argument, Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\n\nimport { consola } from '../lib/logger';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst telemetryService = getTelemetry();\nlet isEnabled = telemetryService.isEnabled();\n\nexport const telemetry = new Command('telemetry')\n .addArgument(new Argument('[arg]').choices(['disable', 'enable', 'status']))\n .addOption(new Option('--enable', `Enables CLI telemetry collection.`).conflicts('disable'))\n .option('--disable', `Disables CLI telemetry collection.`)\n .action((arg, options) => {\n if (options.enable || arg === 'enable') {\n telemetryService.setEnabled(true);\n isEnabled = true;\n\n consola.success('Success!\\n');\n } else if (options.disable || arg === 'disable') {\n telemetryService.setEnabled(false);\n\n if (isEnabled) {\n consola.success('Your preference has been saved to .bigcommerce/project.json');\n } else {\n consola.info(`Catalyst CLI telemetry collection is already disabled.`);\n }\n\n isEnabled = false;\n } else {\n consola.info('Catalyst CLI Telemetry\\n');\n }\n\n consola.info(\n `Status: ${colorize('bold', isEnabled ? colorize('green', 'Enabled') : colorize('red', 'Disabled'))}`,\n );\n\n if (!isEnabled) {\n consola.info(\n `You have opted-out of Catalyst CLI telemetry. No data will be collected from your machine.`,\n );\n }\n });\n","import { Command } from 'commander';\n\nimport PACKAGE_INFO from '../../../package.json';\nimport { consola } from '../lib/logger';\n\nexport const version = new Command('version')\n .description('Display detailed version information.')\n .action(() => {\n consola.log('Version Information:');\n consola.log(`CLI Version: ${PACKAGE_INFO.version}`);\n consola.log(`Node Version: ${process.version}`);\n consola.log(`Platform: ${process.platform} (${process.arch})`);\n });\n","import { Command, type CommandUnknownOpts } from '@commander-js/extra-typings';\n\nimport { getTelemetry } from '../lib/telemetry';\n\nconst allowlistArguments = ['--keep-temp-dir', '--api-host', '--project-uuid'];\n\nfunction parseArguments(args: string[]) {\n return args.reduce<Record<string, string>>((result, arg, index, array) => {\n if (arg.includes('=')) {\n const [key, value] = arg.split('=');\n\n if (allowlistArguments.includes(key)) {\n return {\n ...result,\n [key]: value,\n };\n }\n }\n\n if (allowlistArguments.includes(arg)) {\n const nextValue =\n array[index + 1] && !array[index + 1].startsWith('--') ? array[index + 1] : null;\n\n if (nextValue && !nextValue.includes('--')) {\n return {\n ...result,\n [arg]: nextValue,\n };\n }\n }\n\n return result;\n }, {});\n}\n\nfunction getCommandPath(cmd: CommandUnknownOpts): string {\n const parts: string[] = [];\n let current: CommandUnknownOpts | null = cmd;\n\n while (current.parent) {\n parts.unshift(current.name());\n current = current.parent;\n }\n\n return parts.join(' ');\n}\n\nexport const telemetryPreHook = async (thisCommand: Command, actionCommand: CommandUnknownOpts) => {\n const telemetry = getTelemetry();\n const commandName = getCommandPath(actionCommand);\n\n telemetry.commandName = commandName;\n\n // Return the await to get a proper stack trace.\n // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression\n return await telemetry.track(commandName, {\n ...parseArguments(thisCommand.args),\n });\n};\n\nexport const telemetryPostHook = async () => {\n const telemetry = getTelemetry();\n\n await telemetry.track('command_completed', { durationMs: telemetry.durationMs() });\n await telemetry.analytics.closeAndFlush();\n};\n","#!/usr/bin/env node\nimport { consola } from './lib/logger';\nimport { getTelemetry } from './lib/telemetry';\nimport { program } from './program';\n\nconst handleFatalError = async (error: unknown) => {\n const telemetry = getTelemetry();\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorStack = error instanceof Error ? error.stack : undefined;\n\n try {\n await telemetry.track('error', {\n commandName: telemetry.commandName,\n errorMessage,\n errorStack,\n durationMs: telemetry.durationMs(),\n });\n await telemetry.analytics.closeAndFlush();\n } catch {\n // Don't mask the original error\n }\n\n consola.error(errorMessage);\n\n if (telemetry.isEnabled()) {\n consola.info(\n `\\nTrace ID: ${telemetry.sessionId}\\nShare this Trace ID with BigCommerce support.`,\n );\n } else {\n consola.info(\n '\\nEnable telemetry (`catalyst telemetry enable`) for improved troubleshooting with BigCommerce support.',\n );\n }\n\n process.exit(1);\n};\n\nprocess.on('uncaughtException', (error) => {\n void handleFatalError(error);\n});\n\nprocess.on('unhandledRejection', (reason) => {\n void handleFatalError(reason);\n});\n\nvoid (async () => {\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n await handleFatalError(error);\n }\n})();\n"],"mappings":"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","names":["Option","Command","colorize","z","resolve","z","z","z","config","Command","Option","join","join","join","Command","Option","config","Command","Option","join","yoctoSpinner","z","config","z","join","yoctoSpinner","Command","Option","config","telemetry","join","Command","Option","colorize","z","Option","Option","config","z","colorize","Command","Option","Command","Option","Command","Option","config","Command","execa","join","Command","join","execa","Command","Option","colorize","telemetry","Command","Option","colorize","Command","Command","telemetry","Command","colorize","Option","telemetry","telemetry"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/logger.ts","../src/cli/lib/telemetry.ts","../package.json","../src/cli/lib/project-config.ts","../src/cli/program.ts","../src/cli/commands/auth.ts","../src/cli/lib/auth.ts","../src/cli/lib/project.ts","../src/cli/commands/build.ts","../src/cli/lib/get-module-cli-path.ts","../src/cli/lib/wrangler-config.ts","../src/cli/commands/deploy.ts","../src/cli/lib/deployment-errors.ts","../src/cli/lib/resolve-credentials.ts","../src/cli/commands/logs.ts","../src/cli/lib/shared-options.ts","../src/cli/commands/project.ts","../src/cli/commands/start.ts","../src/cli/commands/telemetry.ts","../src/cli/commands/version.ts","../src/cli/hooks/telemetry.ts","../src/cli/index.ts"],"sourcesContent":["import { createConsola } from 'consola';\n\nexport const consola = createConsola({\n level: process.env.CONSOLA_LEVEL ? parseInt(process.env.CONSOLA_LEVEL, 10) : 3,\n});\n","import { Analytics } from '@segment/analytics-node';\nimport Conf from 'conf';\nimport { randomBytes, randomUUID } from 'node:crypto';\n\nimport PACKAGE_INFO from '../../../package.json';\n\nimport { getProjectConfig, ProjectConfigSchema } from './project-config';\n\nconst TELEMETRY_KEY_ENABLED = 'telemetry.enabled';\nconst TELEMETRY_KEY_ID = `telemetry.anonymousId`;\n\nexport class Telemetry {\n readonly correlationId: string;\n readonly analytics: Analytics;\n readonly startTime: number;\n commandName = 'unknown';\n\n private projectConfig: Conf<ProjectConfigSchema>;\n private CATALYST_TELEMETRY_DISABLED: string | undefined;\n\n private readonly projectName = 'catalyst-cli';\n private readonly projectVersion = PACKAGE_INFO.version;\n\n constructor() {\n this.CATALYST_TELEMETRY_DISABLED = process.env.CATALYST_TELEMETRY_DISABLED;\n\n this.projectConfig = getProjectConfig();\n\n this.correlationId = randomUUID();\n this.startTime = Date.now();\n this.analytics = new Analytics({\n writeKey: process.env.CLI_SEGMENT_WRITE_KEY ?? 'not-a-valid-segment-write-key',\n });\n }\n\n durationMs(): number {\n return Date.now() - this.startTime;\n }\n\n async track(eventName: string, payload: Record<string, unknown>) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.track({\n event: eventName,\n anonymousId: this.getAnonymousId(),\n properties: {\n ...payload,\n correlationId: this.correlationId,\n nodeVersion: process.version,\n platform: process.platform,\n arch: process.arch,\n cliVersion: PACKAGE_INFO.version,\n },\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n async identify(storeHash?: string) {\n if (!this.isEnabled()) {\n return Promise.resolve(undefined);\n }\n\n if (!storeHash) {\n return Promise.resolve(undefined);\n }\n\n this.analytics.identify({\n userId: storeHash,\n anonymousId: this.getAnonymousId(),\n context: {\n app: {\n name: this.projectName,\n version: this.projectVersion,\n },\n },\n });\n }\n\n setEnabled = (_enabled: boolean) => {\n const enabled = Boolean(_enabled);\n\n this.projectConfig.set('telemetry.enabled', enabled);\n };\n\n isEnabled() {\n return (\n !this.CATALYST_TELEMETRY_DISABLED &&\n this.projectConfig.get<typeof TELEMETRY_KEY_ENABLED, boolean>(TELEMETRY_KEY_ENABLED, true)\n );\n }\n\n private getAnonymousId(): string {\n const val = this.projectConfig.get<typeof TELEMETRY_KEY_ID, string>(TELEMETRY_KEY_ID);\n\n if (val) {\n return val;\n }\n\n const generated = randomBytes(32).toString('hex');\n\n this.projectConfig.set(TELEMETRY_KEY_ID, generated);\n\n return generated;\n }\n}\n\nlet telemetryInstance: Telemetry | undefined;\n\n// Singleton so the pre-hook, post-hook, error handler, and command bodies all\n// share one correlationId. resetTelemetry() is for test isolation.\nexport function getTelemetry(): Telemetry {\n telemetryInstance ??= new Telemetry();\n\n return telemetryInstance;\n}\n\nexport function resetTelemetry(): void {\n telemetryInstance = undefined;\n}\n","{\n \"name\": \"@bigcommerce/catalyst\",\n \"version\": \"1.0.0-alpha.2\",\n \"type\": \"module\",\n \"bin\": {\n \"catalyst\": \"dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"templates\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \"^20.0.0 || ^22.0.0 || ^24.0.0\"\n },\n \"dependencies\": {\n \"@segment/analytics-node\": \"^2.2.1\",\n \"adm-zip\": \"^0.5.16\",\n \"commander\": \"^14.0.0\",\n \"conf\": \"^13.1.0\",\n \"consola\": \"^3.4.2\",\n \"dotenv\": \"^16.5.0\",\n \"execa\": \"^9.6.0\",\n \"open\": \"^10.1.0\",\n \"yocto-spinner\": \"^1.0.0\",\n \"zod\": \"^4.0.5\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.11.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@types/adm-zip\": \"^0.5.7\",\n \"@types/node\": \"^22.15.30\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^8.57.1\",\n \"msw\": \"^2.9.0\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@opennextjs/cloudflare\": \"1.17.3\"\n }\n}\n","import Conf from 'conf';\nimport { join } from 'path';\n\nexport interface ProjectConfigSchema {\n projectUuid: string;\n // Reserved for future use\n framework: 'catalyst';\n storeHash?: string;\n accessToken?: string;\n telemetry: {\n enabled: boolean;\n anonymousId: string;\n };\n}\n\nexport function getProjectConfig() {\n return new Conf<ProjectConfigSchema>({\n cwd: join(process.cwd(), '.bigcommerce'),\n projectSuffix: '',\n configName: 'project',\n schema: {\n projectUuid: { type: 'string', format: 'uuid' },\n framework: {\n type: 'string',\n enum: ['catalyst'],\n default: 'catalyst',\n },\n storeHash: { type: 'string' },\n accessToken: { type: 'string' },\n telemetry: {\n type: 'object',\n properties: {\n enabled: { type: 'boolean' },\n anonymousId: { type: 'string' },\n },\n },\n },\n });\n}\n","import { Option } from '@commander-js/extra-typings';\nimport { Command } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { config } from 'dotenv';\nimport { resolve } from 'node:path';\n\nimport PACKAGE_INFO from '../../package.json';\n\nimport { auth } from './commands/auth';\nimport { build } from './commands/build';\nimport { deploy } from './commands/deploy';\nimport { logs } from './commands/logs';\nimport { project } from './commands/project';\nimport { start } from './commands/start';\nimport { telemetry } from './commands/telemetry';\nimport { version } from './commands/version';\nimport { telemetryPostHook, telemetryPreHook } from './hooks/telemetry';\nimport { consola } from './lib/logger';\n\nexport const program = new Command();\n\nconsola.log(colorize('cyanBright', `◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('CLI tool for Catalyst development')\n .addOption(\n new Option(\n '--env-path <path>',\n 'Path to environment file to load (relative to current working directory)',\n // We are using argParser, because commander loads in environment variables before executing hooks.\n ).argParser((value) => {\n if (value) {\n const envFilePath = resolve(process.cwd(), value);\n const result = config({\n path: envFilePath,\n override: true,\n });\n\n if (result.error) {\n const errCode =\n 'code' in result.error && typeof result.error.code === 'string'\n ? result.error.code\n : undefined;\n const message =\n errCode === 'ENOENT'\n ? `Env file not found: ${envFilePath}`\n : `Failed to load --env-path ${value}: ${result.error.message}`;\n\n throw new Error(message);\n }\n\n consola.log(colorize('cyanBright', `Loaded environment variables from ${envFilePath}\\n`));\n }\n\n return value;\n }),\n )\n .addCommand(version)\n .addCommand(start)\n .addCommand(build)\n .addCommand(deploy)\n .addCommand(logs)\n .addCommand(project)\n .addCommand(auth)\n .addCommand(telemetry)\n .hook('preAction', telemetryPreHook)\n .hook('postAction', telemetryPostHook);\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport open from 'open';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { DEFAULT_LOGIN_URL, requestDeviceCode, waitForDeviceToken } from '../lib/auth';\nimport { consola } from '../lib/logger';\nimport { fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\n\nconst StoreProfileSchema = z.object({\n data: z.object({\n store_name: z.string(),\n }),\n});\n\nasync function fetchStoreProfile(storeHash: string, accessToken: string, apiHost: string) {\n const response = await fetch(`https://${apiHost}/stores/${storeHash}/v3/settings/store/profile`, {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const result = StoreProfileSchema.safeParse(res);\n\n if (!result.success) {\n throw new Error('Unexpected response from store profile API');\n }\n\n return result.data.data;\n}\n\nconst whoami = new Command('whoami')\n .description('Verify stored credentials and display store/project info.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.info('Not logged in: no credentials found.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n return;\n }\n\n const store = await fetchStoreProfile(storeHash, accessToken, options.apiHost);\n\n const projectUuid = config.get('projectUuid');\n\n if (projectUuid) {\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n const linkedProject = projects.find((p) => p.uuid === projectUuid);\n\n if (linkedProject) {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), connected to project ${linkedProject.name} (${projectUuid})`,\n );\n } else {\n consola.info(\n `Logged in to ${store.store_name} (${storeHash}), project ${projectUuid} not found`,\n );\n }\n } else {\n consola.info(`Logged in to ${store.store_name} (${storeHash})`);\n }\n\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (message.includes('401') || message.includes('403')) {\n consola.error(`Not logged in: invalid credentials (${message})`);\n } else {\n consola.error(`Failed to verify credentials: ${message}`);\n }\n\n process.exit(1);\n }\n });\n\nconst login = new Command('login')\n .description('Authenticate via browser using the OAuth device code flow.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--login-url <url>', 'BigCommerce login URL.')\n .env('BIGCOMMERCE_LOGIN_URL')\n .default(DEFAULT_LOGIN_URL),\n )\n .action(async (options) => {\n try {\n const config = getProjectConfig();\n\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (storeHash && accessToken) {\n consola.info(`Already logged in to store ${storeHash}.`);\n consola.info('Run `catalyst auth logout` first to re-authenticate.');\n process.exit(0);\n\n return;\n }\n\n const deviceCode = await requestDeviceCode(options.loginUrl);\n\n consola.info(\n `${colorize('yellow', 'Your one-time code:')} ${colorize('bold', deviceCode.user_code)}`,\n );\n\n try {\n await open(deviceCode.verification_uri);\n consola.info(`Opened ${deviceCode.verification_uri} in your browser.`);\n } catch {\n consola.info(\n `Open ${deviceCode.verification_uri} in your browser and enter the code above.`,\n );\n }\n\n const spinner = yoctoSpinner().start('Waiting for authentication...');\n\n const credentials = await waitForDeviceToken(\n options.loginUrl,\n deviceCode.device_code,\n deviceCode.interval,\n );\n\n spinner.success('Authentication complete.');\n\n config.set('storeHash', credentials.store_hash);\n config.set('accessToken', credentials.access_token);\n\n consola.success(`Logged in to store ${credentials.store_hash}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Login failed: ${message}`);\n process.exit(1);\n }\n });\n\nconst logout = new Command('logout')\n .description('Remove stored credentials for the current project.')\n .action(() => {\n try {\n const config = getProjectConfig();\n\n const storeHash = config.get('storeHash');\n const accessToken = config.get('accessToken');\n\n if (!storeHash && !accessToken) {\n consola.info('Not logged in: no credentials found.');\n process.exit(0);\n\n return;\n }\n\n config.delete('storeHash');\n config.delete('accessToken');\n\n consola.success(`Logged out from store ${storeHash ?? 'unknown'}.`);\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n consola.error(`Logout failed: ${message}`);\n process.exit(1);\n }\n });\n\nexport const auth = new Command('auth')\n .description('Manage authentication for the BigCommerce CLI.')\n .addCommand(whoami)\n .addCommand(login)\n .addCommand(logout);\n","import { z } from 'zod';\n\nexport const DEVICE_OAUTH_CLIENT_ID = 's1q4io7mah2lm1i6uwp9yl1eit80n3b';\nexport const DEVICE_OAUTH_SCOPES = [\n 'store_v2_information',\n 'store_infrastructure_deployments_manage',\n 'store_infrastructure_logs_read_only',\n 'store_infrastructure_projects_manage',\n].join(' ');\nexport const DEFAULT_LOGIN_URL = 'https://login.bigcommerce.com';\n\nexport const DeviceCodeResponseSchema = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n});\n\nexport const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string(),\n});\n\nexport async function requestDeviceCode(loginUrl: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n client_id: DEVICE_OAUTH_CLIENT_ID,\n scopes: DEVICE_OAUTH_SCOPES,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to request device code: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeResponseSchema.parse(res);\n}\n\nexport async function pollDeviceToken(loginUrl: string, deviceCode: string) {\n const response = await fetch(`${loginUrl}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n return null;\n }\n\n const res: unknown = await response.json();\n\n return DeviceCodeSuccessSchema.parse(res);\n}\n\nexport async function waitForDeviceToken(\n loginUrl: string,\n deviceCode: string,\n interval: number,\n): Promise<z.infer<typeof DeviceCodeSuccessSchema>> {\n const credentials = await pollDeviceToken(loginUrl, deviceCode);\n\n if (credentials) {\n return credentials;\n }\n\n await new Promise((resolve) => {\n setTimeout(resolve, interval * 1000);\n });\n\n return waitForDeviceToken(loginUrl, deviceCode, interval);\n}\n","import { z } from 'zod';\n\nimport { getTelemetry } from './telemetry';\n\nconst fetchProjectsSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.string(),\n name: z.string(),\n }),\n ),\n});\n\nexport interface ProjectListItem {\n uuid: string;\n name: string;\n}\n\nexport async function fetchProjects(\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<ProjectListItem[]> {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n },\n );\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = fetchProjectsSchema.parse(res);\n\n return data;\n}\n\nconst createProjectSchema = z.object({\n data: z.object({\n uuid: z.string(),\n name: z.string(),\n date_created: z.coerce.date(),\n date_modified: z.coerce.date(),\n }),\n});\n\nexport interface CreateProjectResult {\n uuid: string;\n name: string;\n date_created: Date;\n date_modified: Date;\n}\n\nexport async function createProject(\n name: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n): Promise<CreateProjectResult> {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n body: JSON.stringify({ name }),\n },\n );\n\n if (response.status === 502) {\n throw new Error('Failed to create project, is the name already in use?');\n }\n\n if (response.status === 403) {\n throw new Error(\n 'Infrastructure Projects API not enabled. If you are part of the alpha, contact support@bigcommerce.com to enable it.',\n );\n }\n\n if (response.status === 422) {\n throw new Error(\n \"The project name you entered doesn't meet the requirements. It must be 3–32 characters long and use only letters, numbers, hyphens (-), underscores (_), and periods (.)\",\n );\n }\n\n if (!response.ok) {\n throw new Error(`Failed to create project: ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n\n const { data } = createProjectSchema.parse(res);\n\n return data;\n}\n","import { Command, Option } from 'commander';\nimport { execa } from 'execa';\nimport { copyFile, cp, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { getModuleCliPath } from '../lib/get-module-cli-path';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { getWranglerConfig } from '../lib/wrangler-config';\n\nconst WRANGLER_VERSION = '4.24.3';\n\nexport async function buildCatalystProject(projectUuid: string): Promise<void> {\n const coreDir = process.cwd();\n const openNextOutDir = join(coreDir, '.open-next');\n const bigcommerceDistDir = join(coreDir, '.bigcommerce', 'dist');\n\n const wranglerConfig = getWranglerConfig(projectUuid);\n\n consola.start('Copying templates...');\n\n await copyFile(\n join(getModuleCliPath(), 'templates', 'open-next.config.ts'),\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n );\n await writeFile(\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n JSON.stringify(wranglerConfig, null, 2),\n );\n\n consola.success('Templates copied');\n\n consola.start('Building project...');\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'build',\n '--skipWranglerConfigCheck',\n '--openNextConfigPath',\n join(coreDir, '.bigcommerce', 'open-next.config.ts'),\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n await execa(\n 'pnpm',\n [\n 'dlx',\n `wrangler@${WRANGLER_VERSION}`,\n 'deploy',\n '--config',\n join(coreDir, '.bigcommerce', 'wrangler.jsonc'),\n '--keep-vars',\n '--outdir',\n bigcommerceDistDir,\n '--dry-run',\n ],\n {\n stdout: ['pipe', 'inherit'],\n cwd: coreDir,\n },\n );\n\n consola.success('Project built');\n\n await cp(join(openNextOutDir, 'assets'), join(bigcommerceDistDir, 'assets'), {\n recursive: true,\n force: true,\n });\n}\n\nexport const build = new Command('build')\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'Project UUID to be included in the deployment configuration.',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run `catalyst project create` or `catalyst project link` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await buildCatalystProject(projectUuid);\n });\n","/* eslint-disable no-underscore-dangle */\n\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getModuleCliPath() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n return join(__dirname, '..');\n}\n","export function getWranglerConfig(projectUuid: string) {\n return {\n $schema: 'node_modules/wrangler/config-schema.json',\n main: '../.open-next/worker.js',\n name: `project-${projectUuid}`,\n compatibility_date: '2025-09-15',\n compatibility_flags: ['nodejs_compat', 'global_fetch_strictly_public'],\n observability: {\n enabled: true,\n head_sampling_rate: 0.05,\n logs: {\n enabled: true,\n head_sampling_rate: 1,\n invocation_logs: false,\n },\n },\n assets: {\n directory: '../.open-next/assets',\n binding: 'ASSETS',\n },\n services: [\n {\n binding: 'WORKER_SELF_REFERENCE',\n service: `project-${projectUuid}`,\n },\n ],\n r2_buckets: [\n {\n binding: 'NEXT_INC_CACHE_R2_BUCKET',\n bucket_name: `project-${projectUuid}`,\n },\n ],\n durable_objects: {\n bindings: [\n {\n name: 'NEXT_CACHE_DO_QUEUE',\n class_name: 'DOQueueHandler',\n },\n {\n name: 'NEXT_TAG_CACHE_DO_SHARDED',\n class_name: 'DOShardedTagCache',\n },\n {\n name: 'NEXT_CACHE_DO_PURGE',\n class_name: 'BucketCachePurge',\n },\n ],\n },\n migrations: [\n {\n tag: 'v1',\n new_sqlite_classes: ['DOQueueHandler', 'DOShardedTagCache', 'BucketCachePurge'],\n },\n ],\n };\n}\n","import AdmZip from 'adm-zip';\nimport { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport yoctoSpinner from 'yocto-spinner';\nimport { z } from 'zod';\n\nimport { getDeploymentErrorMessage } from '../lib/deployment-errors';\nimport { consola } from '../lib/logger';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport { getTelemetry } from '../lib/telemetry';\n\nimport { buildCatalystProject } from './build';\n\nconst stepsEnum = z.enum([\n 'initializing',\n 'downloading',\n 'unzipping',\n 'processing',\n 'deploying',\n 'finalizing',\n 'complete',\n]);\n\nconst STEPS: Record<z.infer<typeof stepsEnum>, string> = {\n initializing: 'Initializing...',\n downloading: 'Downloading...',\n unzipping: 'Unzipping...',\n processing: 'Processing...',\n deploying: 'Deploying...',\n finalizing: 'Finalizing...',\n complete: 'Complete',\n};\n\nconst UploadSignatureSchema = z.object({\n data: z.object({\n upload_url: z.url(),\n upload_uuid: z.string(),\n }),\n});\n\nconst CreateDeploymentSchema = z.object({\n data: z.object({\n deployment_uuid: z.uuid(),\n }),\n});\n\nconst ProjectSchema = z.object({\n data: z.array(\n z.object({\n uuid: z.uuid(),\n name: z.string(),\n }),\n ),\n});\n\nconst DeploymentStatusSchema = z.object({\n deployment_uuid: z.uuid(),\n deployment_status: z.enum(['queued', 'in_progress', 'failed', 'completed']),\n event: z\n .object({\n step: stepsEnum,\n progress: z.number(),\n })\n .nullable(),\n deployment_url: z.string().nullable(),\n error: z\n .object({\n code: z.number(),\n })\n .optional(),\n});\n\nexport const generateBundleZip = async () => {\n consola.info('Generating bundle...');\n\n const bigcommerceDir = join(process.cwd(), '.bigcommerce');\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n // Check if .bigcommerce/dist exists\n try {\n await access(distDir);\n } catch {\n throw new Error(`Dist directory not found: ${distDir}`);\n }\n\n // Check if .bigcommerce/dist is not empty\n const buildDirContents = await readdir(distDir);\n\n if (buildDirContents.length === 0) {\n throw new Error(`Dist directory is empty: ${distDir}`);\n }\n\n const outputZip = join(bigcommerceDir, 'bundle.zip');\n\n // Use AdmZip to create the zip\n const zip = new AdmZip();\n\n zip.addLocalFolder(distDir, 'output');\n zip.writeZip(outputZip);\n\n consola.success(`Bundle created at: ${outputZip}`);\n};\n\nexport const generateUploadSignature = async (\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Generating upload signature...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/uploads`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n body: JSON.stringify({}),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch upload signature: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = UploadSignatureSchema.parse(res);\n\n consola.success('Upload signature generated.');\n\n return data;\n};\n\nexport const uploadBundleZip = async (uploadUrl: string) => {\n consola.info('Uploading bundle...');\n\n const zipPath = join(process.cwd(), '.bigcommerce', 'bundle.zip');\n\n // Read the zip file as a buffer\n const fileBuffer = await readFile(zipPath);\n\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/zip',\n },\n body: fileBuffer,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to upload bundle: ${response.status} ${response.statusText}`);\n }\n\n consola.success('Bundle uploaded successfully.');\n\n return true;\n};\n\nexport const parseEnvironmentVariables = (secretOption?: string[]) => {\n return secretOption?.map((envVar) => {\n const [key, value] = envVar.split('=');\n\n if (!key || !value) {\n throw new Error(`Invalid secret format: ${envVar}. Expected format: KEY=VALUE`);\n }\n\n return {\n type: 'secret' as const,\n key: key.trim(),\n value: value.trim(),\n };\n });\n};\n\nconst AUTO_DETECT_SECRETS = [\n { key: 'BIGCOMMERCE_STORE_HASH', warnIfMissing: true },\n { key: 'BIGCOMMERCE_CHANNEL_ID', warnIfMissing: true },\n { key: 'BIGCOMMERCE_STOREFRONT_TOKEN', warnIfMissing: true },\n { key: 'BIGCOMMERCE_API_HOST', warnIfMissing: false },\n { key: 'BIGCOMMERCE_GRAPHQL_API_DOMAIN', warnIfMissing: false },\n { key: 'AUTH_SECRET', warnIfMissing: false },\n];\n\nexport const autoDetectSecrets = (\n environmentVariables?: Array<{ type: 'secret' | 'plain_text'; key: string; value: string }>,\n) => {\n const secrets = environmentVariables ?? [];\n const existingKeys = new Set(secrets.map((s) => s.key));\n\n AUTO_DETECT_SECRETS.forEach(({ key, warnIfMissing }) => {\n if (existingKeys.has(key)) {\n return;\n }\n\n const value = process.env[key];\n\n if (value) {\n secrets.push({ type: 'secret', key, value });\n } else if (warnIfMissing) {\n consola.warn(`${key} is not set in the environment and was not provided via --secret.`);\n }\n });\n\n return secrets;\n};\n\nexport const createDeployment = async (\n projectUuid: string,\n uploadUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n environmentVariables?: Array<{ type: 'secret' | 'plain_text'; key: string; value: string }>,\n) => {\n consola.info('Creating deployment...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments`,\n {\n method: 'POST',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n body: JSON.stringify({\n project_uuid: projectUuid,\n upload_uuid: uploadUuid,\n environment_variables: environmentVariables,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to create deployment: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = CreateDeploymentSchema.parse(res);\n\n consola.success('Deployment started...');\n\n return data;\n};\n\nexport const getDeploymentStatus = async (\n deploymentUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n consola.info('Fetching deployment status...');\n\n const spinner = yoctoSpinner().start('Fetching...');\n\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/deployments/${deploymentUuid}/events`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to open event stream: ${response.status} ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new Error('Failed to read event stream.');\n }\n\n const decoder = new TextDecoder();\n let done = false;\n let deploymentUrl: string | undefined;\n\n while (!done) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n let json: unknown;\n\n if (value) {\n const chunk = decoder.decode(value, { stream: true }).trim();\n const split = chunk\n .split('\\n\\n')\n .map((s) => s.replace('data:', '').trim())\n .filter(Boolean);\n\n // eslint-disable-next-line no-loop-func\n split.forEach((event) => {\n try {\n json = JSON.parse(event);\n } catch (error) {\n consola.warn(`Failed to parse event, dropping from stream. Event: ${event}`, error);\n\n return;\n }\n\n const data = DeploymentStatusSchema.parse(json);\n\n if (data.error) {\n throw new Error(\n `Deployment failed (error code ${data.error.code}): ${getDeploymentErrorMessage(data.error.code)}`,\n );\n }\n\n if (data.event && STEPS[data.event.step] !== spinner.text) {\n spinner.text = STEPS[data.event.step];\n }\n\n if (data.deployment_url) {\n deploymentUrl = data.deployment_url;\n }\n });\n }\n\n done = streamDone;\n }\n\n spinner.success('Deployment completed successfully.');\n\n if (deploymentUrl) {\n const url = deploymentUrl.startsWith('https://') ? deploymentUrl : `https://${deploymentUrl}`;\n\n consola.success(`View your deployment at: ${colorize('blue', url)}`);\n }\n};\n\nexport const fetchProject = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/projects`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Correlation-Id': getTelemetry().correlationId,\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.status} ${response.statusText}`);\n }\n\n const res: unknown = await response.json();\n const { data } = ProjectSchema.parse(res);\n\n return data.find((project) => project.uuid === projectUuid);\n};\n\nexport const deploy = new Command('deploy')\n .description('Deploy your application to Cloudflare.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel. Read from .bigcommerce/project.json when not provided.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account. Read from .bigcommerce/project.json when not provided.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .addOption(\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce intrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects).',\n ).env('CATALYST_PROJECT_UUID'),\n )\n .addOption(\n new Option(\n '--secret <value>',\n 'Secret to set for the deployment (repeatable). Format: --secret KEY=VALUE',\n ).argParser((value: string, previous: string[] = []) => {\n return previous.concat([value]);\n }),\n )\n .option('--dry-run', 'Run the command to generate the bundle without uploading or deploying.')\n .option(\n '--prebuilt',\n 'Skip the build step. Requires .bigcommerce/dist/ to already contain build output.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n const telemetry = getTelemetry();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n await telemetry.identify(storeHash);\n\n if (options.prebuilt) {\n const distDir = join(process.cwd(), '.bigcommerce', 'dist');\n\n try {\n await access(distDir);\n } catch {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n const contents = await readdir(distDir);\n\n if (contents.length === 0) {\n throw new Error(\n 'No build output found at .bigcommerce/dist/. Run `catalyst build` first or remove `--prebuilt` to build automatically.',\n );\n }\n\n consola.info('Using existing build output (--prebuilt).');\n } else {\n await buildCatalystProject(projectUuid);\n }\n\n await generateBundleZip();\n\n if (options.dryRun) {\n consola.info('Dry run enabled — skipping upload and deployment steps.');\n consola.info('Next steps (skipped):');\n consola.info('- Generate upload signature');\n consola.info('- Upload bundle.zip');\n consola.info('- Create deployment');\n\n process.exit(0);\n }\n\n const uploadSignature = await generateUploadSignature(storeHash, accessToken, options.apiHost);\n\n await uploadBundleZip(uploadSignature.upload_url);\n\n const environmentVariables = autoDetectSecrets(parseEnvironmentVariables(options.secret));\n\n const { deployment_uuid: deploymentUuid } = await createDeployment(\n projectUuid,\n uploadSignature.upload_uuid,\n storeHash,\n accessToken,\n options.apiHost,\n environmentVariables,\n );\n\n await getDeploymentStatus(deploymentUuid, storeHash, accessToken, options.apiHost);\n });\n","const ERROR_MESSAGES: Record<number, string> = {\n 10: 'Something went wrong on our end. Please try again. If the issue persists, contact support.',\n 20: \"We couldn't retrieve your bundle. This is usually a temporary issue — please try deploying again. If the problem continues, contact support.\",\n 30: 'Your bundle could not be extracted. This may mean your build output is too large (max 64 MB compressed / 512 MB uncompressed) or the archive is corrupted. Try reducing your build size or rebuilding your project and deploying again.',\n 40: `There's a problem with your build output. This could be caused by:\n- A worker.js file larger than 40 MB\n- An individual asset file larger than 25 MB\n- More than 1,000 total files in the bundle`,\n 50: 'Deployment failed. This is usually a temporary issue — please try again. If the problem persists, contact support.',\n 60: \"Your code was deployed, but we couldn't determine your deployment URL. Please try deploying again. If the issue persists, contact support.\",\n};\n\nexport function getDeploymentErrorMessage(code: number): string {\n return (\n ERROR_MESSAGES[code] ??\n `Deployment failed with an unexpected error (code: ${code}). Please try again. If the issue persists, contact support.`\n );\n}\n","import Conf from 'conf';\n\nimport { consola } from './logger';\nimport { ProjectConfigSchema } from './project-config';\n\nexport function resolveCredentials(\n options: { storeHash?: string; accessToken?: string },\n config: Conf<ProjectConfigSchema>,\n): { storeHash: string; accessToken: string } {\n const storeHash = options.storeHash ?? config.get('storeHash');\n const accessToken = options.accessToken ?? config.get('accessToken');\n\n if (!storeHash || !accessToken) {\n consola.error('Missing credentials.');\n consola.info(\n 'Run `catalyst auth login`, or provide --store-hash and --access-token flags (or set CATALYST_STORE_HASH and CATALYST_ACCESS_TOKEN environment variables).',\n );\n process.exit(1);\n\n // Unreachable in production; prevents continuation when process.exit is mocked in tests.\n throw new Error('Missing credentials');\n }\n\n return { storeHash, accessToken };\n}\n","import { Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\nimport { z } from 'zod';\n\nimport { consola } from '../lib/logger';\nimport {\n accessTokenOption,\n apiHostOption,\n projectUuidOption,\n resolveProjectUuid,\n storeHashOption,\n} from '../lib/shared-options';\nimport { Telemetry } from '../lib/telemetry';\n\ntype LogFormat = 'json' | 'pretty' | 'default' | 'short' | 'request';\n\nconst telemetry = new Telemetry();\n\nconst DEFAULT_CONNECTION_TTL_MS = 1 * 60 * 1000; // 1 minute\nconst MAX_RETRIES = 5;\n\nconst isFatalStatusCode = (status: number) => status >= 400 && status < 500;\n\nconst LEVEL_COLORS: Record<string, Parameters<typeof colorize>[0]> = {\n INFO: 'green',\n WARN: 'yellow',\n ERROR: 'red',\n DEBUG: 'gray',\n};\n\nconst LogEventSchema = z\n .object({\n uuid: z.string(),\n project_uuid: z.string(),\n request: z.object({\n method: z.string(),\n url: z.string(),\n status_code: z.number(),\n }),\n logs: z.array(\n z.object({\n timestamp: z.string(),\n level: z.string(),\n messages: z.array(z.unknown()),\n }),\n ),\n exceptions: z.array(z.unknown()),\n timestamp: z.string(),\n })\n .loose();\n\nclass StreamError extends Error {\n fatal: boolean;\n\n constructor(message: string, fatal: boolean) {\n super(message);\n this.fatal = fatal;\n }\n}\n\nconst formatMessages = (messages: unknown[]) =>\n messages.map((m) => (typeof m === 'string' ? m : JSON.stringify(m))).join(' ');\n\nconst formatLogEvent = (\n event: z.infer<typeof LogEventSchema>,\n format: 'default' | 'short' | 'request',\n) => {\n const { request, logs: logEntries, exceptions } = event;\n\n logEntries.forEach((entry) => {\n const msg = formatMessages(entry.messages);\n const level = entry.level.toUpperCase();\n const coloredLevel = colorize(LEVEL_COLORS[level] ?? 'white', level);\n\n switch (format) {\n case 'short':\n consola.log(msg);\n break;\n\n case 'request':\n consola.log(\n `[${entry.timestamp}] [${coloredLevel}] ${request.method} ${request.url}` +\n ` (${request.status_code}) ${msg}`,\n );\n break;\n\n default:\n consola.log(`[${entry.timestamp}] [${coloredLevel}] ${msg}`);\n break;\n }\n });\n\n exceptions.forEach((exception) => {\n consola.error(`[${event.timestamp}] EXCEPTION`, exception);\n });\n};\n\nexport const parseSSEEvent = (raw: string): string | null => {\n const joined = raw\n .split('\\n')\n .flatMap((line) => (line.startsWith('data:') ? [line.slice(5).trim()] : []))\n .join('\\n');\n\n return joined.length > 0 ? joined : null;\n};\n\nconst processLogEvent = (event: string, format: LogFormat) => {\n if (format === 'json') {\n process.stdout.write(`${event}\\n`);\n\n return;\n }\n\n try {\n const parsed: unknown = JSON.parse(event);\n const logEvent = LogEventSchema.parse(parsed);\n\n if (format === 'pretty') {\n consola.log(JSON.stringify(logEvent, null, 2));\n } else {\n formatLogEvent(logEvent, format);\n }\n } catch {\n consola.warn(`Failed to parse log event: ${event}`);\n }\n};\n\nconst openLogStream = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n) => {\n const response = await fetch(\n `https://${apiHost}/stores/${storeHash}/v3/infrastructure/logs/${projectUuid}/tail`,\n {\n method: 'GET',\n headers: {\n 'X-Auth-Token': accessToken,\n Accept: 'text/event-stream',\n Connection: 'keep-alive',\n },\n },\n );\n\n if (!response.ok) {\n throw new StreamError(\n `Failed to open log stream: ${response.status} ${response.statusText}`,\n isFatalStatusCode(response.status),\n );\n }\n\n const reader = response.body?.getReader();\n\n if (!reader) {\n throw new StreamError('Failed to read log stream.', true);\n }\n\n return reader;\n};\n\nexport const tailLogs = async (\n projectUuid: string,\n storeHash: string,\n accessToken: string,\n apiHost: string,\n format: LogFormat,\n connectionTtlMs = DEFAULT_CONNECTION_TTL_MS,\n) => {\n consola.info('Tailing logs...');\n\n let retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const reader = await openLogStream(projectUuid, storeHash, accessToken, apiHost);\n const decoder = new TextDecoder();\n const connectTime = Date.now();\n let buffer = '';\n\n retries = 0;\n\n // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { value, done: streamDone } = await reader.read();\n\n if (value) {\n buffer += decoder.decode(value, { stream: true });\n\n const parts = buffer.split('\\n\\n');\n\n // Last element is either empty (complete event) or a partial chunk to carry over\n buffer = parts.pop() ?? '';\n\n parts\n .map((raw) => parseSSEEvent(raw))\n .filter((event): event is string => event !== null)\n .forEach((event) => processLogEvent(event, format));\n }\n\n if (streamDone || Date.now() - connectTime >= connectionTtlMs) {\n void reader.cancel();\n break;\n }\n }\n } catch (error) {\n if (error instanceof StreamError && error.fatal) {\n throw error;\n }\n\n const isServerDisconnect = error instanceof TypeError && error.message === 'terminated';\n\n if (isServerDisconnect) {\n consola.warn('Log stream closed by server, reconnecting...');\n } else {\n retries += 1;\n\n if (retries >= MAX_RETRIES) {\n throw new Error(`Failed to connect to log stream after ${MAX_RETRIES} retries.`);\n }\n\n consola.warn(\n `Log stream disconnected, reconnecting (attempt ${retries}/${MAX_RETRIES})...`,\n error,\n );\n }\n }\n }\n};\n\nconst tail = new Command('tail')\n .description('Tail live logs from your deployed application.')\n .addOption(storeHashOption().makeOptionMandatory())\n .addOption(accessTokenOption().makeOptionMandatory())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n .addOption(\n new Option('--format <format>', 'Output format for log events.')\n .choices(['json', 'pretty', 'default', 'short', 'request'])\n .default('default'),\n )\n .action(async (options) => {\n try {\n await telemetry.identify(options.storeHash);\n\n const projectUuid = resolveProjectUuid(options);\n\n await tailLogs(\n projectUuid,\n options.storeHash,\n options.accessToken,\n options.apiHost,\n options.format,\n );\n } catch (error) {\n consola.error(error);\n process.exit(1);\n }\n });\n\nconst query = new Command('query')\n .description('Query historical logs from your deployed application.')\n .addOption(storeHashOption().makeOptionMandatory())\n .addOption(accessTokenOption().makeOptionMandatory())\n .addOption(apiHostOption())\n .addOption(projectUuidOption())\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .action((_options) => {\n consola.error('The query command is not yet implemented.');\n process.exit(1);\n });\n\nexport const logs = new Command('logs')\n .description('View logs from your deployed application.')\n .addCommand(tail, { isDefault: true })\n .addCommand(query);\n","import { Option } from 'commander';\n\nimport { getProjectConfig } from './project-config';\n\nexport const storeHashOption = () =>\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('BIGCOMMERCE_STORE_HASH');\n\nexport const accessTokenOption = () =>\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('BIGCOMMERCE_ACCESS_TOKEN');\n\nexport const apiHostOption = () =>\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com');\n\nexport const projectUuidOption = () =>\n new Option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects).',\n ).env('BIGCOMMERCE_PROJECT_UUID');\n\nexport const resolveProjectUuid = (options: { projectUuid?: string }) => {\n const config = getProjectConfig();\n const projectUuid = options.projectUuid ?? config.get('projectUuid');\n\n if (!projectUuid) {\n throw new Error(\n 'Project UUID is required. Please run either `catalyst project link` or `catalyst project create` or this command again with --project-uuid <uuid>.',\n );\n }\n\n return projectUuid;\n};\n","import { Command, Option } from 'commander';\n\nimport { consola } from '../lib/logger';\nimport { createProject, fetchProjects } from '../lib/project';\nimport { getProjectConfig } from '../lib/project-config';\nimport { resolveCredentials } from '../lib/resolve-credentials';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst list = new Command('list')\n .description('List BigCommerce infrastructure projects for your store.')\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n if (projects.length === 0) {\n consola.info('No projects found.');\n process.exit(0);\n\n return;\n }\n\n projects.forEach((p) => {\n consola.log(`${p.name} (${p.uuid})`);\n });\n\n process.exit(0);\n });\n\nconst create = new Command('create')\n .description(\n 'Create a new BigCommerce infrastructure project and link it to your local Catalyst project.',\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .action(async (options) => {\n const config = getProjectConfig();\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', data.uuid);\n config.set('storeHash', storeHash);\n config.set('accessToken', accessToken);\n consola.success('Project UUID written to .bigcommerce/project.json.');\n\n process.exit(0);\n });\n\nexport const link = new Command('link')\n .description(\n 'Link your local Catalyst project to a BigCommerce infrastructure project. You can provide a project UUID directly, or fetch and select from available projects using your store credentials.',\n )\n .addOption(\n new Option(\n '--store-hash <hash>',\n 'BigCommerce store hash. Can be found in the URL of your store Control Panel.',\n ).env('CATALYST_STORE_HASH'),\n )\n .addOption(\n new Option(\n '--access-token <token>',\n 'BigCommerce access token. Can be found after creating a store-level API account.',\n ).env('CATALYST_ACCESS_TOKEN'),\n )\n .addOption(\n new Option('--api-host <host>', 'BigCommerce API host. The default is api.bigcommerce.com.')\n .env('BIGCOMMERCE_API_HOST')\n .default('api.bigcommerce.com'),\n )\n .option(\n '--project-uuid <uuid>',\n 'BigCommerce infrastructure project UUID. Can be found via the BigCommerce API (GET /v3/infrastructure/projects). Use this to link directly without fetching projects.',\n )\n .action(async (options) => {\n const config = getProjectConfig();\n\n const writeProjectConfig = (\n uuid: string,\n credentials?: { storeHash: string; accessToken: string },\n ) => {\n consola.start('Writing project UUID to .bigcommerce/project.json...');\n config.set('projectUuid', uuid);\n\n if (credentials) {\n config.set('storeHash', credentials.storeHash);\n config.set('accessToken', credentials.accessToken);\n }\n\n consola.success('Project UUID written to .bigcommerce/project.json.');\n };\n\n if (options.projectUuid) {\n writeProjectConfig(options.projectUuid);\n\n process.exit(0);\n\n return;\n }\n\n const { storeHash, accessToken } = resolveCredentials(options, config);\n\n await getTelemetry().identify(storeHash);\n\n consola.start('Fetching projects...');\n\n const projects = await fetchProjects(storeHash, accessToken, options.apiHost);\n\n consola.success('Projects fetched.');\n\n const promptOptions = [\n ...projects.map((proj) => ({\n label: proj.name,\n value: proj.uuid,\n hint: proj.uuid,\n })),\n {\n label: 'Create a new project',\n value: 'create',\n hint: 'Create a new infrastructure project for this BigCommerce store.',\n },\n ];\n\n let projectUuid = await consola.prompt(\n 'Select a project or create a new project (Press <enter> to select).',\n {\n type: 'select',\n options: promptOptions,\n cancel: 'reject',\n },\n );\n\n if (projectUuid === 'create') {\n const newProjectName = await consola.prompt('Enter a name for the new project:', {\n type: 'text',\n });\n\n const data = await createProject(newProjectName, storeHash, accessToken, options.apiHost);\n\n projectUuid = data.uuid;\n\n consola.success(`Project \"${data.name}\" created successfully.`);\n }\n\n writeProjectConfig(projectUuid, { storeHash, accessToken });\n\n process.exit(0);\n });\n\nexport const project = new Command('project')\n .description('Manage your BigCommerce infrastructure project.')\n .addCommand(create)\n .addCommand(list)\n .addCommand(link);\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { existsSync, lstatSync, symlinkSync } from 'node:fs';\nimport { join, relative } from 'node:path';\n\nimport { consola } from '../lib/logger';\n\nexport const start = new Command('start')\n .description(\n 'Start a local preview of your Catalyst storefront using the OpenNext Cloudflare adapter.',\n )\n .action(async () => {\n const envLocal = join(process.cwd(), '.env.local');\n const devVars = join(process.cwd(), '.bigcommerce', '.dev.vars');\n\n if (existsSync(envLocal)) {\n if (!existsSync(devVars)) {\n const target = relative(join(process.cwd(), '.bigcommerce'), envLocal);\n\n symlinkSync(target, devVars);\n consola.success('Symlinked .bigcommerce/.dev.vars → .env.local');\n } else if (!lstatSync(devVars).isSymbolicLink()) {\n consola.warn(\n '.bigcommerce/.dev.vars already exists and is not a symlink. ' +\n 'Wrangler will use it instead of .env.local.',\n );\n }\n } else {\n consola.warn(\n 'No .env.local file found. The preview server may fail without environment variables.\\n' +\n 'Create a .env.local file in your project root with the required variables.',\n );\n }\n\n await execa(\n 'pnpm',\n [\n 'exec',\n 'opennextjs-cloudflare',\n 'preview',\n '--config',\n join('.bigcommerce', 'wrangler.jsonc'),\n ],\n {\n stdio: 'inherit',\n cwd: process.cwd(),\n },\n );\n });\n","import { Argument, Command, Option } from 'commander';\nimport { colorize } from 'consola/utils';\n\nimport { consola } from '../lib/logger';\nimport { getTelemetry } from '../lib/telemetry';\n\nconst telemetryService = getTelemetry();\nlet isEnabled = telemetryService.isEnabled();\n\nexport const telemetry = new Command('telemetry')\n .addArgument(new Argument('[arg]').choices(['disable', 'enable', 'status']))\n .addOption(new Option('--enable', `Enables CLI telemetry collection.`).conflicts('disable'))\n .option('--disable', `Disables CLI telemetry collection.`)\n .action((arg, options) => {\n if (options.enable || arg === 'enable') {\n telemetryService.setEnabled(true);\n isEnabled = true;\n\n consola.success('Success!\\n');\n } else if (options.disable || arg === 'disable') {\n telemetryService.setEnabled(false);\n\n if (isEnabled) {\n consola.success('Your preference has been saved to .bigcommerce/project.json');\n } else {\n consola.info(`Catalyst CLI telemetry collection is already disabled.`);\n }\n\n isEnabled = false;\n } else {\n consola.info('Catalyst CLI Telemetry\\n');\n }\n\n consola.info(\n `Status: ${colorize('bold', isEnabled ? colorize('green', 'Enabled') : colorize('red', 'Disabled'))}`,\n );\n\n if (!isEnabled) {\n consola.info(\n `You have opted-out of Catalyst CLI telemetry. No data will be collected from your machine.`,\n );\n }\n });\n","import { Command } from 'commander';\n\nimport PACKAGE_INFO from '../../../package.json';\nimport { consola } from '../lib/logger';\n\nexport const version = new Command('version')\n .description('Display detailed version information.')\n .action(() => {\n consola.log('Version Information:');\n consola.log(`CLI Version: ${PACKAGE_INFO.version}`);\n consola.log(`Node Version: ${process.version}`);\n consola.log(`Platform: ${process.platform} (${process.arch})`);\n });\n","import { Command, type CommandUnknownOpts } from '@commander-js/extra-typings';\n\nimport { getTelemetry } from '../lib/telemetry';\n\nconst allowlistArguments = ['--keep-temp-dir', '--api-host', '--project-uuid'];\n\nfunction parseArguments(args: string[]) {\n return args.reduce<Record<string, string>>((result, arg, index, array) => {\n if (arg.includes('=')) {\n const [key, value] = arg.split('=');\n\n if (allowlistArguments.includes(key)) {\n return {\n ...result,\n [key]: value,\n };\n }\n }\n\n if (allowlistArguments.includes(arg)) {\n const nextValue =\n array[index + 1] && !array[index + 1].startsWith('--') ? array[index + 1] : null;\n\n if (nextValue && !nextValue.includes('--')) {\n return {\n ...result,\n [arg]: nextValue,\n };\n }\n }\n\n return result;\n }, {});\n}\n\nfunction getCommandPath(cmd: CommandUnknownOpts): string {\n const parts: string[] = [];\n let current: CommandUnknownOpts | null = cmd;\n\n while (current.parent) {\n parts.unshift(current.name());\n current = current.parent;\n }\n\n return parts.join(' ');\n}\n\nexport const telemetryPreHook = async (thisCommand: Command, actionCommand: CommandUnknownOpts) => {\n const telemetry = getTelemetry();\n const commandName = getCommandPath(actionCommand);\n\n telemetry.commandName = commandName;\n\n // Return the await to get a proper stack trace.\n // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression\n return await telemetry.track(commandName, {\n ...parseArguments(thisCommand.args),\n });\n};\n\nexport const telemetryPostHook = async () => {\n const telemetry = getTelemetry();\n\n await telemetry.track('command_completed', { durationMs: telemetry.durationMs() });\n await telemetry.analytics.closeAndFlush();\n};\n","#!/usr/bin/env node\nimport { consola } from './lib/logger';\nimport { getTelemetry } from './lib/telemetry';\nimport { program } from './program';\n\nconst handleFatalError = async (error: unknown) => {\n const telemetry = getTelemetry();\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorStack = error instanceof Error ? error.stack : undefined;\n\n try {\n await telemetry.track('error', {\n commandName: telemetry.commandName,\n errorMessage,\n errorStack,\n durationMs: telemetry.durationMs(),\n });\n await telemetry.analytics.closeAndFlush();\n } catch {\n // Don't mask the original error\n }\n\n consola.error(errorMessage);\n\n if (telemetry.isEnabled()) {\n consola.info(\n `Correlation ID: ${telemetry.correlationId}\\nShare this Correlation ID with BigCommerce support.`,\n );\n } else {\n consola.info(\n 'Enable telemetry (`catalyst telemetry enable`) for improved troubleshooting with BigCommerce support.',\n );\n }\n\n process.exit(1);\n};\n\nprocess.on('uncaughtException', (error) => {\n void handleFatalError(error);\n});\n\nprocess.on('unhandledRejection', (reason) => {\n void handleFatalError(reason);\n});\n\nvoid (async () => {\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n await handleFatalError(error);\n }\n})();\n"],"mappings":"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","names":["Option","Command","colorize","z","resolve","z","z","z","config","Command","Option","join","join","join","Command","Option","config","Command","Option","colorize","join","yoctoSpinner","z","config","z","join","yoctoSpinner","colorize","Command","Option","config","telemetry","join","Command","Option","colorize","z","Option","Option","config","z","colorize","Command","Option","Command","Option","Command","Option","config","Command","execa","join","Command","join","execa","Command","Option","colorize","telemetry","Command","Option","colorize","Command","Command","telemetry","Command","colorize","Option","telemetry","telemetry"]}
|