@shopify/oxygen-cli 4.4.29-unstable.202409161454.0 → 4.4.30-unstable.202409191209.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/commands/oxygen/deploy.js +1 -1
  3. package/dist/commands/oxygen/deploy.js.map +1 -1
  4. package/dist/deploy/build-cancel.js +1 -1
  5. package/dist/deploy/build-cancel.js.map +1 -1
  6. package/dist/deploy/build-initiate.js +1 -1
  7. package/dist/deploy/build-initiate.js.map +1 -1
  8. package/dist/deploy/build-project.js +1 -1
  9. package/dist/deploy/build-project.js.map +1 -1
  10. package/dist/deploy/deployment-cancel.js +1 -1
  11. package/dist/deploy/deployment-cancel.js.map +1 -1
  12. package/dist/deploy/deployment-complete.js +1 -1
  13. package/dist/deploy/deployment-complete.js.map +1 -1
  14. package/dist/deploy/deployment-initiate.js +1 -1
  15. package/dist/deploy/deployment-initiate.js.map +1 -1
  16. package/dist/deploy/get-upload-files.js +1 -1
  17. package/dist/deploy/get-upload-files.js.map +1 -1
  18. package/dist/deploy/graphql/build-cancel.js +1 -1
  19. package/dist/deploy/graphql/build-cancel.js.map +1 -1
  20. package/dist/deploy/graphql/build-initiate.js +1 -1
  21. package/dist/deploy/graphql/build-initiate.js.map +1 -1
  22. package/dist/deploy/graphql/deployment-cancel.js +1 -1
  23. package/dist/deploy/graphql/deployment-cancel.js.map +1 -1
  24. package/dist/deploy/graphql/deployment-complete.js +1 -1
  25. package/dist/deploy/graphql/deployment-complete.js.map +1 -1
  26. package/dist/deploy/graphql/deployment-initiate.js +1 -1
  27. package/dist/deploy/graphql/deployment-initiate.js.map +1 -1
  28. package/dist/deploy/graphql/deployment-verification-details.js +1 -1
  29. package/dist/deploy/graphql/deployment-verification-details.js.map +1 -1
  30. package/dist/deploy/index.js +1 -1
  31. package/dist/deploy/index.js.map +1 -1
  32. package/dist/deploy/metadata.js +1 -1
  33. package/dist/deploy/metadata.js.map +1 -1
  34. package/dist/deploy/types.js +1 -1
  35. package/dist/deploy/types.js.map +1 -1
  36. package/dist/deploy/upload-files.js +1 -1
  37. package/dist/deploy/upload-files.js.map +1 -1
  38. package/dist/deploy/verify-deployment-completed.js +1 -1
  39. package/dist/deploy/verify-deployment-completed.js.map +1 -1
  40. package/dist/deploy/verify-deployment.js +1 -1
  41. package/dist/deploy/verify-deployment.js.map +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/oxygen-cli.js +1 -1
  45. package/dist/oxygen-cli.js.map +1 -1
  46. package/dist/utils/bugsnag.js +1 -1
  47. package/dist/utils/bugsnag.js.map +1 -1
  48. package/dist/utils/metrics-exporter.js +1 -1
  49. package/dist/utils/metrics-exporter.js.map +1 -1
  50. package/dist/utils/test-helper.js +1 -1
  51. package/dist/utils/test-helper.js.map +1 -1
  52. package/dist/utils/utils.js +1 -1
  53. package/dist/utils/utils.js.map +1 -1
  54. package/oclif.manifest.json +1 -1
  55. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @shopify/oxygen-cli
2
2
 
3
+ ## 4.4.29
4
+
5
+ ### Patch Changes
6
+
7
+ - a7a78d3: Update vite from 5.4.5 to 5.4.6
8
+ - 9251021: Update eslint from 8.57.0 to 8.57.1
9
+ - fc77a1b: Update tsup from 8.1.0 to 8.3.0
10
+
3
11
  ## 4.4.28
4
12
 
5
13
  ### Patch Changes
@@ -193,5 +193,5 @@ class Deploy extends Command {
193
193
  }
194
194
 
195
195
  export { Deploy };
196
- //# sourceMappingURL=out.js.map
196
+ //# sourceMappingURL=deploy.js.map
197
197
  //# sourceMappingURL=deploy.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/oxygen/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import {Command, Flags} from '@oclif/core';\nimport {consoleError} from '@shopify/cli-kit/node/output';\nimport {normalizePath} from '@shopify/cli-kit/node/path';\nimport {readAndParseDotEnv} from '@shopify/cli-kit/node/dot-env';\n\nimport {getBugsnag, initializeBugsnag} from '../../utils/bugsnag.js';\nimport {createDeploy} from '../../deploy/index.js';\nimport {\n deployDefaults,\n getBuildCommandFromLockFile,\n parseToken,\n verifyConfig,\n} from '../../utils/utils.js';\nimport type {\n DeploymentConfig,\n EnvironmentVariable,\n} from '../../deploy/types.js';\nimport {VerificationError} from '../../deploy/types.js';\n\nexport class Deploy extends Command {\n static description = 'Creates a deployment to Oxygen';\n static hidden = false;\n static flags = {\n assetsFolder: Flags.string({\n char: 'a',\n description: 'Assets folder',\n default: String(deployDefaults.assetsDirDefault),\n required: false,\n }),\n buildCommand: Flags.string({\n char: 'b',\n description: 'Build command',\n required: false,\n default: String(deployDefaults.buildCommandDefault!),\n parse: (input): Promise<string> => {\n this.hasCustomBuildCommand = true;\n return Promise.resolve(input);\n },\n }),\n disableBugsnag: Flags.boolean({\n description: 'Disable Bugsnag error reporting',\n required: false,\n default: false,\n }),\n environmentTag: Flags.string({\n char: 'e',\n description: 'Tag of the environment to deploy to',\n required: false,\n }),\n verificationMaxDuration: Flags.integer({\n char: 'd',\n description:\n 'the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.',\n min: 10,\n max: 300,\n required: false,\n default: deployDefaults.verificationMaxDurationDefault as number,\n }),\n path: Flags.string({\n char: 'p',\n description: 'Root path',\n default: './',\n required: false,\n }),\n defaultEnvironment: Flags.boolean({\n env: 'OXYGEN_DEFAULT_ENVIRONMENT',\n description: 'Deploys to the default environment of the app',\n required: false,\n default: false,\n }),\n skipBuild: Flags.boolean({\n char: 's',\n description: 'Skip running build command',\n required: false,\n default: false,\n }),\n skipVerification: Flags.boolean({\n char: 'v',\n description: 'Skip running deployment verification step',\n required: false,\n default: false,\n }),\n token: Flags.string({\n char: 't',\n description: 'Oxygen deployment token',\n env: 'OXYGEN_DEPLOYMENT_TOKEN',\n required: true,\n }),\n workerFolder: Flags.string({\n char: 'w',\n description: 'Worker folder',\n default: String(deployDefaults.workerDirDefault),\n required: false,\n }),\n workerOnly: Flags.boolean({\n char: 'o',\n description: 'Worker only deployment',\n default: false,\n required: false,\n }),\n metadataDescription: Flags.string({\n description:\n 'Description of the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_DESCRIPTION',\n }),\n metadataUrl: Flags.string({\n description:\n 'URL that links to the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_URL',\n }),\n metadataUser: Flags.string({\n description:\n 'User that initiated the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_USER',\n }),\n metadataVersion: Flags.string({\n description:\n 'A version identifier for the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_VERSION',\n }),\n generateAuthBypassToken: Flags.boolean({\n description:\n 'Generate an auth bypass token used to perform end-to-end testing against the deployment.',\n required: false,\n default: false,\n }),\n authBypassTokenDuration: Flags.string({\n description:\n 'Specify the duration (in hours) up to 12 hours for the authentication bypass token. Defaults to `2`.',\n required: false,\n dependsOn: ['generateAuthBypassToken'],\n }),\n environmentFile: Flags.string({\n description:\n 'Path to an environment file to override existing environment variables for the deployment.',\n required: false,\n }),\n };\n\n static hasCustomBuildCommand = false;\n\n async run() {\n try {\n const {flags} = await this.parse(Deploy);\n const rootPath = normalizePath(flags.path);\n\n let overriddenEnvironmentVariables: EnvironmentVariable[] | undefined;\n\n if (flags.environmentFile) {\n const file = await readAndParseDotEnv(flags.environmentFile);\n\n overriddenEnvironmentVariables = Object.entries(file.variables).map(\n ([key, value]) => ({\n isSecret: true,\n key,\n value,\n }),\n );\n }\n\n initializeBugsnag(flags.disableBugsnag);\n const Bugsnag = getBugsnag();\n\n const deploymentUrl =\n // eslint-disable-next-line no-process-env\n process.env.UNSAFE_OXYGEN_DEPLOYMENT_URL ||\n 'https://oxygen.shopifyapps.com';\n Bugsnag?.addMetadata('flags', {\n flags: {...flags, token: '***'},\n deploymentUrl,\n });\n\n const config: DeploymentConfig = {\n assetsDir: normalizePath(flags.assetsFolder),\n bugsnag: !flags.disableBugsnag,\n buildCommand: flags.buildCommand!,\n deploymentToken: parseToken(flags.token!),\n environmentTag: flags.environmentTag,\n deploymentUrl,\n verificationMaxDuration: flags.verificationMaxDuration,\n metadata: {\n description: flags.metadataDescription,\n url: flags.metadataUrl,\n user: flags.metadataUser,\n version: flags.metadataVersion,\n },\n defaultEnvironment: flags.defaultEnvironment,\n rootPath,\n skipBuild: flags.skipBuild,\n skipVerification: flags.skipVerification,\n workerDir: normalizePath(flags.workerFolder),\n workerOnly: flags.workerOnly,\n generateAuthBypassToken: flags.generateAuthBypassToken,\n authBypassTokenDuration: flags.authBypassTokenDuration,\n overriddenEnvironmentVariables,\n };\n\n await verifyConfig({config});\n if (!Deploy.hasCustomBuildCommand && !config.skipBuild) {\n config.buildCommand = getBuildCommandFromLockFile(config);\n }\n await createDeploy({config});\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n\n if (!(error instanceof Error)) {\n consoleError(error as string);\n } else if (!(error instanceof VerificationError)) {\n consoleError(error.message);\n }\n\n this.exit(1);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/commands/oxygen/deploy.ts"],"names":[],"mappings":"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","file":"deploy.js","sourcesContent":["import {Command, Flags} from '@oclif/core';\nimport {consoleError} from '@shopify/cli-kit/node/output';\nimport {normalizePath} from '@shopify/cli-kit/node/path';\nimport {readAndParseDotEnv} from '@shopify/cli-kit/node/dot-env';\n\nimport {getBugsnag, initializeBugsnag} from '../../utils/bugsnag.js';\nimport {createDeploy} from '../../deploy/index.js';\nimport {\n deployDefaults,\n getBuildCommandFromLockFile,\n parseToken,\n verifyConfig,\n} from '../../utils/utils.js';\nimport type {\n DeploymentConfig,\n EnvironmentVariable,\n} from '../../deploy/types.js';\nimport {VerificationError} from '../../deploy/types.js';\n\nexport class Deploy extends Command {\n static description = 'Creates a deployment to Oxygen';\n static hidden = false;\n static flags = {\n assetsFolder: Flags.string({\n char: 'a',\n description: 'Assets folder',\n default: String(deployDefaults.assetsDirDefault),\n required: false,\n }),\n buildCommand: Flags.string({\n char: 'b',\n description: 'Build command',\n required: false,\n default: String(deployDefaults.buildCommandDefault!),\n parse: (input): Promise<string> => {\n this.hasCustomBuildCommand = true;\n return Promise.resolve(input);\n },\n }),\n disableBugsnag: Flags.boolean({\n description: 'Disable Bugsnag error reporting',\n required: false,\n default: false,\n }),\n environmentTag: Flags.string({\n char: 'e',\n description: 'Tag of the environment to deploy to',\n required: false,\n }),\n verificationMaxDuration: Flags.integer({\n char: 'd',\n description:\n 'the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.',\n min: 10,\n max: 300,\n required: false,\n default: deployDefaults.verificationMaxDurationDefault as number,\n }),\n path: Flags.string({\n char: 'p',\n description: 'Root path',\n default: './',\n required: false,\n }),\n defaultEnvironment: Flags.boolean({\n env: 'OXYGEN_DEFAULT_ENVIRONMENT',\n description: 'Deploys to the default environment of the app',\n required: false,\n default: false,\n }),\n skipBuild: Flags.boolean({\n char: 's',\n description: 'Skip running build command',\n required: false,\n default: false,\n }),\n skipVerification: Flags.boolean({\n char: 'v',\n description: 'Skip running deployment verification step',\n required: false,\n default: false,\n }),\n token: Flags.string({\n char: 't',\n description: 'Oxygen deployment token',\n env: 'OXYGEN_DEPLOYMENT_TOKEN',\n required: true,\n }),\n workerFolder: Flags.string({\n char: 'w',\n description: 'Worker folder',\n default: String(deployDefaults.workerDirDefault),\n required: false,\n }),\n workerOnly: Flags.boolean({\n char: 'o',\n description: 'Worker only deployment',\n default: false,\n required: false,\n }),\n metadataDescription: Flags.string({\n description:\n 'Description of the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_DESCRIPTION',\n }),\n metadataUrl: Flags.string({\n description:\n 'URL that links to the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_URL',\n }),\n metadataUser: Flags.string({\n description:\n 'User that initiated the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_USER',\n }),\n metadataVersion: Flags.string({\n description:\n 'A version identifier for the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_VERSION',\n }),\n generateAuthBypassToken: Flags.boolean({\n description:\n 'Generate an auth bypass token used to perform end-to-end testing against the deployment.',\n required: false,\n default: false,\n }),\n authBypassTokenDuration: Flags.string({\n description:\n 'Specify the duration (in hours) up to 12 hours for the authentication bypass token. Defaults to `2`.',\n required: false,\n dependsOn: ['generateAuthBypassToken'],\n }),\n environmentFile: Flags.string({\n description:\n 'Path to an environment file to override existing environment variables for the deployment.',\n required: false,\n }),\n };\n\n static hasCustomBuildCommand = false;\n\n async run() {\n try {\n const {flags} = await this.parse(Deploy);\n const rootPath = normalizePath(flags.path);\n\n let overriddenEnvironmentVariables: EnvironmentVariable[] | undefined;\n\n if (flags.environmentFile) {\n const file = await readAndParseDotEnv(flags.environmentFile);\n\n overriddenEnvironmentVariables = Object.entries(file.variables).map(\n ([key, value]) => ({\n isSecret: true,\n key,\n value,\n }),\n );\n }\n\n initializeBugsnag(flags.disableBugsnag);\n const Bugsnag = getBugsnag();\n\n const deploymentUrl =\n // eslint-disable-next-line no-process-env\n process.env.UNSAFE_OXYGEN_DEPLOYMENT_URL ||\n 'https://oxygen.shopifyapps.com';\n Bugsnag?.addMetadata('flags', {\n flags: {...flags, token: '***'},\n deploymentUrl,\n });\n\n const config: DeploymentConfig = {\n assetsDir: normalizePath(flags.assetsFolder),\n bugsnag: !flags.disableBugsnag,\n buildCommand: flags.buildCommand!,\n deploymentToken: parseToken(flags.token!),\n environmentTag: flags.environmentTag,\n deploymentUrl,\n verificationMaxDuration: flags.verificationMaxDuration,\n metadata: {\n description: flags.metadataDescription,\n url: flags.metadataUrl,\n user: flags.metadataUser,\n version: flags.metadataVersion,\n },\n defaultEnvironment: flags.defaultEnvironment,\n rootPath,\n skipBuild: flags.skipBuild,\n skipVerification: flags.skipVerification,\n workerDir: normalizePath(flags.workerFolder),\n workerOnly: flags.workerOnly,\n generateAuthBypassToken: flags.generateAuthBypassToken,\n authBypassTokenDuration: flags.authBypassTokenDuration,\n overriddenEnvironmentVariables,\n };\n\n await verifyConfig({config});\n if (!Deploy.hasCustomBuildCommand && !config.skipBuild) {\n config.buildCommand = getBuildCommandFromLockFile(config);\n }\n await createDeploy({config});\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n\n if (!(error instanceof Error)) {\n consoleError(error as string);\n } else if (!(error instanceof VerificationError)) {\n consoleError(error.message);\n }\n\n this.exit(1);\n }\n }\n}\n"]}
@@ -35,5 +35,5 @@ async function buildCancel(options) {
35
35
  }
36
36
 
37
37
  export { buildCancel };
38
- //# sourceMappingURL=out.js.map
38
+ //# sourceMappingURL=build-cancel.js.map
39
39
  //# sourceMappingURL=build-cancel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/build-cancel.ts"],"names":[],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAAiB;AACzB,SAAgB,kBAAiB;AAEjC,SAAQ,cAAc,cAAa;AAGnC;AAAA,EACE;AAAA,OAGK;AASP,eAAsB,YACpB,SAC8B;AAC9B,QAAM,EAAC,QAAQ,SAAS,QAAQ,OAAM,IAAI;AAE1C,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AACF,UAAM,WAAiC,MAAM,eAAe;AAAA,MAC1D,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK,GAAG,OAAO,aAAa;AAAA,MAC5B,OAAO,OAAO,gBAAgB;AAAA,MAC9B,cAAc;AAAA,QACZ,CAAC,OAAO,qBAAqB,GAAG,OAAO,gBAAgB;AAAA,MACzD;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,SAAS,YAAY,WAAW,UAAU,GAAG;AAC/C,YAAM,IAAI;AAAA,QACR,2BAA2B,SAAS,YAAY,WAAW,CAAC,GAAG,OAAO;AAAA,MACxE;AAAA,IACF;AACA,eAAW,iBAAiB,OAAO,eAAe,MAAM;AAExD,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AACd,iBAAa,KAAK;AAElB,UAAM;AAAA,EACR;AACF","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport type {DeploymentConfig} from './types.js';\nimport {\n BuildCancelQuery,\n BuildCancelQueryData,\n BuildCancelResponse,\n} from './graphql/build-cancel.js';\n\ninterface BuildCancelOptions {\n config: DeploymentConfig;\n buildId: string;\n reason: string;\n logger: Logger;\n}\n\nexport async function buildCancel(\n options: BuildCancelOptions,\n): Promise<BuildCancelResponse> {\n const {config, buildId, reason, logger} = options;\n\n const variables = {\n buildId,\n reason,\n };\n\n try {\n const response: BuildCancelQueryData = await graphqlRequest({\n query: BuildCancelQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n variables,\n });\n\n if (response.buildCancel.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to cancel build: ${response.buildCancel.userErrors[0]?.message}`,\n );\n }\n outputInfo(`Build with id ${buildId} cancelled.`, logger);\n\n return response.buildCancel;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/build-cancel.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,YACpB,OAC8B,EAAA;AAC9B,EAAA,MAAM,EAAC,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,QAAU,GAAA,OAAA,CAAA;AAE1C,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,OAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAiC,MAAM,cAAe,CAAA;AAAA,MAC1D,KAAO,EAAA,gBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA,SAAA;AAAA,OACzD;AAAA,MACA,SAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,WAAA,CAAY,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AAC/C,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,2BAA2B,QAAS,CAAA,WAAA,CAAY,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA,CAAA;AAAA,OACxE,CAAA;AAAA,KACF;AACA,IAAW,UAAA,CAAA,CAAA,cAAA,EAAiB,OAAO,CAAA,WAAA,CAAA,EAAe,MAAM,CAAA,CAAA;AAExD,IAAA,OAAO,QAAS,CAAA,WAAA,CAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF","file":"build-cancel.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport type {DeploymentConfig} from './types.js';\nimport {\n BuildCancelQuery,\n BuildCancelQueryData,\n BuildCancelResponse,\n} from './graphql/build-cancel.js';\n\ninterface BuildCancelOptions {\n config: DeploymentConfig;\n buildId: string;\n reason: string;\n logger: Logger;\n}\n\nexport async function buildCancel(\n options: BuildCancelOptions,\n): Promise<BuildCancelResponse> {\n const {config, buildId, reason, logger} = options;\n\n const variables = {\n buildId,\n reason,\n };\n\n try {\n const response: BuildCancelQueryData = await graphqlRequest({\n query: BuildCancelQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n variables,\n });\n\n if (response.buildCancel.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to cancel build: ${response.buildCancel.userErrors[0]?.message}`,\n );\n }\n outputInfo(`Build with id ${buildId} cancelled.`, logger);\n\n return response.buildCancel;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
@@ -38,5 +38,5 @@ async function buildInitiate(options) {
38
38
  }
39
39
 
40
40
  export { buildInitiate };
41
- //# sourceMappingURL=out.js.map
41
+ //# sourceMappingURL=build-initiate.js.map
42
42
  //# sourceMappingURL=build-initiate.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/build-initiate.ts"],"names":[],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAAiB;AACzB,SAAgB,uBAAsB;AAEtC,SAAQ,cAAc,cAAa;AAGnC;AAAA,EACE;AAAA,OAGK;AASP,eAAsB,cACpB,SACgC;AAChC,QAAM,EAAC,QAAQ,QAAQ,aAAa,SAAS,CAAC,EAAC,IAAI;AAEnD,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AACF,UAAM,WAAmC,MAAM,eAAe;AAAA,MAC5D,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK,GAAG,OAAO,aAAa;AAAA,MAC5B,OAAO,OAAO,gBAAgB;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,QACZ,CAAC,OAAO,qBAAqB,GAAG,OAAO,gBAAgB;AAAA,MACzD;AAAA,IACF,CAAC;AAED,QAAI,SAAS,cAAc,WAAW,UAAU,GAAG;AACjD,YAAM,IAAI;AAAA,QACR,2BAA2B,SAAS,cAAc,WAAW,CAAC,GAAG,OAAO;AAAA,MAC1E;AAAA,IACF;AACA;AAAA,MACE,wCAAwC,SAAS,cAAc,MAAM,EAAE;AAAA,MACvE;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AACd,iBAAa,KAAK;AAElB,UAAM;AAAA,EACR;AACF","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputCompleted} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport {EnvironmentInput, DeploymentConfig} from './types.js';\nimport {\n BuildInitiateQuery,\n BuildInitiateQueryData,\n BuildInitiateResponse,\n} from './graphql/build-initiate.js';\n\ninterface BuildInitiateOptions {\n config: DeploymentConfig;\n logger: Logger;\n environment?: EnvironmentInput;\n labels?: string[];\n}\n\nexport async function buildInitiate(\n options: BuildInitiateOptions,\n): Promise<BuildInitiateResponse> {\n const {config, logger, environment, labels = []} = options;\n\n const variables = {\n environment,\n labels,\n };\n\n try {\n const response: BuildInitiateQueryData = await graphqlRequest({\n query: BuildInitiateQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.buildInitiate.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to create build. ${response.buildInitiate.userErrors[0]?.message}`,\n );\n }\n outputCompleted(\n `Build initiated successfully with id ${response.buildInitiate.build.id}.`,\n logger,\n );\n\n return response.buildInitiate;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/build-initiate.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,cACpB,OACgC,EAAA;AAChC,EAAA,MAAM,EAAC,MAAQ,EAAA,MAAA,EAAQ,aAAa,MAAS,GAAA,IAAM,GAAA,OAAA,CAAA;AAEnD,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,WAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAmC,MAAM,cAAe,CAAA;AAAA,MAC5D,KAAO,EAAA,kBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA,SAAA;AAAA,OACzD;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,aAAA,CAAc,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACjD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,2BAA2B,QAAS,CAAA,aAAA,CAAc,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA,CAAA;AAAA,OAC1E,CAAA;AAAA,KACF;AACA,IAAA,eAAA;AAAA,MACE,CAAwC,qCAAA,EAAA,QAAA,CAAS,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA,CAAA;AAAA,MACvE,MAAA;AAAA,KACF,CAAA;AAEA,IAAA,OAAO,QAAS,CAAA,aAAA,CAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF","file":"build-initiate.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputCompleted} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport {EnvironmentInput, DeploymentConfig} from './types.js';\nimport {\n BuildInitiateQuery,\n BuildInitiateQueryData,\n BuildInitiateResponse,\n} from './graphql/build-initiate.js';\n\ninterface BuildInitiateOptions {\n config: DeploymentConfig;\n logger: Logger;\n environment?: EnvironmentInput;\n labels?: string[];\n}\n\nexport async function buildInitiate(\n options: BuildInitiateOptions,\n): Promise<BuildInitiateResponse> {\n const {config, logger, environment, labels = []} = options;\n\n const variables = {\n environment,\n labels,\n };\n\n try {\n const response: BuildInitiateQueryData = await graphqlRequest({\n query: BuildInitiateQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.buildInitiate.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to create build. ${response.buildInitiate.userErrors[0]?.message}`,\n );\n }\n outputCompleted(\n `Build initiated successfully with id ${response.buildInitiate.build.id}.`,\n logger,\n );\n\n return response.buildInitiate;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
