@shopify/cli-kit 3.0.22 → 3.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/network/service.ts","../src/environment/service.ts","../src/environment/fqdn.ts","../src/http/fetch.ts","../src/http/formdata.ts","../src/ui/autocomplete.ts","../src/ui/input.ts","../src/ui/select.ts","../src/ui.ts","../../../node_modules/semver/internal/debug.js","../../../node_modules/semver/internal/constants.js","../../../node_modules/semver/internal/re.js","../../../node_modules/semver/internal/parse-options.js","../../../node_modules/semver/internal/identifiers.js","../../../node_modules/semver/classes/semver.js","../../../node_modules/semver/functions/parse.js","../../../node_modules/semver/functions/coerce.js","../src/ruby.ts","../src/store.ts","../src/version.ts","../src/dependency.ts","../src/analytics.ts","../src/api/common.ts","../src/api/admin.ts","../src/api/graphql/find_org.ts","../src/api/graphql/all_orgs.ts","../src/api/graphql/create_app.ts","../src/api/graphql/update_urls.ts","../src/api/graphql/find_app.ts","../src/api/graphql/update_draft.ts","../src/api/graphql/generate_signed_upload_url.ts","../src/api/graphql/create_deployment.ts","../src/api/graphql/all_stores_by_org.ts","../src/api/graphql/convert_dev_to_test_store.ts","../src/api/graphql/extension_create.ts","../src/api/graphql/extension_specifications.ts","../src/api/graphql/all_app_extension_registrations.ts","../src/api/graphql/get_variant_id.ts","../src/api/graphql/functions/function_service_proxy.ts","../src/api/graphql/functions/get_app_functions.ts","../src/api/graphql/functions/module_upload_url_generate.ts","../src/api/graphql/functions/app_function_set.ts","../src/api/graphql/functions/compile_module.ts","../src/api/graphql/functions/module_compilation_status.ts","../src/api/graphql/find_org_basic.ts","../src/api/partners.ts","../src/checksum.ts","../src/cli.ts","../src/dot-env.ts","../src/git.ts","../src/github.ts","../src/haiku.ts","../src/id.ts","../src/npm.ts","../src/plugins.ts","../src/port.ts","../src/session/identity.ts","../src/session/validate.ts","../src/network/api.ts","../src/session/scopes.ts","../src/session/exchange.ts","../src/session/post-auth.ts","../src/session/redirect-listener.ts","../src/string.ts","../src/session/authorize.ts","../src/session/schema.ts","../src/secure-store.ts","../src/session/store.ts","../src/session.ts","../src/template.ts","../src/temporary.ts","../src/toml.ts","../src/vscode.ts","../src/yaml.ts"],"sourcesContent":["/**\n * Enum for the differnet APIs the CLI can interact with.\n * @readonly\n * @enum {number}\n */\nexport type Service = 'shopify' | 'admin' | 'identity'\n\n/**\n * Enum that represents the environment to use for a given service.\n * @readonly\n * @enum {number}\n */\nexport enum Environment {\n Local = 'local',\n Production = 'production',\n Spin = 'spin',\n}\n","import {Environment} from '../network/service'\nimport constants from '../constants'\n\n/**\n * Given an environment variable that represents the environment to use for a given serve,\n * it returns the environment as a enum;\n * @param value The environment variable value.\n * @returns {Environment} representing the environment to use.\n */\nfunction service(value: undefined | string): Environment {\n if (value === 'local') {\n return Environment.Local\n } else if (value === 'spin') {\n return Environment.Spin\n } else {\n return Environment.Production\n }\n}\n\n/**\n * Returns the environment to be used for the interactions with the partners' CLI API.\n * @param env The environment variables from the environment of the current process.\n */\nexport function partners(env = process.env): Environment {\n return service(env[constants.environmentVariables.partnersEnv])\n}\n\n/**\n * Returns the environment to be used for the interactions with the admin API.\n * @param env The environment variables from the environment of the current process.\n */\nexport function shopify(env = process.env): Environment {\n return service(env[constants.environmentVariables.shopifyEnv])\n}\n\n/**\n * Returns the environment to be used for the interactions with identity.\n * @param env The environment variables from the environment of the current process.\n */\nexport function identity(env = process.env): Environment {\n return service(env[constants.environmentVariables.identityEnv])\n}\n","import {\n partners as partnersEnvironment,\n shopify as shopifyEnvironment,\n identity as identityEnvironment,\n} from './service'\nimport {fqdn as spinFqdn} from './spin'\nimport {Abort} from '../error'\n\nexport const CouldntObtainPartnersSpinFQDNError = new Abort(\n \"Couldn't obtain the Spin FQDN for Partners when the CLI is not running from a Spin environment.\",\n)\nexport const CouldntObtainIdentitySpinFQDNError = new Abort(\n \"Couldn't obtain the Spin FQDN for Identity when the CLI is not running from a Spin environment.\",\n)\nexport const CouldntObtainShopifySpinFQDNError = new Abort(\n \"Couldn't obtain the Spin FQDN for Shopify when the CLI is not running from a Spin environment.\",\n)\nexport const NotProvidedStoreFQDNError = new Abort(\n \"Couldn't obtain the Shopify FQDN because the store FQDN was not provided.\",\n)\n\n/**\n * It returns the Partners' API service we should interact with.\n * @returns {string} Fully-qualified domain of the partners service we should interact with.\n */\nexport async function partners(): Promise<string> {\n const environment = partnersEnvironment()\n const productionFqdn = 'partners.shopify.com'\n switch (environment) {\n case 'local':\n return 'partners.myshopify.io'\n case 'spin':\n return `partners.${await spinFqdn()}`\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the Identity service we should interact with.\n * @returns {string} Fully-qualified domain of the Identity service we should interact with.\n */\nexport async function identity(): Promise<string> {\n const environment = identityEnvironment()\n const productionFqdn = 'accounts.shopify.com'\n switch (environment) {\n case 'local':\n return 'identity.myshopify.io'\n case 'spin':\n return `identity.${await spinFqdn()}`\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the Shopify service we should interact with.\n * Note the same fqdn is sued for the Admin and the Storefront Renderer APIs.\n * @returns {string} Fully-qualified domain of the Shopify service we should interact with.\n */\nexport async function shopify(options: {storeFqdn?: string} = {}): Promise<string> {\n const environment = shopifyEnvironment()\n switch (environment) {\n case 'local':\n return 'shopify.myshopify.io'\n case 'spin':\n return `identity.${await spinFqdn()}`\n default:\n if (options.storeFqdn) {\n return options.storeFqdn\n } else {\n throw NotProvidedStoreFQDNError\n }\n }\n}\n","import nodeFetch from 'node-fetch'\nimport type {RequestInfo, RequestInit} from 'node-fetch'\n\ntype Response = ReturnType<typeof nodeFetch>\n/**\n * An interface that abstracts way node-fetch. When Node has built-in\n * support for \"fetch\" in the standard library, we can drop the node-fetch\n * dependency from here.\n * Note that we are exposing types from \"node-fetch\". The reason being is that\n * they are consistent with the Web API so if we drop node-fetch in the future\n * it won't require changes from the callers.\n * @param url {RequestInfo} This defines the resource that you wish to fetch.\n * @param init {RequestInit} An object containing any custom settings that you want to apply to the request\n * @returns A promise that resolves with the response.\n */\nasync function fetch(url: RequestInfo, init?: RequestInit): Response {\n const response = await nodeFetch(url, init)\n return response\n}\n\nexport default fetch\n","import FormData from 'form-data'\n\nfunction formData() {\n return new FormData()\n}\n\nexport default formData\n","// Enquirer types are totally broken so we need to disable typescript checks for this file\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport enquirer from 'enquirer'\nimport * as colors from 'ansi-colors'\n\nexport class AutoComplete extends enquirer.AutoComplete {\n constructor(options) {\n const originalResult = options.result\n options.result = (value) => {\n const answer = this.focused.value || this.focused.name || value\n\n if (originalResult) {\n return originalResult(answer)\n }\n\n return answer\n }\n super(options)\n this.styles.primary = colors.magenta\n this.styles.em = colors.magenta\n }\n\n pointer(_choice: unknown, i: number) {\n const color = this.styles.primary\n const showPointer = !this.state.multiple && this.state.index === i\n return showPointer ? color('>') : ' '\n }\n\n prefix(_state: unknown) {\n const color = this.styles.primary.bold\n return this.state.status === 'submitted' ? color('✔') : color('?')\n }\n\n format() {\n if (!this.focused) return this.input\n if (this.options.multiple && this.state.submitted) {\n return this.selected.map((ch) => this.styles.primary(ch.message)).join(', ')\n }\n if (this.state.submitted) {\n this.value = this.focused.value\n this.input = this.focused.value\n return this.styles.primary(this.focused.name)\n }\n return this.input\n }\n}\n","// Enquirer types are totally broken so we need to disable typescript checks for this file\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport enquirer from 'enquirer'\nimport * as colors from 'ansi-colors'\n\nexport class Input extends enquirer.StringPrompt {\n constructor(options) {\n super(options)\n this.styles.primary = colors.magenta\n this.styles.submitted = colors.magenta\n this.styles.danger = colors.red\n this.symbols.pointer = '!'\n }\n\n prefix(_state: unknown) {\n const color = this.styles.primary.bold\n return this.state.status === 'submitted' ? color('✔') : color('?')\n }\n\n async render() {\n const size = this.state.size\n const prefix = await this.prefix()\n const separator = await this.separator()\n const message = await this.message()\n const color = this.styles.primary\n\n let prompt = [prefix, message].filter(Boolean).join(' ')\n this.state.prompt = prompt\n\n const output = this.type === 'password' ? await this.formatPassword() : await this.format()\n const help = (await this.error()) || (await this.hint())\n\n const underline = '▔'.repeat(Math.max(color.unstyle(output).length - 10, 30))\n if (this.state.submitted) {\n prompt += ` ${separator} ${output}`\n } else {\n prompt += `\\n${color('>')} ${output}\\n ${color(underline)}`\n if (help && !prompt.includes(help)) prompt += ` ${help}`\n }\n\n this.clear(size)\n this.write([prompt].filter(Boolean).join('\\n'))\n this.restore()\n }\n\n formatPassword() {\n if (!this.keypressed) return ''\n const color = this.state.submitted ? this.styles.primary : this.styles.muted\n return color(this.symbols.asterisk.repeat(this.input.length))\n }\n}\n","// Enquirer types are totally broken so we need to disable typescript checks for this file\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport enquirer from 'enquirer'\nimport * as colors from 'ansi-colors'\n\nexport class Select extends enquirer.Select {\n constructor(options) {\n const originalResult = options.result\n options.result = (value) => {\n const answer = this.focused.value || this.focused.name || value\n\n if (originalResult) {\n return originalResult(answer)\n }\n\n return answer\n }\n super(options)\n this.styles.primary = colors.magenta\n this.styles.em = colors.magenta\n }\n\n pointer(_choice: unknown, i: number) {\n const color = this.styles.primary\n const showPointer = !this.state.multiple && this.state.index === i\n return showPointer ? color('>') : ' '\n }\n\n prefix(_state: unknown) {\n const color = this.styles.primary.bold\n return this.state.status === 'submitted' ? color('✔') : color('?')\n }\n}\n","import {AutoComplete} from './ui/autocomplete'\nimport {Input} from './ui/input'\nimport {Select} from './ui/select'\nimport {Bug, AbortSilent} from './error'\nimport {remove, exists} from './file'\nimport {info, content, token} from './output'\nimport {relative} from './path'\nimport {isTerminalInteractive} from './environment/local'\nimport {isTruthy} from './environment/utilities'\nimport inquirer from 'inquirer'\n\nexport {Listr} from 'listr2'\nexport type {ListrTaskWrapper, ListrDefaultRenderer, ListrTask} from 'listr2'\n\ninterface BaseQuestion<TName extends string> {\n name: TName\n message: string\n preface?: string\n validate?: (value: string) => string | true\n default?: string\n result?: (value: string) => string | boolean\n}\n\nexport type InputQuestion<TName extends string> = BaseQuestion<TName> & {\n type: 'input'\n}\n\nexport type SelectQuestion<TName extends string> = BaseQuestion<TName> & {\n type: 'select'\n choices: string[] | {name: string; value: string}[]\n}\n\nexport type AutocompleteQuestion<TName extends string> = BaseQuestion<TName> & {\n type: 'autocomplete'\n choices: string[] | {name: string; value: string}[]\n}\n\nexport type PasswordQuestion<TName extends string> = BaseQuestion<TName> & {\n type: 'password'\n}\n\nexport type Question<TName extends string = string> =\n | InputQuestion<TName>\n | SelectQuestion<TName>\n | AutocompleteQuestion<TName>\n | PasswordQuestion<TName>\n\nexport const prompt = async <\n TName extends string & keyof TAnswers,\n TAnswers extends {[key in TName]: string} = {[key in TName]: string},\n>(\n questions: ReadonlyArray<Question<TName>>,\n debugForceInquirer = false,\n): Promise<TAnswers> => {\n if (!isTerminalInteractive() && questions.length !== 0) {\n throw new Bug(content`\nThe CLI prompted in a non-interactive terminal with the following questions:\n${token.json(questions)}\n `)\n }\n\n if (debugForceInquirer || isTruthy(process.env.SHOPIFY_USE_INQUIRER)) {\n const results = []\n for (const question of questions) {\n if (question.preface) {\n info(question.preface)\n }\n\n const questionName = question.name\n // eslint-disable-next-line no-await-in-loop\n const answer = (await inquirer.prompt([convertQuestionForInquirer(question)]))[questionName]\n results.push([questionName, answer])\n }\n\n return Object.fromEntries(results) as TAnswers\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mappedQuestions: any[] = questions.map(mapper)\n const value = {} as TAnswers\n for (const question of mappedQuestions) {\n if (question.preface) {\n info(question.preface)\n }\n // eslint-disable-next-line no-await-in-loop\n value[question.name as keyof TAnswers] = await question.run()\n }\n return value\n }\n}\n\nexport async function nonEmptyDirectoryPrompt(directory: string) {\n if (await exists(directory)) {\n const options = [\n {name: 'No, don’t delete the files', value: 'abort'},\n {name: 'Yes, delete the files', value: 'overwrite'},\n ]\n\n const relativeDirectory = relative(process.cwd(), directory)\n\n const questions: Question<'value'> = {\n type: 'select',\n name: 'value',\n message: `${relativeDirectory} is not an empty directory. Do you want to delete the existing files and continue?`,\n choices: options,\n }\n\n const choice = await prompt([questions])\n\n if (choice.value === 'abort') {\n throw new AbortSilent()\n }\n\n remove(directory)\n }\n}\n\nexport const keypress = async () => {\n process.stdin.setRawMode(true)\n return new Promise<void>((resolve) =>\n process.stdin.once('data', () => {\n process.stdin.setRawMode(false)\n resolve()\n }),\n )\n}\n\nfunction convertQuestionForInquirer<\n TName extends string & keyof TAnswers,\n TAnswers extends {[key in TName]: string} = {[key in TName]: string},\n>(question: Question<TName>): inquirer.DistinctQuestion<TAnswers> {\n switch (question.type) {\n case 'input':\n case 'password':\n return question\n case 'select':\n case 'autocomplete':\n return {\n ...question,\n type: 'list',\n }\n }\n}\n\nfunction mapper(question: Question): unknown {\n switch (question.type) {\n case 'input':\n case 'password':\n return new Input(question)\n case 'select':\n return new Select(question)\n case 'autocomplete':\n return new AutoComplete(question)\n default:\n return undefined\n }\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nmodule.exports = {\n SEMVER_SPEC_VERSION,\n MAX_LENGTH,\n MAX_SAFE_INTEGER,\n MAX_SAFE_COMPONENT_LENGTH,\n}\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about so we always get a consistent\n// obj with keys in a consistent order.\nconst opts = ['includePrerelease', 'loose', 'rtl']\nconst parseOptions = options =>\n !options ? {}\n : typeof options !== 'object' ? { loose: true }\n : opts.filter(k => options[k]).reduce((o, k) => {\n o[k] = true\n return o\n }, {})\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.format()\n this.raw = this.version\n return this\n }\n}\n\nmodule.exports = SemVer\n","const { MAX_LENGTH } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\nconst SemVer = require('../classes/semver')\n\nconst parseOptions = require('../internal/parse-options')\nconst parse = (version, options) => {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n const r = options.loose ? re[t.LOOSE] : re[t.FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nmodule.exports = parse\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next\n while ((next = re[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n","import * as file from './file'\nimport * as ui from './ui'\nimport * as system from './system'\nimport {Abort} from './error'\nimport {glob, join} from './path'\nimport constants from './constants'\nimport {coerce} from './semver'\nimport {AdminSession} from './session'\nimport {content, token} from './output'\n// eslint-disable-next-line no-restricted-imports\nimport {spawn} from 'child_process'\nimport {Writable} from 'node:stream'\n\nconst RubyCLIVersion = '2.16.0'\nconst ThemeCheckVersion = '1.10.2'\nconst MinBundlerVersion = '2.3.8'\nconst MinRubyVersion = '2.3.0'\nconst MinRubyGemVersion = '2.5.0'\n\n/**\n * Execute CLI 2.0 commands.\n * Installs a version of RubyCLI as a vendor dependency in a hidden folder in the system.\n * User must have a valid ruby+bundler environment to run any command.\n *\n * @param args {string[]} List of argumets to execute. (ex: ['theme', 'pull'])\n * @param adminSession {AdminSession} Contains token and store to pass to CLI 2.0, which will be set as environment variables\n */\nexport async function execCLI(args: string[], adminSession?: AdminSession) {\n await installCLIDependencies()\n const env = {\n ...process.env,\n SHOPIFY_CLI_ADMIN_AUTH_TOKEN: adminSession?.token,\n SHOPIFY_CLI_STORE: adminSession?.storeFqdn,\n }\n\n spawn('bundle', ['exec', 'shopify'].concat(args), {\n stdio: 'inherit',\n cwd: shopifyCLIDirectory(),\n shell: true,\n env,\n })\n}\n\ninterface ExecThemeCheckCLIOptions {\n directories: string[]\n args?: string[]\n stdout: Writable\n stderr: Writable\n}\nexport async function execThemeCheckCLI({\n directories,\n args,\n stdout,\n stderr,\n}: ExecThemeCheckCLIOptions): Promise<void[]> {\n await installThemeCheckCLIDependencies(stdout)\n\n const processes = directories.map(async (directory): Promise<void> => {\n // Check that there are files aside from the extension TOML config file,\n // otherwise theme-check will return a false failure.\n const files = await glob(join(directory, '/**/*'))\n const fileCount = files.filter((file) => !file.match(/\\.toml$/)).length\n if (fileCount === 0) return\n\n const customStderr = new Writable({\n write(chunk, ...args) {\n // For some reason, theme-check reports this initial status line to stderr\n // See https://github.com/Shopify/theme-check/blob/1092737cfb58a73ca397ffb1371665dc55df2976/lib/theme_check/language_server/diagnostics_engine.rb#L31\n // which leads to https://github.com/Shopify/theme-check/blob/1092737cfb58a73ca397ffb1371665dc55df2976/lib/theme_check/language_server/io_messenger.rb#L65\n if (chunk.toString('ascii').match(/^Checking/)) {\n stdout.write(chunk, ...args)\n } else {\n stderr.write(chunk, ...args)\n }\n },\n })\n await system.exec('bundle', ['exec', 'theme-check'].concat([directory, ...(args || [])]), {\n stdout,\n stderr: customStderr,\n cwd: themeCheckDirectory(),\n })\n })\n return Promise.all(processes)\n}\n\n/**\n * Validate Ruby Enviroment\n * Install Theme Check CLI and its dependencies\n * Shows a loading message if it's the first time installing dependencies\n * or if we are installing a new version of Theme Check CLI\n */\nasync function installThemeCheckCLIDependencies(stdout: Writable) {\n const exists = await file.exists(themeCheckDirectory())\n\n if (!exists) stdout.write('Installing theme dependencies...')\n const list = new ui.Listr(\n [\n {\n title: 'Installing theme dependencies',\n task: async () => {\n await validateRubyEnv()\n await createThemeCheckCLIWorkingDirectory()\n await createThemeCheckGemfile()\n await bundleInstallThemeCheck()\n },\n },\n ],\n {renderer: 'silent'},\n )\n await list.run()\n if (!exists) stdout.write('Installed theme dependencies!')\n}\n\n/**\n * Validate Ruby Enviroment\n * Install RubyCLI and its dependencies\n * Shows a loading spinner if it's the first time installing dependencies\n * or if we are installing a new version of RubyCLI\n */\nasync function installCLIDependencies() {\n const exists = await file.exists(shopifyCLIDirectory())\n const renderer = exists ? 'silent' : 'default'\n\n const list = new ui.Listr(\n [\n {\n title: 'Installing theme dependencies',\n task: async () => {\n await validateRubyEnv()\n await createShopifyCLIWorkingDirectory()\n await createShopifyCLIGemfile()\n await bundleInstallShopifyCLI()\n },\n },\n ],\n {renderer},\n )\n await list.run()\n}\n\nasync function validateRubyEnv() {\n await validateRuby()\n await validateRubyGems()\n await validateBundler()\n}\n\nasync function validateRuby() {\n let version\n try {\n const stdout = await system.captureOutput('ruby', ['-v'])\n version = coerce(stdout)\n } catch {\n throw new Abort(\n 'Ruby environment not found',\n `Make sure you have Ruby installed on your system: ${\n content`${token.link('', 'https://www.ruby-lang.org/en/documentation/installation/')}`.value\n }`,\n )\n }\n\n const isValid = version?.compare(MinRubyVersion)\n if (isValid === -1 || isValid === undefined) {\n throw new Abort(\n `Ruby version ${content`${token.yellow(version!.raw)}`.value} is not supported`,\n `Make sure you have at least Ruby ${content`${token.yellow(MinRubyVersion)}`.value} installed on your system: ${\n content`${token.link('', 'https://www.ruby-lang.org/en/documentation/installation/')}`.value\n }`,\n )\n }\n}\n\nasync function validateRubyGems() {\n const stdout = await system.captureOutput('gem', ['-v'])\n const version = coerce(stdout)\n\n const isValid = version?.compare(MinRubyGemVersion)\n if (isValid === -1 || isValid === undefined) {\n throw new Abort(\n `RubyGems version ${content`${token.yellow(version!.raw)}`.value} is not supported`,\n `To update to the latest version of RubyGems, run ${\n content`${token.genericShellCommand('gem update --system')}`.value\n }`,\n )\n }\n}\n\nasync function validateBundler() {\n let version\n try {\n const stdout = await system.captureOutput('bundler', ['-v'])\n version = coerce(stdout)\n } catch {\n throw new Abort(\n 'Bundler not found',\n `To install the latest version of Bundler, run ${\n content`${token.genericShellCommand('gem install bundler')}`.value\n }`,\n )\n }\n\n const isValid = version?.compare(MinBundlerVersion)\n if (isValid === -1 || isValid === undefined) {\n throw new Abort(\n `Bundler version ${content`${token.yellow(version!.raw)}`.value} is not supported`,\n `To update to the latest version of Bundler, run ${\n content`${token.genericShellCommand('gem install bundler')}`.value\n }`,\n )\n }\n}\n\nfunction createShopifyCLIWorkingDirectory() {\n return file.mkdir(shopifyCLIDirectory())\n}\n\nfunction createThemeCheckCLIWorkingDirectory() {\n return file.mkdir(themeCheckDirectory())\n}\n\nasync function createShopifyCLIGemfile() {\n const gemPath = join(shopifyCLIDirectory(), 'Gemfile')\n await file.write(gemPath, `source 'https://rubygems.org'\\ngem 'shopify-cli', '${RubyCLIVersion}'`)\n}\n\nasync function createThemeCheckGemfile() {\n const gemPath = join(themeCheckDirectory(), 'Gemfile')\n await file.write(gemPath, `source 'https://rubygems.org'\\ngem 'theme-check', '${ThemeCheckVersion}'`)\n}\n\nasync function bundleInstallShopifyCLI() {\n await system.exec('bundle', ['config', 'set', '--local', 'path', shopifyCLIDirectory()], {cwd: shopifyCLIDirectory()})\n await system.exec('bundle', ['install'], {cwd: shopifyCLIDirectory()})\n}\n\nasync function bundleInstallThemeCheck() {\n await system.exec('bundle', ['config', 'set', '--local', 'path', themeCheckDirectory()], {cwd: themeCheckDirectory()})\n await system.exec('bundle', ['install'], {cwd: themeCheckDirectory()})\n}\n\nfunction shopifyCLIDirectory() {\n return join(constants.paths.directories.cache.vendor.path(), 'ruby-cli', RubyCLIVersion)\n}\n\nfunction themeCheckDirectory() {\n return join(constants.paths.directories.cache.vendor.path(), 'theme-check', ThemeCheckVersion)\n}\n\nexport async function version(): Promise<string | undefined> {\n const parseOutput = (version: string) => version.match(/ruby (\\d+\\.\\d+\\.\\d+)/)?.[1]\n return system\n .captureOutput('ruby', ['-v'])\n .then(parseOutput)\n .catch(() => undefined)\n}\n","import {content, token, debug} from './output'\nimport cliKitPackageJson from '../package.json'\nimport Conf, {Schema} from 'conf'\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\n\nconst migrations = {}\n\nexport interface CachedAppInfo {\n directory: string\n appId: string\n title?: string\n orgId?: string\n storeFqdn?: string\n}\n\ninterface ConfSchema {\n appInfo: CachedAppInfo[]\n themeStore: string\n session: string\n}\n\nconst schema = {\n appInfo: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n appId: {\n type: 'string',\n },\n orgId: {\n type: 'string',\n },\n storeFqdn: {\n type: 'string',\n },\n },\n },\n },\n} as unknown as Schema<ConfSchema>\n\nexport type LocalStore = Conf<ConfSchema>\n\nexport function createConf(projectName = 'shopify-cli-kit'): LocalStore {\n return new Conf<ConfSchema>({\n schema,\n migrations,\n projectName,\n projectVersion: cliKitPackageJson.version,\n })\n}\n\nconst cliKit = createConf()\n\nexport function remove() {\n cliKit.clear()\n}\n\nexport function getAppInfo(directory: string, localConf: LocalStore = cliKit): CachedAppInfo | undefined {\n debug(content`Reading cached app information for directory ${token.path(directory)}...`)\n const apps = localConf.get('appInfo') ?? []\n return apps.find((app: CachedAppInfo) => app.directory === directory)\n}\n\nexport function setAppInfo(\n options: {\n directory: string\n appId: string\n title?: string\n storeFqdn?: string\n orgId?: string\n },\n localConf: LocalStore = cliKit,\n): void {\n debug(content`Storing app information for directory ${token.path(options.directory)}:\n${token.json(options)}\n`)\n const apps = localConf.get('appInfo') ?? []\n const index = apps.findIndex((saved: CachedAppInfo) => saved.directory === options.directory)\n if (index === -1) {\n apps.push(options)\n } else {\n const app: CachedAppInfo = apps[index]\n apps[index] = {\n appId: options.appId,\n directory: options.directory,\n title: options.title ?? app.title,\n storeFqdn: options.storeFqdn ?? app.storeFqdn,\n orgId: options.orgId ?? app.orgId,\n }\n }\n localConf.set('appInfo', apps)\n}\n\nexport function clearAppInfo(directory: string, localConf: LocalStore = cliKit): void {\n debug(content`Clearing app information for directory ${token.path(directory)}...`)\n const apps = localConf.get('appInfo') ?? []\n const index = apps.findIndex((saved: CachedAppInfo) => saved.directory === directory)\n if (index !== -1) {\n apps.splice(index, 1)\n }\n localConf.set('appInfo', apps)\n}\n\nexport function getTheme(localConf: LocalStore = cliKit): string | undefined {\n debug(content`Getting theme store...`)\n return localConf.get('themeStore')\n}\n\nexport function setTheme(store: string, localConf: LocalStore = cliKit): void {\n debug(content`Setting theme store...`)\n localConf.set('themeStore', store)\n}\n\nexport function getSession(localConf: LocalStore = cliKit): string | undefined {\n debug(content`Getting session store...`)\n return localConf.get('sessionStore')\n}\n\nexport function setSession(store: string, localConf: LocalStore = cliKit): void {\n debug(content`Setting session store...`)\n localConf.set('sessionStore', store)\n}\n\nexport function removeSession(localConf: LocalStore = cliKit): void {\n debug(content`Removing session store...`)\n localConf.set('sessionStore', '')\n}\n","import {content, token, debug} from './output'\nimport {version} from '../package.json'\nimport latestVersion from 'latest-version'\n\n/**\n * Returns the latest available version of an NPM package.\n * @param name {string} The name of the NPM package.\n * @returns A promise to get the latest available version of a package.\n */\nexport async function latestNpmPackageVersion(name: string) {\n debug(content`Getting the latest version of NPM package: ${token.raw(name)}`)\n return latestVersion(name)\n}\n\nexport function cliVersion(): string {\n return version\n}\n","import {exec} from './system'\nimport {exists as fileExists, read as readFile} from './file'\nimport {glob, dirname, join as pathJoin} from './path'\nimport {Abort} from './error'\nimport {latestNpmPackageVersion} from './version'\nimport {Version} from './semver'\nimport {content, token, debug} from './output'\nimport {AbortController, AbortSignal} from 'abort-controller'\nimport type {Writable} from 'node:stream'\nimport type {ExecOptions} from './system'\n\nexport const genericConfigurationFileNames = {\n yarn: {\n lockfile: 'yarn.lock',\n },\n pnpm: {\n lockfile: 'pnpm-lock.yaml',\n },\n} as const\n\nexport const dependencyManager = ['yarn', 'npm', 'pnpm'] as const\nexport type DependencyManager = typeof dependencyManager[number]\n\nexport const PackageJsonNotFoundError = (directory: string) => {\n return new Abort(`The directory ${directory} doesn't have a package.json.`)\n}\n\n/**\n * Returns the dependency manager used to run the create workflow.\n * @param env {Object} The environment variables of the process in which the CLI runs.\n * @returns The dependency manager\n */\nexport function dependencyManagerUsedForCreating(env = process.env): DependencyManager {\n if (env.npm_config_user_agent?.includes('yarn')) {\n return 'yarn'\n } else if (env.npm_config_user_agent?.includes('pnpm')) {\n return 'pnpm'\n } else {\n return 'npm'\n }\n}\n\n/**\n * Returns the dependency manager used by an existing project.\n * @param directory {string} The root directory of the project.\n * @returns The dependency manager\n */\nexport async function getDependencyManager(directory: string): Promise<DependencyManager> {\n debug(content`Obtaining the dependency manager in directory ${token.path(directory)}...`)\n const yarnLockPath = pathJoin(directory, genericConfigurationFileNames.yarn.lockfile)\n const pnpmLockPath = pathJoin(directory, genericConfigurationFileNames.pnpm.lockfile)\n if (await fileExists(yarnLockPath)) {\n return 'yarn'\n } else if (await fileExists(pnpmLockPath)) {\n return 'pnpm'\n } else {\n return 'npm'\n }\n}\n\ninterface InstallNPMDependenciesRecursivelyOptions {\n /**\n * The dependency manager to use to install the dependencies.\n */\n dependencyManager: DependencyManager\n /**\n * The directory from where we'll find package.json's recursively\n */\n directory: string\n\n /**\n * Specifies the maximum depth of the glob search.\n */\n deep?: number\n}\n\n/**\n * This function traverses down a directory tree to find directories containing a package.json\n * and installs the dependencies if needed. To know if it's needed, it uses the \"check\" command\n * provided by dependency managers.\n * @param options {InstallNPMDependenciesRecursivelyOptions} Options to install dependencies recursively.\n */\nexport async function installNPMDependenciesRecursively(options: InstallNPMDependenciesRecursivelyOptions) {\n const packageJsons = await glob(pathJoin(options.directory, '**/package.json'), {\n ignore: [pathJoin(options.directory, 'node_modules/**/package.json')],\n cwd: options.directory,\n onlyFiles: true,\n deep: options.deep,\n })\n const abortController = new AbortController()\n try {\n await Promise.all(\n packageJsons.map(async (packageJsonPath) => {\n const directory = dirname(packageJsonPath)\n await install(directory, options.dependencyManager, undefined, undefined, abortController.signal)\n }),\n )\n } catch (error) {\n abortController.abort()\n throw error\n }\n}\n\n/**\n * Installs the dependencies in the given directory.\n * @param directory {string} The directory that contains the package.json\n * @param dependencyManager {DependencyManager} The dependency manager to use to install the dependencies.\n * @param stdout {Writable} Standard output stream.\n * @param stderr {Writable} Standard error stream.\n * @param signal {AbortSignal} Abort signal.\n * @returns stderr {Writable} Standard error stream.\n */\nexport async function install(\n directory: string,\n dependencyManager: DependencyManager,\n stdout?: Writable,\n stderr?: Writable,\n signal?: AbortSignal,\n) {\n const options: ExecOptions = {cwd: directory, stdout, stderr, signal}\n await exec(dependencyManager, ['install'], options)\n}\n\n/**\n * Returns the name of the package configured in its package.json\n * @param packageJsonPath {string} Path to the package.json file\n * @returns A promise that resolves with the name.\n */\nexport async function getPackageName(packageJsonPath: string): Promise<string> {\n const packageJsonContent = await packageJSONContents(packageJsonPath)\n return packageJsonContent.name\n}\n\n/**\n * Returns the list of production and dev dependencies of a package.json\n * @param packageJsonPath {string} Path to the package.json file\n * @returns A promise that resolves with the list of dependencies.\n */\nexport async function getDependencies(packageJsonPath: string): Promise<{[key: string]: string}> {\n const packageJsonContent = await packageJSONContents(packageJsonPath)\n const dependencies: {[key: string]: string} = packageJsonContent.dependencies ?? {}\n const devDependencies: {[key: string]: string} = packageJsonContent.devDependencies ?? {}\n\n return {...dependencies, ...devDependencies}\n}\n\nexport async function checkForNewVersion(dependency: string, currentVersion: string): Promise<string | undefined> {\n debug(content`Checking if there's a version of ${dependency} newer than ${currentVersion}`)\n try {\n const lastVersion = await latestNpmPackageVersion(dependency)\n if (lastVersion && new Version(currentVersion).compare(lastVersion) < 0) {\n return lastVersion\n } else {\n return undefined\n }\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n return undefined\n }\n}\n\nexport function getOutputUpdateCLIReminder(dependencyManager: DependencyManager, version: string): string {\n const updateCommand = token.packagejsonScript(dependencyManager, 'shopify', 'upgrade')\n return content`💡 Version ${version} available! Run ${updateCommand}`.value\n}\n\ninterface PackageJSONContents {\n name: string\n version?: string\n dependencies?: {[key: string]: string}\n devDependencies?: {[key: string]: string}\n}\n\nexport async function packageJSONContents(packageJsonPath: string): Promise<PackageJSONContents> {\n if (!(await fileExists(packageJsonPath))) {\n throw PackageJsonNotFoundError(dirname(packageJsonPath))\n }\n return JSON.parse(await readFile(packageJsonPath))\n}\n\nexport type DependencyType = 'dev' | 'prod' | 'peer'\n\ninterface AddNPMDependenciesIfNeededOptions {\n /** How dependencies should be added */\n type: DependencyType\n\n /** The dependency manager to use to add dependencies */\n dependencyManager: DependencyManager\n\n /** The directory that contains the package.json where dependencies will be added */\n directory: string\n\n /** Standard output coming from the underlying installation process */\n stdout?: Writable\n\n /** Standard error coming from the underlying installation process */\n stderr?: Writable\n\n /** Abort signal to stop the process */\n signal?: AbortSignal\n}\n\nexport interface DependencyVersion {\n name: string\n version: string | undefined\n}\n\n/**\n * Adds dependencies to a Node project (i.e. a project that has a package.json)\n * @param dependencies {string[]} List of dependencies to be added.\n * @param options {AddNPMDependenciesIfNeededOptions} Options for adding dependencies.\n */\nexport async function addNPMDependenciesIfNeeded(\n dependencies: DependencyVersion[],\n options: AddNPMDependenciesIfNeededOptions,\n force = false,\n) {\n debug(content`Adding the following dependencies if needed:\n${token.json(dependencies)}\nWith options:\n${token.json(options)}\n `)\n const packageJsonPath = pathJoin(options.directory, 'package.json')\n if (!(await fileExists(packageJsonPath))) {\n throw PackageJsonNotFoundError(options.directory)\n }\n const existingDependencies = Object.keys(await getDependencies(packageJsonPath))\n let dependenciesToAdd = dependencies\n if (!force) {\n dependenciesToAdd = dependencies.filter((dep) => {\n return !existingDependencies.includes(dep.name)\n })\n }\n if (dependenciesToAdd.length === 0) {\n return\n }\n let args: string[]\n const depedenciesWithVersion = dependenciesToAdd.map((dep) => {\n return dep.version ? `${dep.name}@${dep.version}` : dep.name\n })\n switch (options.dependencyManager) {\n case 'npm':\n args = argumentsToAddDependenciesWithNPM(depedenciesWithVersion, options.type)\n break\n case 'yarn':\n args = argumentsToAddDependenciesWithYarn(depedenciesWithVersion, options.type)\n break\n case 'pnpm':\n args = argumentsToAddDependenciesWithPNPM(depedenciesWithVersion, options.type)\n break\n }\n options.stdout?.write(`Executing...${args.join(' ')}`)\n await exec(options.dependencyManager, args, {\n cwd: options.directory,\n stdout: options.stdout,\n stderr: options.stderr,\n signal: options.signal,\n })\n}\n\nexport async function addNPMDependenciesWithoutVersionIfNeeded(\n dependencies: string[],\n options: AddNPMDependenciesIfNeededOptions,\n) {\n await addNPMDependenciesIfNeeded(\n dependencies.map((dependency) => {\n return {name: dependency, version: undefined}\n }),\n options,\n )\n}\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Switch it around so add-if-needed depends on this, rather than calling\n// if-needed with force: true which is counterintuitive.\nexport async function addLatestNPMDependencies(dependencies: string[], options: AddNPMDependenciesIfNeededOptions) {\n await addNPMDependenciesIfNeeded(\n dependencies.map((dependency) => {\n return {name: dependency, version: 'latest'}\n }),\n options,\n true,\n )\n}\n\n/**\n * Returns the arguments to add dependencies using NPM.\n * @param dependencies {string[]} The list of dependencies to add\n * @param type {DependencyType} The dependency type.\n * @returns {string[]} An array with the arguments.\n */\nfunction argumentsToAddDependenciesWithNPM(dependencies: string[], type: DependencyType): string[] {\n let command = ['install']\n command = command.concat(dependencies)\n switch (type) {\n case 'dev':\n command.push('--save-dev')\n break\n case 'peer':\n command.push('--save-peer')\n break\n case 'prod':\n command.push('--save-prod')\n break\n }\n return command\n}\n\n/**\n * Returns the arguments to add dependencies using Yarn.\n * @param dependencies {string[]} The list of dependencies to add\n * @param type {DependencyType} The dependency type.\n * @returns {string[]} An array with the arguments.\n */\nfunction argumentsToAddDependenciesWithYarn(dependencies: string[], type: DependencyType): string[] {\n let command = ['add']\n command = command.concat(dependencies)\n switch (type) {\n case 'dev':\n command.push('--dev')\n break\n case 'peer':\n command.push('--peer')\n break\n case 'prod':\n command.push('--prod')\n break\n }\n return command\n}\n\n/**\n * Returns the arguments to add dependencies using PNPM.\n * @param dependencies {string[]} The list of dependencies to add\n * @param type {DependencyType} The dependency type.\n * @returns {string[]} An array with the arguments.\n */\nfunction argumentsToAddDependenciesWithPNPM(dependencies: string[], type: DependencyType): string[] {\n let command = ['add']\n command = command.concat(dependencies)\n switch (type) {\n case 'dev':\n command.push('--save-dev')\n break\n case 'peer':\n command.push('--save-peer')\n break\n case 'prod':\n command.push('--save-prod')\n break\n }\n return command\n}\n\nexport type ProjectType = 'node' | 'php' | 'ruby' | undefined\n\nexport async function getProjectType(directory: string): Promise<ProjectType> {\n const nodeConfigFile = pathJoin(directory, 'package.json')\n const rubyConfigFile = pathJoin(directory, 'Gemfile')\n const phpConfigFile = pathJoin(directory, 'composer.json')\n\n if (await fileExists(nodeConfigFile)) {\n return 'node'\n } else if (await fileExists(rubyConfigFile)) {\n return 'ruby'\n } else if (await fileExists(phpConfigFile)) {\n return 'php'\n }\n return undefined\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport * as environment from './environment'\nimport {fetch} from './http'\nimport {platformAndArch} from './os'\nimport {join, resolve} from './path'\nimport {version as rubyVersion} from './ruby'\nimport {getAppInfo} from './store'\nimport {cliVersion} from './version'\nimport {debug, content, token} from './output'\nimport {getProjectType} from './dependency'\n\nexport const url = 'https://monorail-edge.shopifysvc.com/v1/produce'\n\nexport const reportEvent = async (command: string, args: string[]) => {\n if (environment.local.isDebug() || environment.local.analyticsDisabled()) {\n return\n }\n try {\n const currentTime = new Date().getTime()\n const payload = await buildPayload(command, args, currentTime)\n const body = JSON.stringify(payload)\n const headers = buildHeaders(currentTime)\n\n const response = await fetch(url, {method: 'POST', body, headers})\n if (response.status === 200) {\n debug(content`Analytics event sent: ${token.json(payload)}`)\n } else {\n debug(`Failed to report usage analytics: ${response.statusText}`)\n }\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n let message = 'Failed to report usage analytics'\n if (error instanceof Error) {\n message = message.concat(`: ${error.message}`)\n }\n debug(message)\n }\n}\n\nconst buildHeaders = (currentTime: number) => {\n return {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Monorail-Edge-Event-Created-At-Ms': currentTime.toString(),\n 'X-Monorail-Edge-Event-Sent-At-Ms': currentTime.toString(),\n }\n}\n\nconst buildPayload = async (command: string, args: string[] = [], currentTime: number) => {\n let directory = process.cwd()\n const pathFlagIndex = args.indexOf('--path')\n if (pathFlagIndex >= 0) {\n directory = resolve(args[pathFlagIndex + 1])\n }\n const appInfo = getAppInfo(directory)\n const {platform, arch} = platformAndArch()\n\n const rawPartnerId = appInfo?.orgId\n let partnerIdAsInt: number | undefined\n if (rawPartnerId !== undefined) {\n partnerIdAsInt = parseInt(rawPartnerId, 10)\n if (isNaN(partnerIdAsInt)) {\n partnerIdAsInt = undefined\n }\n }\n\n return {\n schema_id: 'app_cli3_command/1.0',\n payload: {\n project_type: await getProjectType(join(directory, 'web')),\n command,\n args: args.join(' '),\n time_start: currentTime,\n time_end: currentTime,\n total_time: 0,\n success: true,\n uname: `${platform} ${arch}`,\n cli_version: cliVersion(),\n ruby_version: (await rubyVersion()) || '',\n node_version: process.version.replace('v', ''),\n is_employee: await environment.local.isShopify(),\n api_key: appInfo?.appId,\n partner_id: partnerIdAsInt,\n },\n }\n}\n","import {isShopify} from '../environment/local'\nimport constants from '../constants'\nimport {randomUUID} from 'crypto'\n\nexport async function buildHeaders(token: string): Promise<{[key: string]: string}> {\n const userAgent = `Shopify CLI; v=${constants.versions.cliKit}`\n const isEmployee = await isShopify()\n\n const headers = {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'User-Agent': userAgent,\n // 'Sec-CH-UA': secCHUA, This header requires the Git sha.\n 'Sec-CH-UA-PLATFORM': process.platform,\n 'X-Request-Id': randomUUID(),\n authorization: `Bearer ${token}`,\n 'X-Shopify-Access-Token': `Bearer ${token}`,\n 'Content-Type': 'application/json',\n // ...(isEmployee && {'X-Shopify-Cli-Employee': '1'}),\n /* eslint-enable @typescript-eslint/naming-convention */\n }\n\n return headers\n}\n\n/**\n * Remvoes the sensitive data from the headers and outputs them as a string.\n * @param headers {{[key: string]: string}} HTTP headers.\n * @returns {string} A sanitized version of the headers as a string.\n */\nexport function sanitizedHeadersOutput(headers: {[key: string]: string}): string {\n const sanitized: {[key: string]: string} = {}\n const keywords = ['token', 'authorization']\n Object.keys(headers).forEach((header) => {\n if (keywords.find((keyword) => header.toLocaleLowerCase().includes(keyword)) === undefined) {\n sanitized[header] = headers[header]\n }\n })\n return Object.keys(sanitized)\n .map((header) => {\n return ` - ${header}: ${sanitized[header]}`\n })\n .join('\\n')\n}\n","import {buildHeaders, sanitizedHeadersOutput} from './common'\nimport {AdminSession} from '../session'\nimport {debug, content, token as outputToken} from '../output'\nimport {Bug, Abort} from '../error'\nimport {request as graphqlRequest, gql, RequestDocument, Variables, ClientError} from 'graphql-request'\n\nconst UnauthorizedAccessError = (store: string) => {\n const adminLink = outputToken.link(`URL`, `https://${store}/admin`)\n const storeName = store.replace('.myshopify.com', '')\n return new Abort(\n content`Looks like you need access to this dev store (${outputToken.link(storeName, `https://${store}`)})`,\n content`• Log in to the store directly from this ${adminLink}. If you're the store owner, then that direct log in should solve your access issue.\n• If you're not the owner, create a dev store staff account for yourself. Then log in directly from the link above.\n `,\n )\n}\n\nconst UnknownError = () => {\n return new Bug(`Unknown error connecting to your store`)\n}\n\nexport async function request<T>(query: RequestDocument, session: AdminSession, variables?: Variables): Promise<T> {\n const version = await fetchApiVersion(session)\n const url = adminUrl(session.storeFqdn, version)\n const headers = await buildHeaders(session.token)\n debug(`\nSending Admin GraphQL request:\n${query}\n\nWith variables:\n${variables ? JSON.stringify(variables, null, 2) : ''}\n\nAnd headers:\n${sanitizedHeadersOutput(headers)}\n`)\n try {\n const response = await graphqlRequest<T>(url, query, variables, headers)\n return response\n } catch (error) {\n if (error instanceof ClientError) {\n const errorMessage = content`\nThe Admin GraphQL API responded unsuccessfully with the HTTP status ${`${error.response.status}`} and errors:\n\n${outputToken.json(error.response.errors)}\n `\n const abortError = new Abort(errorMessage.value)\n abortError.stack = error.stack\n throw abortError\n } else {\n throw error\n }\n }\n}\n\nasync function fetchApiVersion(session: AdminSession): Promise<string> {\n const url = adminUrl(session.storeFqdn, 'unstable')\n const query = apiVersionQuery()\n const headers = await buildHeaders(session.token)\n\n debug(`\nSending Admin GraphQL request to URL ${url} with query:\n${query}\n `)\n const data = await graphqlRequest<{\n publicApiVersions: {handle: string; supported: boolean}[]\n }>(url, query, {}, headers).catch((err) => {\n throw err.response.status === 403 ? UnauthorizedAccessError(session.storeFqdn) : UnknownError()\n })\n\n return data.publicApiVersions\n .filter((item) => item.supported)\n .map((item) => item.handle)\n .sort()\n .reverse()[0]\n}\n\nfunction adminUrl(store: string, version: string | undefined): string {\n const realVersion = version || 'unstable'\n return `https://${store}/admin/api/${realVersion}/graphql.json`\n}\n\nfunction apiVersionQuery(): string {\n return gql`\n query {\n publicApiVersions {\n handle\n supported\n }\n }\n `\n}\n","import {gql} from 'graphql-request'\n\nexport const FindOrganizationQuery = gql`\n query FindOrganization($id: ID!) {\n organizations(id: $id, first: 1) {\n nodes {\n id\n businessName\n website\n appsNext\n apps(first: 100) {\n nodes {\n id\n title\n apiKey\n organizationId\n apiSecretKeys {\n secret\n }\n appType\n }\n }\n }\n }\n }\n`\n\nexport interface FindOrganizationQuerySchema {\n organizations: {\n nodes: {\n id: string\n businessName: string\n website: string\n appsNext: boolean\n apps: {\n nodes: {\n id: string\n title: string\n apiKey: string\n organizationId: string\n apiSecretKeys: {\n secret: string\n }[]\n appType: string\n }[]\n }\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport interface AllOrganizationsQuerySchemaOrganization {\n id: string\n businessName: string\n website: string\n appsNext: boolean\n}\n\nexport interface AllOrganizationsQuerySchema {\n organizations: {\n nodes: AllOrganizationsQuerySchemaOrganization[]\n }\n}\n\nexport const AllOrganizationsQuery = gql`\n {\n organizations(first: 200) {\n nodes {\n id\n businessName\n website\n appsNext\n }\n }\n }\n`\n","import {gql} from 'graphql-request'\n\nexport const CreateAppQuery = gql`\n mutation AppCreate($org: Int!, $title: String!, $appUrl: Url!, $redir: [Url]!, $type: AppType) {\n appCreate(\n input: {\n organizationID: $org\n title: $title\n applicationUrl: $appUrl\n redirectUrlWhitelist: $redir\n appType: $type\n }\n ) {\n app {\n id\n apiKey\n title\n appType\n applicationUrl\n redirectUrlWhitelist\n apiSecretKeys {\n secret\n }\n appType\n }\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface CreateAppQueryVariables {\n org: number\n title: string\n appUrl: string\n redir: string[]\n type: string\n}\n\nexport interface CreateAppQuerySchema {\n appCreate: {\n app: {\n id: string\n apiKey: string\n title: string\n applicationUrl: string\n redirectUrlWhitelist: string[]\n organizationId: string\n apiSecretKeys: {\n secret: string\n }[]\n appType: string\n }\n userErrors: {\n field: string[]\n message: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const UpdateURLsQuery = gql`\n mutation appUpdate($apiKey: String!, $appUrl: Url!, $redir: [Url]!) {\n appUpdate(input: {apiKey: $apiKey, applicationUrl: $appUrl, redirectUrlWhitelist: $redir}) {\n userErrors {\n message\n field\n }\n }\n }\n`\n\nexport interface UpdateURLsQueryVariables {\n apiKey: string\n appUrl: string\n redir: string[]\n}\n\nexport interface UpdateURLsQuerySchema {\n appUpdate: {\n userErrors: {\n field: string[]\n message: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const FindAppQuery = gql`\n query FindApp($apiKey: String!) {\n app(apiKey: $apiKey) {\n id\n title\n apiKey\n organizationId\n apiSecretKeys {\n secret\n }\n appType\n }\n }\n`\n\nexport interface FindAppQuerySchema {\n app: {\n id: string\n title: string\n apiKey: string\n organizationId: string\n apiSecretKeys: {\n secret: string\n }[]\n appType: string\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const ExtensionUpdateDraftMutation = gql`\n mutation ExtensionUpdateDraft($apiKey: String!, $registrationId: ID!, $config: JSON!, $context: String) {\n extensionUpdateDraft(\n input: {apiKey: $apiKey, registrationId: $registrationId, config: $config, context: $context}\n ) {\n extensionVersion {\n registrationId\n context\n lastUserInteractionAt\n location\n validationErrors {\n field\n message\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface ExtensionUpdateDraftInput {\n apiKey: string\n config: string\n // not all extensions require configs, e.g. subscription\n context: string | undefined\n registrationId: string\n}\n\n// \"\"\"\n// Autogenerated return type of ExtensionUpdateDraft\n// \"\"\"\nexport interface ExtensionUpdateDraftPayload {\n // \"\"\"\n // A unique identifier for the client performing the mutation.\n // \"\"\"\n clientMutationId: string\n extensionVersion: ExtensionVersion\n // userErrors: [UserError]\n userErrors: {\n field: string[]\n message: string\n }[]\n}\n\n// \"\"\"\n// A particular version of an extension belonging to a Shopify Partner App.\n// \"\"\"\nexport interface ExtensionVersion {\n // \"\"\"\n // The serialized JSON config for the extension version\n // \"\"\"\n config: string\n\n // \"\"\"\n // The context of an extension version, indicating where it will be rendered\n // \"\"\"\n context: string\n\n // \"\"\"\n // The unique identifier of the extension version\n // \"\"\"\n // id: ID\n id: string\n\n // \"\"\"\n // The last time a user updated an extension version\n // \"\"\"\n // lastUserInteractionAt: DateTime\n lastUserInteractionAt: string\n\n // \"\"\"\n // The URL to view the app extension version in the partners dashboard\n // \"\"\"\n // location: Url\n location: string\n\n // \"\"\"\n // The unique identifier of the extension registration this version belongs to\n // \"\"\"\n // registrationId: ID\n registrationId: string\n\n // \"\"\"\n // The uuid of the extension registration this version belongs to\n // \"\"\"\n registrationUuid: string\n\n // \"\"\"\n // The uuid of the extension version\n // \"\"\"\n uuid: string\n\n // \"\"\"\n // The validation errors for an extension version\n // \"\"\"\n // validationErrors: [ValidationError]\n validationErrors: {\n field: string[]\n message: string\n }[]\n\n // \"\"\"\n // The version tag of the extension version\n // \"\"\"\n versionTag: string\n}\n\nexport interface ExtensionUpdateSchema {\n extensionUpdateDraft: ExtensionUpdateDraftPayload\n}\n","import {gql} from 'graphql-request'\n\nexport const GenerateSignedUploadUrl = gql`\n mutation GenerateSignedUploadUrl($apiKey: String!, $deploymentUuid: String!, $bundleFormat: Int!) {\n deploymentGenerateSignedUploadUrl(\n input: {apiKey: $apiKey, deploymentUuid: $deploymentUuid, bundleFormat: $bundleFormat}\n ) {\n signedUploadUrl\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface GenerateSignedUploadUrlVariables {\n apiKey: string\n deploymentUuid: string\n bundleFormat: number\n}\n\nexport interface GenerateSignedUploadUrlSchema {\n deploymentGenerateSignedUploadUrl: {\n signedUploadUrl: string\n userErrors: {\n field: string[]\n message: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const CreateDeployment = gql`\n mutation CreateDeployment($apiKey: String!, $uuid: String!, $bundleUrl: String!, $extensions: [ExtensionSettings!]!) {\n deploymentCreate(input: {apiKey: $apiKey, uuid: $uuid, bundleUrl: $bundleUrl, extensions: $extensions}) {\n deployment {\n uuid\n }\n userErrors {\n message\n field\n }\n }\n }\n`\n\nexport interface ExtensionSettings {\n uuid: string\n config: string\n context: string\n}\n\nexport interface CreateDeploymentVariables {\n apiKey: string\n uuid: string\n bundleUrl: string\n extensions: ExtensionSettings[]\n}\n\nexport interface CreateDeploymentSchema {\n deploymentCreate: {\n deployment: {\n uuid: string\n }\n userErrors: {\n field: string[]\n message: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const AllStoresByOrganizationQuery = gql`\n query FindOrganization($id: ID!) {\n organizations(id: $id, first: 1) {\n nodes {\n id\n stores(first: 500, archived: false) {\n nodes {\n shopId\n link\n shopDomain\n shopName\n transferDisabled\n convertableToPartnerTest\n }\n }\n }\n }\n }\n`\n\nexport interface AllStoresByOrganizationSchema {\n organizations: {\n nodes: {\n id: string\n stores: {\n nodes: {\n shopId: string\n link: string\n shopDomain: string\n shopName: string\n transferDisabled: boolean\n convertableToPartnerTest: boolean\n }[]\n }\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const ConvertDevToTestStoreQuery = gql`\n mutation convertDevToTestStore($input: ConvertDevToTestStoreInput!) {\n convertDevToTestStore(input: $input) {\n convertedToTestStore\n userErrors {\n message\n field\n }\n }\n }\n`\n\nexport interface ConvertDevToTestStoreVariables {\n input: {\n organizationID: number\n shopId: string\n }\n}\n\nexport interface ConvertDevToTestStoreSchema {\n convertDevToTestStore: {\n convertedToTestStore: boolean\n userErrors: {\n field: string[]\n message: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const ExtensionCreateQuery = gql`\n mutation ExtensionCreate($apiKey: String!, $type: ExtensionType!, $title: String!, $config: JSON!, $context: String) {\n extensionCreate(input: {apiKey: $apiKey, type: $type, title: $title, config: $config, context: $context}) {\n extensionRegistration {\n id\n uuid\n type\n title\n draftVersion {\n registrationId\n lastUserInteractionAt\n validationErrors {\n field\n message\n }\n }\n }\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface ExtensionCreateVariables {\n apiKey: string\n type: string\n title: string\n config: string\n context?: string | null\n}\n\nexport interface ExtensionCreateSchema {\n extensionCreate: {\n extensionRegistration: {\n id: string\n uuid: string\n type: string\n title: string\n draftVersion: {\n registrationId: string\n lastUserInteractionAt: string\n validationErrors: {\n field: string[]\n message: string\n }[]\n }\n }\n userErrors: {\n field: string[]\n message: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const ExtensionSpecificationsQuery = gql`\n query fetchSpecifications($api_key: String!) {\n extensionSpecifications(apiKey: $api_key) {\n name\n identifier\n options {\n managementExperience\n }\n features {\n argo {\n surface\n }\n }\n }\n }\n`\n\nexport interface ExtensionSpecificationsQueryVariables {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n api_key: string\n}\n\nexport interface ExtensionSpecificationsQuerySchema {\n extensionSpecifications: {\n name: string\n identifier: string\n options: {\n managementExperience: 'cli' | 'custom' | 'dashboard'\n }[]\n features?: {\n argo?: {\n surface: string\n }\n }\n }[]\n}\n","import {gql} from 'graphql-request'\n\nexport const AllAppExtensionRegistrationsQuery = gql`\n query allAppExtensionRegistrations($apiKey: String!) {\n app(apiKey: $apiKey) {\n extensionRegistrations {\n id\n uuid\n title\n type\n }\n }\n }\n`\n\nexport interface AllAppExtensionRegistrationsQueryVariables {\n apiKey: string\n}\n\nexport interface AllAppExtensionRegistrationsQuerySchema {\n app: {\n extensionRegistrations: {\n id: string\n uuid: string\n title: string\n type: string\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const FindProductVariantQuery = gql`\n query {\n products(first: 1) {\n edges {\n node {\n id\n variants(first: 1) {\n edges {\n node {\n id\n }\n }\n }\n }\n }\n }\n }\n`\n\nexport interface FindProductVariantSchema {\n products: {\n edges: {\n node: {\n id: string\n variants: {\n edges: {\n node: {\n id: string\n }\n }[]\n }\n }\n }[]\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const ScriptServiceProxyQuery = gql`\n query ProxyRequest($api_key: String, $query: String!, $variables: String) {\n scriptServiceProxy(apiKey: $api_key, query: $query, variables: $variables)\n }\n`\n\nexport interface ScriptServiceProxyQuerySchema {\n scriptServiceProxy: unknown\n}\n","import {gql} from 'graphql-request'\n\nexport const GetAppFunctionsQuery = gql`\n query GetAppScripts($appKey: String!, $extensionPointName: ExtensionPointName!) {\n appScripts(appKeys: [$appKey], extensionPointName: $extensionPointName) {\n uuid\n title\n }\n }\n`\n","import {gql} from 'graphql-request'\n\nexport const ModuleUploadUrlGenerateMutation = gql`\n mutation moduleUploadUrlGenerate {\n moduleUploadUrlGenerate {\n details {\n url\n headers\n humanizedMaxSize\n }\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface ModuleUploadUrlGenerateMutationSchema {\n data: {\n moduleUploadUrlGenerate: {\n details: {\n url: string\n headers: {[key: string]: string}\n humanizedMaxSize: string\n }\n userErrors: {\n field: string\n message: string\n }[]\n }\n }\n}\n","import {gql} from 'graphql-request'\n\nexport const AppFunctionSetMutation = gql`\n mutation AppScriptSet(\n $uuid: String\n $extensionPointName: ExtensionPointName!\n $title: String!\n $description: String\n $force: Boolean\n $schemaMajorVersion: String\n $schemaMinorVersion: String\n $scriptConfigVersion: String\n $configurationUi: Boolean!\n $configurationDefinition: String\n $moduleUploadUrl: String!\n $library: LibraryInput\n $inputQuery: String\n $appBridge: AppBridgeInput\n $apiVersion: String\n ) {\n appScriptSet(\n uuid: $uuid\n extensionPointName: $extensionPointName\n title: $title\n description: $description\n force: $force\n schemaMajorVersion: $schemaMajorVersion\n schemaMinorVersion: $schemaMinorVersion\n scriptConfigVersion: $scriptConfigVersion\n configurationUi: $configurationUi\n configurationDefinition: $configurationDefinition\n moduleUploadUrl: $moduleUploadUrl\n library: $library\n inputQuery: $inputQuery\n appBridge: $appBridge\n apiVersion: $apiVersion\n ) {\n userErrors {\n field\n message\n tag\n }\n appScript {\n uuid\n appKey\n configSchema\n extensionPointName\n title\n }\n }\n }\n`\n\nexport interface AppFunctionSetMutationSchema {\n data: {\n appScriptSet: {\n userErrors: {\n field: string\n message: string\n tag: string\n }[]\n appScript?: {\n uuid: string\n appKey: string\n configSchema: unknown\n extensionPointName: string\n title: string\n }\n }\n }\n}\n\nexport interface AppFunctionSetVariables {\n uuid?: string\n extensionPointName: string\n title: string\n description?: string\n force?: boolean\n schemaMajorVersion?: string\n schemaMinorVersion?: string\n scriptConfigVersion?: string\n configurationUi: boolean\n configurationDefinition?: string\n moduleUploadUrl: string\n library?: {\n language: string\n version: string\n }\n appBridge?: {\n createPath?: string\n detailsPath?: string\n }\n inputQuery?: string\n apiVersion?: string\n skipCompilationJob: boolean\n}\n","import {gql} from 'graphql-request'\n\nexport const CompileModuleMutation = gql`\n mutation compileModule($moduleUploadUrl: String!) {\n compileModule(moduleUploadUrl: $moduleUploadUrl) {\n jobId\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface CompileModuleMutationSchema {\n data: {\n compileModule: {\n jobId: string\n userErrors: {\n field: string\n message: string\n }[]\n }\n }\n}\n\nexport interface CompileModuleMutationVariables {\n moduleUploadUrl: string\n}\n","import {gql} from 'graphql-request'\n\nexport const ModuleCompilationStatusQuery = gql`\n query moduleCompilationStatus($jobId: String!) {\n moduleCompilationStatus(jobId: $jobId) {\n status\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface ModuleCompilationStatusQuerySchema {\n data: {\n moduleCompilationStatus: {\n status: string\n userErrors: {\n field: string\n message: string\n }[]\n }\n }\n}\n\nexport interface ModuleCompilationQueryVariables {\n jobId: string\n}\n","import {gql} from 'graphql-request'\n\nexport const FindOrganizationBasicQuery = gql`\n query FindOrganization($id: ID!) {\n organizations(id: $id, first: 1) {\n nodes {\n id\n businessName\n website\n appsNext\n }\n }\n }\n`\n\nexport interface FindOrganizationBasicQuerySchema {\n organizations: {\n nodes: {\n id: string\n businessName: string\n website: string\n appsNext: boolean\n }[]\n }\n}\n","import {buildHeaders, sanitizedHeadersOutput} from './common'\nimport {ScriptServiceProxyQuery} from './graphql'\nimport {partners as partnersFqdn} from '../environment/fqdn'\nimport {debug, stringifyMessage, content, token as outputToken} from '../output'\nimport {ExtendableError} from '../error'\nimport {request as graphqlRequest, Variables, RequestDocument, ClientError, gql} from 'graphql-request'\n\nexport class RequestClientError extends ExtendableError {\n statusCode: number\n public constructor(message: string, statusCode: number) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\nexport async function request<T>(query: RequestDocument, token: string, variables?: Variables): Promise<T> {\n const fqdn = await partnersFqdn()\n const url = `https://${fqdn}/api/cli/graphql`\n const headers = await buildHeaders(token)\n debug(`\nSending Partners GraphQL request:\n${query}\n\nWith variables:\n${variables ? JSON.stringify(variables, null, 2) : ''}\n\nAnd headers:\n${sanitizedHeadersOutput(headers)}\n `)\n\n try {\n const response = await graphqlRequest<T>(url, query, variables, headers)\n return response\n } catch (error) {\n if (error instanceof ClientError) {\n const errorMessage = stringifyMessage(content`\nThe Partners GraphQL API responded unsuccessfully with the HTTP status ${`${error.response.status}`} and errors:\n\n${outputToken.json(error.response.errors)}\n `)\n const mappedError = new RequestClientError(errorMessage, error.response.status)\n mappedError.stack = error.stack\n throw mappedError\n } else {\n throw error\n }\n }\n}\n\n/**\n * Check if the given token is revoked and no longer valid to interact with the Partners API.\n * @param token {string} - The token to check\n * @returns {Promise<boolean>} - True if the token is revoked, false otherwise\n */\nexport async function checkIfTokenIsRevoked(token: string): Promise<boolean> {\n const query = gql`\n {\n organizations(first: 1) {\n nodes {\n id\n }\n }\n }\n `\n\n const fqdn = await partnersFqdn()\n const url = `https://${fqdn}/api/cli/graphql`\n const headers = await buildHeaders(token)\n\n try {\n await graphqlRequest(url, query, {}, headers)\n return false\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n if (error instanceof ClientError) {\n return error.response.status === 401\n }\n return false\n }\n}\n\ninterface ProxyResponse {\n scriptServiceProxy: string\n}\n\n/**\n * Function queries are proxied through the script service proxy.\n * To execute a query, we encapsulate it inside another query (including the variables)\n * This is done automatically, you just need to provide the query and the variables.\n *\n * @param apiKey {string} APIKey of the app where the query will be executed.\n * @param query {any} GraphQL query to execute.\n * @param token {string} Partners token\n * @param variables {any} GraphQL variables to pass to the query.\n * @returns {Promise<T>} The response of the query.\n */\nexport async function functionProxyRequest<T>(\n apiKey: string,\n query: unknown,\n token: string,\n variables?: unknown,\n): Promise<T> {\n const proxyVariables = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n api_key: apiKey,\n query,\n variables: JSON.stringify(variables) || '{}',\n }\n const proxyQuery = ScriptServiceProxyQuery\n const res: ProxyResponse = await request(proxyQuery, token, proxyVariables)\n const json = JSON.parse(res.scriptServiceProxy)\n return json as T\n}\n","import {fetch} from './http'\nimport {Abort} from './error'\nimport {debug, token} from './output'\nimport md5File from 'md5-file'\n\nexport const InvalidChecksumError = ({file, expected, got}: {file: string; expected: string; got: string}) => {\n return new Abort(`The validation of ${file} failed. We expected the checksum ${expected}, but got ${got})`)\n}\n/**\n * Given a local file and a URL pointing to a remote file representing the MD5 of a local file,\n * it validates the authenticity of the binary using an MD5 checksum.\n * @param options: The file to validate and the URL that points to the file containing the MD5.\n */\nexport async function validateMD5({file, md5FileURL}: {file: string; md5FileURL: string}) {\n debug(`Checking MD5 of file ${token.path(file)} against the MD5 in ${token.link('URL', md5FileURL)}`)\n const md5Digest = await md5File(file)\n const md5Response = await fetch(md5FileURL)\n const md5Contents = await md5Response.text()\n const canonicalMD5 = md5Contents.split(' ')[0]\n if (!(canonicalMD5 === md5Digest)) {\n throw InvalidChecksumError({\n file,\n got: md5Digest,\n expected: canonicalMD5,\n })\n }\n}\n","import {Flags} from '@oclif/core'\n\n/**\n * An object that contains the flags that\n * are shared across all the commands.\n */\nexport const globalFlags = {\n verbose: Flags.boolean({\n hidden: false,\n description: 'Increase the verbosity of the logs.',\n env: 'SHOPIFY_FLAG_VERBOSE',\n }),\n}\n","import {Abort} from './error'\nimport {exists, read as readFile, write as writeFile} from './file'\nimport {debug, content as outputContent, token} from './output'\nimport {parse, stringify} from 'envfile'\n\n/**\n * Error that's thrown when the .env is not found.\n * @param path {string} Path to the .env file.\n * @returns {Abort} An abort error.\n */\nexport const DotEnvNotFoundError = (path: string) => {\n return new Abort(`The environment file at ${path} does not exist.`)\n}\n\n/**\n * This interface represents a .env file.\n */\nexport interface DotEnvFile {\n /**\n * Path to the .env file.\n */\n path: string\n /**\n * Variables of the .env file.\n */\n variables: {[name: string]: string}\n}\n\nexport async function read(path: string): Promise<DotEnvFile> {\n debug(outputContent`Reading the .env file at ${token.path(path)}`)\n if (!(await exists(path))) {\n throw DotEnvNotFoundError(path)\n }\n const content = await readFile(path)\n return {\n path,\n variables: parse(content),\n }\n}\n\n/**\n * Writes a .env file to disk.\n * @param file {DotEnvFile} .env file to be written.\n */\nexport async function write(file: DotEnvFile) {\n await writeFile(file.path, stringify(file.variables))\n}\n","import {Abort} from './error'\nimport {hasGit} from './environment/local'\nimport {content, token, debug} from './output'\nimport git, {TaskOptions, SimpleGitProgressEvent} from 'simple-git'\n\nexport const factory = git\n\nexport const GitNotPresentError = () => {\n return new Abort(\n `Git is necessary in the environment to continue`,\n content`Install ${token.link('git', 'https://git-scm.com/book/en/v2/Getting-Started-Installing-Git')}`,\n )\n}\n\nexport async function initializeRepository(directory: string) {\n debug(content`Initializing git repository at ${token.path(directory)}...`)\n await ensurePresentOrAbort()\n await git(directory).init()\n}\n\nexport async function downloadRepository({\n repoUrl,\n destination,\n progressUpdater,\n shallow,\n}: {\n repoUrl: string\n destination: string\n progressUpdater?: (statusString: string) => void\n shallow?: boolean\n}) {\n debug(content`Git-cloning repository ${repoUrl} into ${token.path(destination)}...`)\n await ensurePresentOrAbort()\n const [repository, branch] = repoUrl.split('#')\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const options: TaskOptions = {'--recurse-submodules': null}\n if (branch) {\n options['--branch'] = branch\n }\n if (shallow) {\n options['--depth'] = 1\n }\n const progress = ({stage, progress, processed, total}: SimpleGitProgressEvent) => {\n const updateString = `${stage}, ${processed}/${total} objects (${progress}% complete)`\n if (progressUpdater) progressUpdater(updateString)\n }\n\n await git({progress}).clone(repository, destination, options, (err) => {\n if (err) {\n const abortError = new Abort(err.message)\n abortError.stack = err.stack\n throw abortError\n }\n })\n}\n\n/**\n * If \"git\" is not present in the environment it throws\n * an abort error.\n */\nexport async function ensurePresentOrAbort() {\n if (!(await hasGit())) {\n throw GitNotPresentError()\n }\n}\n","import {fetch} from './http'\nimport {Abort} from './error'\nimport {content, debug} from './output'\n\nclass GitHubClientError extends Error {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(url: string, statusCode: number, bodyJson: any) {\n super(\n `The request to GitHub API URL ${url} failed with status code ${statusCode} and the following error message: ${bodyJson.message}`,\n )\n }\n}\n\nexport interface GithubRelease {\n id: number\n url: string\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tag_name: string\n name: string\n body: string\n draft: boolean\n prerelease: boolean\n // eslint-disable-next-line @typescript-eslint/naming-convention\n created_at: string\n // eslint-disable-next-line @typescript-eslint/naming-convention\n published_at: string\n // eslint-disable-next-line @typescript-eslint/naming-convention\n tarball_url: string\n}\n\ninterface Options {\n filter: (release: GithubRelease) => boolean\n}\n\nexport async function getLatestRelease(\n user: string,\n repo: string,\n {filter}: Options = {filter: () => true},\n): Promise<GithubRelease> {\n debug(content`Getting the latest release of GitHub repository ${user}/${repo}...`)\n const url = `https://api.github.com/repos/${user}/${repo}/releases`\n const fetchResult = await fetch(url)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const jsonBody: any = await fetchResult.json()\n\n if (fetchResult.status !== 200) {\n throw new GitHubClientError(url, fetchResult.status, jsonBody)\n }\n\n return jsonBody.find(filter)\n}\n\nexport function parseRepoUrl(src: string) {\n const match =\n /^(?:(?:https:\\/\\/)?([^:/]+\\.[^:/]+)\\/|git@([^:/]+)[:/]|([^/]+):)?([^/\\s]+)\\/([^/\\s#]+)(?:((?:\\/[^/\\s#]+)+))?(?:\\/)?(?:#(.+))?/.exec(\n src,\n )\n\n if (!match) {\n const exampleFormats = [\n 'github:user/repo',\n 'user/repo/subdirectory',\n 'git@github.com:user/repo',\n 'user/repo#dev',\n 'https://github.com/user/repo',\n ]\n\n throw new Abort(`Parsing the url ${src} failed. Supported formats are ${exampleFormats.join(', ')}.`)\n }\n\n const site = match[1] || match[2] || match[3] || 'github.com'\n const normalizedSite = site === 'github' ? 'github.com' : site\n const user = match[4]\n const name = match[5].replace(/\\.git$/, '')\n const subDirectory = match[6]?.slice(1)\n const ref = match[7]\n const branch = ref ? `#${ref}` : ''\n const ssh = `git@${normalizedSite}:${user}/${name}`\n const http = `https://${normalizedSite}/${user}/${name}`\n const full = ['https:/', normalizedSite, user, name, subDirectory].join('/').concat(branch)\n\n return {full, site: normalizedSite, user, name, ref, subDirectory, ssh, http}\n}\n\nexport interface GithubRepoReference {\n repoBaseUrl: string\n branch?: string\n filePath?: string\n}\n\nexport function parseGithubRepoReference(src: string): GithubRepoReference {\n const url = new URL(src)\n const branch = url.hash ? url.hash.slice(1) : undefined\n const [_, user, repo, ...repoPath] = url.pathname.split('/')\n const filePath = repoPath.length > 0 ? repoPath.join('/') : undefined\n\n return {\n repoBaseUrl: `${url.origin}/${user}/${repo}`,\n branch,\n filePath,\n }\n}\n","import Haikunator from 'haikunator'\n\nconst haikunator = new Haikunator()\n\nexport function generate(suffix: string): string {\n const generated = haikunator.haikunate()\n const [adjective, noun, token] = generated.split('-')\n return [adjective, noun, suffix, token].join('-')\n}\n","import {randomUUID} from 'crypto'\n\n/**\n * Generates and returns a random UUID.\n * @returns {string} The random UUID generated.\n */\nexport const generateRandomUUID = (): string => {\n return randomUUID()\n}\n\nexport const generateShortId = (): string => {\n let result = ''\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < 7; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n}\n","import {join} from './path'\nimport * as file from './file'\nimport * as os from './os'\nimport {debug, token, content} from './output'\n\ninterface JSON {\n [key: string]: JSONValue\n}\n\ntype JSONValue = string | number | boolean | JSON | JSONValue[]\n\nexport interface PackageJSON extends JSON {\n name: string\n author: string\n dependencies: {[key: string]: string}\n devDependencies: {[key: string]: string}\n resolutions: {[key: string]: string}\n overrides: {[key: string]: string}\n scripts: {[key: string]: string}\n}\n\nexport async function readPackageJSON(directory: string): Promise<PackageJSON> {\n debug(content`Reading and decoding the content from package.json at ${token.path(directory)}...`)\n const packagePath = join(directory, 'package.json')\n const packageJSON = JSON.parse(await file.read(packagePath))\n\n return packageJSON\n}\n\nexport async function writePackageJSON(directory: string, packageJSON: JSON): Promise<void> {\n debug(content`JSON-encoding and writing content to package.json at ${token.path(directory)}...`)\n const packagePath = join(directory, 'package.json')\n await file.write(packagePath, JSON.stringify(packageJSON, null, 2))\n}\n\nexport async function updateAppData(packageJSON: JSON, name: string): Promise<void> {\n packageJSON.name = name\n packageJSON.author = (await os.username()) ?? ''\n}\n","import {join, pathToFileURL} from './path'\nimport {debug, content} from './output'\nimport {Plugin} from '@oclif/core/lib/interfaces'\n\nconst TUNNEL_PLUGINS = ['@shopify/plugin-ngrok']\n\ninterface TunnelPlugin {\n start: (options: TunnelStartOptions) => Promise<string>\n}\n\ninterface TunnelStartOptions {\n port: number\n}\n\nexport async function lookupTunnelPlugin(plugins: Plugin[]): Promise<TunnelPlugin | undefined> {\n debug(content`Looking up the Ngrok tunnel plugin...`)\n const tunnelPlugin = plugins.find((plugin) => TUNNEL_PLUGINS.includes(plugin.name))\n if (!tunnelPlugin) return undefined\n const tunnelPath = pathToFileURL(join(tunnelPlugin.root, 'dist/tunnel.js')).toString()\n return import(tunnelPath).catch(() => undefined)\n}\n","import {debug, content, token} from './output'\nimport * as port from 'get-port-please'\n\n/**\n * Returns an available port in the current environment.\n * @returns {Promise<number>} A promise that resolves with an availabe port.\n */\nexport async function getRandomPort(): Promise<number> {\n debug(content`Getting a random port...`)\n const randomPort = await port.getRandomPort()\n debug(content`Random port obtained: ${token.raw(`${randomPort}`)}`)\n return randomPort\n}\n","import {Bug} from '../error'\nimport {\n shopify as shopifyEnvironment,\n partners as partnersEnvironment,\n identity as identityEnvironment,\n} from '../environment/service'\nimport {Environment} from '../network/service'\nimport {API} from '../network/api'\n\nexport function clientId(): string {\n const environment = identityEnvironment()\n if (environment === Environment.Local) {\n return 'e5380e02-312a-7408-5718-e07017e9cf52'\n } else if (environment === Environment.Production) {\n return 'fbdb2649-e327-4907-8f67-908d24cfd7e3'\n } else {\n return 'e5380e02-312a-7408-5718-e07017e9cf52'\n }\n}\n\nexport function applicationId(api: API): string {\n switch (api) {\n case 'admin': {\n const environment = shopifyEnvironment()\n if (environment === Environment.Local) {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n } else if (environment === Environment.Production) {\n return '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c'\n } else {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n }\n }\n case 'partners': {\n const environment = partnersEnvironment()\n if (environment === Environment.Local) {\n return 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'\n } else if (environment === Environment.Production) {\n return '271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6'\n } else {\n return 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'\n }\n }\n case 'storefront-renderer': {\n const environment = shopifyEnvironment()\n if (environment === Environment.Local) {\n return '46f603de-894f-488d-9471-5b721280ff49'\n } else if (environment === Environment.Production) {\n return 'ee139b3d-5861-4d45-b387-1bc3ada7811c'\n } else {\n return '46f603de-894f-488d-9471-5b721280ff49'\n }\n }\n default:\n throw new Bug(`Application id for API of type: ${api}`)\n }\n}\n","import {applicationId} from './identity'\nimport {ApplicationToken, IdentityToken} from './schema'\nimport constants from '../constants'\nimport {OAuthApplications} from '../session'\nimport {partners} from '../api'\n\ntype ValidationResult = 'needs_refresh' | 'needs_full_auth' | 'ok'\n\n/**\n * Validate if an identity token is valid for the requested scopes\n * @param requestedScopes scopes\n * @param identity\n * @returns\n */\nfunction validateScopes(requestedScopes: string[], identity: IdentityToken) {\n const currentScopes = identity.scopes\n return requestedScopes.every((scope) => currentScopes.includes(scope))\n}\n\n/**\n * Validate if the current session is valid or we need to refresh/re-authenticate\n * @param scopes {string[]} requested scopes to validate\n * @param applications {OAuthApplications} requested applications\n * @param session current session with identity and application tokens\n * @returns {ValidationResult} 'ok' if the session is valid, 'needs_full_auth' if we need to re-authenticate, 'needs_refresh' if we need to refresh the session\n */\nexport async function validateSession(\n scopes: string[],\n applications: OAuthApplications,\n session: {\n identity: IdentityToken\n applications: {[x: string]: ApplicationToken}\n },\n): Promise<ValidationResult> {\n if (!session) return 'needs_full_auth'\n const scopesAreValid = validateScopes(scopes, session.identity)\n if (!scopesAreValid) return 'needs_full_auth'\n let tokensAreExpired = isTokenExpired(session.identity)\n let tokensAreRevoked = false\n\n if (applications.partnersApi) {\n const appId = applicationId('partners')\n const token = session.applications[appId]\n tokensAreRevoked = tokensAreRevoked || (await isPartnersTokenRevoked(token))\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.storefrontRendererApi) {\n const appId = applicationId('storefront-renderer')\n const token = session.applications[appId]\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.adminApi) {\n const appId = applicationId('admin')\n const realAppId = `${applications.adminApi.storeFqdn}-${appId}`\n const token = session.applications[realAppId]\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (tokensAreRevoked) return 'needs_full_auth'\n if (tokensAreExpired) return 'needs_refresh'\n return 'ok'\n}\n\nfunction isTokenExpired(token: ApplicationToken): boolean {\n if (!token) return true\n return token.expiresAt < expireThreshold()\n}\n\nasync function isPartnersTokenRevoked(token: ApplicationToken) {\n if (!token) return false\n return partners.checkIfTokenIsRevoked(token.accessToken)\n}\n\nfunction expireThreshold(): Date {\n return new Date(Date.now() + constants.session.expirationTimeMarginInMinutes * 60 * 1000)\n}\n","export type API = 'admin' | 'storefront-renderer' | 'partners'\n\nexport const allAPIs: API[] = ['admin', 'storefront-renderer', 'partners']\n","import {Bug} from '../error'\nimport {allAPIs, API} from '../network/api'\n\n/**\n * Generate a flat array with all the default scopes for all the APIs plus\n * any custom scope defined by the user.\n * @param extraScopes custom user-defined scopes\n * @returns Array of scopes\n */\nexport function allDefaultScopes(extraScopes: string[] = []): string[] {\n let scopes = allAPIs.map(defaultApiScopes).flat()\n scopes = ['openid', ...scopes, ...extraScopes].map(scopeTransform)\n return Array.from(new Set(scopes))\n}\n\n/**\n * Generate a flat array with the default scopes for the given API plus\n * any custom scope defined by the user\n * @param api API to get the scopes for\n * @param extraScopes custom user-defined scopes\n * @returns Array of scopes\n */\nexport function apiScopes(api: API, extraScopes: string[] = []): string[] {\n const scopes = ['openid', ...defaultApiScopes(api), ...extraScopes.map(scopeTransform)].map(scopeTransform)\n return Array.from(new Set(scopes))\n}\n\nfunction defaultApiScopes(api: API): string[] {\n switch (api) {\n case 'admin':\n return ['graphql', 'themes', 'collaborator']\n case 'storefront-renderer':\n return ['devtools']\n case 'partners':\n return ['cli']\n default:\n throw new Bug(`Unknown API: ${api}`)\n }\n}\n\nfunction scopeTransform(scope: string): string {\n switch (scope) {\n case 'graphql':\n return 'https://api.shopify.com/auth/shop.admin.graphql'\n case 'themes':\n return 'https://api.shopify.com/auth/shop.admin.themes'\n case 'collaborator':\n return 'https://api.shopify.com/auth/partners.collaborator-relationships.readonly'\n case 'cli':\n return 'https://api.shopify.com/auth/partners.app.cli.access'\n case 'devtools':\n return 'https://api.shopify.com/auth/shop.storefront-renderer.devtools'\n default:\n return scope\n }\n}\n","import {ApplicationToken, IdentityToken} from './schema'\nimport {applicationId, clientId as getIdentityClientId} from './identity'\nimport {CodeAuthResult} from './authorize'\nimport {Abort} from '../error'\nimport {API} from '../network/api'\nimport {fetch} from '../http'\nimport {identity as identityFqdn} from '../environment/fqdn'\n\nexport class InvalidGrantError extends Error {}\n\nexport interface ExchangeScopes {\n admin: string[]\n partners: string[]\n storefront: string[]\n}\n/**\n * Given a valid authorization code, request an identity access token.\n * This token can then be used to get API specific tokens.\n * @param codeData code and codeVerifier from the authorize endpoint\n * @param clientId\n * @param identityFqdn\n * @returns {Promise<IdentityToken>} An instance with the identity access tokens.\n */\nexport async function exchangeCodeForAccessToken(codeData: CodeAuthResult): Promise<IdentityToken> {\n const clientId = await getIdentityClientId()\n /* eslint-disable @typescript-eslint/naming-convention */\n const params = {\n grant_type: 'authorization_code',\n code: codeData.code,\n redirect_uri: 'http://127.0.0.1:3456',\n client_id: clientId,\n code_verifier: codeData.codeVerifier,\n }\n /* eslint-enable @typescript-eslint/naming-convention */\n\n return tokenRequest(params).then(buildIdentityToken)\n}\n\n/**\n * Given an identity token, request an application token.\n * @param token access token obtained in a previous step\n * @param store the store to use, only needed for admin API\n * @param clientId\n * @param identityFqdn\n * @returns {Promise<ApplicationSchema>} An array with the application access tokens.\n */\nexport async function exchangeAccessForApplicationTokens(\n identityToken: IdentityToken,\n scopes: ExchangeScopes,\n store?: string,\n): Promise<{[x: string]: ApplicationToken}> {\n const token = identityToken.accessToken\n\n const partners = await requestAppToken('partners', token, scopes.partners)\n const storefront = await requestAppToken('storefront-renderer', token, scopes.storefront)\n\n const result = {\n ...partners,\n ...storefront,\n }\n\n if (store) {\n const admin = await requestAppToken('admin', token, scopes.admin, store)\n Object.assign(result, admin)\n }\n return result\n}\n\n/**\n * Given an expired access token, refresh it to get a new one.\n * @param currentToken\n * @returns\n */\nexport async function refreshAccessToken(currentToken: IdentityToken): Promise<IdentityToken> {\n const clientId = await getIdentityClientId()\n /* eslint-disable @typescript-eslint/naming-convention */\n const params = {\n grant_type: 'refresh_token',\n access_token: currentToken.accessToken,\n refresh_token: currentToken.refreshToken,\n client_id: clientId,\n }\n /* eslint-enable @typescript-eslint/naming-convention */\n return tokenRequest(params).then(buildIdentityToken)\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid partners API token\n * This token does not accept extra scopes, just the cli one.\n * @param token {string} The CLI token passed as ENV variable\n * @returns {Promise<ApplicationToken>} An instance with the application access tokens.\n */\nexport async function exchangeCustomPartnerToken(token: string): Promise<ApplicationToken> {\n const appId = applicationId('partners')\n const newToken = await requestAppToken('partners', token, ['https://api.shopify.com/auth/partners.app.cli.access'])\n return newToken[appId]\n}\n\nasync function requestAppToken(\n api: API,\n token: string,\n scopes: string[] = [],\n store?: string,\n): Promise<{[x: string]: ApplicationToken}> {\n const appId = applicationId(api)\n const clientId = await getIdentityClientId()\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const params = {\n grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',\n requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n subject_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n client_id: clientId,\n audience: appId,\n scope: scopes.join(' '),\n subject_token: token,\n ...(api === 'admin' && {destination: `https://${store}/admin`}),\n }\n /* eslint-enable @typescript-eslint/naming-convention */\n\n let identifier = appId\n if (api === 'admin' && store) {\n identifier = `${store}-${appId}`\n }\n const appToken = await tokenRequest(params).then(buildApplicationToken)\n return {[identifier]: appToken}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function tokenRequest(params: {[key: string]: string}): Promise<any> {\n const fqdn = await identityFqdn()\n const url = new URL(`https://${fqdn}/oauth/token`)\n url.search = new URLSearchParams(Object.entries(params)).toString()\n const res = await fetch(url.href, {method: 'POST'})\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const payload: any = await res.json()\n if (!res.ok) {\n if (payload.error === 'invalid_grant') {\n // There's an scenario when Identity returns \"invalid_grant\" when trying to refresh the token\n // using a valid refresh token. When that happens, we take the user through the authentication flow.\n throw new InvalidGrantError(payload.error_description)\n } else {\n throw new Abort(payload.error_description)\n }\n }\n return payload\n}\n\nfunction buildIdentityToken(result: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n access_token: string\n // eslint-disable-next-line @typescript-eslint/naming-convention\n refresh_token: string\n // eslint-disable-next-line @typescript-eslint/naming-convention\n expires_in: number\n scope: string\n}): IdentityToken {\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n expiresAt: new Date(Date.now() + result.expires_in * 1000),\n scopes: result.scope.split(' '),\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction buildApplicationToken(result: {access_token: string; expires_in: number; scope: string}): ApplicationToken {\n return {\n accessToken: result.access_token,\n expiresAt: new Date(Date.now() + result.expires_in * 1000),\n scopes: result.scope.split(' '),\n }\n}\n","import {findUp, moduleDirectory} from '../path'\nimport {read} from '../file'\nimport {Bug} from '../error'\n\nconst HTMLFileNames = ['empty-url.html', 'auth-error.html', 'missing-code.html', 'missing-state.html', 'success.html']\nconst StylesheetFilename = 'style.css'\nconst FaviconFileName = 'favicon.svg'\n\n/**\n * Finds the full path of the given file-name from the assets folder.\n *\n * @param {string} fileName The name of the file to look for.\n * @returns {string | null} The full path of the file, or null if not found.\n */\nconst getFilePath = async (fileName: string): Promise<string> => {\n const filePath = await findUp(`assets/${fileName}`, {\n type: 'file',\n cwd: moduleDirectory(import.meta.url),\n })\n if (!filePath) {\n throw RedirectPageAssetNotFoundError()\n }\n return filePath\n}\n\nexport const getEmptyUrlHTML = async (): Promise<string> => {\n const filePath = await getFilePath(HTMLFileNames[0])\n return read(filePath)\n}\n\nexport const getAuthErrorHTML = async (): Promise<string> => {\n const filePath = await getFilePath(HTMLFileNames[1])\n return read(filePath)\n}\n\nexport const getMissingCodeHTML = async (): Promise<string> => {\n const filePath = await getFilePath(HTMLFileNames[2])\n return read(filePath)\n}\n\nexport const getMissingStateHTML = async (): Promise<string> => {\n const filePath = await getFilePath(HTMLFileNames[3])\n return read(filePath)\n}\n\nexport const getSuccessHTML = async (): Promise<string> => {\n const filePath = await getFilePath(HTMLFileNames[4])\n return read(filePath)\n}\n\nexport const getStylesheet = async (): Promise<string> => {\n const filePath = await getFilePath(StylesheetFilename)\n return read(filePath)\n}\n\nexport const getFavicon = async (): Promise<string> => {\n const filePath = await getFilePath(FaviconFileName)\n return read(filePath)\n}\n\nexport const EmptyUrlString = 'We received the authentication redirect but the URL is empty.'\n\nexport const AuthErrorString = 'There was an issue while trying to authenticate.'\n\nexport const MissingCodeString = \"The authentication can't continue because the redirect doesn't include the code.\"\n\nexport const MissingStateString = \"The authentication can't continue because the redirect doesn't include the state.\"\n\nexport const RedirectPageAssetNotFoundError = () => new Bug(`Redirect page asset not found`)\n","import {\n getFavicon,\n getStylesheet,\n getEmptyUrlHTML,\n getAuthErrorHTML,\n getMissingCodeHTML,\n getMissingStateHTML,\n getSuccessHTML,\n EmptyUrlString,\n MissingCodeString,\n MissingStateString,\n} from './post-auth'\nimport {Abort, Bug} from '../error'\nimport {content, info, token} from '../output'\nimport Fastify from 'fastify'\nimport url from 'url'\n\nconst ResponseTimeoutSeconds = 10\nconst ServerStopDelaySeconds = 0.5\n\n/**\n * It represents the result of a redirect.\n */\ntype RedirectCallback = (error: Error | undefined, state: string | undefined, code: string | undefined) => void\n\n/**\n * Defines the interface of the options that\n * are used to instantiate a redirect listener.\n */\ninterface RedirectListenerOptions {\n host: string\n port: number\n callback: RedirectCallback\n}\n/**\n * When the authentication completes, Identity redirects\n * the user to a URL. In the case of the CLI, the redirect\n * is to localhost passing some parameters that are necessary\n * to continue the authentication. Because of that, we need\n * an HTTP server that runs and listens to the request.\n */\nexport class RedirectListener {\n private static createServer(callback: RedirectCallback) {\n const server = Fastify().get('*', async (request, reply) => {\n const requestUrl = request.url\n if (requestUrl === '/favicon.svg') {\n const faviconFile = await getFavicon()\n reply.header('Content-Type', 'image/svg+xml').send(faviconFile)\n return {}\n } else if (requestUrl === '/style.css') {\n const stylesheetFile = await getStylesheet()\n reply.header('Content-Type', 'text/css').send(stylesheetFile)\n return {}\n }\n\n const respond = (contents: string, error?: Error, state?: string, code?: string) => {\n reply.header('Content-Type', 'text/html').send(contents)\n callback(error, state, code)\n return {}\n }\n\n // If there was an empty/malformed URL sent back.\n if (!requestUrl) {\n const file = await getEmptyUrlHTML()\n const err = new Bug(EmptyUrlString)\n return respond(file, err, undefined, undefined)\n }\n\n // If an error was returned by the Identity server.\n const queryObject = url.parse(requestUrl, true).query\n if (queryObject.error && queryObject.error_description) {\n const file = await getAuthErrorHTML()\n const err = new Abort(`${queryObject.error_description}`)\n return respond(file, err, undefined, undefined)\n }\n\n // If the code isn't present in the URL.\n if (!queryObject.code) {\n const file = await getMissingCodeHTML()\n const err = new Bug(MissingCodeString)\n return respond(file, err, undefined, undefined)\n }\n\n // If the state isn't present in the URL.\n if (!queryObject.state) {\n const file = await getMissingStateHTML()\n const err = new Bug(MissingStateString)\n return respond(file, err, undefined, undefined)\n }\n\n const file = await getSuccessHTML()\n return respond(file, undefined, `${queryObject.code}`, `${queryObject.state}`)\n })\n\n return server\n }\n\n port: number\n host: string\n server: ReturnType<typeof RedirectListener.createServer>\n\n constructor(options: RedirectListenerOptions) {\n this.port = options.port\n this.host = options.host\n this.server = RedirectListener.createServer(options.callback)\n }\n\n start(): void {\n this.server.listen({port: this.port, host: this.host}, () => {})\n }\n\n async stop(): Promise<void> {\n await this.server.close()\n }\n}\n\nexport async function listenRedirect(host: string, port: number, url: string): Promise<{code: string; state: string}> {\n const result = await new Promise<{code: string; state: string}>((resolve, reject) => {\n const timeout = setTimeout(() => {\n const message = '\\nAuto-open timed out. Open the login page: '\n info(content`${message}${token.link('Log in to Shopify Partners', url)}\\n`)\n }, ResponseTimeoutSeconds * 1000)\n\n const callback: RedirectCallback = async (error, code, state) => {\n clearTimeout(timeout)\n setTimeout(() => {\n redirectListener.stop()\n if (error) reject(error)\n else resolve({code: code as string, state: state as string})\n }, ServerStopDelaySeconds * 1000)\n }\n\n const redirectListener = new RedirectListener({host, port, callback})\n redirectListener.start()\n })\n return result\n}\n","import crypto from 'crypto'\n\nexport {camelCase as camelize} from 'change-case'\nexport {paramCase as hyphenize} from 'change-case'\nexport {snakeCase as underscore} from 'change-case'\nexport {constantCase as constantize} from 'change-case'\n\n/** Returns a random string */\nexport function randomHex(size: number): string {\n return crypto.randomBytes(size).toString('hex')\n}\n\nexport function generateRandomChallengePair() {\n const codeVerifier = base64URLEncode(crypto.randomBytes(32))\n const codeChallenge = base64URLEncode(sha256(codeVerifier))\n return {codeVerifier, codeChallenge}\n}\n\nfunction base64URLEncode(str: Buffer) {\n return str.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/[=]/g, '')\n}\n\nfunction sha256(str: string) {\n return crypto.createHash('sha256').update(str).digest()\n}\n\n/**\n * Given a string, it returns it with the first letter capitalized.\n * @param string {string} String whose first letter will be caplitalized.\n * @returns The given string with its first letter capitalized.\n */\nexport function capitalize(string: string) {\n return string.substring(0, 1).toUpperCase() + string.substring(1)\n}\n\n/**\n * Given a store, returns a valid store fqdn removing protocol and adding .myshopify.com domain\n * @param store Original store name provided by the user\n * @returns a valid store fqdn\n */\nexport function normalizeStoreName(store: string) {\n const storeFqdn = store.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')\n return storeFqdn.includes('.myshopify.com') ? storeFqdn : `${storeFqdn}.myshopify.com`\n}\n","import {listenRedirect} from './redirect-listener'\nimport {clientId} from './identity'\nimport {generateRandomChallengePair, randomHex} from '../string'\nimport {open} from '../system'\nimport {Abort} from '../error'\nimport {identity as identityFqdn} from '../environment/fqdn'\nimport * as output from '../output'\nimport {keypress} from '../ui'\n\nexport const MismatchStateError = new Abort(\n \"The state received from the authentication doesn't match the one that initiated the authentication process.\",\n)\n\nexport interface CodeAuthResult {\n code: string\n codeVerifier: string\n}\n\nexport async function authorize(scopes: string[], state: string = randomHex(30)): Promise<CodeAuthResult> {\n const port = 3456\n const host = '127.0.0.1'\n const redirectUri = `http://${host}:${port}`\n const fqdn = await identityFqdn()\n const identityClientId = await clientId()\n\n let url = `http://${fqdn}/oauth/authorize`\n\n const {codeVerifier, codeChallenge} = generateRandomChallengePair()\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const params = {\n client_id: identityClientId,\n scope: scopes.join(' '),\n redirect_uri: redirectUri,\n state,\n response_type: 'code',\n code_challenge_method: 'S256',\n code_challenge: codeChallenge,\n }\n /* eslint-enable @typescript-eslint/naming-convention */\n\n output.info('\\nTo run this command, log in to Shopify Partners.')\n output.info('👉 Press any key to open the login page on your browser')\n await keypress()\n\n url = `${url}?${new URLSearchParams(params).toString()}`\n open(url)\n\n const result = await listenRedirect(host, port, url)\n\n if (result.state !== state) {\n throw MismatchStateError\n }\n\n return {code: result.code, codeVerifier}\n}\n","import {define} from '../schema'\n\nconst DateSchema = define.preprocess((arg) => {\n if (typeof arg === 'string' || arg instanceof Date) return new Date(arg)\n return null\n}, define.date())\n\n/**\n * The schema represents an Identity token.\n */\nconst IdentityTokenSchema = define.object({\n accessToken: define.string(),\n refreshToken: define.string(),\n expiresAt: DateSchema,\n scopes: define.array(define.string()),\n})\n\n/**\n * The schema represents an application token.\n */\nconst ApplicationTokenSchema = define.object({\n accessToken: define.string(),\n expiresAt: DateSchema,\n scopes: define.array(define.string()),\n})\n\n/**\n * This schema represents the format of the session\n * that we cache in the system to avoid unnecessary\n * token exchanges.\n *\n * @example\n * {\n * \"accounts.shopify.com\": {\n * \"identity\": {...} // IdentityTokenSchema\n * \"applications\": {\n * \"${domain}-application-id\": { // Admin APIs includes domain in the key\n * \"accessToken\": \"...\",\n * },\n * \"$application-id\": { // ApplicationTokenSchema\n * \"accessToken\": \"...\",\n * },\n * }\n * },\n * \"identity.spin.com\": {...}\n *}\n *\n */\nexport const SessionSchema = define.object({}).catchall(\n define.object({\n /**\n * It contains the identity token. Before usint it, we exchange it\n * to get a token that we can use with different applications. The exchanged\n * tokens for the applications are stored under applications.\n */\n identity: IdentityTokenSchema,\n /**\n * It contains exchanged tokens for the applications the CLI\n * authenticates with. Tokens are scoped under the fqdn of the applications.\n */\n applications: define.object({}).catchall(ApplicationTokenSchema),\n }),\n)\n\nexport type Session = define.infer<typeof SessionSchema>\nexport type IdentityToken = define.infer<typeof IdentityTokenSchema>\nexport type ApplicationToken = define.infer<typeof ApplicationTokenSchema>\n","import constants from './constants'\nimport {content as outputContent, debug} from './output'\nimport {Abort} from './error'\n\n/**\n * Fetches secured content from the system's keychain.\n * @param identifier {string} Identifier to identify the content.\n * @returns A promise that resolves with the content or null if it doesn't exist.\n */\nexport async function fetch(identifier: string): Promise<string | null> {\n debug(outputContent`Reading ${identifier} from the secure store...`)\n try {\n const keytar = await import('keytar')\n const content = await keytar.getPassword(constants.keychain.service, identifier)\n return content\n } catch (error) {\n throw createAbort(error, 'Unable to read from the secure store')\n }\n}\n\n/**\n * Securely stores the content under the given key.\n * @param identifier {string} Identifier to identify the content.\n * @param content {string} The content to be stored.\n * @returns A promise that resolves when the storing completes.\n */\nexport async function store(identifier: string, content: string): Promise<void> {\n debug(outputContent`Updating ${identifier} in the secure store with new content...`)\n try {\n const keytar = await import('keytar')\n await keytar.default.setPassword(constants.keychain.service, identifier, content)\n } catch (error) {\n throw createAbort(error, 'Unable to update the secure store')\n }\n}\n\n/**\n * Removes the content with the given identifier.\n * @param identifier {string} Identifier to identify the content.\n * @returns A promise that resolves with true if the content was deleted.\n */\nexport async function remove(identifier: string): Promise<boolean> {\n debug(outputContent`Removing ${identifier} from the secure store...`)\n try {\n const keytar = await import('keytar')\n const result = await keytar.default.deletePassword(constants.keychain.service, identifier)\n return result\n } catch (error) {\n throw createAbort(error, 'Unable to remove from the secure store')\n }\n}\n\nfunction createAbort(error: unknown, message: string) {\n let newMessage = message\n let stack: string | undefined = ''\n if (error instanceof Error) {\n newMessage = message.concat(`: ${error.message}`)\n stack = error.stack\n }\n const abort = new Abort(newMessage)\n abort.stack = stack\n return abort\n}\n","import {SessionSchema} from './schema'\nimport constants from '../constants'\nimport {platformAndArch} from '../os'\nimport {store as secureStore, fetch as secureFetch, remove as secureRemove} from '../secure-store'\nimport {setSession, getSession, removeSession} from '../store'\nimport {content, debug} from '../output'\nimport type {Session} from './schema'\n\n/**\n * The identifier of the session in the secure store.\n */\nexport const identifier = 'session'\n\n/**\n * Serializes the session as a JSON and stores it securely in the system.\n * If the secure store is not available, the session is stored in the local config.\n * @param session {Session} the session to store.\n */\nexport async function store(session: Session) {\n const jsonSession = JSON.stringify(session)\n if (await secureStoreAvailable()) {\n await secureStore(identifier, jsonSession)\n } else {\n setSession(jsonSession)\n }\n}\n\n/**\n * Fetches the session from the secure store and returns it.\n * If the secure store is not available, the session is fetched from the local config.\n * If the format of the session is invalid, the method will discard it.\n * In the future might add some logic for supporting migrating the schema\n * of already-persisted sessions.\n * @returns {Promise<Session\\undefined>} Returns a promise that resolves with the session if it exists and is valid.\n */\nexport async function fetch(): Promise<Session | undefined> {\n let content\n if (await secureStoreAvailable()) {\n content = await secureFetch(identifier)\n } else {\n content = getSession()\n }\n\n if (!content) {\n return undefined\n }\n const contentJson = JSON.parse(content)\n const parsedSession = await SessionSchema.safeParseAsync(contentJson)\n if (parsedSession.success) {\n return parsedSession.data\n } else {\n await remove()\n return undefined\n }\n}\n\n/**\n * Removes a session from the system.\n */\nexport async function remove() {\n if (await secureStoreAvailable()) {\n await secureRemove(identifier)\n } else {\n removeSession()\n }\n}\n\n/**\n * Returns true if the secure store is available on the system.\n * Keytar it's not supported on some Linux environments or Windows.\n * More details: https://github.com/Shopify/shopify-cli-planning/issues/261\n * @returns a boolean indicating if the secure store is available.\n */\nasync function secureStoreAvailable(): Promise<boolean> {\n try {\n if (platformAndArch().platform === 'windows') {\n debug(content`Secure store not supported on Windows`)\n return false\n }\n const keytar = await import('keytar')\n await keytar.default.findCredentials(constants.keychain.service)\n debug(content`Secure store is available`)\n return true\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (_error) {\n debug(content`Failed to load secure store`)\n return false\n }\n}\n","import {applicationId} from './session/identity'\nimport {Abort, Bug} from './error'\nimport {validateSession} from './session/validate'\nimport {allDefaultScopes, apiScopes} from './session/scopes'\nimport {identity as identityFqdn} from './environment/fqdn'\nimport {open} from './system'\nimport {\n exchangeAccessForApplicationTokens,\n exchangeCodeForAccessToken,\n exchangeCustomPartnerToken,\n ExchangeScopes,\n refreshAccessToken,\n InvalidGrantError,\n} from './session/exchange'\n\nimport {content, token, debug} from './output'\nimport {keypress} from './ui'\n\nimport {authorize} from './session/authorize'\nimport {IdentityToken, Session} from './session/schema'\nimport * as secureStore from './session/store'\nimport constants from './constants'\nimport {normalizeStoreName} from './string'\nimport * as output from './output'\nimport {partners} from './api'\nimport {gql} from 'graphql-request'\n\nconst NoSessionError = new Bug('No session found after ensuring authenticated')\nconst MissingPartnerTokenError = new Bug('No partners token found after ensuring authenticated')\nconst MissingAdminTokenError = new Bug('No admin token found after ensuring authenticated')\nconst MissingStorefrontTokenError = new Bug('No storefront token found after ensuring authenticated')\n\n/**\n * A scope supported by the Shopify Admin API.\n */\ntype AdminAPIScope = 'graphql' | 'themes' | 'collaborator' | string\n\n/**\n * It represents the options to authenticate against the Shopify Admin API.\n */\ninterface AdminAPIOAuthOptions {\n /** Store to request permissions for */\n storeFqdn: string\n /** List of scopes to request permissions for */\n scopes: AdminAPIScope[]\n}\n\n/**\n * A scope supported by the Partners API.\n */\ntype PartnersAPIScope = 'cli' | string\ninterface PartnersAPIOAuthOptions {\n /** List of scopes to request permissions for */\n scopes: PartnersAPIScope[]\n}\n\n/**\n * A scope supported by the Storefront Renderer API.\n */\ntype StorefrontRendererScope = 'devtools' | string\ninterface StorefrontRendererAPIOAuthOptions {\n /** List of scopes to request permissions for */\n scopes: StorefrontRendererScope[]\n}\n\n/**\n * It represents the authentication requirements and\n * is the input necessary to trigger the authentication\n * flow.\n */\nexport interface OAuthApplications {\n adminApi?: AdminAPIOAuthOptions\n storefrontRendererApi?: StorefrontRendererAPIOAuthOptions\n partnersApi?: PartnersAPIOAuthOptions\n}\n\nexport interface AdminSession {\n token: string\n storeFqdn: string\n}\n\nexport interface OAuthSession {\n admin?: AdminSession\n partners?: string\n storefront?: string\n}\nexport const PartnerOrganizationNotFoundError = () => {\n return new Abort(\n `Couldn't find your Shopify Partners organization`,\n `Have you confirmed your accounts from the emails you received?`,\n )\n}\n\n/**\n * Ensure that we have a valid session to access the Partners API.\n * If SHOPIFY_CLI_PARTNERS_TOKEN exists, that token will be used to obtain a valid Partners Token\n * If SHOPIFY_CLI_PARTNERS_TOKEN exists, scopes will be ignored\n * @param scopes {string[]} Optional array of extra scopes to authenticate with.\n * @returns {Promise<string>} The access token for the Partners API.\n */\nexport async function ensureAuthenticatedPartners(scopes: string[] = [], env = process.env): Promise<string> {\n debug(content`Ensuring that the user is authenticated with the Partners API with the following scopes:\n${token.json(scopes)}\n`)\n const envToken = env[constants.environmentVariables.partnersToken]\n if (envToken) {\n return (await exchangeCustomPartnerToken(envToken)).accessToken\n }\n const tokens = await ensureAuthenticated({partnersApi: {scopes}})\n if (!tokens.partners) {\n throw MissingPartnerTokenError\n }\n return tokens.partners\n}\n\n/**\n * Ensure that we have a valid session to access the Storefront API.\n * @param scopes {string[]} Optional array of extra scopes to authenticate with.\n * @returns {Promise<string>} The access token for the Storefront API.\n */\nexport async function ensureAuthenticatedStorefront(scopes: string[] = []): Promise<string> {\n debug(content`Ensuring that the user is authenticated with the Storefront API with the following scopes:\n${token.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({storefrontRendererApi: {scopes}})\n if (!tokens.storefront) {\n throw MissingStorefrontTokenError\n }\n return tokens.storefront\n}\n\n/**\n * Ensure that we have a valid Admin session for the given store.\n * @param store {string} Store fqdn to request auth for\n * @param scopes {string[]} Optional array of extra scopes to authenticate with.\n * @returns {Promise<string>} The access token for the Admin API\n */\nexport async function ensureAuthenticatedAdmin(store: string, scopes: string[] = []): Promise<AdminSession> {\n debug(content`Ensuring that the user is authenticated with the Admin API with the following scopes for the store ${token.raw(\n store,\n )}:\n${token.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({adminApi: {scopes, storeFqdn: store}})\n if (!tokens.admin) {\n throw MissingAdminTokenError\n }\n return tokens.admin\n}\n\n/**\n * This method ensures that we have a valid session to authenticate against the given applications using the provided scopes.\n * @param applications {OAuthApplications} An object containing the applications we need to be authenticated with.\n * @returns {OAuthSession} An instance with the access tokens organized by application.\n */\nexport async function ensureAuthenticated(applications: OAuthApplications, env = process.env): Promise<OAuthSession> {\n const fqdn = await identityFqdn()\n\n if (applications.adminApi?.storeFqdn) {\n applications.adminApi.storeFqdn = normalizeStoreName(applications.adminApi.storeFqdn)\n }\n\n const currentSession = (await secureStore.fetch()) || {}\n const fqdnSession = currentSession[fqdn]\n const scopes = getFlattenScopes(applications)\n\n debug(content`Validating existing session against the scopes:\n${token.json(scopes)}\nFor applications:\n${token.json(applications)}\n`)\n const validationResult = await validateSession(scopes, applications, fqdnSession)\n\n let newSession = {}\n\n if (validationResult === 'needs_full_auth') {\n debug(content`Initiating the full authentication flow...`)\n newSession = await executeCompleteFlow(applications, fqdn)\n } else if (validationResult === 'needs_refresh') {\n debug(content`The current session is valid but needs refresh. Refreshing...`)\n try {\n newSession = await refreshTokens(fqdnSession.identity, applications, fqdn)\n } catch (error) {\n if (error instanceof InvalidGrantError) {\n newSession = await executeCompleteFlow(applications, fqdn)\n } else {\n throw error\n }\n }\n }\n\n const completeSession: Session = {...currentSession, ...newSession}\n await secureStore.store(completeSession)\n const tokens = await tokensFor(applications, completeSession, fqdn)\n\n // Overwrite partners token if using a custom CLI Token\n const envToken = env[constants.environmentVariables.partnersToken]\n if (envToken && applications.partnersApi) {\n tokens.partners = (await exchangeCustomPartnerToken(envToken)).accessToken\n }\n if (!envToken && tokens.partners) {\n await ensureUserHasPartnerAccount(tokens.partners)\n }\n\n return tokens\n}\n\nexport async function hasPartnerAccount(partnersToken: string): Promise<boolean> {\n try {\n await partners.request(\n gql`\n {\n organizations(first: 1) {\n nodes {\n id\n }\n }\n }\n `,\n partnersToken,\n )\n return true\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n if (error instanceof partners.RequestClientError && error.statusCode === 404) {\n return false\n } else {\n return true\n }\n }\n}\n\n/**\n * If the user creates an account from the Identity website, the created\n * account won't get a Partner organization created. We need to detect that\n * and take the user to create a partner organization.\n * @param partnersToken {string} Partners token\n */\nexport async function ensureUserHasPartnerAccount(partnersToken: string) {\n debug(content`Verifying that the user has a Partner organization`)\n if (!(await hasPartnerAccount(partnersToken))) {\n output.info(`\\nA Shopify Partners organization is needed to proceed.`)\n output.info(`👉 Press any key to create one`)\n await keypress()\n open(`https://partners.shopify.com/signup`)\n output.info(output.content`👉 Press any key when you have ${output.token.cyan('created the organization')}`)\n output.warn(output.content`Make sure you've confirmed your Shopify and the Partner organization from the email`)\n await keypress()\n if (!(await hasPartnerAccount(partnersToken))) {\n throw PartnerOrganizationNotFoundError()\n }\n }\n}\n\nasync function executeCompleteFlow(applications: OAuthApplications, identityFqdn: string): Promise<Session> {\n const scopes = getFlattenScopes(applications)\n const exchangeScopes = getExchangeScopes(applications)\n const store = applications.adminApi?.storeFqdn\n\n // Authorize user via browser\n debug(content`Authorizing through Identity's website...`)\n const code = await authorize(scopes)\n\n // Exchange code for identity token\n debug(content`Authorization code received. Exchanging it for a CLI token...`)\n const identityToken = await exchangeCodeForAccessToken(code)\n\n // Exchange identity token for application tokens\n debug(content`CLI token received. Exchanging it for application tokens...`)\n const result = await exchangeAccessForApplicationTokens(identityToken, exchangeScopes, store)\n\n const session: Session = {\n [identityFqdn]: {\n identity: identityToken,\n applications: result,\n },\n }\n\n output.completed('Logged in.')\n\n return session\n}\n\nasync function refreshTokens(token: IdentityToken, applications: OAuthApplications, fqdn: string): Promise<Session> {\n // Refresh Identity Token\n const identityToken = await refreshAccessToken(token)\n\n // Exchange new identity token for application tokens\n const exchangeScopes = getExchangeScopes(applications)\n const applicationTokens = await exchangeAccessForApplicationTokens(\n identityToken,\n exchangeScopes,\n applications.adminApi?.storeFqdn,\n )\n\n return {\n [fqdn]: {\n identity: identityToken,\n applications: applicationTokens,\n },\n }\n}\n\nasync function tokensFor(applications: OAuthApplications, session: Session, fqdn: string): Promise<OAuthSession> {\n const fqdnSession = session[fqdn]\n if (!fqdnSession) {\n throw NoSessionError\n }\n const tokens: OAuthSession = {}\n if (applications.adminApi) {\n const appId = applicationId('admin')\n const realAppId = `${applications.adminApi.storeFqdn}-${appId}`\n const token = fqdnSession.applications[realAppId]?.accessToken\n if (token) {\n tokens.admin = {token, storeFqdn: applications.adminApi.storeFqdn}\n }\n }\n\n if (applications.partnersApi) {\n const appId = applicationId('partners')\n tokens.partners = fqdnSession.applications[appId]?.accessToken\n }\n\n if (applications.storefrontRendererApi) {\n const appId = applicationId('storefront-renderer')\n tokens.storefront = fqdnSession.applications[appId]?.accessToken\n }\n return tokens\n}\n\n// Scope Helpers\nfunction getFlattenScopes(apps: OAuthApplications): string[] {\n const admin = apps.adminApi?.scopes || []\n const partner = apps.partnersApi?.scopes || []\n const storefront = apps.storefrontRendererApi?.scopes || []\n const requestedScopes = [...admin, ...partner, ...storefront]\n return allDefaultScopes(requestedScopes)\n}\n\nfunction getExchangeScopes(apps: OAuthApplications): ExchangeScopes {\n const adminScope = apps.adminApi?.scopes || []\n const partnerScope = apps.partnersApi?.scopes || []\n const storefrontScopes = apps.storefrontRendererApi?.scopes || []\n return {\n admin: apiScopes('admin', adminScope),\n partners: apiScopes('partners', partnerScope),\n storefront: apiScopes('storefront-renderer', storefrontScopes),\n }\n}\n\nexport function logout() {\n return secureStore.remove()\n}\n","import {glob, join, dirname, relative} from './path'\nimport {mkdir, read, copy, chmod, isDirectory, write, hasExecutablePermissions} from './file'\nimport {content, token, debug} from './output'\nimport {Liquid} from 'liquidjs'\n\n// This line is necessary to register additional helpers.\nexport function create(templateContent: string) {\n return (data: object): Promise<string> => {\n const engine = new Liquid()\n return engine.render(engine.parse(templateContent), data)\n }\n}\n\n/**\n * Given a directory, it traverses the files and directories recursively\n * and replaces variables in directory and file names, and files' content\n * using the Liquid template engine.\n * Files indicate that they are liquid template by using the .liquid extension.\n * @param from {string} Directory that contains the template.\n * @param to {string} Output directory.\n * @param data {string} Data to feed the template engine.\n */\nexport async function recursiveDirectoryCopy(from: string, to: string, data: object) {\n debug(content`Copying template from directory ${token.path(from)} to ${token.path(to)}`)\n const templateFiles: string[] = await glob(join(from, '**/*'), {dot: true})\n\n const sortedTemplateFiles = templateFiles\n .map((path) => path.split('/'))\n .sort((lhs, rhs) => (lhs.length < rhs.length ? 1 : -1))\n .map((components) => components.join('/'))\n await Promise.all(\n sortedTemplateFiles.map(async (templateItemPath) => {\n const outputPath = await create(join(to, relative(from, templateItemPath)))(data)\n if (await isDirectory(templateItemPath)) {\n await mkdir(outputPath)\n } else if (templateItemPath.endsWith('.liquid')) {\n await mkdir(dirname(outputPath))\n const content = await read(templateItemPath)\n const contentOutput = await create(content)(data)\n const isExecutable = await hasExecutablePermissions(templateItemPath)\n const outputPathWithoutLiquid = outputPath.replace('.liquid', '')\n await copy(templateItemPath, outputPathWithoutLiquid)\n await write(outputPathWithoutLiquid, contentOutput)\n if (isExecutable) {\n await chmod(outputPathWithoutLiquid, 0o755)\n }\n } else {\n await copy(templateItemPath, outputPath)\n }\n }),\n )\n}\n","import tempy from 'tempy'\n\n/**\n * Creates a temporary directory and ties its lifeclcycle to the lifecycle of the callback.\n * @param callback {(string) => void} Callback to execute. When the callback exits, the temporary directory is destroyed.\n * @returns {Promise<T>} Promise that resolves with the value returned by the callback.\n */\nexport async function directory<T>(callback: (directory: string) => Promise<T>): Promise<T> {\n const result = await tempy.directory.task(callback, {})\n return result\n}\n","import * as toml from '@iarna/toml'\n\nexport function decode(input: string): object {\n return toml.parse(input)\n}\n\nexport function encode(content: toml.JsonMap): string {\n return toml.stringify(content)\n}\n","import {exists, write, read} from './file'\nimport {findUp, join} from './path'\nimport {content, token, debug} from './output'\n\n/**\n * Check if user editor is VS Code\n */\nexport const isVSCode = async (root = process.cwd()) => {\n debug(content`Checking if the directory ${token.path(root)} or any of its parents has a .vscode directory... `)\n const config = await findUp(join(root, '.vscode'), {type: 'directory'})\n\n if (!config) {\n return false\n }\n\n return exists(config)\n}\n\n/**\n * Add VSCode extension recommendations\n */\nexport async function addRecommendedExtensions(directory: string, recommendations: string[]) {\n debug(content`Adding VSCode recommended extensions at ${token.path(directory)}:\n${token.json(recommendations)}\n `)\n const extensionsPath = join(directory, '.vscode/extensions.json')\n\n if (await isVSCode(directory)) {\n let originalExtensionsJson = {recommendations: []}\n if (await exists(extensionsPath)) {\n const originalExtensionsFile = await read(extensionsPath)\n originalExtensionsJson = JSON.parse(originalExtensionsFile)\n }\n const newExtensionsJson = {\n ...originalExtensionsJson,\n recommendations: [...originalExtensionsJson.recommendations, ...recommendations],\n }\n await write(extensionsPath, JSON.stringify(newExtensionsJson, null, 2))\n }\n}\n","import * as yaml from 'js-yaml'\n\nexport function decode(input: string): unknown {\n return yaml.load(input)\n}\n\nexport function encode(content: unknown): string {\n return yaml.dump(content)\n}\n"],"names":["partners","constants","shopify","identity","partnersEnvironment","spinFqdn","identityEnvironment","shopifyEnvironment","fetch","colors.magenta","colors.red","remove","debug","MAX_LENGTH","MAX_SAFE_INTEGER","require$$0","require$$1","parseOptions","compareIdentifiers","re","t","require$$2","require$$3","require$$4","SemVer","semver","parse","system.exec","exists","file.exists","ui.Listr","system.captureOutput","coerce","file.mkdir","file.write","version","schema","pathJoin","fileExists","Version","readFile","environment.local.isDebug","environment.local.analyticsDisabled","buildHeaders","rubyVersion","environment.local.isShopify","outputToken","request","graphqlRequest","token","partnersFqdn","outputContent","content","writeFile","git","file.read","os.username","port","partners.checkIfTokenIsRevoked","clientId","getIdentityClientId","identityFqdn","read","Fastify","url","output.info","define","store","secureStore","secureFetch","secureRemove","secureStore.fetch","secureStore.store","partners.request","partners.RequestClientError","output.content","output.token","output.warn","output.completed","secureStore.remove","write","decode","toml","encode","yaml"],"mappings":"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"}