{"version":3,"file":"shop-validator.mjs","sources":["../../../../../../lib/utils/shop-validator.ts"],"sourcesContent":["import {ConfigInterface} from '../base-types';\nimport {InvalidHostError, InvalidShopError} from '../error';\nimport {decodeHost} from '../auth/decode-host';\n\nimport {shopAdminUrlToLegacyUrl} from './shop-admin-url-helper';\nimport {\n  applyDomainTransformations,\n  getTransformationDomains,\n} from './domain-transformer';\n\nexport function sanitizeShop(config: ConfigInterface) {\n  return (shop: string, throwOnInvalid = false): string | null => {\n    let shopUrl = shop;\n    const domainsRegex = [\n      'myshopify\\\\.com',\n      'shopify\\\\.com',\n      'myshopify\\\\.io',\n      'shop\\\\.dev',\n    ];\n\n    // Add domains from transformations (both source and target)\n    if (config.domainTransformations) {\n      domainsRegex.push(...getTransformationDomains(config));\n    }\n\n    const shopUrlRegex = new RegExp(\n      `^[a-zA-Z0-9][a-zA-Z0-9-_]*\\\\.(${domainsRegex.join('|')})[/]*$`,\n    );\n\n    const shopAdminRegex = new RegExp(\n      `^admin\\\\.(${domainsRegex.join('|')})/store/([a-zA-Z0-9][a-zA-Z0-9-_]*)$`,\n    );\n\n    const isShopAdminUrl = shopAdminRegex.test(shopUrl);\n    if (isShopAdminUrl) {\n      shopUrl = shopAdminUrlToLegacyUrl(shopUrl) || '';\n    }\n\n    const sanitizedShop = shopUrlRegex.test(shopUrl) ? shopUrl : null;\n    if (!sanitizedShop && throwOnInvalid) {\n      throw new InvalidShopError('Received invalid shop argument');\n    }\n\n    if (sanitizedShop && config.domainTransformations) {\n      return applyDomainTransformations(sanitizedShop, config);\n    }\n\n    return sanitizedShop;\n  };\n}\n\nexport function sanitizeHost(config: ConfigInterface) {\n  return (host: string, throwOnInvalid = false): string | null => {\n    const base64regex = /^[0-9a-zA-Z+/]+={0,2}$/;\n\n    let sanitizedHost = base64regex.test(host) ? host : null;\n    if (sanitizedHost) {\n      const {hostname} = new URL(`https://${decodeHost(sanitizedHost)}`);\n\n      const originsRegex = [\n        'myshopify\\\\.com',\n        'shopify\\\\.com',\n        'myshopify\\\\.io',\n        'spin\\\\.dev',\n        'shop\\\\.dev',\n      ];\n\n      if (config.domainTransformations) {\n        const hostTransformationDomains = config.domainTransformations\n          .filter((t) => t.includeHost !== false)\n          .flatMap((t) =>\n            getTransformationDomains({\n              ...config,\n              domainTransformations: [t],\n            }),\n          );\n        originsRegex.push(...hostTransformationDomains);\n      }\n\n      const hostRegex = new RegExp(`\\\\.(${originsRegex.join('|')})$`);\n      if (!hostRegex.test(hostname)) {\n        sanitizedHost = null;\n      }\n    }\n    if (!sanitizedHost && throwOnInvalid) {\n      throw new InvalidHostError('Received invalid host argument');\n    }\n\n    return sanitizedHost;\n  };\n}\n"],"names":[],"mappings":";;;;;AAUM,SAAU,YAAY,CAAC,MAAuB,EAAA;AAClD,IAAA,OAAO,CAAC,IAAY,EAAE,cAAc,GAAG,KAAK,KAAmB;QAC7D,IAAI,OAAO,GAAG,IAAI;AAClB,QAAA,MAAM,YAAY,GAAG;YACnB,iBAAiB;YACjB,eAAe;YACf,gBAAgB;YAChB,YAAY;SACb;;AAGD,QAAA,IAAI,MAAM,CAAC,qBAAqB,EAAE;YAChC,YAAY,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACxD;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,CAAA,8BAAA,EAAiC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,MAAA,CAAQ,CAChE;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAC/B,CAAA,UAAA,EAAa,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,oCAAA,CAAsC,CAC1E;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACnD,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE;QAClD;AAEA,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;AACjE,QAAA,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE;AACpC,YAAA,MAAM,IAAI,gBAAgB,CAAC,gCAAgC,CAAC;QAC9D;AAEA,QAAA,IAAI,aAAa,IAAI,MAAM,CAAC,qBAAqB,EAAE;AACjD,YAAA,OAAO,0BAA0B,CAAC,aAAa,EAAE,MAAM,CAAC;QAC1D;AAEA,QAAA,OAAO,aAAa;AACtB,IAAA,CAAC;AACH;AAEM,SAAU,YAAY,CAAC,MAAuB,EAAA;AAClD,IAAA,OAAO,CAAC,IAAY,EAAE,cAAc,GAAG,KAAK,KAAmB;QAC7D,MAAM,WAAW,GAAG,wBAAwB;AAE5C,QAAA,IAAI,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;QACxD,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,GAAG,CAAC,CAAA,QAAA,EAAW,UAAU,CAAC,aAAa,CAAC,CAAA,CAAE,CAAC;AAElE,YAAA,MAAM,YAAY,GAAG;gBACnB,iBAAiB;gBACjB,eAAe;gBACf,gBAAgB;gBAChB,YAAY;gBACZ,YAAY;aACb;AAED,YAAA,IAAI,MAAM,CAAC,qBAAqB,EAAE;AAChC,gBAAA,MAAM,yBAAyB,GAAG,MAAM,CAAC;qBACtC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,KAAK;AACrC,qBAAA,OAAO,CAAC,CAAC,CAAC,KACT,wBAAwB,CAAC;AACvB,oBAAA,GAAG,MAAM;oBACT,qBAAqB,EAAE,CAAC,CAAC,CAAC;AAC3B,iBAAA,CAAC,CACH;AACH,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC;YACjD;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,CAAA,IAAA,EAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI,CAAC;YAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC7B,aAAa,GAAG,IAAI;YACtB;QACF;AACA,QAAA,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE;AACpC,YAAA,MAAM,IAAI,gBAAgB,CAAC,gCAAgC,CAAC;QAC9D;AAEA,QAAA,OAAO,aAAa;AACtB,IAAA,CAAC;AACH;;;;"}