@@ -64,5 +64,5 @@ async function buildProject(options) {
64
64
  }
65
65
 
66
66
  export { buildProject };
67
- //# sourceMappingURL=out.js.map
67
+ //# sourceMappingURL=build-project.js.map
68
68
  //# sourceMappingURL=build-project.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/build-project.ts"],"names":[],"mappings":"AAAA,SAAQ,aAAY;AACpB,SAAQ,mBAA4B;AAEpC,SAAQ,kBAAiB;AACzB,SAAyB,kBAAiB;AAW1C,eAAsB,aAAa,SAA8B;AAC/D,QAAM,EAAC,QAAQ,WAAW,MAAK,IAAI;AACnC,QAAM,UAAU,WAAW;AAE3B,MAAI,OAAO,eAAe;AACxB,UAAM,YAAY,YAAY,IAAI;AAClC,WAAO,MACJ,cAAc,SAAS,EACvB,KAAK,MAAM;AACV,cAAQ,iBAAiB;AAAA,QACvB,WAAW;AAAA,QACX,YAAY,IAAI,IAAI;AAAA,MACtB;AAAA,IACF,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,YAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,IAC9D,CAAC;AAAA,EACL;AAEA,QAAM,uBAAuB,YACzB,EAAC,yBAAyB,UAAS,IACnC,CAAC;AACL,MAAI;AACF,UAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,UAAI,SAAS;AACb,YAAM,eAAe,IAAI,YAAY;AAErC,mBAAa,GAAG,QAAQ,CAAC,UAAU;AACjC,kBAAU;AACV,gBAAQ,OAAO,MAAM,KAAK;AAAA,MAC5B,CAAC;AAED,YAAM,YAAY,YAAY,IAAI;AAClC,YAAM,eAAe,MAAM,OAAO,cAAe,CAAC,GAAG;AAAA,QACnD,OAAO,CAAC,WAAW,QAAQ,MAAM;AAAA,QACjC,KAAK;AAAA;AAAA,UAEH,GAAG,QAAQ;AAAA,UACX,GAAG;AAAA,QACL;AAAA,QACA,KAAK,OAAO;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AAED,MAAC,aAAa,QAA4B,KAAK,YAAY;AAC3D,MAAC,aAAa,QAA4B,KAAK,YAAY;AAE3D,mBAAa,GAAG,SAAS,CAAC,SAAS;AACjC,YAAI,SAAS,GAAG;AACd,kBAAQ,iBAAiB;AAAA,YACvB,WAAW;AAAA,YACX,YAAY,IAAI,IAAI;AAAA,UACtB;AAAA,QACF;AACA,iBAAS,YAAY,gBAAgB;AAAA,UACnC,SAAS,OAAO;AAAA,UAChB;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,SAAS,GAAG;AACd,iBAAO,IAAI;AACX;AAAA,QACF;AACA,gBAAQ,IAAI;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,iCAAiC,KAAK,EAAE;AAAA,EAC1D;AACF","sourcesContent":["import {spawn} from 'child_process';\nimport {PassThrough, Readable} from 'stream';\n\nimport {getBugsnag} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\n\ninterface BuildProjectOptions {\n config: DeploymentConfig;\n assetPath?: string;\n hooks?: DeploymentHooks;\n metricsExporter?: MetricsExporter;\n}\n\nexport async function buildProject(options: BuildProjectOptions) {\n const {config, assetPath, hooks} = options;\n const Bugsnag = getBugsnag();\n\n if (hooks?.buildFunction) {\n const startTime = performance.now();\n return hooks\n .buildFunction(assetPath)\n .then(() => {\n options.metricsExporter?.add(\n MetricName.BuildTime,\n performance.now() - startTime,\n );\n })\n .catch((error) => {\n throw new Error(`Build function failed with error: ${error}`);\n });\n }\n\n const assetPathEnvironment = assetPath\n ? {HYDROGEN_ASSET_BASE_URL: assetPath}\n : {};\n try {\n await new Promise((resolve, reject) => {\n let stderr = '';\n const stderrStream = new PassThrough();\n\n stderrStream.on('data', (chunk) => {\n stderr += chunk;\n process.stderr.write(chunk);\n });\n\n const startTime = performance.now();\n const buildCommand = spawn(config.buildCommand!, [], {\n stdio: ['inherit', 'pipe', 'pipe'],\n env: {\n // eslint-disable-next-line no-process-env\n ...process.env,\n ...assetPathEnvironment,\n },\n cwd: config.rootPath,\n shell: true,\n });\n\n (buildCommand.stderr as Readable | null)?.pipe(stderrStream);\n (buildCommand.stdout as Readable | null)?.pipe(stderrStream);\n\n buildCommand.on('close', (code) => {\n if (code === 0) {\n options.metricsExporter?.add(\n MetricName.BuildTime,\n performance.now() - startTime,\n );\n }\n Bugsnag?.addMetadata('buildCommand', {\n command: config.buildCommand,\n stderr,\n code,\n });\n if (code !== 0) {\n reject(code);\n return;\n }\n resolve(code);\n });\n });\n } catch (error) {\n throw new Error(`Build failed with error code: ${error}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/build-project.ts"],"names":[],"mappings":";;;;;AAeA,eAAsB,aAAa,OAA8B,EAAA;AAC/D,EAAA,MAAM,EAAC,MAAA,EAAQ,SAAW,EAAA,KAAA,EAAS,GAAA,OAAA,CAAA;AACnC,EAAA,MAAM,UAAU,UAAW,EAAA,CAAA;AAE3B,EAAA,IAAI,OAAO,aAAe,EAAA;AACxB,IAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AAClC,IAAA,OAAO,KACJ,CAAA,aAAA,CAAc,SAAS,CAAA,CACvB,KAAK,MAAM;AACV,MAAA,OAAA,CAAQ,eAAiB,EAAA,GAAA;AAAA,QACvB,UAAW,CAAA,SAAA;AAAA,QACX,WAAA,CAAY,KAAQ,GAAA,SAAA;AAAA,OACtB,CAAA;AAAA,KACD,CAAA,CACA,KAAM,CAAA,CAAC,KAAU,KAAA;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAqC,kCAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,KAC7D,CAAA,CAAA;AAAA,GACL;AAEA,EAAA,MAAM,uBAAuB,SACzB,GAAA,EAAC,uBAAyB,EAAA,SAAA,KAC1B,EAAC,CAAA;AACL,EAAI,IAAA;AACF,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACrC,MAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,MAAM,MAAA,YAAA,GAAe,IAAI,WAAY,EAAA,CAAA;AAErC,MAAa,YAAA,CAAA,EAAA,CAAG,MAAQ,EAAA,CAAC,KAAU,KAAA;AACjC,QAAU,MAAA,IAAA,KAAA,CAAA;AACV,QAAQ,OAAA,CAAA,MAAA,CAAO,MAAM,KAAK,CAAA,CAAA;AAAA,OAC3B,CAAA,CAAA;AAED,MAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AAClC,MAAA,MAAM,YAAe,GAAA,KAAA,CAAM,MAAO,CAAA,YAAA,EAAe,EAAI,EAAA;AAAA,QACnD,KAAO,EAAA,CAAC,SAAW,EAAA,MAAA,EAAQ,MAAM,CAAA;AAAA,QACjC,GAAK,EAAA;AAAA;AAAA,UAEH,GAAG,OAAQ,CAAA,GAAA;AAAA,UACX,GAAG,oBAAA;AAAA,SACL;AAAA,QACA,KAAK,MAAO,CAAA,QAAA;AAAA,QACZ,KAAO,EAAA,IAAA;AAAA,OACR,CAAA,CAAA;AAED,MAAC,YAAA,CAAa,MAA4B,EAAA,IAAA,CAAK,YAAY,CAAA,CAAA;AAC3D,MAAC,YAAA,CAAa,MAA4B,EAAA,IAAA,CAAK,YAAY,CAAA,CAAA;AAE3D,MAAa,YAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,IAAS,KAAA;AACjC,QAAA,IAAI,SAAS,CAAG,EAAA;AACd,UAAA,OAAA,CAAQ,eAAiB,EAAA,GAAA;AAAA,YACvB,UAAW,CAAA,SAAA;AAAA,YACX,WAAA,CAAY,KAAQ,GAAA,SAAA;AAAA,WACtB,CAAA;AAAA,SACF;AACA,QAAA,OAAA,EAAS,YAAY,cAAgB,EAAA;AAAA,UACnC,SAAS,MAAO,CAAA,YAAA;AAAA,UAChB,MAAA;AAAA,UACA,IAAA;AAAA,SACD,CAAA,CAAA;AACD,QAAA,IAAI,SAAS,CAAG,EAAA;AACd,UAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACX,UAAA,OAAA;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,OACb,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,WACM,KAAO,EAAA;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAiC,8BAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GAC1D;AACF","file":"build-project.js","sourcesContent":["import {spawn} from 'child_process';\nimport {PassThrough, Readable} from 'stream';\n\nimport {getBugsnag} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\n\ninterface BuildProjectOptions {\n config: DeploymentConfig;\n assetPath?: string;\n hooks?: DeploymentHooks;\n metricsExporter?: MetricsExporter;\n}\n\nexport async function buildProject(options: BuildProjectOptions) {\n const {config, assetPath, hooks} = options;\n const Bugsnag = getBugsnag();\n\n if (hooks?.buildFunction) {\n const startTime = performance.now();\n return hooks\n .buildFunction(assetPath)\n .then(() => {\n options.metricsExporter?.add(\n MetricName.BuildTime,\n performance.now() - startTime,\n );\n })\n .catch((error) => {\n throw new Error(`Build function failed with error: ${error}`);\n });\n }\n\n const assetPathEnvironment = assetPath\n ? {HYDROGEN_ASSET_BASE_URL: assetPath}\n : {};\n try {\n await new Promise((resolve, reject) => {\n let stderr = '';\n const stderrStream = new PassThrough();\n\n stderrStream.on('data', (chunk) => {\n stderr += chunk;\n process.stderr.write(chunk);\n });\n\n const startTime = performance.now();\n const buildCommand = spawn(config.buildCommand!, [], {\n stdio: ['inherit', 'pipe', 'pipe'],\n env: {\n // eslint-disable-next-line no-process-env\n ...process.env,\n ...assetPathEnvironment,\n },\n cwd: config.rootPath,\n shell: true,\n });\n\n (buildCommand.stderr as Readable | null)?.pipe(stderrStream);\n (buildCommand.stdout as Readable | null)?.pipe(stderrStream);\n\n buildCommand.on('close', (code) => {\n if (code === 0) {\n options.metricsExporter?.add(\n MetricName.BuildTime,\n performance.now() - startTime,\n );\n }\n Bugsnag?.addMetadata('buildCommand', {\n command: config.buildCommand,\n stderr,\n code,\n });\n if (code !== 0) {\n reject(code);\n return;\n }\n resolve(code);\n });\n });\n } catch (error) {\n throw new Error(`Build failed with error code: ${error}`);\n }\n}\n"]}
@@ -35,5 +35,5 @@ async function deploymentCancel(options) {
35
35
  }
36
36
 
37
37
  export { deploymentCancel };
38
- //# sourceMappingURL=out.js.map
38
+ //# sourceMappingURL=deployment-cancel.js.map
39
39
  //# sourceMappingURL=deployment-cancel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/deployment-cancel.ts"],"names":[],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAAiB;AACzB,SAAgB,kBAAiB;AAEjC,SAAQ,cAAc,cAAa;AAGnC;AAAA,EACE;AAAA,OAGK;AASP,eAAsB,iBACpB,SACmC;AACnC,QAAM,EAAC,QAAQ,cAAc,QAAQ,OAAM,IAAI;AAE/C,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AACF,UAAM,WAAsC,MAAM,eAAe;AAAA,MAC/D,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK,GAAG,OAAO,aAAa;AAAA,MAC5B,OAAO,OAAO,gBAAgB;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,QACZ,CAAC,OAAO,qBAAqB,GAAG,OAAO,gBAAgB;AAAA,MACzD;AAAA,IACF,CAAC;AAED,QAAI,SAAS,iBAAiB,WAAW,UAAU,GAAG;AACpD,YAAM,IAAI;AAAA,QACR,SAAS,iBAAiB,WAAW,CAAC,GAAG,WAAW;AAAA,MACtD;AAAA,IACF;AACA,eAAW,sBAAsB,YAAY,eAAe,MAAM;AAElE,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AACd,iBAAa,KAAK;AAElB,UAAM;AAAA,EACR;AACF","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport type {DeploymentConfig} from './types.js';\nimport {\n DeploymentCancelQuery,\n DeploymentCancelQueryData,\n DeploymentCancelResponse,\n} from './graphql/deployment-cancel.js';\n\ninterface DeploymentCancelOptions {\n config: DeploymentConfig;\n deploymentId: string;\n reason: string;\n logger: Logger;\n}\n\nexport async function deploymentCancel(\n options: DeploymentCancelOptions,\n): Promise<DeploymentCancelResponse> {\n const {config, deploymentId, reason, logger} = options;\n\n const variables = {\n deploymentId,\n reason,\n };\n\n try {\n const response: DeploymentCancelQueryData = await graphqlRequest({\n query: DeploymentCancelQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentCancel.userErrors.length >= 1) {\n throw new AbortError(\n response.deploymentCancel.userErrors[0]?.message || '',\n );\n }\n outputInfo(`Deployment with id ${deploymentId} cancelled.`, logger);\n\n return response.deploymentCancel;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/deployment-cancel.ts"],"names":[],"mappings":";;;;;;AAoBA,eAAsB,iBACpB,OACmC,EAAA;AACnC,EAAA,MAAM,EAAC,MAAA,EAAQ,YAAc,EAAA,MAAA,EAAQ,QAAU,GAAA,OAAA,CAAA;AAE/C,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,YAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAsC,MAAM,cAAe,CAAA;AAAA,MAC/D,KAAO,EAAA,qBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA,SAAA;AAAA,OACzD;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,gBAAA,CAAiB,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACpD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,QAAS,CAAA,gBAAA,CAAiB,UAAW,CAAA,CAAC,GAAG,OAAW,IAAA,EAAA;AAAA,OACtD,CAAA;AAAA,KACF;AACA,IAAW,UAAA,CAAA,CAAA,mBAAA,EAAsB,YAAY,CAAA,WAAA,CAAA,EAAe,MAAM,CAAA,CAAA;AAElE,IAAA,OAAO,QAAS,CAAA,gBAAA,CAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF","file":"deployment-cancel.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport type {DeploymentConfig} from './types.js';\nimport {\n DeploymentCancelQuery,\n DeploymentCancelQueryData,\n DeploymentCancelResponse,\n} from './graphql/deployment-cancel.js';\n\ninterface DeploymentCancelOptions {\n config: DeploymentConfig;\n deploymentId: string;\n reason: string;\n logger: Logger;\n}\n\nexport async function deploymentCancel(\n options: DeploymentCancelOptions,\n): Promise<DeploymentCancelResponse> {\n const {config, deploymentId, reason, logger} = options;\n\n const variables = {\n deploymentId,\n reason,\n };\n\n try {\n const response: DeploymentCancelQueryData = await graphqlRequest({\n query: DeploymentCancelQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentCancel.userErrors.length >= 1) {\n throw new AbortError(\n response.deploymentCancel.userErrors[0]?.message || '',\n );\n }\n outputInfo(`Deployment with id ${deploymentId} cancelled.`, logger);\n\n return response.deploymentCancel;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
@@ -44,5 +44,5 @@ async function deploymentComplete(config, deploymentId) {
44
44
  }
45
45
 
46
46
  export { deploymentComplete };
47
- //# sourceMappingURL=out.js.map
47
+ //# sourceMappingURL=deployment-complete.js.map
48
48
  //# sourceMappingURL=deployment-complete.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/deployment-complete.ts"],"names":[],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAAiB;AAEzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,OAIK;AAGP,eAAsB,mBACpB,QACA,cACqC;AACrC,QAAM,YAA8C;AAAA,IAClD;AAAA,IACA,yBAAyB,OAAO;AAAA,EAClC;AAEA,MAAI,OAAO,yBAAyB;AAClC,cAAU,0BAA0B;AAAA,MAClC,OAAO;AAAA,IACT;AAAA,EACF,WAAW,OAAO,yBAAyB;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,gCAAgC;AACzC,cAAU,uBAAuB,OAAO;AAAA,EAC1C;AAEA,MAAI;AACF,UAAM,WAAwC,MAAM,eAAe;AAAA,MACjE,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK,GAAG,OAAO,aAAa;AAAA,MAC5B,OAAO,OAAO,gBAAgB;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,QACZ,CAAC,OAAO,qBAAqB,GAAG,OAAO,gBAAgB;AAAA,MACzD;AAAA,IACF,CAAC;AAED,QAAI,SAAS,mBAAmB,WAAW,UAAU,GAAG;AACtD,YAAM,IAAI;AAAA,QACR,kCAAkC,SAAS,mBAAmB,WAAW,CAAC,GAAG,OAAO;AAAA,MACtF;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AACd,iBAAa,KAAK;AAElB,UAAM;AAAA,EACR;AACF","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n authBypassTokenDurationParse,\n errorHandler,\n Header,\n} from '../utils/utils.js';\n\nimport {\n DeploymentCompleteQuery,\n DeploymentCompleteQueryVariables,\n DeploymentCompleteQueryData,\n DeploymentCompleteResponse,\n} from './graphql/deployment-complete.js';\nimport type {DeploymentConfig} from './types.js';\n\nexport async function deploymentComplete(\n config: DeploymentConfig,\n deploymentId: string,\n): Promise<DeploymentCompleteResponse> {\n const variables: DeploymentCompleteQueryVariables = {\n deploymentId,\n generateAuthBypassToken: config.generateAuthBypassToken,\n };\n\n if (config.generateAuthBypassToken) {\n variables.authBypassTokenDuration = authBypassTokenDurationParse(\n config.authBypassTokenDuration,\n );\n } else if (config.authBypassTokenDuration) {\n throw new AbortError(\n 'authBypassTokenDuration is set but generateAuthBypassToken is not enabled',\n );\n }\n\n if (config.overriddenEnvironmentVariables) {\n variables.environmentVariables = config.overriddenEnvironmentVariables;\n }\n\n try {\n const response: DeploymentCompleteQueryData = await graphqlRequest({\n query: DeploymentCompleteQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentComplete.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to complete deployment: ${response.deploymentComplete.userErrors[0]?.message}`,\n );\n }\n\n return response.deploymentComplete;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/deployment-complete.ts"],"names":[],"mappings":";;;;;AAiBA,eAAsB,kBAAA,CACpB,QACA,YACqC,EAAA;AACrC,EAAA,MAAM,SAA8C,GAAA;AAAA,IAClD,YAAA;AAAA,IACA,yBAAyB,MAAO,CAAA,uBAAA;AAAA,GAClC,CAAA;AAEA,EAAA,IAAI,OAAO,uBAAyB,EAAA;AAClC,IAAA,SAAA,CAAU,uBAA0B,GAAA,4BAAA;AAAA,MAClC,MAAO,CAAA,uBAAA;AAAA,KACT,CAAA;AAAA,GACF,MAAA,IAAW,OAAO,uBAAyB,EAAA;AACzC,IAAA,MAAM,IAAI,UAAA;AAAA,MACR,2EAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAA,IAAI,OAAO,8BAAgC,EAAA;AACzC,IAAA,SAAA,CAAU,uBAAuB,MAAO,CAAA,8BAAA,CAAA;AAAA,GAC1C;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAwC,MAAM,cAAe,CAAA;AAAA,MACjE,KAAO,EAAA,uBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA,SAAA;AAAA,OACzD;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACtD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,kCAAkC,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA,CAAA;AAAA,OACtF,CAAA;AAAA,KACF;AAEA,IAAA,OAAO,QAAS,CAAA,kBAAA,CAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF","file":"deployment-complete.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n authBypassTokenDurationParse,\n errorHandler,\n Header,\n} from '../utils/utils.js';\n\nimport {\n DeploymentCompleteQuery,\n DeploymentCompleteQueryVariables,\n DeploymentCompleteQueryData,\n DeploymentCompleteResponse,\n} from './graphql/deployment-complete.js';\nimport type {DeploymentConfig} from './types.js';\n\nexport async function deploymentComplete(\n config: DeploymentConfig,\n deploymentId: string,\n): Promise<DeploymentCompleteResponse> {\n const variables: DeploymentCompleteQueryVariables = {\n deploymentId,\n generateAuthBypassToken: config.generateAuthBypassToken,\n };\n\n if (config.generateAuthBypassToken) {\n variables.authBypassTokenDuration = authBypassTokenDurationParse(\n config.authBypassTokenDuration,\n );\n } else if (config.authBypassTokenDuration) {\n throw new AbortError(\n 'authBypassTokenDuration is set but generateAuthBypassToken is not enabled',\n );\n }\n\n if (config.overriddenEnvironmentVariables) {\n variables.environmentVariables = config.overriddenEnvironmentVariables;\n }\n\n try {\n const response: DeploymentCompleteQueryData = await graphqlRequest({\n query: DeploymentCompleteQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentComplete.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to complete deployment: ${response.deploymentComplete.userErrors[0]?.message}`,\n );\n }\n\n return response.deploymentComplete;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
@@ -40,5 +40,5 @@ async function deploymentInitiate(options) {
40
40
  }
41
41
 
42
42
  export { deploymentInitiate };
43
- //# sourceMappingURL=out.js.map
43
+ //# sourceMappingURL=deployment-initiate.js.map
44
44
  //# sourceMappingURL=deployment-initiate.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/deployment-initiate.ts"],"names":[],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAAiB;AACzB,SAAgB,uBAAsB;AAEtC,SAAQ,cAAc,cAAa;AAOnC;AAAA,EACE;AAAA,OAGK;AAsBP,eAAsB,mBACpB,SACqC;AACrC,QAAM,EAAC,QAAQ,OAAO,OAAM,IAAI;AAEhC,QAAM,YAAY;AAAA,IAChB,SAAS,MAAM;AAAA,IACf,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,QAAQ,MAAM;AAAA,EAChB;AAEA,MAAI;AACF,UAAM,WAAwC,MAAM,eAAe;AAAA,MACjE,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK,GAAG,OAAO,aAAa;AAAA,MAC5B,OAAO,OAAO,gBAAgB;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,QACZ,CAAC,OAAO,qBAAqB,GAAG,OAAO,gBAAgB;AAAA,MACzD;AAAA,IACF,CAAC;AAED,QAAI,SAAS,mBAAmB,WAAW,UAAU,GAAG;AACtD,YAAM,IAAI;AAAA,QACR,gCAAgC,SAAS,mBAAmB,WAAW,CAAC,GAAG,OAAO;AAAA,MACpF;AAAA,IACF;AAEA;AAAA,MACE,yBAAyB,SAAS,mBAAmB,kBAAkB,MAAM;AAAA,MAC7E;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AACd,iBAAa,KAAK;AAElB,UAAM;AAAA,EACR;AACF","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputCompleted} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport {\n DeploymentConfig,\n DeploymentManifestFile,\n EnvironmentInput,\n} from './types.js';\nimport {\n DeploymentInitiateQuery,\n DeploymentInitiateQueryData,\n DeploymentInitiateResponse,\n} from './graphql/deployment-initiate.js';\n\ntype DeploymentInitiateInput =\n | {\n buildId: string;\n environment?: never;\n labels?: string[];\n manifest: DeploymentManifestFile[];\n }\n | {\n environment?: EnvironmentInput;\n buildId?: never;\n labels?: string[];\n manifest: DeploymentManifestFile[];\n };\n\ninterface DeploymentInitiateOptions {\n config: DeploymentConfig;\n input: DeploymentInitiateInput;\n logger: Logger;\n}\n\nexport async function deploymentInitiate(\n options: DeploymentInitiateOptions,\n): Promise<DeploymentInitiateResponse> {\n const {config, input, logger} = options;\n\n const variables = {\n buildId: input.buildId,\n environment: input.environment,\n files: input.manifest,\n labels: input.labels,\n };\n\n try {\n const response: DeploymentInitiateQueryData = await graphqlRequest({\n query: DeploymentInitiateQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentInitiate.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to create deployment. ${response.deploymentInitiate.userErrors[0]?.message}`,\n );\n }\n\n outputCompleted(\n `Deployment initiated, ${response.deploymentInitiate.deploymentTargets.length} files to upload.`,\n logger,\n );\n return response.deploymentInitiate;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/deployment-initiate.ts"],"names":[],"mappings":";;;;;;AAqCA,eAAsB,mBACpB,OACqC,EAAA;AACrC,EAAA,MAAM,EAAC,MAAA,EAAQ,KAAO,EAAA,MAAA,EAAU,GAAA,OAAA,CAAA;AAEhC,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,aAAa,KAAM,CAAA,WAAA;AAAA,IACnB,OAAO,KAAM,CAAA,QAAA;AAAA,IACb,QAAQ,KAAM,CAAA,MAAA;AAAA,GAChB,CAAA;AAEA,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAwC,MAAM,cAAe,CAAA;AAAA,MACjE,KAAO,EAAA,uBAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA,SAAA;AAAA,OACzD;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAI,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,MAAA,IAAU,CAAG,EAAA;AACtD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,gCAAgC,QAAS,CAAA,kBAAA,CAAmB,UAAW,CAAA,CAAC,GAAG,OAAO,CAAA,CAAA;AAAA,OACpF,CAAA;AAAA,KACF;AAEA,IAAA,eAAA;AAAA,MACE,CAAyB,sBAAA,EAAA,QAAA,CAAS,kBAAmB,CAAA,iBAAA,CAAkB,MAAM,CAAA,iBAAA,CAAA;AAAA,MAC7E,MAAA;AAAA,KACF,CAAA;AACA,IAAA,OAAO,QAAS,CAAA,kBAAA,CAAA;AAAA,WACT,KAAO,EAAA;AACd,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAElB,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF","file":"deployment-initiate.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {AbortError} from '@shopify/cli-kit/node/error';\nimport {Logger, outputCompleted} from '@shopify/cli-kit/node/output';\n\nimport {errorHandler, Header} from '../utils/utils.js';\n\nimport {\n DeploymentConfig,\n DeploymentManifestFile,\n EnvironmentInput,\n} from './types.js';\nimport {\n DeploymentInitiateQuery,\n DeploymentInitiateQueryData,\n DeploymentInitiateResponse,\n} from './graphql/deployment-initiate.js';\n\ntype DeploymentInitiateInput =\n | {\n buildId: string;\n environment?: never;\n labels?: string[];\n manifest: DeploymentManifestFile[];\n }\n | {\n environment?: EnvironmentInput;\n buildId?: never;\n labels?: string[];\n manifest: DeploymentManifestFile[];\n };\n\ninterface DeploymentInitiateOptions {\n config: DeploymentConfig;\n input: DeploymentInitiateInput;\n logger: Logger;\n}\n\nexport async function deploymentInitiate(\n options: DeploymentInitiateOptions,\n): Promise<DeploymentInitiateResponse> {\n const {config, input, logger} = options;\n\n const variables = {\n buildId: input.buildId,\n environment: input.environment,\n files: input.manifest,\n labels: input.labels,\n };\n\n try {\n const response: DeploymentInitiateQueryData = await graphqlRequest({\n query: DeploymentInitiateQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n if (response.deploymentInitiate.userErrors.length >= 1) {\n throw new AbortError(\n `Failed to create deployment. ${response.deploymentInitiate.userErrors[0]?.message}`,\n );\n }\n\n outputCompleted(\n `Deployment initiated, ${response.deploymentInitiate.deploymentTargets.length} files to upload.`,\n logger,\n );\n return response.deploymentInitiate;\n } catch (error) {\n errorHandler(error);\n\n throw error;\n }\n}\n"]}
@@ -71,5 +71,5 @@ function assetFileFilter(fileName) {
71
71
  }
72
72
 
73
73
  export { getUploadFiles };
74
- //# sourceMappingURL=out.js.map
74
+ //# sourceMappingURL=get-upload-files.js.map
75
75
  //# sourceMappingURL=get-upload-files.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/get-upload-files.ts"],"names":[],"mappings":"AAAA,SAAQ,MAAM,cAAc,oBAAmB;AAC/C,SAAQ,gBAAe;AACvB,SAAQ,UAAU,oBAAmB;AACrC,SAAQ,sBAAqB;AAE7B,SAAyB,kBAAiB;AAE1C,SAAkD,gBAAe;AAEjE,eAAsB,eACpB,QACA,iBACmC;AACnC,QAAM,aAAa,SAAS,OAAO,UAAW,OAAO,SAAU;AAC/D,QAAM,cAAc,MAAM,KAAK,GAAG,UAAU,KAAK;AACjD,MAAI,WAAW,sBAAsB;AAAA,IACnC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM,SAAS;AAAA,IACf,QAAQ;AAAA,EACV,CAAC;AAED,MAAI,CAAC,OAAO,YAAY;AACtB,UAAM,YAAY,SAAS,OAAO,UAAW,OAAO,SAAU;AAC9D,UAAM,aAAa,MAAM,KAAK,GAAG,SAAS,KAAK;AAC/C,eAAW;AAAA,MACT,GAAG;AAAA,MACH,GAAG,sBAAsB;AAAA,QACvB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM,SAAS;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACA,mBAAiB,IAAI,WAAW,mBAAmB,SAAS,MAAM;AAClE,QAAM,YACJ,SAAS,OAAO,CAAC,OAAO,SAAS,QAAQ,KAAK,UAAU,CAAC,IAAI;AAC/D,mBAAiB,IAAI,WAAW,oBAAoB,SAAS;AAE7D,SAAO;AACT;AAEA,SAAS,WAAW,MAAsB;AACxC,QAAM,OAAO,aAAa,IAAI;AAC9B,SAAO,SAAS,IAAI;AACtB;AASA,SAAS,sBACP,QAC0B;AAC1B,QAAM,EAAC,OAAO,UAAU,MAAM,OAAM,IAAI;AACxC,QAAM,WAAqC,CAAC;AAC5C,QAAM,QAAQ,CAAC,SAAiB;AAC9B,UAAM,WAAW,aAAa,UAAU,IAAI;AAC5C,QAAI,UAAU,CAAC,OAAO,QAAQ,GAAG;AAC/B;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,MACZ;AAAA,MACA,UAAU,aAAa,IAAI;AAAA,MAC3B,UAAU,eAAe,IAAI;AAAA,MAC7B,UAAU;AAAA,MACV,UAAU,WAAW,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;AAEA,SAAS,iBAAiB,UAA2B;AACnD,QAAM,oBAAoB,CAAC,WAAW,YAAY,QAAQ,OAAO,MAAM;AACvE,QAAM,mBAAmB,CAAC,OAAO;AACjC,QAAM,cAAc,KAAK,iBAAiB;AAAA,IACxC;AAAA,EACF,CAAC,KAAK,kBAAkB,KAAK,GAAG,CAAC;AACjC,QAAM,QAAQ,IAAI,OAAO,WAAW;AACpC,SAAO,MAAM,KAAK,SAAS,YAAY,CAAC;AAC1C;AAEA,SAAS,gBAAgB,UAA2B;AAClD,QAAM,uBAAuB,CAAC,MAAM;AACpC,QAAM,cAAc,IAAI,qBAAqB,KAAK,GAAG,CAAC;AACtD,QAAM,QAAQ,IAAI,OAAO,WAAW;AACpC,SAAO,CAAC,MAAM,KAAK,SAAS,YAAY,CAAC;AAC3C","sourcesContent":["import {glob, fileSizeSync, readFileSync} from '@shopify/cli-kit/node/fs';\nimport {fileHash} from '@shopify/cli-kit/node/crypto';\nimport {joinPath, relativePath} from '@shopify/cli-kit/node/path';\nimport {lookupMimeType} from '@shopify/cli-kit/node/mimes';\n\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentManifestFile, FileType} from './types.js';\n\nexport async function getUploadFiles(\n config: DeploymentConfig,\n metricsExporter?: MetricsExporter,\n): Promise<DeploymentManifestFile[]> {\n const workerPath = joinPath(config.rootPath!, config.workerDir!);\n const workerFiles = await glob(`${workerPath}/**`);\n let manifest = createManifestEntries({\n files: workerFiles,\n basePath: workerPath,\n type: FileType.Worker,\n filter: workerFileFilter,\n });\n\n if (!config.workerOnly) {\n const assetPath = joinPath(config.rootPath!, config.assetsDir!);\n const assetFiles = await glob(`${assetPath}/**`);\n manifest = [\n ...manifest,\n ...createManifestEntries({\n files: assetFiles,\n basePath: assetPath,\n type: FileType.Asset,\n filter: assetFileFilter,\n }),\n ];\n }\n metricsExporter?.add(MetricName.NumFilesRequested, manifest.length);\n const totalSize =\n manifest.reduce((total, file) => total + file.fileSize, 0) / 1024;\n metricsExporter?.add(MetricName.TotalSizeRequested, totalSize);\n\n return manifest;\n}\n\nfunction createHash(file: string): string {\n const buff = readFileSync(file);\n return fileHash(buff);\n}\n\ninterface CreateManifestEntriesParams {\n files: string[];\n basePath: string;\n type: FileType;\n filter?: (arg0: string) => boolean;\n}\n\nfunction createManifestEntries(\n params: CreateManifestEntriesParams,\n): DeploymentManifestFile[] {\n const {files, basePath, type, filter} = params;\n const manifest: DeploymentManifestFile[] = [];\n files.forEach((file: string) => {\n const filePath = relativePath(basePath, file);\n if (filter && !filter(filePath)) {\n return;\n }\n\n manifest.push({\n filePath,\n fileSize: fileSizeSync(file),\n mimeType: lookupMimeType(file)!,\n fileType: type,\n fileHash: createHash(file),\n });\n });\n return manifest;\n}\n\nfunction workerFileFilter(fileName: string): boolean {\n const allowedExtensions = ['.js.map', '.mjs.map', '.map', '.js', '.mjs'];\n const allowedFilenames = ['index'];\n const regexString = `^(${allowedFilenames.join(\n '|',\n )})(${allowedExtensions.join('|')})$`;\n const regex = new RegExp(regexString);\n return regex.test(fileName.toLowerCase());\n}\n\nfunction assetFileFilter(fileName: string): boolean {\n const disallowedExtensions = ['.map'];\n const regexString = `(${disallowedExtensions.join('|')})$`;\n const regex = new RegExp(regexString);\n return !regex.test(fileName.toLowerCase());\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/get-upload-files.ts"],"names":[],"mappings":"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","file":"get-upload-files.js","sourcesContent":["import {glob, fileSizeSync, readFileSync} from '@shopify/cli-kit/node/fs';\nimport {fileHash} from '@shopify/cli-kit/node/crypto';\nimport {joinPath, relativePath} from '@shopify/cli-kit/node/path';\nimport {lookupMimeType} from '@shopify/cli-kit/node/mimes';\n\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentManifestFile, FileType} from './types.js';\n\nexport async function getUploadFiles(\n config: DeploymentConfig,\n metricsExporter?: MetricsExporter,\n): Promise<DeploymentManifestFile[]> {\n const workerPath = joinPath(config.rootPath!, config.workerDir!);\n const workerFiles = await glob(`${workerPath}/**`);\n let manifest = createManifestEntries({\n files: workerFiles,\n basePath: workerPath,\n type: FileType.Worker,\n filter: workerFileFilter,\n });\n\n if (!config.workerOnly) {\n const assetPath = joinPath(config.rootPath!, config.assetsDir!);\n const assetFiles = await glob(`${assetPath}/**`);\n manifest = [\n ...manifest,\n ...createManifestEntries({\n files: assetFiles,\n basePath: assetPath,\n type: FileType.Asset,\n filter: assetFileFilter,\n }),\n ];\n }\n metricsExporter?.add(MetricName.NumFilesRequested, manifest.length);\n const totalSize =\n manifest.reduce((total, file) => total + file.fileSize, 0) / 1024;\n metricsExporter?.add(MetricName.TotalSizeRequested, totalSize);\n\n return manifest;\n}\n\nfunction createHash(file: string): string {\n const buff = readFileSync(file);\n return fileHash(buff);\n}\n\ninterface CreateManifestEntriesParams {\n files: string[];\n basePath: string;\n type: FileType;\n filter?: (arg0: string) => boolean;\n}\n\nfunction createManifestEntries(\n params: CreateManifestEntriesParams,\n): DeploymentManifestFile[] {\n const {files, basePath, type, filter} = params;\n const manifest: DeploymentManifestFile[] = [];\n files.forEach((file: string) => {\n const filePath = relativePath(basePath, file);\n if (filter && !filter(filePath)) {\n return;\n }\n\n manifest.push({\n filePath,\n fileSize: fileSizeSync(file),\n mimeType: lookupMimeType(file)!,\n fileType: type,\n fileHash: createHash(file),\n });\n });\n return manifest;\n}\n\nfunction workerFileFilter(fileName: string): boolean {\n const allowedExtensions = ['.js.map', '.mjs.map', '.map', '.js', '.mjs'];\n const allowedFilenames = ['index'];\n const regexString = `^(${allowedFilenames.join(\n '|',\n )})(${allowedExtensions.join('|')})$`;\n const regex = new RegExp(regexString);\n return regex.test(fileName.toLowerCase());\n}\n\nfunction assetFileFilter(fileName: string): boolean {\n const disallowedExtensions = ['.map'];\n const regexString = `(${disallowedExtensions.join('|')})$`;\n const regex = new RegExp(regexString);\n return !regex.test(fileName.toLowerCase());\n}\n"]}
@@ -12,5 +12,5 @@ const BuildCancelQuery = `
12
12
  `;
13
13
 
14
14
  export { BuildCancelQuery };
15
- //# sourceMappingURL=out.js.map
15
+ //# sourceMappingURL=build-cancel.js.map
16
16
  //# sourceMappingURL=build-cancel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/graphql/build-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const BuildCancelQuery = `\n mutation BuildCancel($buildId: ID!, $reason: String!) {\n buildCancel(id: $buildId, reason: $reason) {\n build {\n id\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface BuildCancelQueryData {\n buildCancel: BuildCancelResponse;\n}\n\nexport interface BuildCancelResponse {\n build: {\n id: string;\n };\n userErrors: OxygenError[];\n}\n"]}
1
+ {"version":3,"sources":["../../../src/deploy/graphql/build-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,gBAAmB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"build-cancel.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const BuildCancelQuery = `\n mutation BuildCancel($buildId: ID!, $reason: String!) {\n buildCancel(id: $buildId, reason: $reason) {\n build {\n id\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface BuildCancelQueryData {\n buildCancel: BuildCancelResponse;\n}\n\nexport interface BuildCancelResponse {\n build: {\n id: string;\n };\n userErrors: OxygenError[];\n}\n"]}
@@ -13,5 +13,5 @@ const BuildInitiateQuery = `
13
13
  `;
14
14
 
15
15
  export { BuildInitiateQuery };
16
- //# sourceMappingURL=out.js.map
16
+ //# sourceMappingURL=build-initiate.js.map
17
17
  //# sourceMappingURL=build-initiate.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/graphql/build-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const BuildInitiateQuery = `\n mutation BuildInitiate($environment: EnvironmentSelectorInput, $labels: [String!]) {\n buildInitiate(environment: $environment, labels: $labels) {\n build {\n id\n assetPath\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface BuildInitiateQueryData {\n buildInitiate: BuildInitiateResponse;\n}\n\nexport interface BuildInitiateResponse {\n build: {\n id: string;\n assetPath: string;\n };\n userErrors: OxygenError[];\n}\n"]}
1
+ {"version":3,"sources":["../../../src/deploy/graphql/build-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,kBAAqB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"build-initiate.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const BuildInitiateQuery = `\n mutation BuildInitiate($environment: EnvironmentSelectorInput, $labels: [String!]) {\n buildInitiate(environment: $environment, labels: $labels) {\n build {\n id\n assetPath\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface BuildInitiateQueryData {\n buildInitiate: BuildInitiateResponse;\n}\n\nexport interface BuildInitiateResponse {\n build: {\n id: string;\n assetPath: string;\n };\n userErrors: OxygenError[];\n}\n"]}
@@ -12,5 +12,5 @@ mutation DeploymentCancel($deploymentId: ID!, $reason: String!) {
12
12
  `;
13
13
 
14
14
  export { DeploymentCancelQuery };
15
- //# sourceMappingURL=out.js.map
15
+ //# sourceMappingURL=deployment-cancel.js.map
16
16
  //# sourceMappingURL=deployment-cancel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/graphql/deployment-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const DeploymentCancelQuery = `\nmutation DeploymentCancel($deploymentId: ID!, $reason: String!) {\n deploymentCancel(id: $deploymentId, reason: $reason) {\n deployment {\n id\n }\n userErrors {\n message\n }\n }\n}\n`;\n\nexport interface DeploymentCancelQueryData {\n deploymentCancel: DeploymentCancelResponse;\n}\n\nexport interface DeploymentCancelResponse {\n deployment: {\n id: string;\n };\n userErrors: OxygenError[];\n}\n"]}
1
+ {"version":3,"sources":["../../../src/deploy/graphql/deployment-cancel.ts"],"names":[],"mappings":"AAEO,MAAM,qBAAwB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"deployment-cancel.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const DeploymentCancelQuery = `\nmutation DeploymentCancel($deploymentId: ID!, $reason: String!) {\n deploymentCancel(id: $deploymentId, reason: $reason) {\n deployment {\n id\n }\n userErrors {\n message\n }\n }\n}\n`;\n\nexport interface DeploymentCancelQueryData {\n deploymentCancel: DeploymentCancelResponse;\n}\n\nexport interface DeploymentCancelResponse {\n deployment: {\n id: string;\n };\n userErrors: OxygenError[];\n}\n"]}
@@ -14,5 +14,5 @@ const DeploymentCompleteQuery = `
14
14
  `;
15
15
 
16
16
  export { DeploymentCompleteQuery };
17
- //# sourceMappingURL=out.js.map
17
+ //# sourceMappingURL=deployment-complete.js.map
18
18
  //# sourceMappingURL=deployment-complete.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/graphql/deployment-complete.ts"],"names":[],"mappings":"AAIO,MAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import {Variables} from 'graphql-request';\n\nimport {OxygenError} from '../types.js';\n\nexport const DeploymentCompleteQuery = `\n mutation DeploymentComplete($deploymentId: ID!, $generateAuthBypassToken: Boolean, $authBypassTokenDuration: Int, $environmentVariables: [EnvironmentVariableInput!]) {\n deploymentComplete(id: $deploymentId, generateAuthBypassToken: $generateAuthBypassToken, authBypassTokenDuration: $authBypassTokenDuration, environmentVariables: $environmentVariables) {\n deployment {\n id\n url\n }\n authBypassToken\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface DeploymentCompleteQueryData {\n deploymentComplete: DeploymentCompleteResponse;\n}\n\ninterface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentCompleteQueryVariables extends Variables {\n deploymentId: string;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: number;\n environmentVariables?: EnvironmentVariable[];\n}\n\nexport interface DeploymentCompleteResponse {\n deployment: Deployment;\n authBypassToken: string | null;\n userErrors: OxygenError[];\n}\n\ninterface Deployment {\n id: string;\n url: string;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/deploy/graphql/deployment-complete.ts"],"names":[],"mappings":"AAIO,MAAM,uBAA0B,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"deployment-complete.js","sourcesContent":["import {Variables} from 'graphql-request';\n\nimport {OxygenError} from '../types.js';\n\nexport const DeploymentCompleteQuery = `\n mutation DeploymentComplete($deploymentId: ID!, $generateAuthBypassToken: Boolean, $authBypassTokenDuration: Int, $environmentVariables: [EnvironmentVariableInput!]) {\n deploymentComplete(id: $deploymentId, generateAuthBypassToken: $generateAuthBypassToken, authBypassTokenDuration: $authBypassTokenDuration, environmentVariables: $environmentVariables) {\n deployment {\n id\n url\n }\n authBypassToken\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface DeploymentCompleteQueryData {\n deploymentComplete: DeploymentCompleteResponse;\n}\n\ninterface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentCompleteQueryVariables extends Variables {\n deploymentId: string;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: number;\n environmentVariables?: EnvironmentVariable[];\n}\n\nexport interface DeploymentCompleteResponse {\n deployment: Deployment;\n authBypassToken: string | null;\n userErrors: OxygenError[];\n}\n\ninterface Deployment {\n id: string;\n url: string;\n}\n"]}
@@ -25,5 +25,5 @@ const DeploymentInitiateQuery = `
25
25
  `;
26
26
 
27
27
  export { DeploymentInitiateQuery };
28
- //# sourceMappingURL=out.js.map
28
+ //# sourceMappingURL=deployment-initiate.js.map
29
29
  //# sourceMappingURL=deployment-initiate.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/graphql/deployment-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const DeploymentInitiateQuery = `\n mutation DeploymentInitiate($buildId: ID, $environment: EnvironmentSelectorInput, $labels: [String!], $files: [FileInput!]!) {\n deploymentInitiate(buildId: $buildId, environment: $environment, labels: $labels, files: $files) {\n deployment {\n id\n }\n deploymentTargets {\n filePath\n fileSize\n uploadUrl\n fileType\n parameters {\n name\n value\n }\n }\n deploymentConfiguration {\n timeoutInSeconds\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface DeploymentInitiateQueryData {\n deploymentInitiate: DeploymentInitiateResponse;\n}\n\nexport interface DeploymentInitiateResponse {\n deployment: Deployment;\n deploymentTargets: DeploymentTargetResponse[];\n deploymentConfiguration: DeploymentConfigurationResponse;\n userErrors: OxygenError[];\n}\n\nexport interface DeploymentTargetResponse {\n filePath: string;\n fileSize: number;\n uploadUrl: string;\n fileType: string;\n parameters: DeploymentInitiateParameters[] | null;\n}\n\nexport interface DeploymentConfigurationResponse {\n timeoutInSeconds: number;\n}\n\ninterface Deployment {\n id: string;\n}\n\ninterface DeploymentInitiateParameters {\n name: string;\n value: string;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/deploy/graphql/deployment-initiate.ts"],"names":[],"mappings":"AAEO,MAAM,uBAA0B,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","file":"deployment-initiate.js","sourcesContent":["import {OxygenError} from '../types.js';\n\nexport const DeploymentInitiateQuery = `\n mutation DeploymentInitiate($buildId: ID, $environment: EnvironmentSelectorInput, $labels: [String!], $files: [FileInput!]!) {\n deploymentInitiate(buildId: $buildId, environment: $environment, labels: $labels, files: $files) {\n deployment {\n id\n }\n deploymentTargets {\n filePath\n fileSize\n uploadUrl\n fileType\n parameters {\n name\n value\n }\n }\n deploymentConfiguration {\n timeoutInSeconds\n }\n userErrors {\n message\n }\n }\n }\n`;\n\nexport interface DeploymentInitiateQueryData {\n deploymentInitiate: DeploymentInitiateResponse;\n}\n\nexport interface DeploymentInitiateResponse {\n deployment: Deployment;\n deploymentTargets: DeploymentTargetResponse[];\n deploymentConfiguration: DeploymentConfigurationResponse;\n userErrors: OxygenError[];\n}\n\nexport interface DeploymentTargetResponse {\n filePath: string;\n fileSize: number;\n uploadUrl: string;\n fileType: string;\n parameters: DeploymentInitiateParameters[] | null;\n}\n\nexport interface DeploymentConfigurationResponse {\n timeoutInSeconds: number;\n}\n\ninterface Deployment {\n id: string;\n}\n\ninterface DeploymentInitiateParameters {\n name: string;\n value: string;\n}\n"]}
@@ -16,5 +16,5 @@ var Status = /* @__PURE__ */ ((Status2) => {
16
16
  })(Status || {});
17
17
 
18
18
  export { DeploymentVerificationDetailsQuery, Status };
19
- //# sourceMappingURL=out.js.map
19
+ //# sourceMappingURL=deployment-verification-details.js.map
20
20
  //# sourceMappingURL=deployment-verification-details.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/graphql/deployment-verification-details.ts"],"names":["Status"],"mappings":"AAAO,MAAM,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoB3C,IAAK,SAAL,kBAAKA,YAAL;AACL,EAAAA,QAAA,aAAU;AACV,EAAAA,QAAA,cAAW;AACX,EAAAA,QAAA,YAAS;AACT,EAAAA,QAAA,eAAY;AAJF,SAAAA;AAAA,GAAA","sourcesContent":["export const DeploymentVerificationDetailsQuery = `\n query DeploymentVerificationDetails($deploymentId: ID!) {\n deploymentVerificationDetails(id: $deploymentId) {\n url\n status\n error\n }\n }\n`;\n\nexport interface DeploymentVerificationDetailsQueryData {\n deploymentVerificationDetails: DeploymentVerificationDetailsResponse | null;\n}\n\nexport interface DeploymentVerificationDetailsResponse {\n url: string;\n status: string;\n error?: string;\n}\n\nexport enum Status {\n Pending = 'PENDING',\n Deployed = 'DEPLOYED',\n Failed = 'FAILED',\n Cancelled = 'CANCELLED',\n}\n"]}
1
+ {"version":3,"sources":["../../../src/deploy/graphql/deployment-verification-details.ts"],"names":["Status"],"mappings":"AAAO,MAAM,kCAAqC,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAoBtC,IAAA,MAAA,qBAAAA,OAAL,KAAA;AACL,EAAAA,QAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AACV,EAAAA,QAAA,UAAW,CAAA,GAAA,UAAA,CAAA;AACX,EAAAA,QAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACT,EAAAA,QAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AAJF,EAAAA,OAAAA,OAAAA,CAAAA;AAAA,CAAA,EAAA,MAAA,IAAA,EAAA","file":"deployment-verification-details.js","sourcesContent":["export const DeploymentVerificationDetailsQuery = `\n query DeploymentVerificationDetails($deploymentId: ID!) {\n deploymentVerificationDetails(id: $deploymentId) {\n url\n status\n error\n }\n }\n`;\n\nexport interface DeploymentVerificationDetailsQueryData {\n deploymentVerificationDetails: DeploymentVerificationDetailsResponse | null;\n}\n\nexport interface DeploymentVerificationDetailsResponse {\n url: string;\n status: string;\n error?: string;\n}\n\nexport enum Status {\n Pending = 'PENDING',\n Deployed = 'DEPLOYED',\n Failed = 'FAILED',\n Cancelled = 'CANCELLED',\n}\n"]}
@@ -169,5 +169,5 @@ The deployment can be reached at the ${completedDeployment.url} preview URL`;
169
169
  }
170
170
 
171
171
  export { createDeploy };
172
- //# sourceMappingURL=out.js.map
172
+ //# sourceMappingURL=index.js.map
173
173
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {Logger, outputSuccess, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {stderrLogger, verifyConfig} from '../utils/utils.js';\nimport {\n getBugsnag,\n initializeBugsnag,\n sanitizeError,\n} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {buildInitiate} from './build-initiate.js';\nimport {buildCancel} from './build-cancel.js';\nimport {getUploadFiles} from './get-upload-files.js';\nimport {deploymentInitiate} from './deployment-initiate.js';\nimport {deploymentComplete} from './deployment-complete.js';\nimport {verifyDeployment} from './verify-deployment.js';\nimport {deploymentCancel} from './deployment-cancel.js';\nimport {uploadFiles} from './upload-files.js';\nimport {verifyDeploymentCompleted} from './verify-deployment-completed.js';\nimport {\n Build,\n DeploymentCompletedVerificationError,\n DeploymentConfig,\n DeploymentHooks,\n VerificationError,\n} from './types.js';\nimport {buildProject} from './build-project.js';\nimport {createLabels, getMetadata, getEnvironmentInput} from './metadata.js';\n\ninterface CreateDeployOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger?: Logger;\n}\n\ninterface CompletedDeployment {\n url: string;\n authBypassToken?: string;\n}\n\nexport async function createDeploy(\n options: CreateDeployOptions,\n): Promise<CompletedDeployment | undefined> {\n const cliStartTime = performance.now();\n initializeBugsnag(!options.config.bugsnag);\n const Bugsnag = getBugsnag();\n Bugsnag?.addMetadata('config', {\n ...options.config,\n deploymentToken: {...options.config.deploymentToken, accessToken: '***'},\n rootPath: '***',\n });\n\n const {config, hooks} = options;\n const logger = options.logger ?? stderrLogger;\n const build = {} as Build;\n let buildCompleted;\n let deployment;\n let metricsExporter;\n\n try {\n const metadata = await getMetadata(config, logger);\n const labels = createLabels(metadata);\n const environment = getEnvironmentInput(config, metadata);\n Bugsnag?.addMetadata('metadata', {\n environment,\n labels,\n metadata,\n });\n metricsExporter = new MetricsExporter({\n ciProvider: metadata.name || 'unknown',\n rootPath: config.rootPath!,\n });\n\n if (!config.workerOnly && !config.skipBuild) {\n const buildInitiateResponse = await buildInitiate({\n config,\n environment,\n labels,\n logger,\n });\n build.id = buildInitiateResponse.build.id;\n build.assetPath = buildInitiateResponse.build.assetPath;\n }\n\n if (!config.skipBuild) {\n await buildProject({\n config,\n assetPath: build.assetPath,\n hooks,\n metricsExporter,\n });\n await verifyConfig({config, performedBuild: true});\n }\n buildCompleted = true;\n\n const manifest = await getUploadFiles(config, metricsExporter);\n Bugsnag?.addMetadata('manifest', manifest);\n const deploymentInitiateInput = build.id\n ? {buildId: build.id, manifest}\n : {environment, manifest, labels};\n\n deployment = await deploymentInitiate({\n config,\n input: deploymentInitiateInput,\n logger,\n });\n\n await uploadFiles({\n config,\n targets: deployment.deploymentTargets,\n hooks,\n logger,\n metricsExporter,\n });\n\n const deploymentCompleteRequestStartTime = performance.now();\n\n const deploymentCompleteOp = await deploymentComplete(\n config,\n deployment.deployment.id,\n );\n metricsExporter.add(MetricName.TotalTime, performance.now() - cliStartTime);\n\n await verifyDeploymentCompleted(\n {\n config,\n hooks,\n logger,\n timeoutInSeconds: deployment.deploymentConfiguration.timeoutInSeconds,\n },\n deployment.deployment.id,\n );\n\n metricsExporter.add(\n MetricName.DeploymentCompletedTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n\n if (!config.skipVerification) {\n await verifyDeployment({\n config,\n url: deploymentCompleteOp.deployment.url,\n logger,\n hooks,\n });\n\n metricsExporter.add(\n MetricName.DeploymentRoutableTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n }\n\n const completedDeployment: CompletedDeployment = {\n url: deploymentCompleteOp.deployment.url,\n };\n\n let successMessage = `\\nThe deployment can be reached at the ${completedDeployment.url} preview URL`;\n\n if (deploymentCompleteOp.authBypassToken) {\n completedDeployment.authBypassToken =\n deploymentCompleteOp.authBypassToken;\n\n successMessage += `. The auth bypass token for the deployment is ${completedDeployment.authBypassToken}`;\n }\n\n outputSuccess(successMessage, logger);\n\n return completedDeployment;\n } catch (error) {\n if (\n config.bugsnag &&\n Bugsnag &&\n (error instanceof Error || typeof error === 'string')\n ) {\n Bugsnag.notify(sanitizeError(error, config.rootPath));\n }\n\n if (!(error instanceof Error)) {\n // eslint-disable-next-line no-console\n console.error('Unknown error', error);\n return Promise.reject(new Error('Unknown error'));\n }\n\n if (\n error instanceof VerificationError ||\n error instanceof DeploymentCompletedVerificationError\n ) {\n outputWarn(error.message, logger);\n } else if (build.id && !buildCompleted) {\n outputWarn(\n `Build failed with: ${error.message}, cancelling build.`,\n logger,\n );\n\n await buildCancel({\n config,\n buildId: build.id!,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel build: ${err.message}`, logger);\n }\n });\n } else if (deployment?.deployment.id) {\n outputWarn(\n `Deployment failed with: ${error.message}, cancelling deployment.`,\n logger,\n );\n await deploymentCancel({\n config,\n deploymentId: deployment.deployment.id,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel deployment: ${err.message}`, logger);\n }\n });\n }\n return Promise.reject(error);\n } finally {\n metricsExporter?.export();\n }\n}\n\nexport type {DeploymentConfig, DeploymentHooks, CompletedDeployment};\nexport {parseToken} from '../utils/utils.js';\nexport type {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n"]}
1
+ {"version":3,"sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {Logger, outputSuccess, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {stderrLogger, verifyConfig} from '../utils/utils.js';\nimport {\n getBugsnag,\n initializeBugsnag,\n sanitizeError,\n} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {buildInitiate} from './build-initiate.js';\nimport {buildCancel} from './build-cancel.js';\nimport {getUploadFiles} from './get-upload-files.js';\nimport {deploymentInitiate} from './deployment-initiate.js';\nimport {deploymentComplete} from './deployment-complete.js';\nimport {verifyDeployment} from './verify-deployment.js';\nimport {deploymentCancel} from './deployment-cancel.js';\nimport {uploadFiles} from './upload-files.js';\nimport {verifyDeploymentCompleted} from './verify-deployment-completed.js';\nimport {\n Build,\n DeploymentCompletedVerificationError,\n DeploymentConfig,\n DeploymentHooks,\n VerificationError,\n} from './types.js';\nimport {buildProject} from './build-project.js';\nimport {createLabels, getMetadata, getEnvironmentInput} from './metadata.js';\n\ninterface CreateDeployOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger?: Logger;\n}\n\ninterface CompletedDeployment {\n url: string;\n authBypassToken?: string;\n}\n\nexport async function createDeploy(\n options: CreateDeployOptions,\n): Promise<CompletedDeployment | undefined> {\n const cliStartTime = performance.now();\n initializeBugsnag(!options.config.bugsnag);\n const Bugsnag = getBugsnag();\n Bugsnag?.addMetadata('config', {\n ...options.config,\n deploymentToken: {...options.config.deploymentToken, accessToken: '***'},\n rootPath: '***',\n });\n\n const {config, hooks} = options;\n const logger = options.logger ?? stderrLogger;\n const build = {} as Build;\n let buildCompleted;\n let deployment;\n let metricsExporter;\n\n try {\n const metadata = await getMetadata(config, logger);\n const labels = createLabels(metadata);\n const environment = getEnvironmentInput(config, metadata);\n Bugsnag?.addMetadata('metadata', {\n environment,\n labels,\n metadata,\n });\n metricsExporter = new MetricsExporter({\n ciProvider: metadata.name || 'unknown',\n rootPath: config.rootPath!,\n });\n\n if (!config.workerOnly && !config.skipBuild) {\n const buildInitiateResponse = await buildInitiate({\n config,\n environment,\n labels,\n logger,\n });\n build.id = buildInitiateResponse.build.id;\n build.assetPath = buildInitiateResponse.build.assetPath;\n }\n\n if (!config.skipBuild) {\n await buildProject({\n config,\n assetPath: build.assetPath,\n hooks,\n metricsExporter,\n });\n await verifyConfig({config, performedBuild: true});\n }\n buildCompleted = true;\n\n const manifest = await getUploadFiles(config, metricsExporter);\n Bugsnag?.addMetadata('manifest', manifest);\n const deploymentInitiateInput = build.id\n ? {buildId: build.id, manifest}\n : {environment, manifest, labels};\n\n deployment = await deploymentInitiate({\n config,\n input: deploymentInitiateInput,\n logger,\n });\n\n await uploadFiles({\n config,\n targets: deployment.deploymentTargets,\n hooks,\n logger,\n metricsExporter,\n });\n\n const deploymentCompleteRequestStartTime = performance.now();\n\n const deploymentCompleteOp = await deploymentComplete(\n config,\n deployment.deployment.id,\n );\n metricsExporter.add(MetricName.TotalTime, performance.now() - cliStartTime);\n\n await verifyDeploymentCompleted(\n {\n config,\n hooks,\n logger,\n timeoutInSeconds: deployment.deploymentConfiguration.timeoutInSeconds,\n },\n deployment.deployment.id,\n );\n\n metricsExporter.add(\n MetricName.DeploymentCompletedTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n\n if (!config.skipVerification) {\n await verifyDeployment({\n config,\n url: deploymentCompleteOp.deployment.url,\n logger,\n hooks,\n });\n\n metricsExporter.add(\n MetricName.DeploymentRoutableTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n }\n\n const completedDeployment: CompletedDeployment = {\n url: deploymentCompleteOp.deployment.url,\n };\n\n let successMessage = `\\nThe deployment can be reached at the ${completedDeployment.url} preview URL`;\n\n if (deploymentCompleteOp.authBypassToken) {\n completedDeployment.authBypassToken =\n deploymentCompleteOp.authBypassToken;\n\n successMessage += `. The auth bypass token for the deployment is ${completedDeployment.authBypassToken}`;\n }\n\n outputSuccess(successMessage, logger);\n\n return completedDeployment;\n } catch (error) {\n if (\n config.bugsnag &&\n Bugsnag &&\n (error instanceof Error || typeof error === 'string')\n ) {\n Bugsnag.notify(sanitizeError(error, config.rootPath));\n }\n\n if (!(error instanceof Error)) {\n // eslint-disable-next-line no-console\n console.error('Unknown error', error);\n return Promise.reject(new Error('Unknown error'));\n }\n\n if (\n error instanceof VerificationError ||\n error instanceof DeploymentCompletedVerificationError\n ) {\n outputWarn(error.message, logger);\n } else if (build.id && !buildCompleted) {\n outputWarn(\n `Build failed with: ${error.message}, cancelling build.`,\n logger,\n );\n\n await buildCancel({\n config,\n buildId: build.id!,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel build: ${err.message}`, logger);\n }\n });\n } else if (deployment?.deployment.id) {\n outputWarn(\n `Deployment failed with: ${error.message}, cancelling deployment.`,\n logger,\n );\n await deploymentCancel({\n config,\n deploymentId: deployment.deployment.id,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel deployment: ${err.message}`, logger);\n }\n });\n }\n return Promise.reject(error);\n } finally {\n metricsExporter?.export();\n }\n}\n\nexport type {DeploymentConfig, DeploymentHooks, CompletedDeployment};\nexport {parseToken} from '../utils/utils.js';\nexport type {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n"]}
@@ -129,5 +129,5 @@ function createLabels(metadata) {
129
129
  }
130
130
 
131
131
  export { createLabels, getEnvironmentInput, getMetadata };
132
- //# sourceMappingURL=out.js.map
132
+ //# sourceMappingURL=metadata.js.map
133
133
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/metadata.ts"],"names":["keyMapping"],"mappings":"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","sourcesContent":["import {ciPlatform, CIMetadata} from '@shopify/cli-kit/node/context/local';\nimport {getLatestGitCommit} from '@shopify/cli-kit/node/git';\nimport {Logger, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {maxLabelLength} from '../utils/utils.js';\n\nimport {DeploymentConfig, EnvironmentInput} from './types.js';\n\nexport type Metadata = CIMetadata & {\n commitDate?: string;\n name?: string;\n};\n\nexport async function getMetadata(\n config: DeploymentConfig,\n logger: Logger,\n): Promise<Metadata> {\n const ciInfo = ciPlatform();\n const metadata: Metadata = ciInfo.metadata ?? {};\n\n try {\n const gitCommit = await latestCommit(config.rootPath);\n\n // Only update actor, commitDate, and commitMessage if we don't already have\n // the data from CI.\n if (!metadata.actor) {\n metadata.actor = gitCommit.author_name;\n }\n if (!metadata.commitDate) {\n metadata.commitDate = gitCommit.date;\n }\n if (!metadata.commitMessage) {\n metadata.commitMessage = gitCommit.message;\n }\n\n // Always update the following keys with the Git information if it's\n // available since we may modify what the values are.\n if (gitCommit.branch) {\n metadata.branch = gitCommit.branch;\n }\n if (gitCommit.hash) {\n metadata.commitSha = gitCommit.hash;\n }\n } catch (error) {\n outputWarn(\n 'Could not retrieve Git history, commit message will be unavailable.',\n logger,\n );\n }\n\n return {\n name: ciInfo.isCI ? ciInfo.name : 'none',\n ...metadata,\n actor: config.metadata.user ?? metadata.actor,\n commitMessage: createCommitTitle(\n config.metadata.description ?? metadata.commitMessage,\n ),\n commitSha: config.metadata.version ?? metadata.commitSha,\n url: config.metadata.url ?? metadata.url,\n };\n}\n\nasync function latestCommit(path?: string) {\n const gitCommit = await getLatestGitCommit(path);\n const branch = (/HEAD -> ([^,]*)/.exec(gitCommit.refs) || [])[1];\n\n // If this variable is set it means we are in a GitHub action using the\n // pull_request trigger which creates a merge commit and we'll need to\n // manually extract the commit details.\n // eslint-disable-next-line no-process-env\n const headRef = process.env.GITHUB_HEAD_REF;\n\n if (!headRef) {\n return {\n ...gitCommit,\n branch,\n };\n }\n\n const match = /Merge ([\\w\\d]+) into [\\w\\d]+/.exec(gitCommit.message);\n\n return {\n ...gitCommit,\n branch: headRef,\n hash: match ? match[1] : gitCommit.hash,\n };\n}\n\nfunction createCommitTitle(commitMessage?: string): string | undefined {\n if (!commitMessage) {\n return;\n }\n\n let title = commitMessage.split(/\\r?\\n/)[0]?.trim() || '';\n let jsonTitle = JSON.stringify(title);\n let isTruncated = false;\n\n while (jsonTitle.length > maxLabelLength) {\n const lastSpaceIndex = title.lastIndexOf(' ', maxLabelLength - 3);\n title = `${title.substring(\n 0,\n lastSpaceIndex > -1 ? lastSpaceIndex : maxLabelLength - 3,\n )}`.trimEnd();\n isTruncated = true;\n jsonTitle = JSON.stringify(title);\n }\n\n return isTruncated ? `${title}...` : title;\n}\n\nexport function getEnvironmentInput(\n config: DeploymentConfig,\n metadata: CIMetadata,\n): EnvironmentInput | undefined {\n if (config.defaultEnvironment) {\n return undefined;\n }\n\n const tag = config.environmentTag || metadata.branch;\n return tag ? {tag} : undefined;\n}\n\nexport function createLabels(metadata: Metadata): string[] {\n const labels: string[] = [];\n\n const checkLabel = (labelKey: string, labelValue: string) => {\n const jsonString = JSON.stringify(labelValue);\n if (jsonString.length > maxLabelLength) {\n throw new Error(\n `Provided ${labelKey} metadata exceeds maximum length (max ${maxLabelLength} characters).`,\n );\n }\n const label = `${labelKey}=${jsonString}`;\n labels.push(label);\n };\n\n if (metadata.name !== 'none') {\n labels.push(`ci-platform=${JSON.stringify(metadata.name)}`);\n }\n\n if (metadata.name !== 'unknown') {\n const keyMapping = {\n attempt: 'attempt',\n run: 'runId',\n };\n\n for (const [key, value] of Object.entries(keyMapping)) {\n const metadataKey = key as keyof Metadata;\n if (metadata[metadataKey]) {\n labels.push(\n `${metadata.name}-${value}=${JSON.stringify(metadata[metadataKey])}`,\n );\n }\n }\n }\n\n const keyMapping = {\n actor: 'user',\n branch: 'branch',\n commitDate: 'commit-date',\n commitMessage: 'description',\n commitSha: 'version',\n url: 'url',\n };\n\n for (const [key, value] of Object.entries(keyMapping)) {\n const metadataKey = key as keyof Metadata;\n if (metadata[metadataKey]) {\n checkLabel(value, metadata[metadataKey]!);\n }\n }\n\n return labels;\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/metadata.ts"],"names":["keyMapping"],"mappings":"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","file":"metadata.js","sourcesContent":["import {ciPlatform, CIMetadata} from '@shopify/cli-kit/node/context/local';\nimport {getLatestGitCommit} from '@shopify/cli-kit/node/git';\nimport {Logger, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {maxLabelLength} from '../utils/utils.js';\n\nimport {DeploymentConfig, EnvironmentInput} from './types.js';\n\nexport type Metadata = CIMetadata & {\n commitDate?: string;\n name?: string;\n};\n\nexport async function getMetadata(\n config: DeploymentConfig,\n logger: Logger,\n): Promise<Metadata> {\n const ciInfo = ciPlatform();\n const metadata: Metadata = ciInfo.metadata ?? {};\n\n try {\n const gitCommit = await latestCommit(config.rootPath);\n\n // Only update actor, commitDate, and commitMessage if we don't already have\n // the data from CI.\n if (!metadata.actor) {\n metadata.actor = gitCommit.author_name;\n }\n if (!metadata.commitDate) {\n metadata.commitDate = gitCommit.date;\n }\n if (!metadata.commitMessage) {\n metadata.commitMessage = gitCommit.message;\n }\n\n // Always update the following keys with the Git information if it's\n // available since we may modify what the values are.\n if (gitCommit.branch) {\n metadata.branch = gitCommit.branch;\n }\n if (gitCommit.hash) {\n metadata.commitSha = gitCommit.hash;\n }\n } catch (error) {\n outputWarn(\n 'Could not retrieve Git history, commit message will be unavailable.',\n logger,\n );\n }\n\n return {\n name: ciInfo.isCI ? ciInfo.name : 'none',\n ...metadata,\n actor: config.metadata.user ?? metadata.actor,\n commitMessage: createCommitTitle(\n config.metadata.description ?? metadata.commitMessage,\n ),\n commitSha: config.metadata.version ?? metadata.commitSha,\n url: config.metadata.url ?? metadata.url,\n };\n}\n\nasync function latestCommit(path?: string) {\n const gitCommit = await getLatestGitCommit(path);\n const branch = (/HEAD -> ([^,]*)/.exec(gitCommit.refs) || [])[1];\n\n // If this variable is set it means we are in a GitHub action using the\n // pull_request trigger which creates a merge commit and we'll need to\n // manually extract the commit details.\n // eslint-disable-next-line no-process-env\n const headRef = process.env.GITHUB_HEAD_REF;\n\n if (!headRef) {\n return {\n ...gitCommit,\n branch,\n };\n }\n\n const match = /Merge ([\\w\\d]+) into [\\w\\d]+/.exec(gitCommit.message);\n\n return {\n ...gitCommit,\n branch: headRef,\n hash: match ? match[1] : gitCommit.hash,\n };\n}\n\nfunction createCommitTitle(commitMessage?: string): string | undefined {\n if (!commitMessage) {\n return;\n }\n\n let title = commitMessage.split(/\\r?\\n/)[0]?.trim() || '';\n let jsonTitle = JSON.stringify(title);\n let isTruncated = false;\n\n while (jsonTitle.length > maxLabelLength) {\n const lastSpaceIndex = title.lastIndexOf(' ', maxLabelLength - 3);\n title = `${title.substring(\n 0,\n lastSpaceIndex > -1 ? lastSpaceIndex : maxLabelLength - 3,\n )}`.trimEnd();\n isTruncated = true;\n jsonTitle = JSON.stringify(title);\n }\n\n return isTruncated ? `${title}...` : title;\n}\n\nexport function getEnvironmentInput(\n config: DeploymentConfig,\n metadata: CIMetadata,\n): EnvironmentInput | undefined {\n if (config.defaultEnvironment) {\n return undefined;\n }\n\n const tag = config.environmentTag || metadata.branch;\n return tag ? {tag} : undefined;\n}\n\nexport function createLabels(metadata: Metadata): string[] {\n const labels: string[] = [];\n\n const checkLabel = (labelKey: string, labelValue: string) => {\n const jsonString = JSON.stringify(labelValue);\n if (jsonString.length > maxLabelLength) {\n throw new Error(\n `Provided ${labelKey} metadata exceeds maximum length (max ${maxLabelLength} characters).`,\n );\n }\n const label = `${labelKey}=${jsonString}`;\n labels.push(label);\n };\n\n if (metadata.name !== 'none') {\n labels.push(`ci-platform=${JSON.stringify(metadata.name)}`);\n }\n\n if (metadata.name !== 'unknown') {\n const keyMapping = {\n attempt: 'attempt',\n run: 'runId',\n };\n\n for (const [key, value] of Object.entries(keyMapping)) {\n const metadataKey = key as keyof Metadata;\n if (metadata[metadataKey]) {\n labels.push(\n `${metadata.name}-${value}=${JSON.stringify(metadata[metadataKey])}`,\n );\n }\n }\n }\n\n const keyMapping = {\n actor: 'user',\n branch: 'branch',\n commitDate: 'commit-date',\n commitMessage: 'description',\n commitSha: 'version',\n url: 'url',\n };\n\n for (const [key, value] of Object.entries(keyMapping)) {\n const metadataKey = key as keyof Metadata;\n if (metadata[metadataKey]) {\n checkLabel(value, metadata[metadataKey]!);\n }\n }\n\n return labels;\n}\n"]}
@@ -9,5 +9,5 @@ class DeploymentCompletedVerificationError extends Error {
9
9
  }
10
10
 
11
11
  export { DeploymentCompletedVerificationError, FileType, VerificationError };
12
- //# sourceMappingURL=out.js.map
12
+ //# sourceMappingURL=types.js.map
13
13
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/types.ts"],"names":["FileType"],"mappings":"AAiFO,IAAK,WAAL,kBAAKA,cAAL;AACL,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;AASL,MAAM,0BAA0B,MAAM;AAAC;AAEvC,MAAM,6CAA6C,MAAM;AAAC","sourcesContent":["import {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n\nexport interface Build {\n id: string;\n assetPath: string;\n}\n\nexport interface ClientError extends Error {\n statusCode: number;\n}\n\nexport interface DeploymentHooks {\n buildFunction?: (urlPath?: string) => Promise<void>;\n onDeploymentCompletedVerificationStart?: () => void;\n onDeploymentCompletedVerificationError?: () => void;\n onDeploymentFailed?: (\n responseData: DeploymentVerificationDetailsResponse,\n ) => void;\n onDeploymentCompleted?: () => void;\n onVerificationStart?: () => void;\n onVerificationComplete?: () => void;\n onVerificationError?: (error: Error) => void;\n onUploadFilesStart?: () => void;\n onUploadFilesError?: (error: Error) => void;\n onUploadFilesComplete?: () => void;\n}\n\nexport interface DeploymentConfig {\n assetsDir?: string;\n bugsnag: boolean;\n buildCommand?: string;\n deploymentToken: DeploymentToken;\n deploymentUrl: string;\n environmentTag?: string;\n metadata: {\n description?: string;\n user?: string;\n version?: string;\n url?: string;\n };\n defaultEnvironment: boolean;\n rootPath?: string;\n skipBuild: boolean;\n skipVerification: boolean;\n verificationMaxDuration: number;\n workerDir?: string;\n workerOnly: boolean;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: string;\n overriddenEnvironmentVariables?: EnvironmentVariable[];\n}\n\nexport interface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentToken {\n accessToken: string;\n allowedResource: string;\n appId: string;\n client: string;\n expiresAt: string;\n namespace: string;\n namespaceId: string;\n}\n\nexport interface DeploymentManifestFile {\n filePath: string;\n fileSize: number;\n mimeType: string;\n fileHash: string;\n fileType: string;\n}\n\nexport interface EnvironmentInput {\n handle?: string;\n tag?: string;\n}\n\nexport enum FileType {\n Worker = 'WORKER',\n Asset = 'ASSET',\n}\n\nexport interface OxygenError {\n message: string;\n}\n\nexport class VerificationError extends Error {}\n\nexport class DeploymentCompletedVerificationError extends Error {}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/types.ts"],"names":["FileType"],"mappings":"AAiFY,IAAA,QAAA,qBAAAA,SAAL,KAAA;AACL,EAAAA,UAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACT,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AAFE,EAAAA,OAAAA,SAAAA,CAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA,EAAA;AASL,MAAM,0BAA0B,KAAM,CAAA;AAAC,CAAA;AAEvC,MAAM,6CAA6C,KAAM,CAAA;AAAC","file":"types.js","sourcesContent":["import {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n\nexport interface Build {\n id: string;\n assetPath: string;\n}\n\nexport interface ClientError extends Error {\n statusCode: number;\n}\n\nexport interface DeploymentHooks {\n buildFunction?: (urlPath?: string) => Promise<void>;\n onDeploymentCompletedVerificationStart?: () => void;\n onDeploymentCompletedVerificationError?: () => void;\n onDeploymentFailed?: (\n responseData: DeploymentVerificationDetailsResponse,\n ) => void;\n onDeploymentCompleted?: () => void;\n onVerificationStart?: () => void;\n onVerificationComplete?: () => void;\n onVerificationError?: (error: Error) => void;\n onUploadFilesStart?: () => void;\n onUploadFilesError?: (error: Error) => void;\n onUploadFilesComplete?: () => void;\n}\n\nexport interface DeploymentConfig {\n assetsDir?: string;\n bugsnag: boolean;\n buildCommand?: string;\n deploymentToken: DeploymentToken;\n deploymentUrl: string;\n environmentTag?: string;\n metadata: {\n description?: string;\n user?: string;\n version?: string;\n url?: string;\n };\n defaultEnvironment: boolean;\n rootPath?: string;\n skipBuild: boolean;\n skipVerification: boolean;\n verificationMaxDuration: number;\n workerDir?: string;\n workerOnly: boolean;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: string;\n overriddenEnvironmentVariables?: EnvironmentVariable[];\n}\n\nexport interface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentToken {\n accessToken: string;\n allowedResource: string;\n appId: string;\n client: string;\n expiresAt: string;\n namespace: string;\n namespaceId: string;\n}\n\nexport interface DeploymentManifestFile {\n filePath: string;\n fileSize: number;\n mimeType: string;\n fileHash: string;\n fileType: string;\n}\n\nexport interface EnvironmentInput {\n handle?: string;\n tag?: string;\n}\n\nexport enum FileType {\n Worker = 'WORKER',\n Asset = 'ASSET',\n}\n\nexport interface OxygenError {\n message: string;\n}\n\nexport class VerificationError extends Error {}\n\nexport class DeploymentCompletedVerificationError extends Error {}\n"]}
@@ -180,5 +180,5 @@ function isErrorCode(err, code) {
180
180
  }
181
181
 
182
182
  export { uploadFiles };
183
- //# sourceMappingURL=out.js.map
183
+ //# sourceMappingURL=upload-files.js.map
184
184
  //# sourceMappingURL=upload-files.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/upload-files.ts"],"names":[],"mappings":"AACA,SAAQ,aAAY;AAEpB,SAAQ,OAAO,gBAAe;AAC9B,SAAQ,4BAA2B;AACnC;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAQ,gBAAe;AACvB,SAAQ,gBAAe;AAEvB,SAAQ,sBAAqB;AAC7B,SAAyB,kBAAiB;AAwB1C,eAAsB,YAAY,SAA4C;AAC5E,QAAM,EAAC,QAAQ,QAAQ,SAAS,MAAK,IAAI;AACzC,aAAW,aAAa,QAAQ,MAAM,aAAa,MAAM;AAEzD,QAAM,kBACJ,QAAQ,OAAO,CAAC,OAAO,WAAW,QAAQ,OAAO,UAAU,CAAC,IAAI;AAClE,UAAQ,iBAAiB,IAAI,WAAW,mBAAmB,eAAe;AAC1E,UAAQ,iBAAiB,IAAI,WAAW,kBAAkB,QAAQ,MAAM;AAExE,QAAM,QAAQ,IAAI,MAAM,EAAC,WAAW,KAAI,CAAC;AACzC,SAAO,qBAAqB;AAC5B,QAAM,YAAY,YAAY,IAAI;AAClC,SAAO,SAAS,SAAS,GAAG,OAAO,WAAqC;AACtE,UAAM,WAAW,QAAQ,QAAQ,KAAK;AAAA,EACxC,CAAC,EACE,KAAK,MAAM;AACV,UAAM,UAAU,YAAY,IAAI;AAChC,WAAO,wBAAwB;AAC/B,YAAQ,iBAAiB,IAAI,WAAW,YAAY,UAAU,SAAS;AACvE,oBAAgB,+BAA+B,MAAM;AAAA,EACvD,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,WAAO,qBAAqB,GAAG;AAC/B,UAAM;AAAA,EACR,CAAC,EACA,QAAQ,MAAM;AACb,UAAM,QAAQ;AAAA,EAChB,CAAC;AACL;AAEA,eAAe,WACb,QACA,QACA,OACA;AACA,QAAM,kBACJ,OAAO,aAAa,WAChB,SAAS,OAAO,UAAW,OAAO,SAAU,IAC5C,SAAS,OAAO,UAAW,OAAO,SAAU;AAElD,MAAI,OAAO,eAAe,QAAQ,OAAO,WAAW,SAAS,GAAG;AAE9D,UAAM,OAAO,SAAS;AACtB,WAAO,WAAW,QAAQ,CAAC,UAAU;AACnC,WAAK,OAAO,MAAM,MAAM,MAAM,KAAK;AAAA,IACrC,CAAC;AACD,SAAK;AAAA,MACH;AAAA,MACA,qBAAqB,SAAS,iBAAiB,OAAO,QAAQ,CAAC;AAAA,IACjE;AACA,UAAM,WAAW,MAAM,QAAQ,KAAK;AAAA,EACtC,OAAO;AAEL,UAAM,WAAW,MAAM,wBAAwB,QAAQ,KAAK;AAC5D,UAAM;AAAA,MACJ,SAAS,iBAAiB,OAAO,QAAQ;AAAA,MACzC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,WACb,MACA,QACA,OACA,gBAAgB,GAChB;AACA,MAAI;AACF,UAAM,kBAAkB;AACxB,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM;AAC/B,iBAAW,MAAM;AAAA,IACnB,GAAG,eAAe;AAElB,UAAM,WAAW,MAAM,MAAM,OAAO,WAAW;AAAA,MAC7C,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ,WAAW;AAAA,MACnB,SAAS;AAAA,QACP,YAAY;AAAA,MACd;AAAA,MACA;AAAA,IACF,CAAC;AACD,iBAAa,OAAO;AAEpB,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,GAAG,SAAS,MAAM,EAAE;AAAA,IACtC;AAAA,EACF,SAAS,KAAK;AACZ,QAAI,YAAY,KAAK,QAAQ,GAAG;AAC9B,YAAM,IAAI,MAAM,mBAAmB,OAAO,QAAQ,EAAE;AAAA,IACtD;AAEA,QAAI,gBAAgB,OAAO,eAAe,iBAAiB,GAAG;AAC5D,YAAM,WAAW,MAAM,QAAQ,OAAO,gBAAgB,CAAC;AAAA,IACzD,OAAO;AACL,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AACrD,cAAM,IAAI,MAAM,oCAAoC,OAAO,QAAQ,EAAE;AAAA,MACvE;AACA,YAAM,IAAI,MAAM,yBAAyB,OAAO,QAAQ,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;AAEA,eAAe,wBACb,QACA,OACoC;AACpC,SAAO,MAAM,OAAO,WAAW;AAAA,IAC7B,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,oBAAoB;AAAA,MACpB,+BAA+B,KAAK,OAAO,QAAQ;AAAA,MACnD,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,EACF,CAAC,EACE,KAAK,CAAC,QAAQ;AACb,WAAO;AAAA,MACL,YAAY,IAAI,QAAQ,IAAI,sBAAsB;AAAA,MAClD,UAAU,IAAI,QAAQ,IAAI,UAAU;AAAA,MACpC;AAAA,IACF;AAAA,EACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,UAAM,IAAI;AAAA,MACR,gDAAgD,OAAO,QAAQ,iBAAiB,IAAI,UAAU;AAAA,IAChG;AAAA,EACF,CAAC;AACL;AAEA,eAAe,uBACb,eACA,UACA,OACA,YAAY,GACZ,gBAAgB,GAChB;AACA,QAAM;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,MAAM,OAAO,QAAQ;AACrB,QAAI,YAAY,KAAK,QAAQ,GAAG;AAC9B,YAAM,IAAI,MAAM,mBAAmB,SAAS,OAAO,QAAQ,EAAE;AAAA,IAC/D;AAEA,QACE,OACA,iBAAiB,OAAO,eAAe,yBAAyB,GAChE;AACA,YAAM,IAAI;AAAA,QACR,yBAAyB,SAAS,OAAO,QAAQ,UAAU,eAAe,yBAAyB;AAAA,MACrG;AAAA,IACF;AACA,UAAM,SAAS,MAAM;AAAA,MACnB,SAAS;AAAA,MACT,SAAS,OAAO;AAAA,MAChB;AAAA,IACF;AACA,QAAI,CAAC,OAAO,UAAU;AACpB,YAAM,uBAAuB,OAAO;AACpC,YAAM,UAAU,gBAAgB;AAChC,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAe,gBACb,UACA,UACA,kBACA,OACiB;AACjB,QAAM,OAAO,qBAAqB,UAAU,EAAC,OAAO,iBAAgB,CAAC;AACrE,SAAO,MAAM,UAAU;AAAA,IACrB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN;AAAA,EACF,CAAC,EAAE,KAAK,CAAC,QAAQ;AACf,WAAO,IAAI;AAAA,EACb,CAAC;AACH;AAEA,eAAe,sBACb,UACA,UACA,OACgC;AAChC,QAAM,cAAc,CAAC,UAAiC;AACpD,QAAI,CAAC,SAAS,MAAM,MAAM,GAAG,EAAE,WAAW,EAAG,QAAO;AACpD,UAAM,aAAa,MAAM,MAAM,GAAG;AAClC,WAAO,SAAS,WAAW,CAAC,GAAI,EAAE;AAAA,EACpC;AAEA,SAAO,MAAM,UAAU;AAAA,IACrB,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,kBAAkB;AAAA,MAClB,iBAAiB,WAAW,QAAQ;AAAA,IACtC;AAAA,IACA;AAAA,EACF,CAAC,EACE,KAAK,CAAC,QAAQ;AACb,WAAO;AAAA,MACL,UAAU,IAAI,WAAW;AAAA,MACzB,kBAAkB,YAAY,IAAI,QAAQ,IAAI,OAAO,CAAC;AAAA,IACxD;AAAA,EACF,CAAC,EACA,MAAM,CAAC,QAAQ;AAEd,YAAQ,MAAM,GAAG;AACjB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,kBAAkB;AAAA,IACpB;AAAA,EACF,CAAC;AACL;AAEA,SAAS,YAAY,KAAc,MAAuB;AACxD,SAAO,eAAe,SAAS,UAAU,OAAO,IAAI,SAAS;AAC/D","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {Agent} from 'https';\n\nimport {fetch, formData} from '@shopify/cli-kit/node/http';\nimport {createFileReadStream} from '@shopify/cli-kit/node/fs';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {mapLimit} from 'async';\n\nimport {deployDefaults} from '../utils/utils.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\nimport {DeploymentTargetResponse} from './graphql/deployment-initiate.js';\n\ninterface InitiateResumableResponse {\n target: DeploymentTargetResponse;\n sessionUri: string;\n location: string;\n}\n\ninterface ResumableUploadStatus {\n complete: boolean;\n lastReceivedByte: number;\n}\n\ninterface UploadFilesOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n metricsExporter?: MetricsExporter;\n targets: DeploymentTargetResponse[];\n}\n\nexport async function uploadFiles(options: UploadFilesOptions): Promise<void> {\n const {config, logger, targets, hooks} = options;\n outputInfo(`Uploading ${targets.length} files...`, logger);\n\n const totalUploadSize =\n targets.reduce((total, target) => total + target.fileSize, 0) / 1024;\n options.metricsExporter?.add(MetricName.TotalSizeUploaded, totalUploadSize);\n options.metricsExporter?.add(MetricName.NumFilesUploaded, targets.length);\n\n const agent = new Agent({keepAlive: true});\n hooks?.onUploadFilesStart?.();\n const startTime = performance.now();\n return mapLimit(targets, 6, async (target: DeploymentTargetResponse) => {\n await uploadFile(config, target, agent);\n })\n .then(() => {\n const endTime = performance.now();\n hooks?.onUploadFilesComplete?.();\n options.metricsExporter?.add(MetricName.UploadTime, endTime - startTime);\n outputCompleted(`Files uploaded successfully`, logger);\n })\n .catch((err) => {\n hooks?.onUploadFilesError?.(err);\n throw err;\n })\n .finally(() => {\n agent.destroy();\n });\n}\n\nasync function uploadFile(\n config: DeploymentConfig,\n target: DeploymentTargetResponse,\n agent: Agent,\n) {\n const localFolderPath =\n target.fileType === 'WORKER'\n ? joinPath(config.rootPath!, config.workerDir!)\n : joinPath(config.rootPath!, config.assetsDir!);\n\n if (target.parameters !== null && target.parameters.length > 0) {\n // If parameters exist perform a form upload\n const form = formData();\n target.parameters.forEach((param) => {\n form.append(param.name, param.value);\n });\n form.append(\n 'file',\n createFileReadStream(joinPath(localFolderPath, target.filePath)),\n );\n await formUpload(form, target, agent);\n } else {\n // If no parameters exist perform a resumable upload\n const initData = await initiateResumableUpload(target, agent);\n await performResumableUpload(\n joinPath(localFolderPath, target.filePath),\n initData,\n agent,\n );\n }\n}\n\nasync function formUpload(\n form: ReturnType<typeof formData>,\n target: DeploymentTargetResponse,\n agent: Agent,\n attemptNumber = 0,\n) {\n try {\n const timeoutDuration = 120000;\n const controller = new AbortController();\n const timeout = setTimeout(() => {\n controller.abort();\n }, timeoutDuration);\n\n const response = await fetch(target.uploadUrl, {\n method: 'POST',\n body: form,\n signal: controller.signal,\n headers: {\n Connection: 'keep-alive',\n },\n agent,\n });\n clearTimeout(timeout);\n\n if (!response.ok) {\n throw new Error(`${response.status}`);\n }\n } catch (err) {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${target.filePath}`);\n }\n\n if (attemptNumber < Number(deployDefaults.maxUploadAttempts)) {\n await formUpload(form, target, agent, attemptNumber + 1);\n } else {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new Error(`Request timeout whilst uploading ${target.filePath}`);\n }\n throw new Error(`Failed to upload file ${target.filePath}`);\n }\n }\n}\n\nasync function initiateResumableUpload(\n target: DeploymentTargetResponse,\n agent: Agent,\n): Promise<InitiateResumableResponse> {\n return fetch(target.uploadUrl, {\n method: 'POST',\n headers: {\n 'x-goog-resumable': 'start',\n 'X-Goog-Content-Length-Range': `0,${target.fileSize}`,\n 'User-Agent': 'oxygen-cli',\n },\n agent,\n })\n .then((res) => {\n return {\n sessionUri: res.headers.get('x-guploader-uploadid')!,\n location: res.headers.get('location')!,\n target,\n };\n })\n .catch((err) => {\n throw new Error(\n `Failed to initiate resumable upload for file ${target.filePath} (status code ${err.statusCode})`,\n );\n });\n}\n\nasync function performResumableUpload(\n localFilePath: string,\n initData: InitiateResumableResponse,\n agent: Agent,\n startByte = 0,\n attemptNumber = 0,\n) {\n await uploadResumable(\n initData.location,\n localFilePath,\n startByte,\n agent,\n ).catch(async (err) => {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${initData.target.filePath}`);\n }\n\n if (\n err &&\n attemptNumber >= Number(deployDefaults.maxResumabeUploadAttempts)\n ) {\n throw new Error(\n `Failed to upload file ${initData.target.filePath} after ${deployDefaults.maxResumabeUploadAttempts} attempts`,\n );\n }\n const status = await resumableUploadStatus(\n initData.location,\n initData.target.fileSize,\n agent,\n );\n if (!status.complete) {\n const nextAttemptStartByte = status.lastReceivedByte;\n const attempt = attemptNumber + 1;\n await performResumableUpload(\n localFilePath,\n initData,\n agent,\n nextAttemptStartByte,\n attempt,\n );\n }\n });\n}\n\nasync function uploadResumable(\n location: string,\n filePath: string,\n lastReceivedByte: number,\n agent: Agent,\n): Promise<number> {\n const file = createFileReadStream(filePath, {start: lastReceivedByte});\n return fetch(location, {\n method: 'PUT',\n body: file,\n agent,\n }).then((res) => {\n return res.status;\n });\n}\n\nasync function resumableUploadStatus(\n location: string,\n fileSize: number,\n agent: Agent,\n): Promise<ResumableUploadStatus> {\n const getLastByte = (range: string | null): number => {\n if (!range || range.split('-').length !== 2) return 0;\n const rangeParts = range.split('-');\n return parseInt(rangeParts[1]!, 10);\n };\n\n return fetch(location, {\n method: 'PUT',\n headers: {\n 'Content-Length': '0',\n 'Content-Range': `bytes */${fileSize}`,\n },\n agent,\n })\n .then((res) => {\n return {\n complete: res.status === 200,\n lastReceivedByte: getLastByte(res.headers.get('range')),\n };\n })\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error(err);\n return {\n complete: false,\n lastReceivedByte: 0,\n };\n });\n}\n\nfunction isErrorCode(err: unknown, code: string): boolean {\n return err instanceof Error && 'code' in err && err.code === code;\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/upload-files.ts"],"names":[],"mappings":"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","file":"upload-files.js","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {Agent} from 'https';\n\nimport {fetch, formData} from '@shopify/cli-kit/node/http';\nimport {createFileReadStream} from '@shopify/cli-kit/node/fs';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {mapLimit} from 'async';\n\nimport {deployDefaults} from '../utils/utils.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {DeploymentConfig, DeploymentHooks} from './types.js';\nimport {DeploymentTargetResponse} from './graphql/deployment-initiate.js';\n\ninterface InitiateResumableResponse {\n target: DeploymentTargetResponse;\n sessionUri: string;\n location: string;\n}\n\ninterface ResumableUploadStatus {\n complete: boolean;\n lastReceivedByte: number;\n}\n\ninterface UploadFilesOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n metricsExporter?: MetricsExporter;\n targets: DeploymentTargetResponse[];\n}\n\nexport async function uploadFiles(options: UploadFilesOptions): Promise<void> {\n const {config, logger, targets, hooks} = options;\n outputInfo(`Uploading ${targets.length} files...`, logger);\n\n const totalUploadSize =\n targets.reduce((total, target) => total + target.fileSize, 0) / 1024;\n options.metricsExporter?.add(MetricName.TotalSizeUploaded, totalUploadSize);\n options.metricsExporter?.add(MetricName.NumFilesUploaded, targets.length);\n\n const agent = new Agent({keepAlive: true});\n hooks?.onUploadFilesStart?.();\n const startTime = performance.now();\n return mapLimit(targets, 6, async (target: DeploymentTargetResponse) => {\n await uploadFile(config, target, agent);\n })\n .then(() => {\n const endTime = performance.now();\n hooks?.onUploadFilesComplete?.();\n options.metricsExporter?.add(MetricName.UploadTime, endTime - startTime);\n outputCompleted(`Files uploaded successfully`, logger);\n })\n .catch((err) => {\n hooks?.onUploadFilesError?.(err);\n throw err;\n })\n .finally(() => {\n agent.destroy();\n });\n}\n\nasync function uploadFile(\n config: DeploymentConfig,\n target: DeploymentTargetResponse,\n agent: Agent,\n) {\n const localFolderPath =\n target.fileType === 'WORKER'\n ? joinPath(config.rootPath!, config.workerDir!)\n : joinPath(config.rootPath!, config.assetsDir!);\n\n if (target.parameters !== null && target.parameters.length > 0) {\n // If parameters exist perform a form upload\n const form = formData();\n target.parameters.forEach((param) => {\n form.append(param.name, param.value);\n });\n form.append(\n 'file',\n createFileReadStream(joinPath(localFolderPath, target.filePath)),\n );\n await formUpload(form, target, agent);\n } else {\n // If no parameters exist perform a resumable upload\n const initData = await initiateResumableUpload(target, agent);\n await performResumableUpload(\n joinPath(localFolderPath, target.filePath),\n initData,\n agent,\n );\n }\n}\n\nasync function formUpload(\n form: ReturnType<typeof formData>,\n target: DeploymentTargetResponse,\n agent: Agent,\n attemptNumber = 0,\n) {\n try {\n const timeoutDuration = 120000;\n const controller = new AbortController();\n const timeout = setTimeout(() => {\n controller.abort();\n }, timeoutDuration);\n\n const response = await fetch(target.uploadUrl, {\n method: 'POST',\n body: form,\n signal: controller.signal,\n headers: {\n Connection: 'keep-alive',\n },\n agent,\n });\n clearTimeout(timeout);\n\n if (!response.ok) {\n throw new Error(`${response.status}`);\n }\n } catch (err) {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${target.filePath}`);\n }\n\n if (attemptNumber < Number(deployDefaults.maxUploadAttempts)) {\n await formUpload(form, target, agent, attemptNumber + 1);\n } else {\n if (err instanceof Error && err.name === 'AbortError') {\n throw new Error(`Request timeout whilst uploading ${target.filePath}`);\n }\n throw new Error(`Failed to upload file ${target.filePath}`);\n }\n }\n}\n\nasync function initiateResumableUpload(\n target: DeploymentTargetResponse,\n agent: Agent,\n): Promise<InitiateResumableResponse> {\n return fetch(target.uploadUrl, {\n method: 'POST',\n headers: {\n 'x-goog-resumable': 'start',\n 'X-Goog-Content-Length-Range': `0,${target.fileSize}`,\n 'User-Agent': 'oxygen-cli',\n },\n agent,\n })\n .then((res) => {\n return {\n sessionUri: res.headers.get('x-guploader-uploadid')!,\n location: res.headers.get('location')!,\n target,\n };\n })\n .catch((err) => {\n throw new Error(\n `Failed to initiate resumable upload for file ${target.filePath} (status code ${err.statusCode})`,\n );\n });\n}\n\nasync function performResumableUpload(\n localFilePath: string,\n initData: InitiateResumableResponse,\n agent: Agent,\n startByte = 0,\n attemptNumber = 0,\n) {\n await uploadResumable(\n initData.location,\n localFilePath,\n startByte,\n agent,\n ).catch(async (err) => {\n if (isErrorCode(err, 'ENOENT')) {\n throw new Error(`File not found: ${initData.target.filePath}`);\n }\n\n if (\n err &&\n attemptNumber >= Number(deployDefaults.maxResumabeUploadAttempts)\n ) {\n throw new Error(\n `Failed to upload file ${initData.target.filePath} after ${deployDefaults.maxResumabeUploadAttempts} attempts`,\n );\n }\n const status = await resumableUploadStatus(\n initData.location,\n initData.target.fileSize,\n agent,\n );\n if (!status.complete) {\n const nextAttemptStartByte = status.lastReceivedByte;\n const attempt = attemptNumber + 1;\n await performResumableUpload(\n localFilePath,\n initData,\n agent,\n nextAttemptStartByte,\n attempt,\n );\n }\n });\n}\n\nasync function uploadResumable(\n location: string,\n filePath: string,\n lastReceivedByte: number,\n agent: Agent,\n): Promise<number> {\n const file = createFileReadStream(filePath, {start: lastReceivedByte});\n return fetch(location, {\n method: 'PUT',\n body: file,\n agent,\n }).then((res) => {\n return res.status;\n });\n}\n\nasync function resumableUploadStatus(\n location: string,\n fileSize: number,\n agent: Agent,\n): Promise<ResumableUploadStatus> {\n const getLastByte = (range: string | null): number => {\n if (!range || range.split('-').length !== 2) return 0;\n const rangeParts = range.split('-');\n return parseInt(rangeParts[1]!, 10);\n };\n\n return fetch(location, {\n method: 'PUT',\n headers: {\n 'Content-Length': '0',\n 'Content-Range': `bytes */${fileSize}`,\n },\n agent,\n })\n .then((res) => {\n return {\n complete: res.status === 200,\n lastReceivedByte: getLastByte(res.headers.get('range')),\n };\n })\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error(err);\n return {\n complete: false,\n lastReceivedByte: 0,\n };\n });\n}\n\nfunction isErrorCode(err: unknown, code: string): boolean {\n return err instanceof Error && 'code' in err && err.code === code;\n}\n"]}
@@ -57,5 +57,5 @@ async function verifyDeploymentCompleted(options, deploymentId) {
57
57
  }
58
58
 
59
59
  export { verifyDeploymentCompleted };
60
- //# sourceMappingURL=out.js.map
60
+ //# sourceMappingURL=verify-deployment-completed.js.map
61
61
  //# sourceMappingURL=verify-deployment-completed.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/verify-deployment-completed.ts"],"names":[],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAEP,SAAQ,cAAa;AAErB;AAAA,EAGE;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAGA;AAAA,OACK;AASP,eAAsB,0BACpB,SACA,cACgD;AAChD,QAAM,EAAC,QAAQ,QAAQ,kBAAkB,MAAK,IAAI;AAClD,QAAM,YAAY;AAAA,IAChB;AAAA,EACF;AAEA,SAAO,yCAAyC;AAChD,aAAW,qCAAqC,MAAM;AAEtD,MAAI,WAAW;AACf,QAAM,YAAY,KAAK,IAAI;AAE3B,QAAM,iBAAiB,YAAY;AACjC,UAAM,QAAQ;AACd,UAAM,eAAe,KAAK,IAAI,IAAI,aAAa;AAC/C,QAAI,cAAc,QAAQ,MAAO,kBAAkB;AACjD,aAAO,yCAAyC;AAChD,YAAM,IAAI;AAAA,QACR,kCAAkC,gBAAgB;AAAA,MACpD;AAAA,IACF;AACA;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AACzD,WAAO,MAAM;AAAA,EACf;AAEA,QAAM,QAAQ,YAA4D;AACxE,UAAM,WACJ,MAAM,eAAe;AAAA,MACnB,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK,GAAG,OAAO,aAAa;AAAA,MAC5B,OAAO,OAAO,gBAAgB;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,QACZ,CAAC,OAAO,qBAAqB,GAAG,OAAO,gBAAgB;AAAA,MACzD;AAAA,IACF,CAAC;AAEH,UAAM,OAAO,SAAS;AACtB,QAAI,QAAQ,MAAM;AAChB,aAAO,yCAAyC;AAChD,YAAM,IAAI,qCAAqC,sBAAsB;AAAA,IACvE;AAEA,QAAI,KAAK,WAAW,OAAO,UAAU;AACnC,sBAAgB,+CAA+C,MAAM;AACrE,aAAO,wBAAwB;AAC/B,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,WAAW,OAAO,UAAU,KAAK,WAAW,OAAO,WAAW;AACrE,aAAO,qBAAqB,IAAI;AAChC,YAAM,IAAI;AAAA,QACR,KAAK,QACD,cAAc,KAAK,OAAO,kBAAkB,CAAC,YAC3C,KAAK,KACP,KACA,cAAc,KAAK,OAAO,kBAAkB,CAAC;AAAA,MACnD;AAAA,IACF;AAEA,WAAO,eAAe;AAAA,EACxB;AAEA,SAAO,MAAM;AACf","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\n\nimport {Header} from '../utils/utils.js';\n\nimport {\n DeploymentConfig,\n DeploymentHooks,\n DeploymentCompletedVerificationError,\n} from './types.js';\nimport {\n DeploymentVerificationDetailsQuery,\n DeploymentVerificationDetailsQueryData,\n DeploymentVerificationDetailsResponse,\n Status,\n} from './graphql/deployment-verification-details.js';\n\ninterface DeploymentVerificationDetailsOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n timeoutInSeconds: number;\n logger: Logger;\n}\n\nexport async function verifyDeploymentCompleted(\n options: DeploymentVerificationDetailsOptions,\n deploymentId: string,\n): Promise<DeploymentVerificationDetailsResponse> {\n const {config, logger, timeoutInSeconds, hooks} = options;\n const variables = {\n deploymentId,\n };\n\n hooks?.onDeploymentCompletedVerificationStart?.();\n outputInfo('Verifying deployment completed...', logger);\n\n let attempts = 0;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n const delay = 3000;\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > timeoutInSeconds) {\n hooks?.onDeploymentCompletedVerificationError?.();\n throw new Error(\n `Deployment not completed after ${timeoutInSeconds} seconds.`,\n );\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n return check();\n };\n\n const check = async (): Promise<DeploymentVerificationDetailsResponse> => {\n const response: DeploymentVerificationDetailsQueryData =\n await graphqlRequest({\n query: DeploymentVerificationDetailsQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n const data = response.deploymentVerificationDetails;\n if (data == null) {\n hooks?.onDeploymentCompletedVerificationError?.();\n throw new DeploymentCompletedVerificationError('Deployment not found');\n }\n\n if (data.status === Status.Deployed) {\n outputCompleted('Deployment to Oxygen completed successfully', logger);\n hooks?.onDeploymentCompleted?.();\n return data;\n }\n\n if (data.status === Status.Failed || data.status === Status.Cancelled) {\n hooks?.onDeploymentFailed?.(data);\n throw new DeploymentCompletedVerificationError(\n data.error\n ? `Deployment ${data.status.toLocaleLowerCase()}, error: ${\n data.error\n }`\n : `Deployment ${data.status.toLocaleLowerCase()}`,\n );\n }\n\n return handleInterval();\n };\n\n return check();\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/verify-deployment-completed.ts"],"names":[],"mappings":";;;;;;AA4BA,eAAsB,yBAAA,CACpB,SACA,YACgD,EAAA;AAChD,EAAA,MAAM,EAAC,MAAA,EAAQ,MAAQ,EAAA,gBAAA,EAAkB,OAAS,GAAA,OAAA,CAAA;AAClD,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,YAAA;AAAA,GACF,CAAA;AAEA,EAAA,KAAA,EAAO,sCAAyC,IAAA,CAAA;AAChD,EAAA,UAAA,CAAW,qCAAqC,MAAM,CAAA,CAAA;AAGtD,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AAE3B,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,MAAM,KAAQ,GAAA,GAAA,CAAA;AACd,IAAA,MAAM,WAAe,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA,CAAA;AAC/C,IAAI,IAAA,WAAA,GAAc,KAAQ,GAAA,GAAA,GAAO,gBAAkB,EAAA;AACjD,MAAA,KAAA,EAAO,sCAAyC,IAAA,CAAA;AAChD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,kCAAkC,gBAAgB,CAAA,SAAA,CAAA;AAAA,OACpD,CAAA;AAAA,KACF;AAEA,IAAA,MAAM,IAAI,OAAQ,CAAA,CAAC,YAAY,UAAW,CAAA,OAAA,EAAS,KAAK,CAAC,CAAA,CAAA;AACzD,IAAA,OAAO,KAAM,EAAA,CAAA;AAAA,GACf,CAAA;AAEA,EAAA,MAAM,QAAQ,YAA4D;AACxE,IAAM,MAAA,QAAA,GACJ,MAAM,cAAe,CAAA;AAAA,MACnB,KAAO,EAAA,kCAAA;AAAA,MACP,GAAK,EAAA,QAAA;AAAA,MACL,GAAA,EAAK,CAAG,EAAA,MAAA,CAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,OAAO,eAAgB,CAAA,WAAA;AAAA,MAC9B,SAAA;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,CAAC,MAAA,CAAO,qBAAqB,GAAG,OAAO,eAAgB,CAAA,SAAA;AAAA,OACzD;AAAA,KACD,CAAA,CAAA;AAEH,IAAA,MAAM,OAAO,QAAS,CAAA,6BAAA,CAAA;AACtB,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,KAAA,EAAO,sCAAyC,IAAA,CAAA;AAChD,MAAM,MAAA,IAAI,qCAAqC,sBAAsB,CAAA,CAAA;AAAA,KACvE;AAEA,IAAI,IAAA,IAAA,CAAK,MAAW,KAAA,MAAA,CAAO,QAAU,EAAA;AACnC,MAAA,eAAA,CAAgB,+CAA+C,MAAM,CAAA,CAAA;AACrE,MAAA,KAAA,EAAO,qBAAwB,IAAA,CAAA;AAC/B,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAEA,IAAA,IAAI,KAAK,MAAW,KAAA,MAAA,CAAO,UAAU,IAAK,CAAA,MAAA,KAAW,OAAO,SAAW,EAAA;AACrE,MAAA,KAAA,EAAO,qBAAqB,IAAI,CAAA,CAAA;AAChC,MAAA,MAAM,IAAI,oCAAA;AAAA,QACR,IAAK,CAAA,KAAA,GACD,CAAc,WAAA,EAAA,IAAA,CAAK,OAAO,iBAAkB,EAAC,CAC3C,SAAA,EAAA,IAAA,CAAK,KACP,CACA,CAAA,GAAA,CAAA,WAAA,EAAc,IAAK,CAAA,MAAA,CAAO,mBAAmB,CAAA,CAAA;AAAA,OACnD,CAAA;AAAA,KACF;AAEA,IAAA,OAAO,cAAe,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,OAAO,KAAM,EAAA,CAAA;AACf","file":"verify-deployment-completed.js","sourcesContent":["import {graphqlRequest} from '@shopify/cli-kit/node/api/graphql';\nimport {\n Logger,\n outputCompleted,\n outputInfo,\n} from '@shopify/cli-kit/node/output';\n\nimport {Header} from '../utils/utils.js';\n\nimport {\n DeploymentConfig,\n DeploymentHooks,\n DeploymentCompletedVerificationError,\n} from './types.js';\nimport {\n DeploymentVerificationDetailsQuery,\n DeploymentVerificationDetailsQueryData,\n DeploymentVerificationDetailsResponse,\n Status,\n} from './graphql/deployment-verification-details.js';\n\ninterface DeploymentVerificationDetailsOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n timeoutInSeconds: number;\n logger: Logger;\n}\n\nexport async function verifyDeploymentCompleted(\n options: DeploymentVerificationDetailsOptions,\n deploymentId: string,\n): Promise<DeploymentVerificationDetailsResponse> {\n const {config, logger, timeoutInSeconds, hooks} = options;\n const variables = {\n deploymentId,\n };\n\n hooks?.onDeploymentCompletedVerificationStart?.();\n outputInfo('Verifying deployment completed...', logger);\n\n let attempts = 0;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n const delay = 3000;\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > timeoutInSeconds) {\n hooks?.onDeploymentCompletedVerificationError?.();\n throw new Error(\n `Deployment not completed after ${timeoutInSeconds} seconds.`,\n );\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n return check();\n };\n\n const check = async (): Promise<DeploymentVerificationDetailsResponse> => {\n const response: DeploymentVerificationDetailsQueryData =\n await graphqlRequest({\n query: DeploymentVerificationDetailsQuery,\n api: 'Oxygen',\n url: `${config.deploymentUrl}/api/v2/admin/graphql`,\n token: config.deploymentToken.accessToken,\n variables,\n addedHeaders: {\n [Header.OxygenNamespaceHandle]: config.deploymentToken.namespace,\n },\n });\n\n const data = response.deploymentVerificationDetails;\n if (data == null) {\n hooks?.onDeploymentCompletedVerificationError?.();\n throw new DeploymentCompletedVerificationError('Deployment not found');\n }\n\n if (data.status === Status.Deployed) {\n outputCompleted('Deployment to Oxygen completed successfully', logger);\n hooks?.onDeploymentCompleted?.();\n return data;\n }\n\n if (data.status === Status.Failed || data.status === Status.Cancelled) {\n hooks?.onDeploymentFailed?.(data);\n throw new DeploymentCompletedVerificationError(\n data.error\n ? `Deployment ${data.status.toLocaleLowerCase()}, error: ${\n data.error\n }`\n : `Deployment ${data.status.toLocaleLowerCase()}`,\n );\n }\n\n return handleInterval();\n };\n\n return check();\n}\n"]}
@@ -50,5 +50,5 @@ async function verifyDeployment(options) {
50
50
  }
51
51
 
52
52
  export { verifyDeployment };
53
- //# sourceMappingURL=out.js.map
53
+ //# sourceMappingURL=verify-deployment.js.map
54
54
  //# sourceMappingURL=verify-deployment.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/verify-deployment.ts"],"names":[],"mappings":"AAAA,SAAQ,aAAY;AACpB,SAAgB,kBAAiB;AAEjC,SAA2C,yBAAwB;AASnE,eAAsB,iBACpB,SACe;AACf,QAAM,EAAC,QAAQ,KAAK,QAAQ,MAAK,IAAI;AACrC,SAAO,sBAAsB;AAC7B,aAAW,8CAA8C,MAAM;AAE/D,MAAI,WAAW;AACf,MAAI,QAAQ;AACZ,MAAI,0BAA0B;AAC9B,QAAM,YAAY,KAAK,IAAI;AAE3B,QAAM,iBAAiB,YAAY;AACjC,QAAI,WAAW,IAAI;AACjB,cAAQ;AAAA,IACV,WAAW,WAAW,MAAM,GAAG;AAC7B,eAAS;AAAA,IACX;AACA,UAAM,eAAe,KAAK,IAAI,IAAI,aAAa;AAC/C,QAAI,cAAc,QAAQ,MAAO,OAAO,yBAAyB;AAC/D,YAAM,QAAQ,IAAI;AAAA,QAChB;AAAA,MACF;AACA,UAAI,CAAC,yBAAyB;AAC5B,kCAA0B;AAC1B,eAAO,sBAAsB,KAAK;AAAA,MACpC;AACA,YAAM;AAAA,IACR;AACA;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AACzD,UAAM,MAAM;AAAA,EACd;AAEA,QAAM,QAAQ,YAAY;AACxB,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,GAAG,uBAAuB;AAAA,QACxD,QAAQ;AAAA,MACV,CAAC;AACD,UAAI,SAAS,WAAW,KAAK;AAC3B,mBAAW,wCAAwC,MAAM;AACzD,eAAO,yBAAyB;AAChC,eAAO,QAAQ,QAAQ;AAAA,MACzB;AACA,YAAM,eAAe;AAAA,IACvB,QAAQ;AACN,YAAM,eAAe;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,MAAM;AACd","sourcesContent":["import {fetch} from '@shopify/cli-kit/node/http';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {DeploymentConfig, DeploymentHooks, VerificationError} from './types.js';\n\ninterface VerificationOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n url: string;\n}\n\nexport async function verifyDeployment(\n options: VerificationOptions,\n): Promise<void> {\n const {config, url, logger, hooks} = options;\n hooks?.onVerificationStart?.();\n outputInfo('Verifying worker deployment is routable...', logger);\n\n let attempts = 0;\n let delay = 0;\n let calledVerificationError = false;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n if (attempts < 10) {\n delay = 500;\n } else if (attempts % 5 === 0) {\n delay += 5000;\n }\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > config.verificationMaxDuration) {\n const error = new VerificationError(\n 'Unable to verify that the worker is accessible.',\n );\n if (!calledVerificationError) {\n calledVerificationError = true;\n hooks?.onVerificationError?.(error);\n }\n throw error;\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n await check();\n };\n\n const check = async () => {\n try {\n const response = await fetch(`${url}/.oxygen/deployment`, {\n method: 'HEAD',\n });\n if (response.status === 200) {\n outputInfo('Deployment verification check passed', logger);\n hooks?.onVerificationComplete?.();\n return Promise.resolve();\n }\n await handleInterval();\n } catch {\n await handleInterval();\n }\n };\n\n await check();\n}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/verify-deployment.ts"],"names":[],"mappings":";;;;AAYA,eAAsB,iBACpB,OACe,EAAA;AACf,EAAA,MAAM,EAAC,MAAA,EAAQ,GAAK,EAAA,MAAA,EAAQ,OAAS,GAAA,OAAA,CAAA;AACrC,EAAA,KAAA,EAAO,mBAAsB,IAAA,CAAA;AAC7B,EAAA,UAAA,CAAW,8CAA8C,MAAM,CAAA,CAAA;AAE/D,EAAA,IAAI,QAAW,GAAA,CAAA,CAAA;AACf,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,EAAA,IAAI,uBAA0B,GAAA,KAAA,CAAA;AAC9B,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AAE3B,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,IAAI,WAAW,EAAI,EAAA;AACjB,MAAQ,KAAA,GAAA,GAAA,CAAA;AAAA,KACV,MAAA,IAAW,QAAW,GAAA,CAAA,KAAM,CAAG,EAAA;AAC7B,MAAS,KAAA,IAAA,GAAA,CAAA;AAAA,KACX;AACA,IAAA,MAAM,WAAe,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA,CAAA;AAC/C,IAAA,IAAI,WAAc,GAAA,KAAA,GAAQ,GAAO,GAAA,MAAA,CAAO,uBAAyB,EAAA;AAC/D,MAAA,MAAM,QAAQ,IAAI,iBAAA;AAAA,QAChB,iDAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,QAA0B,uBAAA,GAAA,IAAA,CAAA;AAC1B,QAAA,KAAA,EAAO,sBAAsB,KAAK,CAAA,CAAA;AAAA,OACpC;AACA,MAAM,MAAA,KAAA,CAAA;AAAA,KACR;AACA,IAAA,QAAA,EAAA,CAAA;AACA,IAAA,MAAM,IAAI,OAAQ,CAAA,CAAC,YAAY,UAAW,CAAA,OAAA,EAAS,KAAK,CAAC,CAAA,CAAA;AACzD,IAAA,MAAM,KAAM,EAAA,CAAA;AAAA,GACd,CAAA;AAEA,EAAA,MAAM,QAAQ,YAAY;AACxB,IAAI,IAAA;AACF,MAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,CAAA,EAAG,GAAG,CAAuB,mBAAA,CAAA,EAAA;AAAA,QACxD,MAAQ,EAAA,MAAA;AAAA,OACT,CAAA,CAAA;AACD,MAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,QAAA,UAAA,CAAW,wCAAwC,MAAM,CAAA,CAAA;AACzD,QAAA,KAAA,EAAO,sBAAyB,IAAA,CAAA;AAChC,QAAA,OAAO,QAAQ,OAAQ,EAAA,CAAA;AAAA,OACzB;AACA,MAAA,MAAM,cAAe,EAAA,CAAA;AAAA,KACf,CAAA,MAAA;AACN,MAAA,MAAM,cAAe,EAAA,CAAA;AAAA,KACvB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,KAAM,EAAA,CAAA;AACd","file":"verify-deployment.js","sourcesContent":["import {fetch} from '@shopify/cli-kit/node/http';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {DeploymentConfig, DeploymentHooks, VerificationError} from './types.js';\n\ninterface VerificationOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n url: string;\n}\n\nexport async function verifyDeployment(\n options: VerificationOptions,\n): Promise<void> {\n const {config, url, logger, hooks} = options;\n hooks?.onVerificationStart?.();\n outputInfo('Verifying worker deployment is routable...', logger);\n\n let attempts = 0;\n let delay = 0;\n let calledVerificationError = false;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n if (attempts < 10) {\n delay = 500;\n } else if (attempts % 5 === 0) {\n delay += 5000;\n }\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > config.verificationMaxDuration) {\n const error = new VerificationError(\n 'Unable to verify that the worker is accessible.',\n );\n if (!calledVerificationError) {\n calledVerificationError = true;\n hooks?.onVerificationError?.(error);\n }\n throw error;\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n await check();\n };\n\n const check = async () => {\n try {\n const response = await fetch(`${url}/.oxygen/deployment`, {\n method: 'HEAD',\n });\n if (response.status === 200) {\n outputInfo('Deployment verification check passed', logger);\n hooks?.onVerificationComplete?.();\n return Promise.resolve();\n }\n await handleInterval();\n } catch {\n await handleInterval();\n }\n };\n\n await check();\n}\n"]}
package/dist/index.js CHANGED
@@ -9,5 +9,5 @@ async function runOxygenCLI() {
9
9
  var src_default = runOxygenCLI;
10
10
 
11
11
  export { src_default as default };
12
- //# sourceMappingURL=out.js.map
12
+ //# sourceMappingURL=index.js.map
13
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAQ,cAAa;AAErB,eAAe,eAAe;AAC5B,QAAM,OAAO;AAAA,IACX,WAAW,YAAY;AAAA,IACvB,aAAa;AAAA,EACf,CAAC;AACH;AAEA,IAAO,cAAQ","sourcesContent":["import {runCLI} from '@shopify/cli-kit/node/cli';\n\nasync function runOxygenCLI() {\n await runCLI({\n moduleURL: import.meta.url,\n development: false,\n });\n}\n\nexport default runOxygenCLI;\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,eAAe,YAAe,GAAA;AAC5B,EAAA,MAAM,MAAO,CAAA;AAAA,IACX,WAAW,MAAY,CAAA,IAAA,CAAA,GAAA;AAAA,IACvB,WAAa,EAAA,KAAA;AAAA,GACd,CAAA,CAAA;AACH,CAAA;AAEA,IAAO,WAAQ,GAAA","file":"index.js","sourcesContent":["import {runCLI} from '@shopify/cli-kit/node/cli';\n\nasync function runOxygenCLI() {\n await runCLI({\n moduleURL: import.meta.url,\n development: false,\n });\n}\n\nexport default runOxygenCLI;\n"]}
@@ -3,5 +3,5 @@ import runCLI from './index.js';
3
3
 
4
4
  process.removeAllListeners("warning");
5
5
  runCLI();
6
- //# sourceMappingURL=out.js.map
6
+ //# sourceMappingURL=oxygen-cli.js.map
7
7
  //# sourceMappingURL=oxygen-cli.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/oxygen-cli.ts"],"names":[],"mappings":";AAEA,OAAO,YAAY;AAEnB,QAAQ,mBAAmB,SAAS;AAEpC,OAAO","sourcesContent":["#!/usr/bin/env node\n\nimport runCLI from './index.js';\n\nprocess.removeAllListeners('warning');\n\nrunCLI();\n"]}
1
+ {"version":3,"sources":["../src/oxygen-cli.ts"],"names":[],"mappings":";;;AAIA,OAAA,CAAQ,mBAAmB,SAAS,CAAA,CAAA;AAEpC,MAAO,EAAA","file":"oxygen-cli.js","sourcesContent":["#!/usr/bin/env node\n\nimport runCLI from './index.js';\n\nprocess.removeAllListeners('warning');\n\nrunCLI();\n"]}
@@ -42,5 +42,5 @@ function sanitizeError(error, rootPath) {
42
42
  }
43
43
 
44
44
  export { getBugsnag, initializeBugsnag, sanitizeError };
45
- //# sourceMappingURL=out.js.map
45
+ //# sourceMappingURL=bugsnag.js.map
46
46
  //# sourceMappingURL=bugsnag.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/bugsnag.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa;AAGpB,SAAQ,uBAAsB;AAE9B,IAAI;AAEJ,SAAS,aAAa,gBAAyB;AAC7C,MAAI,gBAAgB;AAClB;AAAA,EACF,WAAY,QAAgB,SAAS;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,gBAAgB;AAEpC,QAAM,uBAA2C;AAAA,IAC/C,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,YAAY,YAAY;AAAA,IACxB,QAAQ;AAAA,EACV;AAEA,SAAQ,QAAgB,MAAM,oBAAoB;AACpD;AAEO,SAAS,kBAAkB,gBAAyB;AACzD,kBAAgB,aAAa,cAAc;AAC7C;AAEO,SAAS,aAAa;AAC3B,SAAO;AACT;AAEO,SAAS,cACd,OACA,UACgB;AAChB,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,CAAC,YAAoB;AAC3C,WAAO,QAAQ,QAAQ,IAAI,OAAO,UAAU,GAAG,GAAG,KAAK;AAAA,EACzD;AAEA,MAAI,iBAAiB,OAAO;AAC1B,UAAM,aAAa,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;AAC7D,WAAO,OAAO,YAAY,OAAO;AAAA,MAC/B,SAAS,gBAAgB,MAAM,OAAO;AAAA,MACtC,OAAO,MAAM,QAAQ,gBAAgB,MAAM,KAAK,IAAI;AAAA,IACtD,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,KAAK;AAC9B","sourcesContent":["import Bugsnag from '@bugsnag/node';\nimport * as BugsnagCore from '@bugsnag/core';\n\nimport {loadPackageJson} from './utils.js';\n\nlet BugsnagClient: BugsnagCore.Client | undefined;\n\nfunction setupBugsnag(disableBugsnag: boolean) {\n if (disableBugsnag) {\n return;\n } else if ((Bugsnag as any)._client) {\n return Bugsnag;\n }\n\n const packageJson = loadPackageJson();\n\n const bugsnagServerOptions: BugsnagCore.Config = {\n apiKey: '21fd37fe87ead4b9c5a8eed90752b455',\n autoDetectErrors: true,\n appVersion: packageJson.version,\n logger: null,\n };\n\n return (Bugsnag as any).start(bugsnagServerOptions);\n}\n\nexport function initializeBugsnag(disableBugsnag: boolean) {\n BugsnagClient = setupBugsnag(disableBugsnag);\n}\n\nexport function getBugsnag() {\n return BugsnagClient;\n}\n\nexport function sanitizeError(\n error: Error | string,\n rootPath?: string,\n): Error | string {\n if (!rootPath) {\n return error;\n }\n\n const replaceRootPath = (message: string) => {\n return message.replace(new RegExp(rootPath, 'g'), '***');\n };\n\n if (error instanceof Error) {\n const cleanError = Object.create(Object.getPrototypeOf(error));\n Object.assign(cleanError, error, {\n message: replaceRootPath(error.message),\n stack: error.stack ? replaceRootPath(error.stack) : undefined,\n });\n\n return cleanError;\n }\n\n return replaceRootPath(error);\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/bugsnag.ts"],"names":[],"mappings":";;;AAKA,IAAI,aAAA,CAAA;AAEJ,SAAS,aAAa,cAAyB,EAAA;AAC7C,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,OAAA;AAAA,GACF,MAAA,IAAY,QAAgB,OAAS,EAAA;AACnC,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,cAAc,eAAgB,EAAA,CAAA;AAEpC,EAAA,MAAM,oBAA2C,GAAA;AAAA,IAC/C,MAAQ,EAAA,kCAAA;AAAA,IACR,gBAAkB,EAAA,IAAA;AAAA,IAClB,YAAY,WAAY,CAAA,OAAA;AAAA,IACxB,MAAQ,EAAA,IAAA;AAAA,GACV,CAAA;AAEA,EAAQ,OAAA,OAAA,CAAgB,MAAM,oBAAoB,CAAA,CAAA;AACpD,CAAA;AAEO,SAAS,kBAAkB,cAAyB,EAAA;AACzD,EAAA,aAAA,GAAgB,aAAa,cAAc,CAAA,CAAA;AAC7C,CAAA;AAEO,SAAS,UAAa,GAAA;AAC3B,EAAO,OAAA,aAAA,CAAA;AACT,CAAA;AAEO,SAAS,aAAA,CACd,OACA,QACgB,EAAA;AAChB,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,eAAA,GAAkB,CAAC,OAAoB,KAAA;AAC3C,IAAA,OAAO,QAAQ,OAAQ,CAAA,IAAI,OAAO,QAAU,EAAA,GAAG,GAAG,KAAK,CAAA,CAAA;AAAA,GACzD,CAAA;AAEA,EAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,IAAA,MAAM,aAAa,MAAO,CAAA,MAAA,CAAO,MAAO,CAAA,cAAA,CAAe,KAAK,CAAC,CAAA,CAAA;AAC7D,IAAO,MAAA,CAAA,MAAA,CAAO,YAAY,KAAO,EAAA;AAAA,MAC/B,OAAA,EAAS,eAAgB,CAAA,KAAA,CAAM,OAAO,CAAA;AAAA,MACtC,OAAO,KAAM,CAAA,KAAA,GAAQ,eAAgB,CAAA,KAAA,CAAM,KAAK,CAAI,GAAA,KAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AAED,IAAO,OAAA,UAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA;AAC9B","file":"bugsnag.js","sourcesContent":["import Bugsnag from '@bugsnag/node';\nimport * as BugsnagCore from '@bugsnag/core';\n\nimport {loadPackageJson} from './utils.js';\n\nlet BugsnagClient: BugsnagCore.Client | undefined;\n\nfunction setupBugsnag(disableBugsnag: boolean) {\n if (disableBugsnag) {\n return;\n } else if ((Bugsnag as any)._client) {\n return Bugsnag;\n }\n\n const packageJson = loadPackageJson();\n\n const bugsnagServerOptions: BugsnagCore.Config = {\n apiKey: '21fd37fe87ead4b9c5a8eed90752b455',\n autoDetectErrors: true,\n appVersion: packageJson.version,\n logger: null,\n };\n\n return (Bugsnag as any).start(bugsnagServerOptions);\n}\n\nexport function initializeBugsnag(disableBugsnag: boolean) {\n BugsnagClient = setupBugsnag(disableBugsnag);\n}\n\nexport function getBugsnag() {\n return BugsnagClient;\n}\n\nexport function sanitizeError(\n error: Error | string,\n rootPath?: string,\n): Error | string {\n if (!rootPath) {\n return error;\n }\n\n const replaceRootPath = (message: string) => {\n return message.replace(new RegExp(rootPath, 'g'), '***');\n };\n\n if (error instanceof Error) {\n const cleanError = Object.create(Object.getPrototypeOf(error));\n Object.assign(cleanError, error, {\n message: replaceRootPath(error.message),\n stack: error.stack ? replaceRootPath(error.stack) : undefined,\n });\n\n return cleanError;\n }\n\n return replaceRootPath(error);\n}\n"]}
@@ -72,5 +72,5 @@ class MetricsExporter {
72
72
  }
73
73
 
74
74
  export { MetricName, MetricsExporter };
75
- //# sourceMappingURL=out.js.map
75
+ //# sourceMappingURL=metrics-exporter.js.map
76
76
  //# sourceMappingURL=metrics-exporter.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/metrics-exporter.ts"],"names":["MetricName"],"mappings":"AACA,SAAQ,aAAY;AAEpB,SAAQ,kBAAiB;AACzB,SAAQ,uBAAsB;AAmBvB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,uBAAoB;AACpB,EAAAA,YAAA,sBAAmB;AACnB,EAAAA,YAAA,uBAAoB;AACpB,EAAAA,YAAA,wBAAqB;AACrB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,6BAA0B;AAC1B,EAAAA,YAAA,4BAAyB;AATf,SAAAA;AAAA,GAAA;AAYL,MAAM,gBAAgB;AAAA,EACnB,UAA4B,CAAC;AAAA,EACpB,eAAuB;AAAA,EACvB;AAAA,EACA;AAAA,EAEjB,YAAY,SAAiC;AAC3C,UAAM,EAAC,SAAS,WAAU,IAAI,gBAAgB;AAC9C,UAAM,EAAC,SAAS,gBAAe,IAAI;AAAA,MACjC,GAAG,QAAQ,QAAQ;AAAA,IACrB;AACA,SAAK,cAAc;AAAA,MACjB,aAAa,QAAQ;AAAA,MACrB,aAAa,cAAc,cAAc,SAAS;AAAA,MAClD,kBAAkB,mBAAmB;AAAA,IACvC;AACA,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,IACE,MACA,OACA,OAA+B,CAAC,GAC1B;AACN,UAAM,SAAS;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,IAAI,GAAG;AACtB,WAAK,QAAQ,IAAI,EAAG,KAAK,MAAM;AAAA,IACjC,OAAO;AACL,WAAK,QAAQ,IAAI,IAAI,CAAC,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,WAAW,MAAwC;AACjD,WAAO,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,EACrE;AAAA,EAEA,MAAM,SAAwB;AAC5B,UAAM,kBAAgC,OAAO,QAAQ,KAAK,OAAO,EAC9D,IAAI,CAAC,CAAC,YAAY,MAAM,MAAM;AAC7B,YAAM,OAAO,GAAG,KAAK,YAAY,IAAI,UAAU;AAE/C,aAAO,OAAO,IAAI,CAAC,EAAC,OAAO,KAAI,MAAM;AACnC,eAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,MAAM,KAAK,WAAW,EAAC,GAAG,MAAM,GAAG,KAAK,YAAW,CAAC;AAAA,QACtD;AAAA,MACF,CAAC;AAAA,IACH,CAAC,EACA,KAAK;AAER,QAAI;AACF,YAAM,MAAM,KAAK,WAAW;AAAA,QAC1B,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,EAAC,QAAQ,gBAAe,CAAC;AAAA,MAChD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,UAAU,WAAW;AAC3B,UAAI,YAAY,iBAAiB,SAAS,OAAO,UAAU,WAAW;AACpE,gBAAQ,OAAO,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {fetch} from '@shopify/cli-kit/node/http';\n\nimport {getBugsnag} from './bugsnag.js';\nimport {loadPackageJson} from './utils.js';\n\ninterface GodogEvent {\n name: string;\n type: string;\n value: number;\n tags: string[];\n}\n\ntype MetricCollection = Record<\n string,\n [{value: number; tags: Record<string, string>}]\n>;\n\ninterface MetricsExporterOptions {\n ciProvider: string;\n rootPath: string;\n}\n\nexport enum MetricName {\n BuildTime = 'build_time',\n NumFilesRequested = 'num_files_requested',\n NumFilesUploaded = 'num_files_uploaded',\n TotalSizeUploaded = 'total_size_uploaded',\n TotalSizeRequested = 'total_size_requested',\n TotalTime = 'total_time',\n UploadTime = 'upload_time',\n DeploymentCompletedTime = 'deployment_completed_time',\n DeploymentRoutableTime = 'deployment_routable_time',\n}\n\nexport class MetricsExporter {\n private metrics: MetricCollection = {};\n private readonly metricPrefix: string = 'oxygen.cli';\n private readonly defaultTags: Record<string, string>;\n private readonly exportUrl: string;\n\n constructor(options: MetricsExporterOptions) {\n const {version: cliVersion} = loadPackageJson();\n const {version: hydrogenVersion} = loadPackageJson(\n `${options.rootPath}/node_modules/@shopify/hydrogen`,\n );\n this.defaultTags = {\n ci_provider: options.ciProvider,\n cli_version: `oxygen-cli@${cliVersion || 'unknown'}`,\n hydrogen_version: hydrogenVersion || 'unknown',\n };\n this.exportUrl = 'https://metrics.myshopify.dev';\n }\n\n add(\n name: MetricName,\n value: number,\n tags: Record<string, string> = {},\n ): void {\n const metric = {\n value,\n tags,\n };\n\n if (this.metrics[name]) {\n this.metrics[name]!.push(metric);\n } else {\n this.metrics[name] = [metric];\n }\n }\n\n formatTags(tags: Record<string, string>): string[] {\n return Object.entries(tags).map(([key, value]) => `${key}:${value}`);\n }\n\n async export(): Promise<void> {\n const metricsToExport: GodogEvent[] = Object.entries(this.metrics)\n .map(([metricName, values]) => {\n const name = `${this.metricPrefix}.${metricName}`;\n\n return values.map(({value, tags}) => {\n return {\n name,\n type: 'gauge',\n value,\n tags: this.formatTags({...tags, ...this.defaultTags}),\n };\n });\n })\n .flat();\n\n try {\n await fetch(this.exportUrl, {\n method: 'POST',\n body: JSON.stringify({events: metricsToExport}),\n });\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/metrics-exporter.ts"],"names":["MetricName"],"mappings":"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","file":"metrics-exporter.js","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport {fetch} from '@shopify/cli-kit/node/http';\n\nimport {getBugsnag} from './bugsnag.js';\nimport {loadPackageJson} from './utils.js';\n\ninterface GodogEvent {\n name: string;\n type: string;\n value: number;\n tags: string[];\n}\n\ntype MetricCollection = Record<\n string,\n [{value: number; tags: Record<string, string>}]\n>;\n\ninterface MetricsExporterOptions {\n ciProvider: string;\n rootPath: string;\n}\n\nexport enum MetricName {\n BuildTime = 'build_time',\n NumFilesRequested = 'num_files_requested',\n NumFilesUploaded = 'num_files_uploaded',\n TotalSizeUploaded = 'total_size_uploaded',\n TotalSizeRequested = 'total_size_requested',\n TotalTime = 'total_time',\n UploadTime = 'upload_time',\n DeploymentCompletedTime = 'deployment_completed_time',\n DeploymentRoutableTime = 'deployment_routable_time',\n}\n\nexport class MetricsExporter {\n private metrics: MetricCollection = {};\n private readonly metricPrefix: string = 'oxygen.cli';\n private readonly defaultTags: Record<string, string>;\n private readonly exportUrl: string;\n\n constructor(options: MetricsExporterOptions) {\n const {version: cliVersion} = loadPackageJson();\n const {version: hydrogenVersion} = loadPackageJson(\n `${options.rootPath}/node_modules/@shopify/hydrogen`,\n );\n this.defaultTags = {\n ci_provider: options.ciProvider,\n cli_version: `oxygen-cli@${cliVersion || 'unknown'}`,\n hydrogen_version: hydrogenVersion || 'unknown',\n };\n this.exportUrl = 'https://metrics.myshopify.dev';\n }\n\n add(\n name: MetricName,\n value: number,\n tags: Record<string, string> = {},\n ): void {\n const metric = {\n value,\n tags,\n };\n\n if (this.metrics[name]) {\n this.metrics[name]!.push(metric);\n } else {\n this.metrics[name] = [metric];\n }\n }\n\n formatTags(tags: Record<string, string>): string[] {\n return Object.entries(tags).map(([key, value]) => `${key}:${value}`);\n }\n\n async export(): Promise<void> {\n const metricsToExport: GodogEvent[] = Object.entries(this.metrics)\n .map(([metricName, values]) => {\n const name = `${this.metricPrefix}.${metricName}`;\n\n return values.map(({value, tags}) => {\n return {\n name,\n type: 'gauge',\n value,\n tags: this.formatTags({...tags, ...this.defaultTags}),\n };\n });\n })\n .flat();\n\n try {\n await fetch(this.exportUrl, {\n method: 'POST',\n body: JSON.stringify({events: metricsToExport}),\n });\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n }\n }\n}\n"]}
@@ -30,5 +30,5 @@ function createTestConfig(rootFolder) {
30
30
  }
31
31
 
32
32
  export { createTestConfig, testToken };
33
- //# sourceMappingURL=out.js.map
33
+ //# sourceMappingURL=test-helper.js.map
34
34
  //# sourceMappingURL=test-helper.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/test-helper.ts"],"names":[],"mappings":"AAEA,SAAQ,sBAAqB;AAEtB,MAAM,YAAY;AAAA,EACvB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AACf;AAEO,SAAS,iBAAiB,YAAsC;AACrE,SAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,IACT,cAAc,OAAO,eAAe,mBAAoB;AAAA,IACxD,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,yBAAyB;AAAA,IACzB,UAAU,CAAC;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,yBAAyB;AAAA,EAC3B;AACF","sourcesContent":["import type {DeploymentConfig} from '../deploy/types.js';\n\nimport {deployDefaults} from './utils.js';\n\nexport const testToken = {\n accessToken: 'some_token',\n allowedResource: 'gid://oxygen-hub/Namespace/1',\n appId: 'gid://oxygen-hub/App/1',\n client: 'gid://oxygen-hub/Client/1',\n expiresAt: '2023-04-08T09:38:50.368Z',\n namespace: 'fresh-namespace',\n namespaceId: 'gid://oxygen-hub/Namespace/1',\n};\n\nexport function createTestConfig(rootFolder: string): DeploymentConfig {\n return {\n assetsDir: '/assets/',\n bugsnag: false,\n buildCommand: String(deployDefaults.buildCommandDefault!),\n defaultEnvironment: false,\n deploymentToken: testToken,\n environmentTag: 'environment',\n deploymentUrl: 'https://localhost:3000',\n verificationMaxDuration: 300,\n metadata: {},\n rootPath: rootFolder,\n skipBuild: false,\n skipVerification: false,\n workerDir: '/worker/',\n workerOnly: false,\n generateAuthBypassToken: false,\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/test-helper.ts"],"names":[],"mappings":";;AAIO,MAAM,SAAY,GAAA;AAAA,EACvB,WAAa,EAAA,YAAA;AAAA,EACb,eAAiB,EAAA,8BAAA;AAAA,EACjB,KAAO,EAAA,wBAAA;AAAA,EACP,MAAQ,EAAA,2BAAA;AAAA,EACR,SAAW,EAAA,0BAAA;AAAA,EACX,SAAW,EAAA,iBAAA;AAAA,EACX,WAAa,EAAA,8BAAA;AACf,EAAA;AAEO,SAAS,iBAAiB,UAAsC,EAAA;AACrE,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,UAAA;AAAA,IACX,OAAS,EAAA,KAAA;AAAA,IACT,YAAA,EAAc,MAAO,CAAA,cAAA,CAAe,mBAAoB,CAAA;AAAA,IACxD,kBAAoB,EAAA,KAAA;AAAA,IACpB,eAAiB,EAAA,SAAA;AAAA,IACjB,cAAgB,EAAA,aAAA;AAAA,IAChB,aAAe,EAAA,wBAAA;AAAA,IACf,uBAAyB,EAAA,GAAA;AAAA,IACzB,UAAU,EAAC;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,SAAW,EAAA,KAAA;AAAA,IACX,gBAAkB,EAAA,KAAA;AAAA,IAClB,SAAW,EAAA,UAAA;AAAA,IACX,UAAY,EAAA,KAAA;AAAA,IACZ,uBAAyB,EAAA,KAAA;AAAA,GAC3B,CAAA;AACF","file":"test-helper.js","sourcesContent":["import type {DeploymentConfig} from '../deploy/types.js';\n\nimport {deployDefaults} from './utils.js';\n\nexport const testToken = {\n accessToken: 'some_token',\n allowedResource: 'gid://oxygen-hub/Namespace/1',\n appId: 'gid://oxygen-hub/App/1',\n client: 'gid://oxygen-hub/Client/1',\n expiresAt: '2023-04-08T09:38:50.368Z',\n namespace: 'fresh-namespace',\n namespaceId: 'gid://oxygen-hub/Namespace/1',\n};\n\nexport function createTestConfig(rootFolder: string): DeploymentConfig {\n return {\n assetsDir: '/assets/',\n bugsnag: false,\n buildCommand: String(deployDefaults.buildCommandDefault!),\n defaultEnvironment: false,\n deploymentToken: testToken,\n environmentTag: 'environment',\n deploymentUrl: 'https://localhost:3000',\n verificationMaxDuration: 300,\n metadata: {},\n rootPath: rootFolder,\n skipBuild: false,\n skipVerification: false,\n workerDir: '/worker/',\n workerOnly: false,\n generateAuthBypassToken: false,\n };\n}\n"]}
@@ -169,5 +169,5 @@ function convertKeysToCamelCase(obj) {
169
169
  }
170
170
 
171
171
  export { Header, authBypassTokenDurationParse, deployDefaults, errorHandler, getBuildCommandFromLockFile, isClientError, loadPackageJson, maxLabelLength, parseToken, stderrLogger, verifyConfig };
172
- //# sourceMappingURL=out.js.map
172
+ //# sourceMappingURL=utils.js.map
173
173
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/utils.ts"],"names":["Header","path"],"mappings":"AAAA,OAAO,QAAQ;AACf,OAAO,QAAO,eAAc;AAC5B,SAAQ,qBAAoB;AAE5B,SAAQ,YAAY,sBAAqB;AACzC,SAAQ,YAAY,kBAAiB;AACrC,SAAQ,gBAAe;AACvB,SAAQ,kBAAiB;AAQlB,MAAM,iBAAkD;AAAA,EAC7D,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,6BAA6B;AAAA,EAC7B,mBAAmB;AAAA,EACnB,2BAA2B;AAAA,EAC3B,kBAAkB;AACpB;AAEO,SAAS,aAAa,OAAY;AACvC,MAAI,cAAc,KAAK,GAAG;AACxB,QAAI,MAAM,eAAe,KAAK;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,MAAM,eAAe,KAAK;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,iBAAiB,cAAc,MAAM,QAAQ,SAAS,KAAK,GAAG;AAChE,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,4BAA4B,QAAkC;AAC5E,QAAM,wBAAwB,oBAAI,IAAI;AAAA,IACpC,CAAC,qBAAqB,eAAe;AAAA,IACrC,CAAC,kBAAkB,gBAAgB;AAAA,IACnC,CAAC,aAAa,YAAY;AAAA,EAC5B,CAAC;AAED,QAAM,iBAAiB,CAAC;AAExB,aAAW,CAAC,cAAc,YAAY,KAAK,uBAAuB;AAChE,QAAI,eAAe,SAAS,OAAO,UAAW,YAAY,CAAC,GAAG;AAC5D,qBAAe,KAAK,EAAC,cAAc,aAAY,CAAC;AAAA,IAClD;AAAA,EACF;AAEA,MAAI,eAAe,SAAS,GAAG;AAC7B,UAAM,gBAAgB,eACnB,IAAI,CAAC,EAAC,aAAY,MAAM,YAAY,EACpC,KAAK,IAAI;AACZ;AAAA,MACE,wCAAwC,aAAa;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,SAAS,GAAG;AAC7B,UAAM,EAAC,cAAc,aAAY,IAAI,eAAe,CAAC;AAKrD,UAAM,UAAU,eAAe,SAAS,IAAI,KAAK,UAAU,YAAY;AAEvE;AAAA,MACE,GAAG,OAAO,aAAa,YAAY;AAAA,MACnC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,eAAe,mBAAmB;AAClD;AAEO,IAAK,SAAL,kBAAKA,YAAL;AACL,EAAAA,QAAA,2BAAwB;AADd,SAAAA;AAAA,GAAA;AAIL,SAAS,cAAc,OAAsC;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,gBAAgB;AACxE;AAEO,SAAS,gBAAgB,eAAwB;AACtD,MAAI;AACJ,MAAI,eAAe;AACjB,eAAW,KAAK,KAAK,eAAe,cAAc;AAAA,EACpD,OAAO;AACL,UAAM,aAAa,cAAc,YAAY,GAAG;AAChD,UAAM,YAAY,QAAQ,UAAU;AACpC,eAAW,KAAK,KAAK,WAAW,oBAAoB;AAAA,EACtD;AAEA,MAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC5B,WAAO,CAAC;AAAA,EACV;AACA,QAAM,kBAAkB,GAAG,aAAa,UAAU,MAAM;AACxD,SAAO,KAAK,MAAM,eAAe;AACnC;AAEO,SAAS,aAAa,KAAmB;AAC9C,UAAQ,OAAO,MAAM,GAAG,GAAG;AAAA,CAAI;AACjC;AAEO,MAAM,iBAAiB;AAEvB,SAAS,WAAW,YAAqC;AAC9D,MAAI;AACF,UAAM,eAAe,OAAO,KAAK,YAAY,QAAQ,EAAE,SAAS,OAAO;AACvE,UAAM,WAAW,KAAK,MAAM,YAAY;AACxC,WAAO,uBAAuB,QAAQ;AAAA,EACxC,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,6BACd,6BACoB;AACpB,MAAI,CAAC,6BAA6B;AAChC,WAAO;AAAA,EACT;AACA,QAAM,WAAW,OAAO,2BAA2B;AACnD,MAAI,MAAM,QAAQ,GAAG;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,MAAI,WAAW,MAAM,WAAW,GAAG;AACjC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAOA,eAAsB,aAAa;AAAA,EACjC;AAAA,EACA,iBAAiB;AACnB,GAAuB;AACrB,QAAM,EAAC,UAAU,WAAW,WAAW,WAAW,WAAU,IAAI;AAChE,QAAM,aAAqC;AAAA,IACzC,MAAM;AAAA,EACR;AAEA,MAAI,aAAa,gBAAgB;AAC/B,eAAW,SAAS,SAAS,UAAW,SAAU;AAClD,QAAI,CAAC,YAAY;AACf,iBAAW,SAAS,SAAS,UAAW,SAAU;AAAA,IACpD;AAAA,EACF;AAEA,aAAW,YAAY,OAAO,KAAK,UAAU,GAAG;AAC9C,UAAM,UAAU,WAAW,QAAQ,GAAI,QAAQ;AAAA,EACjD;AAEA,QAAM,eACJ;AACF,MAAI,CAAC,aAAa,KAAK,OAAO,aAAa,GAAG;AAC5C,UAAM,IAAI,MAAM,mCAAmC,OAAO,aAAa,EAAE;AAAA,EAC3E;AACF;AAEA,eAAe,UAAUC,OAAc,UAAkB;AACvD,MAAI,CAAE,MAAM,WAAWA,KAAI,GAAI;AAC7B,QAAI,aAAa,UAAU;AACzB;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,mBAAmBA,KAAI,EAAE;AAAA,EAC3C;AACF;AAMA,SAAS,uBACP,KAC0B;AAC1B,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,QAAa,QAAgB;AAC3D,YAAM,eAAe,IAAI;AAAA,QAAQ;AAAA,QAAiB,CAAC,OACjD,GAAG,YAAY,EAAE,QAAQ,KAAK,EAAE,EAAE,QAAQ,KAAK,EAAE;AAAA,MACnD;AACA,UAAI,IAAI,GAAG,MAAM,QAAW;AAC1B,cAAM,IAAI,MAAM,kBAAkB,GAAG,eAAe;AAAA,MACtD;AACA,aAAO,YAAY,IAAI,uBAAuB,IAAI,GAAG,CAAc;AACnE,aAAO;AAAA,IACT,GAAG,CAAC,CAAoB;AAAA,EAC1B;AACA,SAAO;AACT","sourcesContent":["import fs from 'fs';\nimport path, {dirname} from 'path';\nimport {fileURLToPath} from 'url';\n\nimport {fileExists, fileExistsSync} from '@shopify/cli-kit/node/fs';\nimport {outputInfo, outputWarn} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n ClientError,\n DeploymentConfig,\n DeploymentToken,\n} from '../deploy/types.js';\n\nexport const deployDefaults: Record<string, string | number> = {\n assetsDirDefault: 'dist/client/',\n buildCommandDefault: 'npm build',\n verificationDurationDefault: 180,\n maxUploadAttempts: 3,\n maxResumabeUploadAttempts: 9,\n workerDirDefault: 'dist/worker/',\n};\n\nexport function errorHandler(error: any) {\n if (isClientError(error)) {\n if (error.statusCode === 401) {\n throw new AbortError(\n 'You are not authorized to perform this action. Please check your deployment token.',\n );\n }\n\n if (error.statusCode === 429) {\n throw new AbortError(\n \"You've made too many requests. Please try again later\",\n );\n }\n }\n\n if (error instanceof AbortError && error.message.includes('503')) {\n throw new AbortError(\n 'The server is currently unavailable. Please try again later.',\n );\n }\n}\n\nexport function getBuildCommandFromLockFile(config: DeploymentConfig): string {\n const lockFileBuildCommands = new Map([\n ['package-lock.json', 'npm run build'],\n ['pnpm-lock.yaml', 'pnpm run build'],\n ['yarn.lock', 'yarn build'],\n ]);\n\n const foundLockFiles = [];\n\n for (const [lockFileName, buildCommand] of lockFileBuildCommands) {\n if (fileExistsSync(joinPath(config.rootPath!, lockFileName))) {\n foundLockFiles.push({lockFileName, buildCommand});\n }\n }\n\n if (foundLockFiles.length > 1) {\n const lockFilesList = foundLockFiles\n .map(({lockFileName}) => lockFileName)\n .join(', ');\n outputWarn(\n `Warning: Multiple lock files found: (${lockFilesList}).`,\n stderrLogger,\n );\n }\n\n if (foundLockFiles.length > 0) {\n const {lockFileName, buildCommand} = foundLockFiles[0] as {\n lockFileName: string;\n buildCommand: string;\n };\n\n const infoMsg = foundLockFiles.length > 1 ? '' : `Found: ${lockFileName}. `;\n\n outputInfo(\n `${infoMsg}Assuming \"${buildCommand}\" as build command. Use the buildCommand flag to override.`,\n stderrLogger,\n );\n return buildCommand;\n }\n\n return String(deployDefaults.buildCommandDefault);\n}\n\nexport enum Header {\n OxygenNamespaceHandle = 'X-Oxygen-Namespace-Handle',\n}\n\nexport function isClientError(error: unknown): error is ClientError {\n return typeof error === 'object' && error !== null && 'statusCode' in error;\n}\n\nexport function loadPackageJson(projectFolder?: string) {\n let jsonPath;\n if (projectFolder) {\n jsonPath = path.join(projectFolder, 'package.json');\n } else {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n jsonPath = path.join(__dirname, '../../package.json');\n }\n\n if (!fs.existsSync(jsonPath)) {\n return {};\n }\n const packageJsonData = fs.readFileSync(jsonPath, 'utf8');\n return JSON.parse(packageJsonData);\n}\n\nexport function stderrLogger(log: string): void {\n process.stderr.write(`${log}\\n`);\n}\n\nexport const maxLabelLength = 375;\n\nexport function parseToken(inputToken: string): DeploymentToken {\n try {\n const decodedToken = Buffer.from(inputToken, 'base64').toString('utf-8');\n const rawToken = JSON.parse(decodedToken);\n return convertKeysToCamelCase(rawToken) as DeploymentToken;\n } catch (error) {\n throw new Error(\n `Error processing deployment token. Please check your token and try again.`,\n );\n }\n}\n\nexport function authBypassTokenDurationParse(\n authBypassTokenDurationFlag?: string,\n): number | undefined {\n if (!authBypassTokenDurationFlag) {\n return undefined;\n }\n const duration = Number(authBypassTokenDurationFlag);\n if (isNaN(duration)) {\n throw new AbortError(\n \"Invalid duration format. Please specify the duration in hours (e.g., '10').\",\n );\n }\n if (duration > 12 || duration < 1) {\n throw new AbortError(\n 'Invalid duration length. Please specify the duration (in hours) between 1 to 12 hours.',\n );\n }\n return duration;\n}\n\ninterface VerifyConfigParams {\n config: DeploymentConfig;\n performedBuild?: boolean;\n}\n\nexport async function verifyConfig({\n config,\n performedBuild = false,\n}: VerifyConfigParams) {\n const {rootPath, workerDir, assetsDir, skipBuild, workerOnly} = config;\n const checkPaths: Record<string, string> = {\n root: rootPath!,\n };\n\n if (skipBuild || performedBuild) {\n checkPaths.worker = joinPath(rootPath!, workerDir!);\n if (!workerOnly) {\n checkPaths.assets = joinPath(rootPath!, assetsDir!);\n }\n }\n\n for (const pathType of Object.keys(checkPaths)) {\n await checkPath(checkPaths[pathType]!, pathType);\n }\n\n const addressRegex =\n /^https:\\/\\/(?:[\\w-]+\\.)*[\\w-]+|^https:\\/\\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/;\n if (!addressRegex.test(config.deploymentUrl)) {\n throw new Error(`Invalid deployment service URL: ${config.deploymentUrl}`);\n }\n}\n\nasync function checkPath(path: string, pathType: string) {\n if (!(await fileExists(path))) {\n if (pathType === 'assets') {\n outputWarn(\n `Use the \"workerOnly\" flag to perform a worker-only deployment.`,\n stderrLogger,\n );\n }\n throw new Error(`Path not found: ${path}`);\n }\n}\n\ninterface TokenType {\n [x: string]: string | TokenType;\n}\n\nfunction convertKeysToCamelCase(\n obj: TokenType | string,\n): DeploymentToken | string {\n if (typeof obj === 'object') {\n return Object.keys(obj).reduce((result: any, key: string) => {\n const camelCaseKey = key.replace(/([-_][a-z])/gi, ($1) =>\n $1.toUpperCase().replace('-', '').replace('_', ''),\n );\n if (obj[key] === undefined) {\n throw new Error(`Invalid token: ${key} is undefined`);\n }\n result[camelCaseKey] = convertKeysToCamelCase(obj[key] as TokenType);\n return result;\n }, {} as DeploymentToken);\n }\n return obj;\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/utils.ts"],"names":["Header","path"],"mappings":"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","file":"utils.js","sourcesContent":["import fs from 'fs';\nimport path, {dirname} from 'path';\nimport {fileURLToPath} from 'url';\n\nimport {fileExists, fileExistsSync} from '@shopify/cli-kit/node/fs';\nimport {outputInfo, outputWarn} from '@shopify/cli-kit/node/output';\nimport {joinPath} from '@shopify/cli-kit/node/path';\nimport {AbortError} from '@shopify/cli-kit/node/error';\n\nimport {\n ClientError,\n DeploymentConfig,\n DeploymentToken,\n} from '../deploy/types.js';\n\nexport const deployDefaults: Record<string, string | number> = {\n assetsDirDefault: 'dist/client/',\n buildCommandDefault: 'npm build',\n verificationDurationDefault: 180,\n maxUploadAttempts: 3,\n maxResumabeUploadAttempts: 9,\n workerDirDefault: 'dist/worker/',\n};\n\nexport function errorHandler(error: any) {\n if (isClientError(error)) {\n if (error.statusCode === 401) {\n throw new AbortError(\n 'You are not authorized to perform this action. Please check your deployment token.',\n );\n }\n\n if (error.statusCode === 429) {\n throw new AbortError(\n \"You've made too many requests. Please try again later\",\n );\n }\n }\n\n if (error instanceof AbortError && error.message.includes('503')) {\n throw new AbortError(\n 'The server is currently unavailable. Please try again later.',\n );\n }\n}\n\nexport function getBuildCommandFromLockFile(config: DeploymentConfig): string {\n const lockFileBuildCommands = new Map([\n ['package-lock.json', 'npm run build'],\n ['pnpm-lock.yaml', 'pnpm run build'],\n ['yarn.lock', 'yarn build'],\n ]);\n\n const foundLockFiles = [];\n\n for (const [lockFileName, buildCommand] of lockFileBuildCommands) {\n if (fileExistsSync(joinPath(config.rootPath!, lockFileName))) {\n foundLockFiles.push({lockFileName, buildCommand});\n }\n }\n\n if (foundLockFiles.length > 1) {\n const lockFilesList = foundLockFiles\n .map(({lockFileName}) => lockFileName)\n .join(', ');\n outputWarn(\n `Warning: Multiple lock files found: (${lockFilesList}).`,\n stderrLogger,\n );\n }\n\n if (foundLockFiles.length > 0) {\n const {lockFileName, buildCommand} = foundLockFiles[0] as {\n lockFileName: string;\n buildCommand: string;\n };\n\n const infoMsg = foundLockFiles.length > 1 ? '' : `Found: ${lockFileName}. `;\n\n outputInfo(\n `${infoMsg}Assuming \"${buildCommand}\" as build command. Use the buildCommand flag to override.`,\n stderrLogger,\n );\n return buildCommand;\n }\n\n return String(deployDefaults.buildCommandDefault);\n}\n\nexport enum Header {\n OxygenNamespaceHandle = 'X-Oxygen-Namespace-Handle',\n}\n\nexport function isClientError(error: unknown): error is ClientError {\n return typeof error === 'object' && error !== null && 'statusCode' in error;\n}\n\nexport function loadPackageJson(projectFolder?: string) {\n let jsonPath;\n if (projectFolder) {\n jsonPath = path.join(projectFolder, 'package.json');\n } else {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n jsonPath = path.join(__dirname, '../../package.json');\n }\n\n if (!fs.existsSync(jsonPath)) {\n return {};\n }\n const packageJsonData = fs.readFileSync(jsonPath, 'utf8');\n return JSON.parse(packageJsonData);\n}\n\nexport function stderrLogger(log: string): void {\n process.stderr.write(`${log}\\n`);\n}\n\nexport const maxLabelLength = 375;\n\nexport function parseToken(inputToken: string): DeploymentToken {\n try {\n const decodedToken = Buffer.from(inputToken, 'base64').toString('utf-8');\n const rawToken = JSON.parse(decodedToken);\n return convertKeysToCamelCase(rawToken) as DeploymentToken;\n } catch (error) {\n throw new Error(\n `Error processing deployment token. Please check your token and try again.`,\n );\n }\n}\n\nexport function authBypassTokenDurationParse(\n authBypassTokenDurationFlag?: string,\n): number | undefined {\n if (!authBypassTokenDurationFlag) {\n return undefined;\n }\n const duration = Number(authBypassTokenDurationFlag);\n if (isNaN(duration)) {\n throw new AbortError(\n \"Invalid duration format. Please specify the duration in hours (e.g., '10').\",\n );\n }\n if (duration > 12 || duration < 1) {\n throw new AbortError(\n 'Invalid duration length. Please specify the duration (in hours) between 1 to 12 hours.',\n );\n }\n return duration;\n}\n\ninterface VerifyConfigParams {\n config: DeploymentConfig;\n performedBuild?: boolean;\n}\n\nexport async function verifyConfig({\n config,\n performedBuild = false,\n}: VerifyConfigParams) {\n const {rootPath, workerDir, assetsDir, skipBuild, workerOnly} = config;\n const checkPaths: Record<string, string> = {\n root: rootPath!,\n };\n\n if (skipBuild || performedBuild) {\n checkPaths.worker = joinPath(rootPath!, workerDir!);\n if (!workerOnly) {\n checkPaths.assets = joinPath(rootPath!, assetsDir!);\n }\n }\n\n for (const pathType of Object.keys(checkPaths)) {\n await checkPath(checkPaths[pathType]!, pathType);\n }\n\n const addressRegex =\n /^https:\\/\\/(?:[\\w-]+\\.)*[\\w-]+|^https:\\/\\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/;\n if (!addressRegex.test(config.deploymentUrl)) {\n throw new Error(`Invalid deployment service URL: ${config.deploymentUrl}`);\n }\n}\n\nasync function checkPath(path: string, pathType: string) {\n if (!(await fileExists(path))) {\n if (pathType === 'assets') {\n outputWarn(\n `Use the \"workerOnly\" flag to perform a worker-only deployment.`,\n stderrLogger,\n );\n }\n throw new Error(`Path not found: ${path}`);\n }\n}\n\ninterface TokenType {\n [x: string]: string | TokenType;\n}\n\nfunction convertKeysToCamelCase(\n obj: TokenType | string,\n): DeploymentToken | string {\n if (typeof obj === 'object') {\n return Object.keys(obj).reduce((result: any, key: string) => {\n const camelCaseKey = key.replace(/([-_][a-z])/gi, ($1) =>\n $1.toUpperCase().replace('-', '').replace('_', ''),\n );\n if (obj[key] === undefined) {\n throw new Error(`Invalid token: ${key} is undefined`);\n }\n result[camelCaseKey] = convertKeysToCamelCase(obj[key] as TokenType);\n return result;\n }, {} as DeploymentToken);\n }\n return obj;\n}\n"]}
@@ -194,5 +194,5 @@
194
194
  ]
195
195
  }
196
196
  },
197
- "version": "4.4.29-unstable.202409161454.0"
197
+ "version": "4.4.30-unstable.202409191209.0"
198
198
  }
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "@shopify:registry": "https://registry.npmjs.org"
6
6
  },
7
7
  "license": "MIT",
8
- "version": "4.4.29-unstable.202409161454.0",
8
+ "version": "4.4.30-unstable.202409191209.0",
9
9
  "type": "module",
10
10
  "scripts": {
11
11
  "build": "tsup --sourcemap --clean --config ./tsup.config.ts && oclif manifest",
@@ -52,13 +52,13 @@
52
52
  "@shopify/prettier-config": "^1.1.2",
53
53
  "@types/async": "^3.2.24",
54
54
  "@types/node": "^22.3.0",
55
- "eslint": "^8.57.0",
55
+ "eslint": "^8.57.1",
56
56
  "eslint-plugin-prettier": "^5.2.1",
57
57
  "node-fetch": "^3.3.2",
58
58
  "oclif": "^4",
59
- "tsup": "^8.1.0",
59
+ "tsup": "^8.3.0",
60
60
  "typescript": "^5.6.2",
61
- "vite": "^5.4.5",
61
+ "vite": "^5.4.6",
62
62
  "vitest": "^2.1.1"
63
63
  },
64
64
  "prettier": "@shopify/prettier-config",