{"version":3,"file":"client.login-button_BaZJ9Qfe.en.esm.js","sources":["../../src/__deprecated__/components/loginButton/analytics/FollowOnShopMonorailTracker.ts","../../src/__deprecated__/components/loginButton/analytics/DefaultComponentMonorailTracker.ts","../../src/__deprecated__/components/loginButton/analytics/ClassicCustomerAccountsMonorailTracker.ts","../../src/__deprecated__/components/loginButton/authorize/authorizeV1.ts","../../src/__deprecated__/components/loginButton/authorize/authorizeV2.ts","../../src/__deprecated__/components/loginButton/authorize/index.ts","../../src/__deprecated__/components/loginButton/components/login-with-shop-button.ts","../../src/__deprecated__/components/loginButton/utils/modalCustomizations.ts","../../src/__deprecated__/components/loginButton/utils/authorizeModalTextReducer.ts","../../src/__deprecated__/components/loginButton/view/LoginDefaultView.ts","../../src/__deprecated__/components/loginButton/utils/authorizeModalTexts.ts","../../src/__deprecated__/components/loginButton/shop-login-default.ts","../../src/__deprecated__/components/loginButton/shop-login-button.ts","../../src/__deprecated__/components/loginButton/analytics/ShopPayCheckoutSheetMonorailTracker.ts","../../src/__deprecated__/common/shop-swirl.ts","../../src/__deprecated__/components/loginButton/components/modal-content.ts","../../src/__deprecated__/components/loginButton/components/follow-on-shop-button.ts","../../src/__deprecated__/components/loginButton/components/store-logo.ts","../../src/__deprecated__/components/loginButton/shop-follow-button.ts","../../src/__deprecated__/components/loginButton/init.ts"],"sourcesContent":["import {MonorailTracker as MonorailTrackerBase} from '../../../common/analytics';\nimport {\n LoginWithShopSdkPageName,\n LoginWithShopSdkUserAction,\n} from '../../../common/analytics/types';\nimport {SHOP_FOLLOW_FLOW} from '../../../constants/followButton';\n\nexport default class FollowOnShopMonorailTracker extends MonorailTrackerBase {\n /**\n * @param {object} params The constructor params.\n * @param {string} params.elementName The name of the element (e.g. `shop-pay-button`, `shop-login-button`, `shopify-payment-terms`).\n * @param {string} params.analyticsTraceId A UUID that can correlate all analytics events fired for the same user flow. I.e. Could be\n * used to correlate events between Shop JS and Pay for the Shop Login flow.\n */\n constructor({\n elementName,\n analyticsTraceId,\n }: {\n elementName: string;\n analyticsTraceId?: string;\n }) {\n super({elementName, analyticsTraceId, flow: SHOP_FOLLOW_FLOW});\n }\n\n /**\n * Fired when the Follow on Shop button is shown.\n * @param {boolean} isFollowing Whether the user is following the store already.\n * with different implementations and potentially different performance metrics.\n */\n trackFollowButtonPageImpression(isFollowing: boolean) {\n this.trackPageImpression({\n page: isFollowing\n ? LoginWithShopSdkPageName.ComponentLoadedFollowing\n : LoginWithShopSdkPageName.ComponentLoadedNotFollowing,\n });\n }\n\n /**\n * Fired when the Follow on Shop button is visible in the viewport\n *\n */\n trackFollowButtonInViewport() {\n this.trackPageImpression({\n page: LoginWithShopSdkPageName.FollowButtonShownInViewport,\n });\n }\n\n /**\n * Fired when the secondary modal with the Get Shop App button is shown.\n *\n */\n trackFollowingGetAppButtonPageImpression() {\n this.trackPageImpression({\n page: LoginWithShopSdkPageName.FollowingGetShopAppCta,\n });\n }\n\n /**\n * Fired when the shop-follow-button is clicked.\n *\n */\n trackFollowButtonClicked() {\n this.trackShopPayLoginWithShopSdkUserAction({\n userAction: LoginWithShopSdkUserAction.FollowOnShopClicked,\n });\n }\n\n /**\n * Fired when the Get Shop App button is clicked.\n *\n */\n trackFollowingGetAppButtonClicked() {\n this.trackShopPayLoginWithShopSdkUserAction({\n userAction: LoginWithShopSdkUserAction.FollowingGetShopAppClick,\n });\n }\n}\n","import {MonorailTracker as MonorailTrackerBase} from '../../../common/analytics';\nimport {LoginWithShopSdkUserAction} from '../../../common/analytics/types';\nimport {\n ANALYTICS_CONTEXT_TO_FLOW_MAP,\n DefaultComponentAnalyticsContext as AnalyticsContext,\n} from '../../../constants/loginDefault';\n\nexport default class DefaultComponentMonorailTracker extends MonorailTrackerBase {\n private _emailEnteredUserActionTracked = false;\n private _passwordManagerAutofillDetected = false;\n\n /**\n * @param {object} params The constructor params.\n * @param {string} params.elementName The name of the element (e.g. `shop-pay-button`, `shop-login-button`, `shopify-payment-terms`).\n * @param {string} params.analyticsTraceId A UUID that can correlate all analytics events fired for the same user flow. I.e. Could be\n * used to correlate events between Shop JS and Pay for the Shop Login flow.\n * @param {AnalyticsContext} params.analyticsContext The context of the analytics event.\n * This is used to dismabinuate between different flows that use the same default component.\n * @param {string} params.flowVersion The version of the Sign in with Shop flow (eg. \"sign_in\" or \"sign_up\")\n * @param {number} [params.shopId] The numeric id of the shop.\n * @param {number} [params.shopPermanentDomain] The 'myshopify' domain of the shop.\n * @param {string} [params.checkoutVersion] A checkout version such as \"classic\" or \"shop_pay_external\"\n * @param {string} [params.checkoutToken] A checkout token if present.\n */\n constructor({\n elementName,\n analyticsTraceId,\n analyticsContext = AnalyticsContext.Default,\n flowVersion = 'unspecified',\n checkoutVersion,\n checkoutToken,\n shopId,\n shopPermanentDomain,\n }: {\n elementName: string;\n analyticsTraceId?: string;\n analyticsContext?: AnalyticsContext;\n flowVersion?: string;\n checkoutVersion?: string;\n checkoutToken?: string;\n shopId?: number;\n shopPermanentDomain?: string;\n }) {\n super({\n elementName,\n analyticsTraceId,\n flow: ANALYTICS_CONTEXT_TO_FLOW_MAP[analyticsContext],\n flowVersion,\n checkoutVersion,\n checkoutToken,\n shopId,\n shopPermanentDomain,\n });\n }\n\n /**\n * Fired when the shop-login-default button is clicked.\n */\n trackLoginDefaultButtonClicked() {\n this.trackShopPayLoginWithShopSdkUserAction({\n userAction: LoginWithShopSdkUserAction.SignInWithShopClicked,\n });\n }\n\n trackEmailEnteredAction() {\n if (this._emailEnteredUserActionTracked) {\n return;\n }\n this._emailEnteredUserActionTracked = true;\n this.trackShopPayLoginWithShopSdkUserAction({\n userAction: LoginWithShopSdkUserAction.EmailEntered,\n });\n }\n\n trackPasswordManagerAutofillDetected() {\n if (this._passwordManagerAutofillDetected) {\n return;\n }\n this._passwordManagerAutofillDetected = true;\n this.trackShopPayLoginWithShopSdkUserAction({\n userAction: LoginWithShopSdkUserAction.PasswordManagerAutofillDetected,\n });\n }\n}\n","import {\n LoginWithShopSdkPageName,\n LoginWithShopSdkUserAction,\n} from '../../../common/analytics/types';\nimport {ClassicCustomerAccountsFlowVersion} from '../../../types';\nimport {DefaultComponentAnalyticsContext as AnalyticsContext} from '../../../constants/loginDefault';\n\nimport DefaultComponentMonorailTracker from './DefaultComponentMonorailTracker';\n\nexport default class ClassicCustomerAccountsMonorailTracker extends DefaultComponentMonorailTracker {\n /**\n * @param {object} params The constructor params.\n * @param {string} params.elementName The name of the element (e.g. `shop-pay-button`, `shop-login-button`, `shopify-payment-terms`).\n * @param {string} params.flowVersion The version of the Sign in with Shop flow (eg. 'sign_in' or 'sign_up').\n * @param {string} params.analyticsTraceId A UUID that can correlate all analytics events fired for the same user flow. I.e. Could be\n * used to correlate events between Shop JS and Pay for the Shop Login flow.\n */\n constructor({\n elementName,\n flowVersion,\n analyticsTraceId,\n }: {\n elementName: string;\n flowVersion: ClassicCustomerAccountsFlowVersion;\n analyticsTraceId?: string;\n }) {\n super({\n elementName,\n analyticsTraceId,\n analyticsContext: AnalyticsContext.ClassicCustomerAccounts,\n flowVersion,\n });\n }\n\n /**\n * Fired when the SDK is loaded in the Classic Customer Accounts login page.\n */\n trackClassicCustomerAccountsLoginPageImpression() {\n this.trackPageImpression({\n page: LoginWithShopSdkPageName.ClassicCustomerAccountLogin,\n });\n }\n\n /**\n * Fired when the SDK is loaded in the Classic Customer Accounts create account page.\n */\n trackClassicCustomerAccountsCreateAccountPageImpression() {\n this.trackPageImpression({\n page: LoginWithShopSdkPageName.ClassicCustomerAccountCreateAccount,\n });\n }\n\n trackClassicCustomerAccountsAccountPageImpression() {\n this.trackPageImpression({\n page: LoginWithShopSdkPageName.ClassicCustomerAccount,\n });\n }\n\n trackClassicCustomerAccountsContinueWithShopPageImpression() {\n this.trackPageImpression({\n page: LoginWithShopSdkPageName.ContinueWithShop,\n });\n }\n\n trackClassicCustomerAccountsCreateAccountAction() {\n this.trackShopPayLoginWithShopSdkUserAction({\n userAction: LoginWithShopSdkUserAction.CreateAccountLinkClicked,\n });\n }\n}\n","import {PopupWindowParams} from '__deprecated__/types/loginButton';\n\nimport {\n ShopActionType,\n OAuthParamsV1,\n LoginButtonUxMode as UxMode,\n} from '../../../types';\nimport {PAY_AUTH_DOMAIN} from '../../../common/utils/urls';\nimport {I18n} from '../../../common/translator/i18n';\nimport {booleanQueryParam} from '../../../common/utils/booleanQueryParam';\n\nconst AUTH_PATH = '/pay/sdk-authorize';\n\n// Path used in place of sdk-authorize when rendering the Pay alt domain\nconst SESSION_PATH = '/pay/sdk-session';\n\n/**\n * Build the Authorize URL that calls Pay directly.\n * @param {object} params The root parameter object.\n * @param {OAuthParamsV1} params.oauthParams The OAuth params for OAuth flows (such as code or implicit flow). Note that for the\n * implicit flow, the only required attribute in oauthParams is the clientId.\n * @param {string} params.analyticsTraceId Links analytics events together in one flow.\n * @param {string} params.analyticsContext Defines the context in which this authorize flow is used (i.e.\n * \"loginWithShopClassicCustomerAccounts\" or \"loginWithShopSelfServe\") to differentiate events when the same\n * flow is used in different contexts.\n * @param {boolean} params.isCompactLayout If `true`, Pay will show the compact layout.\n * @param {boolean} params.isFullView Set to true to show the full login form, false to show the login button only.\n * @param {string} params.flow The flow to use for the login.\n * @param {string} params.flowVersion The version of the Sign in with Shop flow (eg. \"sign_in\" or \"sign_up\").\n * @param {boolean} params.signUpEnabled If `false` and Pay does not find a user with the given email address, it will\n * not show the Sign Up flow. Use when doing headless user lookups.\n * @param {boolean} params.avoidPayAltDomain If true, do not use the alternate domain for the popup.\n * @param {boolean} params.hideCopy If `true`, Pay will not show any copy around the ULC.\n * @param {boolean} params.modalCustomized If `true`, Pay will verify the client is permitted to customize the modal.\n * @param {string} params.apiKey The app's api key.\n * @param {PopupWindowParams} params.popupWindowParams Parameters used to configure the popup when redirect_type is pop_up.\n * @param {boolean} params.consentChallenge If `true`, Pay will present the user with the personalization consent\n * challenge, if the feature is on and the user hasn't previously consented.\n * @param {string} params.checkoutVersion Checkout version for analytics.\n * @param {string} params.checkoutToken Checkout token for analytics.\n * @param {string} params.transactionParams Additional data sent to Shop Server for the checkout modal use case.\n * @param {string} params.shopId Shop ID\n * @param {boolean} params.requireVerification If `true`, Pay will not render the 1-tap flow cookied users\n * @param {string} params.uxMode The UX mode to use for the login. Supported values are 'redirect'.\n * @returns {string} The Authorize URL in Pay\n */\nexport const buildPayAuthorizeUrl = ({\n oauthParams,\n analyticsTraceId,\n analyticsContext,\n isCompactLayout,\n isFullView,\n flow,\n flowVersion,\n signUpEnabled,\n avoidPayAltDomain,\n hideCopy,\n modalCustomized,\n apiKey,\n popupWindowParams,\n consentChallenge,\n checkoutVersion,\n checkoutToken,\n transactionParams,\n shopId,\n requireVerification,\n uxMode,\n error,\n}: {\n oauthParams: OAuthParamsV1;\n analyticsTraceId?: string;\n analyticsContext?: string;\n isCompactLayout?: boolean;\n isFullView?: boolean;\n flow?: ShopActionType;\n flowVersion?: string;\n signUpEnabled?: boolean;\n avoidPayAltDomain?: boolean;\n hideCopy?: boolean;\n modalCustomized?: boolean;\n apiKey?: string;\n popupWindowParams?: PopupWindowParams;\n consentChallenge?: boolean;\n checkoutVersion?: string;\n checkoutToken?: string;\n transactionParams?: string;\n shopId?: string;\n requireVerification?: boolean;\n uxMode?: UxMode;\n error?: string;\n}): string => {\n const {clientId, redirectType} = oauthParams;\n const scope = oauthParams.scope || 'openid email profile';\n const responseType = oauthParams.responseType || 'id_token';\n const responseMode = oauthParams.responseMode || 'web_message';\n const redirect = oauthParams.redirectUri || window.location.origin;\n const {popUpName, popUpFeatures} = popupWindowParams || {};\n\n // If the UX mode is redirect, we should never hide the copy.\n const _hideCopy = uxMode === 'redirect' ? false : hideCopy;\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const params = new URLSearchParams({\n target_origin: window.location.origin,\n response_mode: responseMode,\n response_type: responseType,\n scope,\n version: '1',\n client_id: clientId,\n ...(redirectType && {redirect_type: redirectType}),\n redirect_uri: redirect,\n // BUILD_LOCALE is used for generating localized bundles.\n // See ./scripts/i18n-dynamic-import-replacer-rollup.mjs for more info.\n // eslint-disable-next-line no-process-env\n locale: process.env.BUILD_LOCALE || I18n.getDefaultLanguage(),\n ...(analyticsTraceId && {analytics_trace_id: analyticsTraceId}),\n ...(analyticsContext && {analytics_context: analyticsContext}),\n ...booleanQueryParam('compact_layout', isCompactLayout),\n ...(apiKey && {apiKey}),\n ...(flow && {flow}),\n ...(flowVersion && {flow_version: flowVersion}),\n ...(oauthParams.codeChallenge && {\n code_challenge: oauthParams.codeChallenge,\n }),\n ...(oauthParams.codeChallengeMethod && {\n code_challenge_method: oauthParams.codeChallengeMethod,\n }),\n ...(oauthParams.state && {state: oauthParams.state}),\n ...(checkoutVersion && {checkout_version: checkoutVersion}),\n ...(checkoutToken && {checkout_token: checkoutToken}),\n ...(transactionParams && {transaction_params: transactionParams}),\n ...(shopId && {shop_id: shopId}),\n ...(error && {error}),\n ...booleanQueryParam('full_view', isFullView),\n ...booleanQueryParam('sign_up_enabled', signUpEnabled),\n ...booleanQueryParam('hide_copy', _hideCopy),\n ...booleanQueryParam('customize-modal', modalCustomized),\n ...booleanQueryParam('consent_challenge', consentChallenge),\n ...booleanQueryParam('require_verification', requireVerification),\n ...booleanQueryParam('preact', false),\n ...(redirectType === 'pop_up'\n ? {\n pop_up_name: popUpName,\n pop_up_features: popUpFeatures,\n }\n : {}),\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n\n /**\n * When `avoidPayAltDomain` is falsy, we will route requests through the shop.app/pay/sdk-session endpoint.\n * The session endpoint will allow us to check for the presence of a Pay user session and hoist it to the\n * \"alt\" pay.shopify.com/pay/sdk-authorize endpoint.\n */\n const path = avoidPayAltDomain ? AUTH_PATH : SESSION_PATH;\n return `${PAY_AUTH_DOMAIN}${path}?${params}`;\n};\n\nexport const getPayAuthDomain = () => PAY_AUTH_DOMAIN;\n","import {OAuthParams, ShopActionType} from '../../../types';\nimport {I18n} from '../../../common/translator/i18n';\nimport {booleanQueryParam} from '../../../common/utils/booleanQueryParam';\n\nconst AUTH_PATH_CORE = '/services/login_with_shop/authorize';\n\nconst AUTH_DOMAIN_CORE =\n // eslint-disable-next-line no-process-env\n process.env.CORE_AUTH_DOMAIN || window.location.origin;\n\n/**\n * Build the Authorize URL that is proxied through Core. URL examples taken\n * from this PR: https://github.com/Shopify/shop-js/pull/270/files\n * @param {object} params The root parameter object.\n * @param {string} params.analyticsTraceId Links analytics events together in one flow.\n * @param {string} params.analyticsContext Defines the context in which this authorize flow is used (i.e.\n * \"loginWithShopClassicCustomerAccounts\" or \"loginWithShopSelfServe\") to differentiate events when the same\n * flow is used in different contexts.\n * @param {boolean} params.isCompactLayout If `true`, Pay will show the compact layout.\n * @param {boolean} params.isFullView Set to true to show the full login form, false to show the login button only.\n * @param {string} params.flow The flow to use for the login.\n * @param {string} params.flowVersion The version of the Sign in with Shop flow (eg. \"sign_in\" or \"sign_up\").\n * @param {boolean} params.signUpEnabled If `false` and Pay does not find a user with the given email address, it will\n * not show the Sign Up flow. Use when doing headless user lookups.\n * @param {boolean} params.avoidSdkSession Passed to Core to tell it to avoid the bounce to sdk-session and go straight\n * to sdk-authorize. Use this if you're confident it's not possible for a user to have an existing Pay session to avoid\n * the extra hop for performance.\n * @param {boolean} params.hideCopy If `true`, Pay will not show any copy around the ULC.\n * @param {boolean} params.modalCustomized If `true`, Pay will verify the client is permitted to customize the modal.\n * @param {string} params.apiKey The app's api key.\n * @param {boolean} params.consentChallenge If `true`, Pay will present the user with the personalization consent\n * challenge, if the feature is on and the user hasn't previously consented.\n * @param {string} params.checkoutRedirectUrl Checkout redirect URL used when calling create_and_redirect after sign in.\n * @param {string} params.checkoutVersion Checkout version for analytics.\n * @param {string} params.checkoutToken Checkout token for analytics.\n * @param {string} params.transactionParams Additional data sent to Shop Server for the checkout modal use case.\n * @param {string} params.shopId Shop ID\n * @param {boolean} params.requireVerification If `true`, Pay will not render the 1-tap flow cookied users\n * @param {OAuthParams} params.oauthParams The OAuth params for OAuth flows (such as code or implicit flow). Note that for the\n * implicit flow, the only required attribute in oauthParams is the clientId.\n * @returns {string} The Authorize URL in Shopify Core\n */\nexport const buildCoreAuthorizeUrl = ({\n analyticsTraceId,\n analyticsContext,\n isCompactLayout,\n isFullView,\n flow,\n flowVersion,\n signUpEnabled,\n avoidSdkSession,\n hideCopy,\n modalCustomized,\n apiKey,\n consentChallenge,\n checkoutRedirectUrl,\n checkoutVersion,\n checkoutToken,\n transactionParams,\n shopId,\n requireVerification,\n oauthParams,\n error,\n}: {\n analyticsTraceId?: string;\n analyticsContext?: string;\n isCompactLayout?: boolean;\n isFullView?: boolean;\n flow?: ShopActionType;\n flowVersion?: string;\n signUpEnabled?: boolean;\n avoidSdkSession?: boolean;\n hideCopy?: boolean;\n modalCustomized?: boolean;\n apiKey?: string;\n consentChallenge?: boolean;\n checkoutRedirectUrl?: string;\n checkoutVersion?: string;\n checkoutToken?: string;\n transactionParams?: string;\n shopId?: string;\n requireVerification?: boolean;\n oauthParams?: OAuthParams;\n error?: string;\n}): string => {\n /* eslint-disable @typescript-eslint/naming-convention */\n const params = new URLSearchParams({\n target_origin: window.location.origin,\n // Should probably be optional: https://github.com/Shopify/shop-identity/issues/553\n api_key: apiKey ?? '123',\n // BUILD_LOCALE is used for generating localized bundles.\n // See ./scripts/i18n-dynamic-import-replacer-rollup.mjs for more info.\n // eslint-disable-next-line no-process-env\n locale: process.env.BUILD_LOCALE || I18n.getDefaultLanguage(),\n ...(analyticsTraceId && {analytics_trace_id: analyticsTraceId}),\n ...(analyticsContext && {analytics_context: analyticsContext}),\n ...booleanQueryParam('compact_layout', isCompactLayout),\n ...(flow && {flow}),\n ...(flowVersion && {flow_version: flowVersion}),\n ...(checkoutRedirectUrl && {checkout_redirect_url: checkoutRedirectUrl}),\n ...(checkoutVersion && {checkout_version: checkoutVersion}),\n ...(checkoutToken && {checkout_token: checkoutToken}),\n ...(transactionParams && {transaction_params: transactionParams}),\n ...(shopId && {shop_id: shopId}),\n ...(error && {error}),\n ...booleanQueryParam('full_view', isFullView),\n ...booleanQueryParam('sign_up_enabled', signUpEnabled),\n ...booleanQueryParam('avoid_sdk_session', avoidSdkSession),\n ...booleanQueryParam('hide_copy', hideCopy),\n ...booleanQueryParam('customize-modal', modalCustomized),\n ...booleanQueryParam('consent_challenge', consentChallenge),\n ...booleanQueryParam('require_verification', requireVerification),\n ...booleanQueryParam('preact', false),\n ...(oauthParams?.responseType && {\n response_type: oauthParams.responseType,\n }),\n ...(oauthParams?.redirectType && {\n redirect_type: oauthParams.redirectType,\n }),\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n\n return `${AUTH_DOMAIN_CORE}${AUTH_PATH_CORE}?${params}`;\n};\n\nexport const getCoreAuthDomain = () => AUTH_DOMAIN_CORE;\n","// Branching logic based on the Authorize Flow Version.\nimport {PopupWindowParams} from '__deprecated__/types/loginButton';\n\nimport {\n AUTHORIZE_POPUP_HEIGHT,\n AUTHORIZE_POPUP_WIDTH,\n} from '../../../constants/loginButton';\nimport {\n OAuthParams,\n OAuthParamsV1,\n ShopActionType,\n LoginButtonVersion as Version,\n LoginButtonUxMode as UxMode,\n} from '../../../types';\nimport {openPopupWindow} from '../../../common/utils';\n\nimport {buildPayAuthorizeUrl, getPayAuthDomain} from './authorizeV1';\nimport {buildCoreAuthorizeUrl, getCoreAuthDomain} from './authorizeV2';\n\n/**\n * Builds the Authorize URL to use for the button or popup. Supports two\n * flow versions:\n * 1. Shop Login M1 - calls Shop Pay directly. Passes in clientId explicitly.\n * 2. Shop Login M2 - proxies auth requests through Core. Core injects the clientId.\n * @param {object} params The root parameter object.\n * @param {string} params.apiKey The app's api key.\n * @param {Version} params.version The implementation version - '1' or '2'.\n * @param {string} params.analyticsTraceId Links analytics events together in one flow.\n * @param {string} params.analyticsContext Defines the context in which this authorize flow is used (i.e.\n * \"loginWithShopClassicCustomerAccounts\" or \"loginWithShopSelfServe\") to differentiate events when the same\n * flow is used in different contexts.\n * @param {boolean} params.isCompactLayout If `true`, Pay will show the compact layout.\n * @param {boolean} params.isFullView Set to true to show the full login form, false to show the login button only.\n * @param {string} params.flow The flow to use for the login.\n * @param {boolean} params.signUpEnabled If `false` and Pay does not find a user with the given email address, it will\n * not show the Sign Up flow. Use when doing headless user lookups.\n * @param {OAuthParams} params.oauthParams The OAuth params for OAuth flows (such as code or implicit flow).\n * Note that for the implicit flow, the only required attribute in oauthParams is the clientId.\n * @param {boolean} params.avoidPayAltDomain If `true` the authorize URL will not use the Pay Alt domain.\n * @param {boolean} params.avoidSdkSession Passed to Core to tell it to avoid the bounce to sdk-session and go straight\n * to sdk-authorize. Use this if you're confident it's not possible for a user to have an existing Pay session to avoid\n * the extra hop for performance.\n * @param {boolean} params.hideCopy If `true`, Pay will not show any copy around the ULC.\n * @param {boolean} params.modalCustomized If `true`, Pay will verify the client is permitted to customize the modal.\n * @param {PopupWindowParams} params.popupWindowParams The params to configure a popup window when redirect_type is pop_up.\n * @param {boolean} params.consentChallenge If `true`, Pay will present the user with the personalization consent\n * challenge, if the feature is on and the user hasn't previously consented.\n * @param {string} params.checkoutRedirectUrl Checkout redirect URL used when calling create_and_redirect after sign in.\n * @param {string} params.checkoutVersion Checkout version for analytics.\n * @param {string} params.checkoutToken Checkout token for analytics.\n * @param {string} params.transactionParams Additional data sent to Shop Server for the checkout modal use case.\n * @param {string} params.shopId Shop ID\n * @param {boolean} params.requireVerification If `true`, Pay will not render the 1-tap flow cookied users\n * @param {string} params.uxMode The UX mode to use for the login. Supported values are 'redirect'.\n * @returns {string} The Authorize URL\n */\nexport const buildAuthorizeUrl = ({\n version,\n apiKey,\n analyticsTraceId,\n analyticsContext,\n isCompactLayout,\n isFullView,\n flow,\n flowVersion,\n signUpEnabled,\n oauthParams,\n avoidPayAltDomain,\n avoidSdkSession,\n hideCopy,\n modalCustomized,\n popupWindowParams,\n consentChallenge,\n checkoutRedirectUrl,\n checkoutVersion,\n checkoutToken,\n transactionParams,\n shopId,\n requireVerification,\n uxMode,\n error,\n}: {\n version: Version;\n apiKey?: string;\n analyticsTraceId?: string;\n analyticsContext?: string;\n isCompactLayout?: boolean;\n isFullView?: boolean;\n flow?: ShopActionType;\n flowVersion?: string;\n signUpEnabled?: boolean;\n oauthParams?: OAuthParams | OAuthParamsV1;\n popupWindowParams?: PopupWindowParams;\n avoidPayAltDomain?: boolean;\n avoidSdkSession?: boolean;\n hideCopy?: boolean;\n modalCustomized?: boolean;\n consentChallenge?: boolean;\n checkoutRedirectUrl?: string;\n checkoutVersion?: string;\n checkoutToken?: string;\n transactionParams?: string;\n shopId?: string;\n requireVerification?: boolean;\n uxMode?: UxMode;\n error?: string;\n}): string => {\n if (version === '1' || uxMode === 'redirect') {\n if (!isOAuthParamsV1(oauthParams)) return '';\n\n return buildPayAuthorizeUrl({\n popupWindowParams,\n oauthParams,\n analyticsTraceId,\n analyticsContext,\n isCompactLayout,\n isFullView,\n flow,\n flowVersion,\n signUpEnabled,\n avoidPayAltDomain,\n hideCopy,\n modalCustomized,\n apiKey,\n consentChallenge,\n checkoutVersion,\n checkoutToken,\n transactionParams,\n shopId,\n requireVerification,\n uxMode,\n error,\n });\n }\n return buildCoreAuthorizeUrl({\n analyticsTraceId,\n analyticsContext,\n isCompactLayout,\n isFullView,\n flow,\n flowVersion,\n signUpEnabled,\n avoidSdkSession,\n hideCopy,\n modalCustomized,\n apiKey,\n consentChallenge,\n checkoutRedirectUrl,\n checkoutVersion,\n checkoutToken,\n transactionParams,\n shopId,\n requireVerification,\n oauthParams,\n error,\n });\n};\n\n/**\n * Checks if the given OAuthParams object is a V1 OAuthParams object.\n * @param {OAuthParams | OAuthParamsV1} oauthParams The OAuthParams object to check.\n * @returns {boolean} True if the given object is a V1 OAuthParams object.\n */\nfunction isOAuthParamsV1(\n oauthParams?: OAuthParams | OAuthParamsV1,\n): oauthParams is OAuthParamsV1 {\n return Boolean(\n oauthParams !== undefined &&\n 'clientId' in oauthParams &&\n oauthParams?.clientId,\n );\n}\n\n/**\n * Opens a popup that shows the login form. Supports two flow versions:\n * 1. Shop Login M1 - calls Shop Pay directly. Passes in clientId explicitly.\n * 2. Shop Login M2 - proxies auth requests through Core. Core injects the clientId.\n * @param {object} params The root parameter object.\n * @param {string} params.version The implementation version - '1' or '2'.\n * @param {string} params.clientId The Oauth client id for this client.\n * @param {string} params.analyticsTraceId Links analytics events together in one flow.\n * @param {Function} params.onClose The function to call when the popup is closed.\n * @param {boolean} params.avoidPayAltDomain If true, do not use the alternate domain for the popup.\n * @returns {Window} A pointer to the popup's window object.\n */\nexport const openAuthorizePopup = ({\n version,\n clientId,\n analyticsTraceId,\n avoidPayAltDomain,\n onClose,\n}: {\n version: Version;\n clientId?: string;\n analyticsTraceId?: string;\n avoidPayAltDomain?: boolean;\n onClose?: () => void;\n}): Window | null => {\n const url = buildAuthorizeUrl({\n avoidPayAltDomain,\n version,\n analyticsTraceId,\n isFullView: true,\n ...(clientId && {oauthParams: {clientId}}),\n });\n return openPopupWindow({\n url,\n width: AUTHORIZE_POPUP_WIDTH,\n height: AUTHORIZE_POPUP_HEIGHT,\n onClose,\n });\n};\n\n/**\n * Returns the root Authorize domain. Supports two flow versions:\n * 1. Shop Login M1 - calls Shop Pay directly. Passes in clientId explicitly.\n * 2. Shop Login M2 - proxies auth requests through Core. Core injects the clientId.\n * @param {string} version The implementation version - '1' or '2'.\n * @returns {string} The root Authorize domain for the given version.\n */\nexport const getAuthDomain = (version: Version) => {\n return version === '1' ? getPayAuthDomain() : getCoreAuthDomain();\n};\n","import {I18n} from '../../../common/translator/i18n';\nimport {ShopLogo} from '../../../common/svg';\nimport Bugsnag from '../../../common/bugsnag';\n\nexport class LoginWithShopButton extends HTMLElement {\n #rootElement: ShadowRoot | null = null;\n #i18n: I18n | null = null;\n\n constructor() {\n super();\n\n if (!customElements.get('shop-logo')) {\n customElements.define('shop-logo', ShopLogo);\n }\n }\n\n async connectedCallback(): Promise {\n await this.#initTranslations();\n\n if (this.shadowRoot) {\n return;\n }\n\n const template = document.createElement('template');\n template.innerHTML = getTemplateContents();\n\n this.#rootElement = this.attachShadow({mode: 'open'});\n this.#rootElement.appendChild(template.content.cloneNode(true));\n\n if (this.#i18n) {\n const loginText = this.#i18n.translate('login_with_shop.login', {\n shop: getShopLogoHtml('white'),\n });\n this.#rootElement.querySelector('slot[name=\"login-text\"]')!.innerHTML =\n loginText;\n }\n }\n\n async #initTranslations() {\n try {\n // BUILD_LOCALE is used for generating localized bundles.\n // See ./scripts/i18n-dynamic-import-replacer-rollup.mjs for more info.\n // eslint-disable-next-line no-process-env\n const locale = process.env.BUILD_LOCALE || I18n.getDefaultLanguage();\n const dictionary = await import(`../translations/${locale}.json`);\n this.#i18n = new I18n({[locale]: dictionary});\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n return null;\n }\n\n setFocused() {\n this.#rootElement?.querySelector('button')?.focus();\n }\n}\n\nif (!customElements.get('login-with-shop-button')) {\n customElements.define('login-with-shop-button', LoginWithShopButton);\n}\n\n/**\n * Get the template contents for the Login with Shop trigger button.\n * @returns {string} string The template for the Login with Shop trigger button\n */\nfunction getTemplateContents() {\n return `\n \n \n `;\n}\n\n/**\n * helper function to create a Login with Shop trigger button\n * @param {string} color The color of the Shop logo.\n * @returns {string} The HTML for the Shop logo in the Login with Shop button.\n */\nexport function getShopLogoHtml(color: string): string {\n return ``;\n}\n\n/**\n * helper function for building a Login with Shop Button\n * @returns {LoginWithShopButton} - a Login with Shop Button\n */\nexport function createLoginButton(): LoginWithShopButton {\n const element = document.createElement('login-with-shop-button');\n return element as LoginWithShopButton;\n}\n","import DOMPurify from 'dompurify';\n\nimport {\n ATTRIBUTE_MODAL_DESCRIPTION,\n ATTRIBUTE_MODAL_LOGO_SRC,\n ATTRIBUTE_MODAL_TITLE,\n} from '../../../constants/loginButton';\nimport {ModalCustomizations} from '../../../types';\n\nexport const MAX_TITLE_LENGTH = 150;\nexport const MAX_DESCRIPTION_LENGTH = 300;\n\n/**\n *\n * @param {ModalCustomizations} modalCustomizations The customized content of the modal.\n * @param {string} apiKey The API key provided to look up the client.\n */\nexport function validateModalCustomizations(\n {modalTitle, modalDescription, modalLogo}: ModalCustomizations,\n apiKey?: string,\n) {\n const isModalCustomized = Boolean(\n modalTitle || modalDescription || modalLogo,\n );\n const isConfigValid = !isModalCustomized || apiKey;\n if (!isConfigValid) {\n throw new Error(\n `An API key must be provided if the modal content is customized`,\n );\n }\n\n if (modalTitle && modalTitle.length > MAX_TITLE_LENGTH) {\n throw new Error(\n `${ATTRIBUTE_MODAL_TITLE} cannot exceed ${MAX_TITLE_LENGTH} characters.`,\n );\n }\n\n if (modalDescription && modalDescription.length > MAX_DESCRIPTION_LENGTH) {\n throw new Error(\n `${ATTRIBUTE_MODAL_DESCRIPTION} cannot exceed ${MAX_DESCRIPTION_LENGTH} characters.`,\n );\n }\n\n if (modalLogo) {\n try {\n // eslint-disable-next-line no-new\n new URL(modalLogo);\n } catch (error) {\n throw new Error(`${ATTRIBUTE_MODAL_LOGO_SRC} must be a valid URL`);\n }\n }\n}\n\n/**\n * Sanitizes modal customization text to remove all HTML tags.\n * @param {string} text Modal customization text which can be any string.\n * @returns {string} Sanitized modal customization text which can be safely displayed on our modal.\n */\nexport function sanitizeModalText(text: string): string {\n if (!DOMPurify.isSupported) {\n throw new Error(\n 'Sanitization of custom modal text is not supported in this browser.',\n );\n }\n return DOMPurify.sanitize(text, {ALLOWED_TAGS: []});\n}\n","import {\n AuthorizeModalTextViewState,\n AuthorizeModalTextAction,\n AuthorizeModalTextActionType,\n AuthorizeModalTextStep,\n} from '../../../types';\n\n/**\n * The starting state, all texts are hidden in this state.\n */\nexport const DEFAULT_STATE: AuthorizeModalTextViewState = {\n step: AuthorizeModalTextStep.Start,\n configurable: false,\n headerVisible: false,\n headerDividerVisible: false,\n headerTemplate: '',\n descriptionTemplate: '',\n userNameKnown: false,\n sessionDetected: false,\n templateVariables: {\n clientName: 'the store',\n store: 'the store',\n },\n};\n\n/**\n * The default reducer for authorization flows requiring a SMS verification, is also\n * used as the basis for email auth and classic customer accounts.\n * @param {AuthorizeModalTextAction} action - The action to process\n * @param {AuthorizeModalTextViewState} state - The current state of the text view\n * @returns {AuthorizeModalTextViewState} - The updated state of the text view\n */\nexport function defaultPhoneAuthReducer(\n action: AuthorizeModalTextAction,\n state: AuthorizeModalTextViewState,\n): AuthorizeModalTextViewState {\n switch (action.type) {\n case AuthorizeModalTextActionType.Init:\n if (action.payload.personalizeConsentChallenge) {\n return {\n ...state,\n step: AuthorizeModalTextStep.PersonalizeConsent,\n headerVisible: true,\n headerDividerVisible: false,\n userNameKnown: action.payload.userNameKnown || false,\n templateVariables: {\n ...state.templateVariables,\n ...action.payload,\n store: action.payload.clientName,\n },\n headerTemplate: 'login_with_shop.auth_modal.login_title_with_store',\n descriptionTemplate: '',\n sessionDetected: action.payload.userFound,\n };\n }\n\n return {\n ...state,\n configurable: true,\n headerVisible: true,\n headerDividerVisible: action.payload.userFound,\n step: action.payload.userFound\n ? AuthorizeModalTextStep.OneClick\n : AuthorizeModalTextStep.Start,\n userNameKnown: action.payload.userNameKnown || false,\n templateVariables: {\n ...state.templateVariables,\n ...action.payload,\n store: action.payload.clientName,\n },\n headerTemplate: 'login_with_shop.auth_modal.login_title',\n descriptionTemplate: 'login_with_shop.auth_modal.login_description',\n sessionDetected: action.payload.userFound,\n };\n case AuthorizeModalTextActionType.PopUpOpened:\n return {\n ...state,\n step: AuthorizeModalTextStep.PopUpOpened,\n };\n case AuthorizeModalTextActionType.Restart:\n return {\n ...state,\n configurable: true,\n headerDividerVisible: false,\n step: AuthorizeModalTextStep.Start,\n userNameKnown: false,\n headerTemplate: 'login_with_shop.auth_modal.login_title',\n descriptionTemplate: 'login_with_shop.auth_modal.login_description',\n sessionDetected: false,\n templateVariables: {\n ...state.templateVariables,\n email: '',\n phoneNumber: '',\n userFound: false,\n userNameKnown: false,\n },\n };\n case AuthorizeModalTextActionType.UserMatched:\n if (action.payload.personalizeConsentChallenge) {\n return {\n ...state,\n step: AuthorizeModalTextStep.PersonalizeConsent,\n userNameKnown: action.payload.hasName || false,\n headerVisible: true,\n headerDividerVisible: false,\n headerTemplate: 'login_with_shop.auth_modal.login_title_with_store',\n descriptionTemplate: '',\n sessionDetected: action.payload.userCookieExists,\n };\n }\n\n if (action.payload.userCookieExists) {\n return {\n ...state,\n configurable: true,\n headerDividerVisible: true,\n step: AuthorizeModalTextStep.OneClick,\n userNameKnown: action.payload.hasName || false,\n sessionDetected: true,\n };\n }\n\n return {\n ...state,\n userNameKnown: action.payload.hasName || false,\n sessionDetected: false,\n };\n case AuthorizeModalTextActionType.UserNotMatched:\n return {\n ...state,\n step: AuthorizeModalTextStep.SignUp,\n headerDividerVisible: true,\n userNameKnown: false,\n configurable: false,\n headerTemplate: 'login_with_shop.auth_modal.signup_title',\n descriptionTemplate: 'login_with_shop.auth_modal.signup_description',\n sessionDetected: false,\n };\n case AuthorizeModalTextActionType.VerificationStepChanged: {\n const {step, phone = '', email = ''} = action.payload;\n return {\n ...state,\n step: verificationStepToModalStep(step),\n configurable: false,\n headerDividerVisible: true,\n templateVariables: {\n ...state.templateVariables,\n phoneNumber: phone.replaceAll(' ', '\\xa0'),\n email,\n },\n legalTextVariant: 'authorize',\n ...(step === 'email' && {\n headerTemplate: 'login_with_shop.auth_modal.login_email_title',\n descriptionTemplate:\n 'login_with_shop.auth_modal.login_email_description',\n }),\n ...(step === 'sms' && {\n headerTemplate: 'login_with_shop.auth_modal.login_sms_title',\n descriptionTemplate:\n 'login_with_shop.auth_modal.login_sms_description',\n }),\n ...(step === 'one_click' && {\n headerTemplate: 'login_with_shop.auth_modal.login_title',\n descriptionTemplate: 'login_with_shop.auth_modal.login_description',\n }),\n ...(step === 'webauthn' && {\n headerTemplate: 'login_with_shop.auth_modal.login_webauthn_title',\n descriptionTemplate:\n 'login_with_shop.auth_modal.login_webauthn_description',\n legalTextVariant: 'generic',\n legalTextTemplate: 'login_with_shop.auth_modal.login_webauthn_footer',\n headerDividerVisible: false,\n }),\n };\n }\n }\n\n return state;\n}\n\n/**\n * The default reducer for authorization flows requiring an email verification\n * @param {AuthorizeModalTextAction} action - The action to process\n * @param {AuthorizeModalTextViewState} state - The current state of the text view\n * @returns {AuthorizeModalTextViewState} - The updated state of the text view\n */\nexport function defaultEmailAuthReducer(\n action: AuthorizeModalTextAction,\n state: AuthorizeModalTextViewState,\n): AuthorizeModalTextViewState {\n const newState = defaultPhoneAuthReducer(action, state);\n\n switch (newState.step) {\n case AuthorizeModalTextStep.Start:\n return {\n ...newState,\n headerTemplate: 'verified_email_auth.auth_modal.login_title',\n descriptionTemplate: '',\n };\n case AuthorizeModalTextStep.SignUp:\n return {\n ...newState,\n headerTemplate: 'verified_email_auth.auth_modal.signup_title',\n descriptionTemplate:\n 'verified_email_auth.auth_modal.signup_description',\n };\n case AuthorizeModalTextStep.PhoneVerification:\n return {\n ...newState,\n headerTemplate: 'login_with_shop.auth_modal.login_sms_title',\n descriptionTemplate: 'login_with_shop.auth_modal.login_sms_description',\n };\n case AuthorizeModalTextStep.EmailVerification:\n return {\n ...newState,\n headerTemplate: 'login_with_shop.auth_modal.login_email_title',\n descriptionTemplate:\n 'login_with_shop.auth_modal.login_email_description',\n };\n }\n\n return newState;\n}\n\n/**\n * The reducer for sign up with Shop on classic customer accounts\n * @param {AuthorizeModalTextAction} action - The action to process\n * @param {AuthorizeModalTextViewState} state - The current state of the text view\n * @returns {AuthorizeModalTextViewState} - The updated state of the text view\n */\nexport function classicCustomerAccountsSignUpReducer(\n action: AuthorizeModalTextAction,\n state: AuthorizeModalTextViewState,\n): AuthorizeModalTextViewState {\n const newState = defaultPhoneAuthReducer(action, state);\n\n switch (newState.step) {\n case AuthorizeModalTextStep.Start:\n case AuthorizeModalTextStep.OneClick:\n return {\n ...newState,\n headerTemplate: 'customer_accounts.sign_up_page.auth_modal.login_title',\n descriptionTemplate:\n 'customer_accounts.sign_up_page.auth_modal.login_description',\n };\n case AuthorizeModalTextStep.PhoneVerification:\n return {\n ...newState,\n headerTemplate: 'customer_accounts.sign_up_page.auth_modal.login_title',\n descriptionTemplate:\n 'customer_accounts.sign_up_page.auth_modal.login_sms_description',\n };\n case AuthorizeModalTextStep.EmailVerification:\n return {\n ...newState,\n headerTemplate: 'customer_accounts.sign_up_page.auth_modal.login_title',\n descriptionTemplate:\n 'customer_accounts.sign_up_page.auth_modal.login_email_description',\n };\n case AuthorizeModalTextStep.WebAuthnVerification:\n return {\n ...newState,\n headerTemplate: 'customer_accounts.sign_up_page.auth_modal.login_title',\n descriptionTemplate:\n // temporary, a separate PR will rectify this\n 'login_with_shop.auth_modal.login_webauthn_description',\n };\n }\n\n return newState;\n}\n\n/**\n * The reducer for the Guest Checkout Verification Modal\n * @param {AuthorizeModalTextAction} action - The action to process\n * @param {AuthorizeModalTextViewState} state - The current state of the text view\n * @returns {AuthorizeModalTextViewState} - The updated state of the text view\n */\nexport function checkoutModalReducer(\n action: AuthorizeModalTextAction,\n state: AuthorizeModalTextViewState,\n): AuthorizeModalTextViewState {\n const newState = defaultPhoneAuthReducer(action, state);\n\n switch (newState.step) {\n case AuthorizeModalTextStep.PhoneVerification:\n return {\n ...newState,\n descriptionTemplate: 'checkout_modal.auth_modal.login_sms_description',\n };\n case AuthorizeModalTextStep.EmailVerification:\n return {\n ...newState,\n descriptionTemplate:\n 'checkout_modal.auth_modal.login_email_description',\n };\n }\n\n return newState;\n}\n\n/**\n * The reducer for the payment request flow for Shop Pay Commerce Component\n * @param {AuthorizeModalTextAction} action - The action to process\n * @param {AuthorizeModalTextViewState} state - The current state of the text view\n * @returns {AuthorizeModalTextViewState} - The updated state of the text view\n */\nexport function paymentRequestReducer(\n action: AuthorizeModalTextAction,\n state: AuthorizeModalTextViewState,\n): AuthorizeModalTextViewState {\n const newState = defaultPhoneAuthReducer(action, state);\n\n switch (newState.step) {\n case AuthorizeModalTextStep.PopUpOpened:\n case AuthorizeModalTextStep.OneClick:\n return {\n ...newState,\n headerTemplate: 'payment_request.auth_modal.login_title',\n descriptionTemplate: 'payment_request.auth_modal.login_description',\n };\n case AuthorizeModalTextStep.PhoneVerification:\n return {\n ...newState,\n headerTemplate: 'payment_request.auth_modal.login_sms_title',\n descriptionTemplate: 'payment_request.auth_modal.login_sms_description',\n };\n case AuthorizeModalTextStep.EmailVerification:\n return {\n ...newState,\n headerTemplate: 'payment_request.auth_modal.login_email_title',\n descriptionTemplate:\n 'payment_request.auth_modal.login_email_description',\n };\n }\n\n return newState;\n}\n\n/**\n * Converts step received from a verification step event, to a step to be rendered in the modal.\n * @param {string} step The step received from the verification step event.\n * @returns {AuthorizeModalTextStep} The step to be rendered in the modal.\n */\nfunction verificationStepToModalStep(step: string): AuthorizeModalTextStep {\n switch (step) {\n case 'one_click':\n return AuthorizeModalTextStep.OneClick;\n case 'email':\n return AuthorizeModalTextStep.EmailVerification;\n case 'webauthn':\n return AuthorizeModalTextStep.WebAuthnVerification;\n default:\n case 'sms':\n return AuthorizeModalTextStep.PhoneVerification;\n }\n}\n","import {I18n} from '__deprecated__/common/translator/i18n';\nimport {constraintWidthInViewport} from '__deprecated__/common/utils/constraintWidthInViewport';\nimport {CloseRequestedReason} from '__deprecated__/types/shopSheetModal';\nimport {\n SheetModalManager,\n sheetModalBuilder,\n} from '__deprecated__/common/shop-sheet-modal/shop-sheet-modal-builder';\nimport Bugsnag from '__deprecated__/common/bugsnag';\n\nimport {\n createLoginButton,\n LoginWithShopButton,\n} from '../components/login-with-shop-button';\nimport {\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n ATTRIBUTE_ANCHOR_SELECTOR,\n} from '../../../constants/loginButton';\nimport {\n DefaultComponentAnalyticsContext,\n getShopLoginDefaultTemplate,\n FOOTER_CLASS_NAME,\n FOOTER_CONTENT_CLASS_NAME,\n HEADER_CLASS_NAME,\n HEADER_CONTENTS_CONTAINER_CLASS_NAME,\n HEADER_DESCRIPTION_CLASS_NAME,\n HEADER_DIVIDER_CLASS_NAME,\n HEADER_STYLE,\n HEADER_TITLE_CLASS_NAME,\n HIDDEN_ELEMENT_CLASS_NAME,\n IFRAME_CLASS_NAME,\n IFRAME_COMPACT_CLASS_NAME,\n} from '../../../constants/loginDefault';\nimport {\n ATTRIBUTE_COMPACT,\n ATTRIBUTE_HEADERLESS,\n ATTRIBUTE_POSITION_VARIANT,\n} from '../../../common/shop-sheet-modal/shop-sheet-modal';\nimport {LoginWithShopSdkPageName} from '../../../common/analytics';\nimport {\n copyTemplateToDom,\n PositionVariant,\n updateAttribute,\n updateAttributeConditionally,\n} from '../../../common/utils';\nimport MonorailTracker from '../analytics/DefaultComponentMonorailTracker';\nimport {\n AuthenticationLevel,\n ModalCustomizations,\n AuthorizeModalTextViewState,\n AuthorizeModalTextAction,\n AuthorizeModalTextStep,\n LoginButtonUxMode as UxMode,\n} from '../../../types';\nimport {sanitizeModalText as sanitizeModalCustomization} from '../utils/modalCustomizations';\nimport {\n checkoutModalReducer,\n classicCustomerAccountsSignUpReducer,\n DEFAULT_STATE,\n defaultEmailAuthReducer,\n defaultPhoneAuthReducer,\n paymentRequestReducer,\n} from '../utils/authorizeModalTextReducer';\n\ninterface SetupOptions {\n onOpen: () => void;\n onClose: (reason?: CloseRequestedReason) => void;\n}\n\ninterface ModalCloseRequestEvent extends Event {\n detail: any;\n}\n\nexport default class LoginDefaultView {\n private _rootElement: ShadowRoot;\n private _isCompact = false;\n private _isHeaderless = false;\n\n private _onOpen: () => void;\n private _onClose: (reason?: CloseRequestedReason) => void;\n\n private _sheetModalManager!: SheetModalManager;\n\n private get _sheetModal() {\n return this._sheetModalManager.sheetModal;\n }\n\n private _modalHeader: HTMLDivElement | undefined;\n private _headerIframe: HTMLIFrameElement | undefined;\n private _headerContentsContainer: HTMLDivElement | undefined;\n private _headerLogo: HTMLImageElement | undefined;\n private _headerTitle: HTMLElement | undefined;\n private _headerDescription: HTMLElement | undefined;\n\n private _footerElement: HTMLDivElement | undefined;\n private _footerContent: HTMLDivElement | undefined;\n\n private _iframe: HTMLIFrameElement | undefined;\n private _headerResizeObserver: ResizeObserver | undefined;\n\n private _modalTitle: string | undefined;\n private _modalDescription: string | undefined;\n private _modalLogoSrc: string | undefined;\n\n private _continueButton: LoginWithShopButton | undefined;\n\n private _monorailTracker: MonorailTracker | undefined;\n private _analyticsContext = DefaultComponentAnalyticsContext.Default;\n private _flowVersion = 'unspecified';\n private _uxMode: UxMode | undefined;\n private _authorizeUrl: string | undefined;\n private _authenticationLevel: AuthenticationLevel = AuthenticationLevel.Phone;\n private _flow: string | undefined;\n\n private _i18n: I18n | undefined;\n private _state: AuthorizeModalTextViewState = DEFAULT_STATE;\n\n constructor(rootElement: ShadowRoot, options: SetupOptions) {\n this._rootElement = rootElement;\n this._sheetModalManager = sheetModalBuilder().build();\n\n ({onOpen: this._onOpen, onClose: this._onClose} = options);\n }\n\n setCompact(value: boolean) {\n this._isCompact = value;\n }\n\n setHeaderless(value: boolean) {\n this._isHeaderless = value;\n }\n\n init() {\n const attributes = this.getModalAttributes();\n copyTemplateToDom(\n getShopLoginDefaultTemplate(attributes),\n 'shop-login-default-landing',\n this._sheetModalManager.shadowRoot,\n );\n\n this._modalHeader = this._sheetModalManager.shadowRoot.querySelector(\n `.${HEADER_CLASS_NAME}`,\n )! as HTMLDivElement;\n this._footerElement = this._sheetModalManager.shadowRoot.querySelector(\n `.${FOOTER_CLASS_NAME}`,\n )! as HTMLDivElement;\n this._footerContent = this._sheetModalManager.shadowRoot.querySelector(\n `.${FOOTER_CONTENT_CLASS_NAME}`,\n )! as HTMLDivElement;\n this._iframe = this._sheetModalManager.shadowRoot.querySelector(\n `.${IFRAME_CLASS_NAME}`,\n )! as HTMLIFrameElement;\n\n this._sheetModal.addEventListener(\n 'modalcloserequest',\n async (eventDetails) => {\n await this.closeAuthorizeModal(\n (eventDetails as ModalCloseRequestEvent).detail,\n );\n },\n );\n\n if (this._isCompact) {\n this._sheetModal.setAttribute(ATTRIBUTE_COMPACT, '');\n // when the compact sheet is re-initialized, it looses the monorail tracker\n this._sheetModal.setMonorailTracker(\n this._monorailTracker as MonorailTracker,\n );\n this._iframe.classList.add(IFRAME_COMPACT_CLASS_NAME);\n this._modalHeader?.parentNode?.removeChild(this._modalHeader);\n this._footerElement?.parentNode?.removeChild(this._footerElement);\n }\n\n updateAttribute(this._iframe, 'allow', 'publickey-credentials-get *');\n }\n\n setModalAnalyticsTraceId(analyticsTraceId: string): void {\n this._sheetModal.setAttribute(\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n analyticsTraceId,\n );\n }\n\n setModalPositionVariant(variant: PositionVariant) {\n this._sheetModal.setAttribute(ATTRIBUTE_POSITION_VARIANT, variant);\n }\n\n async showModal() {\n const result = await this._sheetModal.open();\n if (result) {\n this._onOpen();\n }\n this.refreshHeaderIframeHeight();\n }\n\n async openAuthorizeModal() {\n await this.showModal();\n await this._monorailTracker?.trackPageImpression({\n page: LoginWithShopSdkPageName.AuthorizeModal,\n });\n }\n\n async closeAuthorizeModal(reason?: CloseRequestedReason) {\n if (this._sheetModal) {\n const result = await this._sheetModal.close();\n if (result) {\n this._onClose(reason);\n }\n }\n this._continueButton?.setFocused();\n }\n\n destroy() {\n this._sheetModalManager.destroy();\n }\n\n setContinueButtonVisible(isVisible: boolean) {\n if (!isVisible) {\n this._continueButton?.remove();\n this._continueButton = undefined;\n return;\n }\n\n if (!this._continueButton) {\n this._continueButton = createLoginButton();\n this._continueButton?.addEventListener('click', () => {\n this._monorailTracker?.trackLoginDefaultButtonClicked();\n if (this._uxMode === 'redirect' && this._authorizeUrl) {\n window.location.href = this._authorizeUrl;\n } else {\n this.openAuthorizeModal();\n }\n });\n\n this._monorailTracker?.trackPageImpression({\n page: LoginWithShopSdkPageName.SignInWithShopButton,\n });\n this._rootElement.appendChild(this._continueButton);\n }\n }\n\n setMonorailTracker(monorailTracker: MonorailTracker) {\n this._monorailTracker = monorailTracker;\n // setMonorailTracker funciton may be undefined until sheet modal is added to the DOM\n this._sheetModal.setMonorailTracker?.(monorailTracker);\n }\n\n setAnalyticsContext(analyticsContext: DefaultComponentAnalyticsContext) {\n this._analyticsContext = analyticsContext;\n }\n\n setFlowVersion(flowVersion: string) {\n this._flowVersion = flowVersion;\n }\n\n getUxMode() {\n return this._uxMode;\n }\n\n setUxMode(uxMode: UxMode | undefined) {\n if (uxMode) {\n this._uxMode = uxMode;\n }\n }\n\n setAuthorizeUrl(authorizeUrl: string) {\n this._authorizeUrl = authorizeUrl;\n }\n\n setAuthenticationLevel(authenticationLevel: AuthenticationLevel) {\n this._authenticationLevel = authenticationLevel;\n }\n\n onContentLoaded() {\n this._sheetModal.onContentLoaded();\n }\n\n setFlow(flow: string) {\n this._flow = flow;\n this._sheetModalManager.setNametagSuffix(flow);\n }\n\n getIframe(): HTMLIFrameElement | undefined {\n return this._iframe;\n }\n\n setAnchorSelector(anchorSelector: string) {\n this._sheetModal.setAttribute(ATTRIBUTE_ANCHOR_SELECTOR, anchorSelector);\n }\n\n setBrand(brand?: string) {\n if (brand) {\n this._sheetModal.setAttribute('modal-brand', brand);\n }\n }\n\n resizeIframe(height: number, width: number) {\n if (!this._iframe) return;\n\n this._iframe.style.height = `${height}px`;\n this._iframe.style.width = `${constraintWidthInViewport(width, this._iframe)}px`;\n }\n\n // note that this function should only run when the component is not compact\n render() {\n const {configurable, headerVisible, headerDividerVisible} = this._state;\n\n this.setHeaderVisible(headerVisible);\n this.setHeaderDividerVisible(headerDividerVisible);\n\n if (configurable && this._modalLogoSrc) {\n this.updateHeaderLogo(this._modalLogoSrc);\n }\n\n this.renderHeaderTemplate();\n this.renderHeaderDescriptionTemplate();\n this.renderFooterContent();\n\n this.refreshHeaderIframeHeight();\n }\n\n dispatch(action: AuthorizeModalTextAction) {\n switch (this._analyticsContext) {\n case DefaultComponentAnalyticsContext.CheckoutExtension:\n case DefaultComponentAnalyticsContext.Default:\n this._state =\n this._authenticationLevel === AuthenticationLevel.Phone\n ? defaultPhoneAuthReducer(action, this._state)\n : defaultEmailAuthReducer(action, this._state);\n break;\n case DefaultComponentAnalyticsContext.ClassicCustomerAccounts:\n this._state =\n this._flowVersion === 'sign_up'\n ? classicCustomerAccountsSignUpReducer(action, this._state)\n : defaultPhoneAuthReducer(action, this._state);\n break;\n case DefaultComponentAnalyticsContext.CheckoutModal:\n this._state = checkoutModalReducer(action, this._state);\n break;\n case DefaultComponentAnalyticsContext.PaymentRequest:\n this._state = paymentRequestReducer(action, this._state);\n break;\n default:\n this._state = DEFAULT_STATE;\n break;\n }\n\n if (!this._isCompact) {\n this.render();\n }\n }\n\n updateHeaderLogo(src: string) {\n if (!this._headerLogo) {\n this._headerLogo = document.createElement('img');\n\n const firstChild = this._headerContentsContainer?.firstChild;\n if (firstChild) {\n this._headerContentsContainer?.insertBefore(\n this._headerLogo,\n firstChild,\n );\n }\n }\n\n this._headerLogo.src = src;\n this._headerLogo.style.maxHeight = '64px';\n this._headerLogo.style.width = 'auto';\n }\n\n renderHeaderTemplate() {\n const {configurable, headerTemplate, templateVariables} = this._state;\n\n let headerTitle = '';\n\n if (configurable && this._modalTitle) {\n try {\n headerTitle = this._modalTitle.replace(\n /\\${storeName}/gi,\n templateVariables.clientName,\n );\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes('replaceAll is not a function')\n ) {\n Bugsnag.notify(\n new Error(\n `modalTitle is not a string. Expected string, received ${typeof this._modalTitle}`,\n ),\n );\n return;\n }\n\n throw error;\n }\n } else if (headerTemplate) {\n headerTitle =\n this._i18n?.translate(headerTemplate, templateVariables) || '';\n }\n\n if (typeof headerTitle === 'string') {\n this._headerTitle!.textContent = headerTitle;\n }\n }\n\n renderHeaderDescriptionTemplate() {\n const {configurable, descriptionTemplate, templateVariables} = this._state;\n let headerDescription = '';\n\n if (configurable && this._modalDescription) {\n headerDescription = this._modalDescription?.replace(\n /\\${storeName}/gi,\n templateVariables.clientName,\n );\n } else if (descriptionTemplate) {\n headerDescription =\n this._i18n?.translate(descriptionTemplate, templateVariables) || '';\n }\n\n if (typeof headerDescription === 'string') {\n this._headerDescription!.textContent = headerDescription;\n }\n }\n\n renderFooterContent() {\n if (!this._i18n) {\n return;\n }\n\n const {step, templateVariables, sessionDetected} = this._state;\n const {clientName, privacyPolicyUrl, termsOfServiceUrl} = templateVariables;\n\n let content = '';\n\n switch (step) {\n /**\n * For these steps, we need to render the legal text specific for the client\n * e.g., By continuing, your email address will be shared with...\n */\n case AuthorizeModalTextStep.PersonalizeConsent:\n case AuthorizeModalTextStep.EmailVerification:\n case AuthorizeModalTextStep.PhoneVerification:\n case AuthorizeModalTextStep.WebAuthnVerification:\n case AuthorizeModalTextStep.OneClick: {\n // Personalize Consent should only render legal text when a user cookie exists\n if (\n step === AuthorizeModalTextStep.PersonalizeConsent &&\n !sessionDetected\n ) {\n break;\n }\n\n // Shop Pay Commerce Component does not render legal text for these steps\n if (\n this._analyticsContext ===\n DefaultComponentAnalyticsContext.PaymentRequest\n ) {\n break;\n }\n\n const authorizeText = this._i18n.translate(\n 'legal.authorized_scopes.email_name',\n templateVariables,\n );\n\n /**\n * If a client does not have a privacy policy or terms of service, we should not render the client's\n * legal links.\n */\n if (!privacyPolicyUrl || !termsOfServiceUrl) {\n content = authorizeText;\n break;\n }\n\n const clientLegalText = this._i18n.translate(`legal.client`, {\n clientName,\n privacyPolicy: `${this._i18n.translate(\n 'legal.privacy_policy',\n )}`,\n termsOfService: `${this._i18n.translate(\n 'legal.terms',\n )}`,\n });\n\n content = `${authorizeText} ${clientLegalText}`;\n break;\n }\n\n /**\n * For the Sign Up step, a user must agree to Shop's terms and conditions and privacy policy\n */\n case AuthorizeModalTextStep.SignUp: {\n const shopTermsOfServiceLink = `${this._i18n.translate(\n 'legal.terms_of_service',\n )}`;\n const privacyPolicyLink = `${this._i18n.translate(\n 'legal.privacy_policy',\n )}`;\n content = this._i18n.translate(`legal.shop`, {\n clientName,\n termsOfService: shopTermsOfServiceLink,\n privacyPolicy: privacyPolicyLink,\n });\n\n break;\n }\n }\n\n this._footerContent!.innerHTML = content;\n this.setFooterVisible(Boolean(content));\n }\n\n setHeaderVisible(isVisible: boolean) {\n this._modalHeader!.classList.toggle(HIDDEN_ELEMENT_CLASS_NAME, !isVisible);\n\n if (!this._headerIframe) {\n this._headerIframe = this._sheetModalManager.shadowRoot.querySelector(\n `.${HEADER_CLASS_NAME}-container`,\n )! as HTMLIFrameElement;\n const headerContainerIframeBody =\n this._headerIframe.contentDocument?.querySelector('body')!;\n headerContainerIframeBody.innerHTML = HEADER_STYLE;\n\n this._headerContentsContainer = document.createElement('div');\n this._headerContentsContainer.classList.add(\n HEADER_CONTENTS_CONTAINER_CLASS_NAME,\n );\n\n this._headerTitle = document.createElement('h2');\n this._headerTitle.classList.add(HEADER_TITLE_CLASS_NAME);\n this._headerDescription = document.createElement('div');\n this._headerDescription.classList.add(HEADER_DESCRIPTION_CLASS_NAME);\n\n this._headerContentsContainer.appendChild(this._headerTitle);\n this._headerContentsContainer.appendChild(this._headerDescription);\n\n if (this._flow === 'pop_up') {\n this._headerContentsContainer.style.display = 'flex';\n this._headerContentsContainer.style.flexDirection = 'column';\n }\n\n headerContainerIframeBody.appendChild(this._headerContentsContainer);\n\n if (window.ResizeObserver) {\n this._headerResizeObserver = new ResizeObserver(() => {\n this.refreshHeaderIframeHeight();\n });\n this._headerResizeObserver.observe(this._headerContentsContainer);\n } else {\n this.refreshHeaderIframeHeight();\n }\n }\n }\n\n /**\n * Resize iframe to match height of the modal header content\n */\n refreshHeaderIframeHeight() {\n const headerContainerIframeBody =\n this._headerIframe?.contentDocument?.querySelector('body')!;\n\n const heightStyle = `${\n this._headerContentsContainer?.getBoundingClientRect().height\n }px`;\n\n headerContainerIframeBody?.setAttribute('height', heightStyle);\n this._headerIframe?.setAttribute('height', heightStyle);\n }\n\n setHeaderDividerVisible(isVisible: boolean) {\n this._modalHeader!.classList.toggle(HEADER_DIVIDER_CLASS_NAME, isVisible);\n }\n\n setFooterVisible(isVisible: boolean) {\n this._footerElement!.classList.toggle(\n HIDDEN_ELEMENT_CLASS_NAME,\n !isVisible,\n );\n }\n\n setCloseButtonVisible(isVisible: boolean) {\n this._sheetModal.setCloseButtonVisibility(isVisible);\n }\n\n setCustomizedModalContent({\n modalTitle,\n modalDescription,\n modalLogo,\n }: ModalCustomizations) {\n if (modalTitle) {\n this._modalTitle = sanitizeModalCustomization(modalTitle);\n }\n if (modalDescription) {\n this._modalDescription = sanitizeModalCustomization(modalDescription);\n }\n if (modalLogo) {\n this._modalLogoSrc = sanitizeModalCustomization(modalLogo);\n }\n }\n\n getCustomizedModalContent() {\n return {\n modalTitle: this._modalTitle,\n modalDescription: this._modalDescription,\n modalLogo: this._modalLogoSrc,\n };\n }\n\n setTranslations(i18n: I18n) {\n this._i18n = i18n;\n }\n\n isModalCustomized() {\n return Boolean(\n this._modalTitle || this._modalDescription || this._modalLogoSrc,\n );\n }\n\n private getModalAttributes() {\n const attributeNames = this._sheetModal?.getAttributeNames() ?? [];\n updateAttributeConditionally(\n this._isCompact,\n ATTRIBUTE_COMPACT,\n attributeNames,\n );\n updateAttributeConditionally(\n this._isHeaderless,\n ATTRIBUTE_HEADERLESS,\n attributeNames,\n );\n\n return attributeNames\n .map((name) => {\n const value = this._sheetModal?.getAttribute(name);\n if (value) return `${name}=\"${value}\"`;\n // When attribute has no value and it is present, it is a boolean attribute\n else return name;\n })\n .join(' ');\n }\n}\n","import {DefaultComponentAnalyticsContext} from '../../../constants/loginDefault';\n\n// List of contexts for the Default component which serve copy from ShopJS instead of Pay.\n// These contexts should include the \"hide-copy\" param to Pay's authorize endpoint.\nconst CONTEXTS_SERVING_COPY_FROM_SHOP_JS = [\n DefaultComponentAnalyticsContext.Default,\n DefaultComponentAnalyticsContext.CheckoutExtension,\n DefaultComponentAnalyticsContext.CheckoutModal,\n DefaultComponentAnalyticsContext.ClassicCustomerAccounts,\n DefaultComponentAnalyticsContext.PaymentRequest,\n];\n\n/**\n * Returns whether or not the copy in Pay is hidden for the given context.\n * @param {DefaultComponentAnalyticsContext} context The context of the component, eg. 'loginWithShopSelfServe'.\n * @returns {boolean} Whether or not the copy in Pay is hidden for the given context.\n */\nexport function shouldHidePayCopy(\n context: DefaultComponentAnalyticsContext,\n): boolean {\n return CONTEXTS_SERVING_COPY_FROM_SHOP_JS.includes(context);\n}\n","/**\n * @file Component that implements the Login with Shop Default Authorize flow (with no side-effects).\n */\nimport {checkEligibleForCompactLayout} from '__deprecated__/common/utils/isCompactLayout';\nimport {constraintWidthInViewport} from '__deprecated__/common/utils/constraintWidthInViewport';\nimport {ShopifyPayModalState} from '__deprecated__/common/analytics';\nimport {ShopUserNotMatchedEvent} from '__deprecated__/types/loginButton';\nimport type PasswordManagerDetection from '__deprecated__/common/utils/passwordManagerDetection';\n\nimport {defineCustomElement} from '../../common/init';\nimport InputListener from '../../common/InputListener';\nimport {logError} from '../../common/logging';\nimport Bugsnag from '../../common/bugsnag';\nimport {parseIntOrUndefined} from '../../common/utils/coerce';\nimport {IFrameEventSource} from '../../common/MessageEventSource';\nimport MessageListener from '../../common/MessageListener';\nimport {\n AbortSignalReceivedError,\n getAnalyticsTraceId,\n isValidEmail,\n exchangeLoginCookie,\n debounce,\n ShopHubTopic,\n updateIframeSrc,\n removeOnePasswordPrompt,\n PositionVariant,\n unzoomIos,\n} from '../../common/utils';\nimport {\n PAY_AUTH_DOMAIN,\n PAY_AUTH_DOMAIN_ALT,\n validateStorefrontOrigin,\n} from '../../common/utils/urls';\nimport {I18n} from '../../common/translator/i18n';\nimport ConnectedWebComponent from '../../common/ConnectedWebComponent';\nimport {PayMessageSender} from '../../common/MessageSender';\nimport {\n AuthorizeModalTextActionType,\n LoginButtonMessageEventData,\n LoginButtonMessageEventData as MessageEventData,\n AuthorizeLoadedEvent,\n CustomFlowSideEffectEvent,\n OAuthParams,\n SdkErrorCode,\n ShopActionType,\n ShopUserMatchedEvent,\n VerificationStepChangedEvent,\n LoginButtonVersion as Version,\n AuthenticationLevel,\n OAuthParamsV1,\n LoginButtonUxMode as UxMode,\n} from '../../types';\nimport {\n ATTRIBUTE_ANCHOR_SELECTOR,\n ATTRIBUTE_AUTO_OPEN,\n ATTRIBUTE_CLIENT_ID,\n ATTRIBUTE_DISABLE_SIGN_UP,\n ATTRIBUTE_HIDE_BUTTON,\n ATTRIBUTE_REDIRECT_TYPE,\n ATTRIBUTE_REDIRECT_URI,\n ATTRIBUTE_UX_MODE,\n ATTRIBUTE_STOREFRONT_ORIGIN,\n ATTRIBUTE_VERSION,\n ATTRIBUTE_ANALYTICS_CONTEXT,\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n ATTRIBUTE_RESPONSE_TYPE,\n ATTRIBUTE_RESPONSE_MODE,\n ATTRIBUTE_CODE_CHALLENGE,\n ATTRIBUTE_CODE_CHALLENGE_METHOD,\n ATTRIBUTE_STATE,\n ATTRIBUTE_SCOPE,\n ATTRIBUTE_AVOID_PAY_ALT_DOMAIN,\n ATTRIBUTE_FLOW,\n ATTRIBUTE_KEEP_MODAL_OPEN,\n ATTRIBUTE_FLOW_VERSION,\n ERRORS,\n LOAD_TIMEOUT_MS,\n EMAIL_LISTENER_DEBOUNCE_MS,\n ATTRIBUTE_EMAIL,\n ATTRIBUTE_MODAL_TITLE,\n ATTRIBUTE_MODAL_DESCRIPTION,\n ATTRIBUTE_MODAL_LOGO_SRC,\n ATTRIBUTE_API_KEY,\n ATTRIBUTE_POP_UP_NAME,\n ATTRIBUTE_POP_UP_FEATURES,\n ATTRIBUTE_MODAL_BRAND,\n ATTRIBUTE_CONSENT_CHALLENGE,\n ATTRIBUTE_CHECKOUT_REDIRECT_URL,\n ATTRIBUTE_CHECKOUT_VERSION,\n ATTRIBUTE_CHECKOUT_TOKEN,\n ATTRIBUTE_TRANSACTION_PARAMS,\n ATTRIBUTE_SHOP_ID,\n ATTRIBUTE_FIRST_NAME,\n ATTRIBUTE_LAST_NAME,\n ATTRIBUTE_REQUIRE_VERIFICATION,\n ATTRIBUTE_POSITION_VARIANT,\n ATTRIBUTE_AVOID_SDK_SESSION,\n ATTRIBUTE_SHOP_PERMANENT_DOMAIN,\n ATTRIBUTE_SOURCE,\n} from '../../constants/loginButton';\nimport {DefaultComponentAnalyticsContext} from '../../constants/loginDefault';\nimport {\n recordOpentel,\n TelemetryMetricId,\n} from '../../dynamicImports/opentelemetry';\n\nimport {DefaultComponentMonorailTracker} from './analytics';\nimport {buildAuthorizeUrl} from './authorize';\nimport LoginDefaultView from './view/LoginDefaultView';\nimport {shouldHidePayCopy} from './utils/authorizeModalTexts';\nimport {validateModalCustomizations} from './utils/modalCustomizations';\n\nconst SILENT_SDK_ERROR_CODES: SdkErrorCode[] = [SdkErrorCode.CaptchaChallenge];\n\nexport default class ShopLoginDefault extends ConnectedWebComponent {\n _rootElement: ShadowRoot;\n #analyticsTraceId = getAnalyticsTraceId();\n #clientId = '';\n #version: Version = '2';\n #storefrontOrigin = window.location.origin;\n #monorailTracker = new DefaultComponentMonorailTracker({\n elementName: 'shop-login-default',\n analyticsTraceId: this.#analyticsTraceId,\n });\n\n #redirectType: OAuthParams['redirectType'];\n #redirectUri: string | undefined;\n #uxMode: UxMode | undefined;\n #popUpName: string | undefined;\n #popUpFeatures: string | undefined;\n\n #i18n: I18n | null = null;\n\n private _view: LoginDefaultView | undefined;\n private _disableSignUp = false;\n // _autoOpen is syncronized with the html attribute `auto-open`.\n private _autoOpen = false;\n // _autoOpened is set to true whenever the modal is opened automatically.\n private _autoOpened = false;\n private _analyticsContext = DefaultComponentAnalyticsContext.Default;\n private _apiKey: string | undefined;\n\n private _avoidPayAltDomain = false;\n private _avoidSdkSession = false;\n private _flow = ShopActionType.Default;\n private _flowVersion = 'unspecified';\n\n private _error = '';\n\n private _inputListener: InputListener | undefined;\n\n private _iframe: HTMLIFrameElement | undefined;\n private _iframeListener:\n | MessageListener\n | undefined;\n\n private _iframeSrcTimeout: ReturnType | undefined;\n\n private _hideButton = false;\n private _anchorSelector = '';\n private _iframeMessenger?: PayMessageSender;\n private _iframeLoadTimeout: ReturnType | undefined;\n private _updateEmailAbortController: AbortController | undefined;\n private _debouncedUpdateUserInfo: (userInfo: {\n email: string;\n firstName?: string;\n lastName?: string;\n }) => void;\n\n private _isCompactLayout = false;\n private _hidePayCopy = false;\n\n private _responseType: string | undefined;\n private _responseMode: string | undefined;\n private _codeChallenge: string | undefined;\n private _codeChallengeMethod: string | undefined;\n private _state: string | undefined;\n private _scope: string | undefined;\n private _email = '';\n private _checkoutRedirectUrl: string | undefined;\n private _checkoutVersion: string | undefined;\n private _checkoutToken: string | undefined;\n private _transactionParams: string | undefined;\n\n private _payLoaded: Promise<{userFound: boolean}>;\n // A reference to the internal promise resolver of `_payLoaded`.\n private _payLoadedResolve: (value: {userFound: boolean}) => void;\n\n private _authorizeModalOpened = false;\n private _keepModalOpen = false;\n private _consentChallenge: boolean | undefined;\n private _shopId: string | undefined;\n private _shopPermanentDomain: string | undefined;\n private _firstName: string | undefined;\n private _lastName: string | undefined;\n private _requireVerification = false;\n private _shouldListenToResizeMessage = true;\n private _source: string | undefined;\n private _passwordManagerDetection?: PasswordManagerDetection;\n\n static get observedAttributes(): string[] {\n return [\n ATTRIBUTE_ANCHOR_SELECTOR,\n ATTRIBUTE_CLIENT_ID,\n ATTRIBUTE_VERSION,\n ATTRIBUTE_STOREFRONT_ORIGIN,\n ATTRIBUTE_HIDE_BUTTON,\n ATTRIBUTE_DISABLE_SIGN_UP,\n ATTRIBUTE_AUTO_OPEN,\n ATTRIBUTE_REDIRECT_TYPE,\n ATTRIBUTE_REDIRECT_URI,\n ATTRIBUTE_UX_MODE,\n ATTRIBUTE_ANALYTICS_CONTEXT,\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n ATTRIBUTE_POSITION_VARIANT,\n ATTRIBUTE_RESPONSE_TYPE,\n ATTRIBUTE_RESPONSE_MODE,\n ATTRIBUTE_CODE_CHALLENGE,\n ATTRIBUTE_CODE_CHALLENGE_METHOD,\n ATTRIBUTE_STATE,\n ATTRIBUTE_SCOPE,\n ATTRIBUTE_AVOID_PAY_ALT_DOMAIN,\n ATTRIBUTE_AVOID_SDK_SESSION,\n ATTRIBUTE_FLOW,\n ATTRIBUTE_FLOW_VERSION,\n ATTRIBUTE_EMAIL,\n ATTRIBUTE_MODAL_TITLE,\n ATTRIBUTE_MODAL_DESCRIPTION,\n ATTRIBUTE_MODAL_LOGO_SRC,\n ATTRIBUTE_API_KEY,\n ATTRIBUTE_POP_UP_NAME,\n ATTRIBUTE_POP_UP_FEATURES,\n ATTRIBUTE_MODAL_BRAND,\n ATTRIBUTE_CONSENT_CHALLENGE,\n ATTRIBUTE_CHECKOUT_REDIRECT_URL,\n ATTRIBUTE_CHECKOUT_VERSION,\n ATTRIBUTE_CHECKOUT_TOKEN,\n ATTRIBUTE_TRANSACTION_PARAMS,\n ATTRIBUTE_SHOP_ID,\n ATTRIBUTE_SHOP_PERMANENT_DOMAIN,\n ATTRIBUTE_FIRST_NAME,\n ATTRIBUTE_LAST_NAME,\n ATTRIBUTE_REQUIRE_VERIFICATION,\n ATTRIBUTE_SOURCE,\n ];\n }\n\n constructor() {\n super();\n\n this._rootElement = this.attachShadow({mode: 'open'});\n\n this._analyticsContext =\n (this.getAttribute(\n ATTRIBUTE_ANALYTICS_CONTEXT,\n ) as DefaultComponentAnalyticsContext) ||\n DefaultComponentAnalyticsContext.Default;\n\n this._view = new LoginDefaultView(this._rootElement, {\n onOpen: this.#onViewOpen,\n onClose: this.#onViewClose,\n });\n\n this.#updateIfCompactEligible(true);\n\n this._debouncedUpdateUserInfo = debounce(({email, firstName, lastName}) => {\n if (this._passwordManagerDetection?.isFilledWithPasswordManager()) {\n this.#monorailTracker.trackPasswordManagerAutofillDetected();\n }\n\n this._updateUserInfo({\n email,\n firstName,\n lastName,\n });\n\n if (isValidEmail(email)) {\n this.#monorailTracker.trackEmailEnteredAction();\n }\n }, EMAIL_LISTENER_DEBOUNCE_MS);\n\n this._payLoadedResolve = () => {};\n this._payLoaded = new Promise((resolve) => {\n this._payLoadedResolve = resolve;\n });\n }\n\n #handleUserIdentityChange = () => {\n this._updateSrc(true);\n };\n\n #onViewClose = () => {\n this.dispatchCustomEvent('modalclosed');\n this._iframeMessenger?.postMessage({type: 'sheetmodalclosed'});\n // Remove the 1password custom element from the DOM after the sheet modal is closed.\n removeOnePasswordPrompt();\n };\n\n #onViewOpen = () => {\n this.dispatchCustomEvent('modalopened');\n this._iframeMessenger?.postMessage({type: 'sheetmodalopened'});\n };\n\n /**\n * updates the internal flag which tells the component:\n * - whether it should be compact\n * - whether the Pay iframe should render the content\n * it also reloads the view, if needed\n * @param {boolean} forceInit initialize without checking equal values\n * @returns {boolean} has the view been updated or not\n */\n #updateIfCompactEligible = (forceInit?: boolean): boolean => {\n const newIsCompactLayout = checkEligibleForCompactLayout(\n this._analyticsContext,\n );\n this._hidePayCopy = newIsCompactLayout\n ? false\n : shouldHidePayCopy(this._analyticsContext);\n\n // stop here if nothing is different based on new calculations\n if (forceInit || this._isCompactLayout !== newIsCompactLayout) {\n this._isCompactLayout = newIsCompactLayout;\n this._view?.setCompact(this._isCompactLayout);\n this._view?.init();\n\n return true;\n }\n\n return false;\n };\n\n attributeChangedCallback(\n name: string,\n _oldValue: string,\n newValue: string | null,\n ): void {\n // For boolean attributes only check if the attribute is passed, ignoring its value\n const attributePassed = Boolean(newValue !== null);\n\n switch (name) {\n case ATTRIBUTE_VERSION:\n this.#version = newValue as Version;\n this._updateSrc();\n break;\n case ATTRIBUTE_CLIENT_ID:\n this.#clientId = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_RESPONSE_TYPE:\n this._responseType = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_RESPONSE_MODE:\n this._responseMode = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_CODE_CHALLENGE:\n this._codeChallenge = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_CODE_CHALLENGE_METHOD:\n this._codeChallengeMethod = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_STATE:\n this._state = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_SCOPE:\n this._scope = newValue || '';\n this._updateSrc();\n break;\n case ATTRIBUTE_STOREFRONT_ORIGIN:\n this.#storefrontOrigin = newValue || window.location.origin;\n validateStorefrontOrigin(this.#storefrontOrigin);\n break;\n case ATTRIBUTE_HIDE_BUTTON:\n this._hideButton = attributePassed;\n this._view?.setContinueButtonVisible(attributePassed);\n this._updateSrc();\n break;\n case ATTRIBUTE_AVOID_PAY_ALT_DOMAIN:\n this._avoidPayAltDomain = attributePassed;\n this._updateSrc();\n break;\n case ATTRIBUTE_AVOID_SDK_SESSION:\n this._avoidSdkSession = attributePassed;\n this._updateSrc();\n break;\n case ATTRIBUTE_FLOW:\n this._flow = (newValue as ShopActionType) || ShopActionType.Default;\n this._view?.setFlow(this._flow);\n this._updateSrc();\n break;\n case ATTRIBUTE_FLOW_VERSION:\n this._flowVersion = newValue || 'unspecified';\n this._view?.setFlowVersion(this._flowVersion);\n this._updateMonorailTracker();\n this._updateSrc();\n break;\n case ATTRIBUTE_DISABLE_SIGN_UP:\n this._disableSignUp = attributePassed;\n this._updateSrc();\n break;\n case ATTRIBUTE_AUTO_OPEN:\n this._autoOpen = attributePassed;\n break;\n case ATTRIBUTE_REDIRECT_TYPE:\n this.#redirectType =\n newValue === 'pop_up' || newValue === 'iframe'\n ? newValue\n : 'top_frame';\n this._updateSrc();\n break;\n case ATTRIBUTE_REDIRECT_URI:\n this.#redirectUri = newValue || undefined;\n this._updateSrc();\n break;\n case ATTRIBUTE_UX_MODE:\n this.#uxMode = (newValue as UxMode) || undefined;\n this._view?.setUxMode(this.#uxMode);\n this._updateSrc();\n break;\n case ATTRIBUTE_ANALYTICS_CONTEXT:\n this._analyticsContext =\n (newValue as DefaultComponentAnalyticsContext) ||\n DefaultComponentAnalyticsContext.Default;\n this._view?.setAnalyticsContext(this._analyticsContext);\n this.#updateIfCompactEligible();\n this._updateMonorailTracker();\n this._updateSrc();\n break;\n case ATTRIBUTE_ANALYTICS_TRACE_ID:\n this.#analyticsTraceId = newValue || getAnalyticsTraceId();\n this._updateMonorailTracker();\n this._updateSrc();\n break;\n case ATTRIBUTE_POSITION_VARIANT:\n this._view?.setModalPositionVariant(\n (newValue || PositionVariant.Default) as PositionVariant,\n );\n break;\n case ATTRIBUTE_EMAIL:\n this._initEmail(newValue || '');\n break;\n case ATTRIBUTE_ANCHOR_SELECTOR:\n this._anchorSelector = newValue || '';\n this._view?.setAnchorSelector(newValue || '');\n break;\n case ATTRIBUTE_MODAL_TITLE:\n this._view?.setCustomizedModalContent({\n modalTitle: newValue || undefined,\n });\n this._updateSrc();\n break;\n case ATTRIBUTE_MODAL_DESCRIPTION:\n this._view?.setCustomizedModalContent({\n modalDescription: newValue || undefined,\n });\n this._updateSrc();\n break;\n case ATTRIBUTE_MODAL_LOGO_SRC:\n this._view?.setCustomizedModalContent({\n modalLogo: newValue || undefined,\n });\n this._updateSrc();\n break;\n case ATTRIBUTE_API_KEY:\n this._apiKey = newValue || undefined;\n this._updateSrc();\n break;\n case ATTRIBUTE_POP_UP_NAME:\n this.#popUpName = newValue || undefined;\n this._updateSrc();\n break;\n case ATTRIBUTE_POP_UP_FEATURES:\n this.#popUpFeatures = newValue || undefined;\n this._updateSrc();\n break;\n case ATTRIBUTE_MODAL_BRAND:\n this._view?.setBrand(newValue || undefined);\n break;\n case ATTRIBUTE_CONSENT_CHALLENGE:\n this._consentChallenge = attributePassed;\n this._updateSrc();\n break;\n case ATTRIBUTE_CHECKOUT_REDIRECT_URL:\n this._checkoutRedirectUrl = newValue || undefined;\n this._updateSrc();\n break;\n case ATTRIBUTE_CHECKOUT_VERSION:\n this._checkoutVersion = newValue || undefined;\n this._updateSrc();\n this._updateMonorailTracker();\n break;\n case ATTRIBUTE_CHECKOUT_TOKEN:\n this._checkoutToken = newValue || undefined;\n this._updateSrc();\n this._updateMonorailTracker();\n break;\n case ATTRIBUTE_TRANSACTION_PARAMS:\n this._transactionParams = newValue || undefined;\n this._updateSrc();\n break;\n case ATTRIBUTE_SHOP_ID:\n this._shopId = newValue || undefined;\n this._updateSrc();\n this._updateMonorailTracker();\n break;\n case ATTRIBUTE_SHOP_PERMANENT_DOMAIN:\n this._shopPermanentDomain = newValue || undefined;\n this._updateMonorailTracker();\n break;\n case ATTRIBUTE_FIRST_NAME:\n this._firstName = newValue || undefined;\n break;\n case ATTRIBUTE_LAST_NAME:\n this._lastName = newValue || undefined;\n break;\n case ATTRIBUTE_REQUIRE_VERIFICATION:\n this._requireVerification = attributePassed;\n this._updateSrc();\n break;\n case ATTRIBUTE_SOURCE:\n this._source = newValue || 'unspecified';\n break;\n }\n }\n\n async connectedCallback(): Promise {\n this.subscribeToHub(\n ShopHubTopic.UserStatusIdentity,\n this.#handleUserIdentityChange,\n );\n\n this._keepModalOpen = this.getBooleanAttribute(ATTRIBUTE_KEEP_MODAL_OPEN);\n this._hideButton = this.getBooleanAttribute(ATTRIBUTE_HIDE_BUTTON);\n this._apiKey = this.getAttribute(ATTRIBUTE_API_KEY) || undefined;\n this._source = this.getAttribute(ATTRIBUTE_SOURCE) || 'unspecified';\n\n try {\n validateModalCustomizations(\n this._view!.getCustomizedModalContent(),\n this._apiKey,\n );\n\n await this.#initTranslations();\n await this._initElements();\n validateStorefrontOrigin(this.#storefrontOrigin);\n\n this.#monorailTracker.trackFeatureInitialization({\n apiKey: this._apiKey,\n source: this._source,\n });\n } catch (error) {\n if (error instanceof Error) {\n logError(`Invalid config. ${error.message}`);\n this._handleError('invalid_config', SdkErrorCode.ApiUnavailable);\n }\n }\n }\n\n async #initTranslations() {\n try {\n // BUILD_LOCALE is used for generating localized bundles.\n // See ./scripts/i18n-dynamic-import-replacer-rollup.mjs for more info.\n // eslint-disable-next-line no-process-env\n const locale = process.env.BUILD_LOCALE || I18n.getDefaultLanguage();\n const dictionary = await import(`./translations/${locale}.json`);\n this.#i18n = new I18n({[locale]: dictionary});\n this._view?.setTranslations(this.#i18n);\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n return null;\n }\n\n async _initElements() {\n if (!this._view) return;\n\n this._view.setModalAnalyticsTraceId(this.#analyticsTraceId);\n this._view.setMonorailTracker(this.#monorailTracker);\n this._view.setAnchorSelector(this._anchorSelector);\n this._view.setContinueButtonVisible(!this._hideButton);\n\n this._iframe = this._view.getIframe();\n this._updateSrc();\n\n const eventDestination: Window | undefined =\n this.ownerDocument?.defaultView || undefined;\n\n this._iframeListener = new MessageListener(\n new IFrameEventSource(this._iframe!),\n [PAY_AUTH_DOMAIN, PAY_AUTH_DOMAIN_ALT, this.#storefrontOrigin],\n this.#handlePostMessage.bind(this),\n eventDestination,\n );\n\n this._iframeMessenger = new PayMessageSender(this._iframe!);\n\n const {userFound} = await this._iframeListener.waitForMessage('loaded');\n this._payLoadedResolve({userFound});\n\n this.dispatchCustomEvent('iframeloaded');\n this.#monorailTracker.trackShopPayModalStateChange({\n currentState: ShopifyPayModalState.Loaded,\n });\n\n this.#clearLoadTimeout();\n\n if (userFound && this._autoOpen && !this._autoOpened) {\n this._updateEmailAbortController?.abort();\n this._autoOpened = true;\n await this._view.openAuthorizeModal();\n }\n }\n\n _initEmail(email: string) {\n this._email = email;\n if (isValidEmail(this._email)) {\n this._debouncedUpdateUserInfo({\n email: this._email,\n firstName: this._firstName,\n lastName: this._lastName,\n });\n } else {\n // // Send empty email to Pay to trigger a prop change if the same email is re-submitted\n this._debouncedUpdateUserInfo({\n email: '',\n });\n }\n }\n\n disconnectedCallback(): void {\n this.unsubscribeAllFromHub();\n this._iframeListener?.destroy();\n this._view?.destroy();\n this.stopListeningToInput();\n }\n\n /**\n * Used by Shop Pay Commerce Component to prevent the iframe from resizing\n * when the iframe source is set to Shop Pay checkout.\n * @param {boolean} value whether the resize iframe message should be listened to.\n */\n setShouldListenToResizeMessage(value: boolean) {\n this._shouldListenToResizeMessage = value;\n }\n\n /**\n * Sends the given email to Pay if provided. Opens the modal regardless of whether the email\n * matched a user or not or if it was provided at all.\n * @param {string} [email] Optional Email address to initialize the modal with.\n */\n async requestShow(email?: string): Promise {\n await this._payLoaded;\n\n if (this._authorizeModalOpened) {\n Bugsnag.notify(\n new Error('requestShow called when the modal is not closed'),\n );\n return;\n }\n\n if (email) {\n this._updateUserInfo({\n email,\n firstName: this._firstName,\n lastName: this._lastName,\n });\n }\n\n await this._payLoaded;\n await this._view?.openAuthorizeModal();\n }\n\n setPasswordManagerDetection(\n passwordManagerDetection: PasswordManagerDetection,\n ) {\n this._passwordManagerDetection = passwordManagerDetection;\n }\n\n /**\n * Listens for changes to an email input field. If the input contains an email\n * that matches a Pay user, the modal is opened.\n *\n * Ensure disable-sign-up is set when calling this. Otherwise, if an email does\n * not match a Pay user the sign up form will open in the background but the modal\n * will not be shown.\n * @param {object} inputElement Email input element to listen to.\n * @deprecated Use the email attribute instead\n */\n listenToInput(inputElement: HTMLInputElement): void {\n this.stopListeningToInput();\n\n const handleNewValue = debounce((value: string) => {\n if (isValidEmail(value)) {\n this._updateUserInfo({\n email: value,\n });\n this.#monorailTracker.trackEmailEnteredAction();\n } else {\n // Send empty email to Pay to trigger a prop change if the same email is re-submitted\n this._updateUserInfo({\n email: '',\n });\n }\n }, EMAIL_LISTENER_DEBOUNCE_MS);\n\n handleNewValue(inputElement.value);\n this._inputListener = new InputListener(inputElement, handleNewValue);\n }\n\n getIframe() {\n return this._view?.getIframe();\n }\n\n /**\n * @returns {Promise} A promise that resolves when the iframe is loaded\n */\n ensureIframeIsLoaded(): Promise {\n return this._payLoaded.then(() => undefined);\n }\n\n /**\n * Stops listening to input changes. Call `listenToInput` again to start listening again.\n */\n stopListeningToInput() {\n this._inputListener?.destroy();\n }\n\n async _updateUserInfo({\n email,\n firstName = '',\n lastName = '',\n }: {\n email: string;\n firstName?: string;\n lastName?: string;\n }): Promise {\n /**\n * Ensures that we do not submit a new email to the iframe if the sheet modal is already visible to the user\n */\n if (this._authorizeModalOpened) {\n return;\n }\n\n if (\n this._updateEmailAbortController &&\n !this._updateEmailAbortController?.signal.aborted\n ) {\n this._updateEmailAbortController.abort();\n }\n\n this._updateEmailAbortController = new AbortController();\n\n try {\n const {userFound} = await this._payLoaded;\n\n if (userFound && this._autoOpen && !this._autoOpened) {\n return;\n }\n\n // Submit the name at the same time as the email, since an email change represents\n // a change in user and also causes the modal to appear.\n this._iframeMessenger!.postMessage({\n type: 'namesubmitted',\n firstName,\n lastName,\n });\n\n this._iframeMessenger!.postMessage({\n type: 'emailsubmitted',\n email,\n hideChange: email.length > 0,\n });\n\n const shopUserMatchedPromise = this._iframeListener!.waitForMessage(\n 'shop_user_matched',\n this._updateEmailAbortController.signal,\n );\n const captchaChallengePromise = new Promise((resolve, reject) => {\n const waitForCaptcha = async () => {\n try {\n const {code} = await this._iframeListener!.waitForMessage(\n 'error',\n this._updateEmailAbortController!.signal,\n );\n\n if (code === SdkErrorCode.CaptchaChallenge) {\n resolve(undefined);\n } else {\n waitForCaptcha();\n }\n } catch (err) {\n reject(err);\n }\n };\n\n waitForCaptcha();\n });\n\n await Promise.race([shopUserMatchedPromise, captchaChallengePromise]);\n\n await this._view?.openAuthorizeModal();\n\n // Ensures `waitForMessage` calls are cancelled after the modal is opened\n this._updateEmailAbortController.abort();\n } catch (error) {\n if (error instanceof AbortSignalReceivedError) {\n return;\n }\n if (error instanceof Error) {\n Bugsnag.notify(\n new Error(\n `Error updating user info: ${error.name} - ${error.message}`,\n ),\n );\n }\n }\n }\n\n _updateSrc(forced?: boolean) {\n const iframe = this._view?.getIframe();\n\n if (!iframe && this._view?.getUxMode() !== 'redirect') return;\n\n const authorizeUrl = this._buildAuthorizeUrl();\n this._view?.setAuthorizeUrl(authorizeUrl);\n\n if (!iframe || !authorizeUrl) return;\n\n this._updateListeners(iframe);\n\n if (this._iframeSrcTimeout) {\n clearTimeout(this._iframeSrcTimeout);\n }\n\n // Wait for the browser to make all `attributeChangedCallback` calls before updating\n // the iframe src to avoid multiple cancelled requests.\n this._iframeSrcTimeout = setTimeout(() => {\n this.#initLoadTimeout();\n updateIframeSrc(iframe, authorizeUrl, forced);\n Bugsnag.leaveBreadcrumb('Iframe url updated', {authorizeUrl}, 'state');\n }, 0);\n }\n\n _buildAuthorizeUrl(): string {\n const oauthParams: OAuthParams | OAuthParamsV1 = {\n clientId: this.#clientId,\n responseType: this._responseType,\n responseMode: this._responseMode,\n redirectType: this.#redirectType,\n redirectUri: this.#redirectUri,\n codeChallenge: this._codeChallenge,\n codeChallengeMethod: this._codeChallengeMethod,\n state: this._state,\n scope: this._scope,\n };\n const modalCustomized = this._view?.isModalCustomized();\n\n return buildAuthorizeUrl({\n version: this.#version,\n analyticsTraceId: this.#analyticsTraceId,\n analyticsContext: this._analyticsContext,\n isCompactLayout: this._isCompactLayout,\n flow: this._flow,\n flowVersion: this._flowVersion,\n signUpEnabled: !this._disableSignUp,\n oauthParams,\n avoidPayAltDomain: this._avoidPayAltDomain,\n avoidSdkSession: this._avoidSdkSession,\n hideCopy: this._hidePayCopy,\n ...(modalCustomized && {modalCustomized}),\n apiKey: this._apiKey,\n popupWindowParams: {\n popUpName: this.#popUpName,\n popUpFeatures: this.#popUpFeatures,\n },\n consentChallenge: this._consentChallenge,\n checkoutRedirectUrl: this._checkoutRedirectUrl,\n checkoutVersion: this._checkoutVersion,\n checkoutToken: this._checkoutToken,\n transactionParams: this._transactionParams,\n shopId: this._shopId,\n requireVerification: this._requireVerification,\n uxMode: this.#uxMode,\n error: this._error,\n });\n }\n\n /**\n * When the template changes and destroys our iframe reference we need to reinitalize our listener with a reference\n * to the new iframe element. This is done to ensure that our event listeners continue to operate as expected\n * and do not fail the event source validation.\n * @param {object} iframe The new iframe element to use for our event listener.\n */\n _updateListeners(iframe: HTMLIFrameElement) {\n if (this._iframeListener) {\n this._iframeListener.eventSource = new IFrameEventSource(iframe);\n }\n\n if (this._iframeMessenger) {\n this._iframeMessenger.eventDestination = iframe;\n }\n }\n\n _updateMonorailTracker() {\n this.#monorailTracker = new DefaultComponentMonorailTracker({\n elementName: 'shop-login-default',\n analyticsTraceId: this.#analyticsTraceId,\n analyticsContext: this._analyticsContext,\n flowVersion: this._flowVersion,\n shopId: parseIntOrUndefined(this._shopId),\n shopPermanentDomain: this._shopPermanentDomain,\n checkoutVersion: this._checkoutVersion,\n checkoutToken: this._checkoutToken,\n });\n this._view?.setMonorailTracker(this.#monorailTracker);\n }\n\n #initLoadTimeout() {\n this.#clearLoadTimeout();\n this._iframeLoadTimeout = setTimeout(() => {\n const error = ERRORS.temporarilyUnavailable;\n this.dispatchCustomEvent('error', {\n message: error.message,\n code: error.code,\n });\n // eslint-disable-next-line no-warning-comments\n // TODO: replace this bugsnag notify with a Observe-able event\n // Bugsnag.notify(\n // new PayTimeoutError(`Pay failed to load within ${LOAD_TIMEOUT_MS}ms.`),\n // {component: this.#component, src: this.iframe?.getAttribute('src')},\n // );\n this.#clearLoadTimeout();\n }, LOAD_TIMEOUT_MS);\n }\n\n #clearLoadTimeout() {\n if (!this._iframeLoadTimeout) return;\n clearTimeout(this._iframeLoadTimeout);\n this._iframeLoadTimeout = undefined;\n }\n\n async _handleCompleted(\n loggedIn: boolean,\n email?: string,\n customerAccessToken?: string,\n customerAccessTokenExpiresAt?: string,\n shouldFinalizeLogin?: boolean,\n shopPayInstallmentsOnboarded?: boolean,\n givenNameFirstInitial?: string,\n avatar?: string,\n ) {\n if (loggedIn) {\n if (shouldFinalizeLogin) {\n await exchangeLoginCookie(this.#storefrontOrigin, Bugsnag.notify);\n this.publishToHub(ShopHubTopic.UserSessionCreate, {\n email: givenNameFirstInitial || email,\n initial: givenNameFirstInitial || email?.[0] || '',\n avatar,\n });\n }\n }\n\n if (!this._keepModalOpen) {\n await this._view?.closeAuthorizeModal();\n }\n\n this._iframeListener?.destroy();\n this.stopListeningToInput();\n\n this.dispatchCustomEvent('completed', {\n loggedIn,\n email,\n customerAccessToken,\n customerAccessTokenExpiresAt,\n shopPayInstallmentsOnboarded,\n });\n\n this._maybeRedirect();\n }\n\n async _handleCustomFlowSideEffect(payload: CustomFlowSideEffectEvent) {\n // currently only used for Prequal flow, but can be extended to other flows\n switch (payload.flow) {\n case ShopActionType.Prequal:\n this.dispatchCustomEvent('prequal_flow_side_effect', {\n shopPayInstallmentsOnboarded: payload.shopPayInstallmentsOnboarded,\n });\n break;\n }\n }\n\n _maybeRedirect(): void {\n if (this.#redirectType === 'pop_up') return;\n if (!this.#redirectUri) return;\n\n try {\n let redirectUri = this.#redirectUri;\n if (this.#analyticsTraceId) {\n const queryParams = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n analytics_trace_id: this.#analyticsTraceId,\n };\n const searchParams = new URLSearchParams(queryParams);\n redirectUri = redirectUri.concat(`?${searchParams.toString()}`);\n } else {\n Bugsnag.notify(\n new Error(\n 'Missing analytics trace ID when redirecting to account page',\n ),\n );\n }\n\n window.location.assign(redirectUri);\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n }\n\n _handleError(message: string, code: SdkErrorCode): void {\n this.dispatchCustomEvent('error', {\n message,\n code,\n });\n\n if (code === SdkErrorCode.RetriableServerError) {\n this._error = code;\n\n this._updateSrc(true);\n }\n\n if (SILENT_SDK_ERROR_CODES.includes(code)) {\n recordOpentel(TelemetryMetricId.HandleSilentError, 1, {\n component: 'shop-login-default',\n errorCode: code,\n });\n } else {\n Bugsnag.notify(new Error(`Authorize Error: ${message} (${code}).`));\n }\n\n this.#clearLoadTimeout();\n }\n\n _onPopUpOpened(payload: {\n didOpen?: boolean;\n popUpName?: string;\n popUpFeatures?: string;\n }): void {\n if (payload.didOpen) {\n this._view?.dispatch({\n type: AuthorizeModalTextActionType.PopUpOpened,\n payload,\n });\n }\n\n this.dispatchCustomEvent('popuploading', payload);\n }\n\n _onLoaded(payload: AuthorizeLoadedEvent) {\n this._view?.setAuthenticationLevel(\n payload?.authenticationLevelRequired || AuthenticationLevel.Phone,\n );\n this._view?.dispatch({\n type: AuthorizeModalTextActionType.Init,\n payload,\n });\n this._view?.onContentLoaded();\n }\n\n _onUserMatched({\n hasName = false,\n userCookieExists = false,\n personalizeConsentChallenge = false,\n }: ShopUserMatchedEvent): void {\n this._view?.dispatch({\n type: AuthorizeModalTextActionType.UserMatched,\n payload: {\n hasName,\n userCookieExists,\n personalizeConsentChallenge,\n },\n });\n unzoomIos();\n this.dispatchCustomEvent('shopusermatched');\n }\n\n _onUserNotMatched({apiError}: ShopUserNotMatchedEvent): void {\n this._view?.dispatch({\n type: AuthorizeModalTextActionType.UserNotMatched,\n });\n this.dispatchCustomEvent('shopusernotmatched', {apiError});\n }\n\n _onEmailChangeRequested(): void {\n this._view?.dispatch({\n type: AuthorizeModalTextActionType.Restart,\n });\n this.dispatchCustomEvent('restarted');\n }\n\n _onVerificationStepChanged(payload: VerificationStepChangedEvent): void {\n this._view?.dispatch({\n type: AuthorizeModalTextActionType.VerificationStepChanged,\n payload,\n });\n }\n\n #handlePostMessage(data: MessageEventData) {\n switch (data.type) {\n case 'loaded':\n this._onLoaded(data);\n break;\n case 'resize_iframe':\n if (!this._shouldListenToResizeMessage) {\n return;\n }\n\n this._view?.resizeIframe(\n data.height,\n constraintWidthInViewport(data.width, this._view!.getIframe()!),\n );\n break;\n case 'completed':\n this._handleCompleted(\n data.loggedIn,\n data.email,\n data.customerAccessToken,\n data.customerAccessTokenExpiresAt,\n data.shouldFinalizeLogin,\n data.shopPayInstallmentsOnboarded,\n data.givenNameFirstInitial,\n data.avatar,\n );\n break;\n case 'error':\n this._handleError(data.message, data.code);\n break;\n case 'close_requested':\n this._view?.closeAuthorizeModal();\n break;\n case 'shop_user_matched':\n this._onUserMatched(data);\n break;\n case 'pop_up_opened':\n this._onPopUpOpened(data);\n break;\n case 'shop_user_not_matched':\n this._onUserNotMatched(data);\n break;\n case 'email_change_requested':\n this._onEmailChangeRequested();\n break;\n case 'verification_step_changed':\n this._onVerificationStepChanged(data);\n break;\n case 'custom_flow_side_effect':\n this._handleCustomFlowSideEffect(data);\n break;\n }\n }\n}\n\n/**\n * Define the shop-login-default custom element.\n */\nexport function defineElement() {\n defineCustomElement('shop-login-default', ShopLoginDefault);\n}\n","import type PasswordManagerDetection from '__deprecated__/common/utils/passwordManagerDetection';\n\nimport {defineCustomElement} from '../../common/init';\nimport {getValidAttribute} from '../../common/utils/attributeValidator';\nimport {PositionVariant, getAnalyticsTraceId} from '../../common/utils';\nimport WebComponent from '../../common/WebComponent';\nimport {\n ShopLoginEventType,\n ShopActionType,\n LoginButtonVersion as Version,\n LoginButtonUxMode as UxMode,\n} from '../../types';\nimport {\n ATTRIBUTE_ACTION,\n ATTRIBUTE_ANALYTICS_CONTEXT,\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n ATTRIBUTE_AUTO_OPEN,\n ATTRIBUTE_CLIENT_ID,\n ATTRIBUTE_DISABLE_SIGN_UP,\n ATTRIBUTE_HIDE_BUTTON,\n ATTRIBUTE_REDIRECT_TYPE,\n ATTRIBUTE_REDIRECT_URI,\n ATTRIBUTE_UX_MODE,\n ATTRIBUTE_RESPONSE_TYPE,\n ATTRIBUTE_RESPONSE_MODE,\n ATTRIBUTE_CODE_CHALLENGE,\n ATTRIBUTE_CODE_CHALLENGE_METHOD,\n ATTRIBUTE_STATE,\n ATTRIBUTE_SCOPE,\n ATTRIBUTE_STOREFRONT_ORIGIN,\n ATTRIBUTE_VERSION,\n ATTRIBUTE_AVOID_PAY_ALT_DOMAIN,\n ATTRIBUTE_FLOW,\n ATTRIBUTE_FLOW_VERSION,\n ATTRIBUTE_ANCHOR_SELECTOR,\n ATTRIBUTE_KEEP_MODAL_OPEN,\n ATTRIBUTE_EMAIL,\n ATTRIBUTE_DEV_MODE,\n ATTRIBUTE_MODAL_TITLE,\n ATTRIBUTE_MODAL_DESCRIPTION,\n ATTRIBUTE_MODAL_LOGO_SRC,\n ATTRIBUTE_API_KEY,\n ATTRIBUTE_POP_UP_NAME,\n ATTRIBUTE_POP_UP_FEATURES,\n ATTRIBUTE_MODAL_BRAND,\n ATTRIBUTE_CONSENT_CHALLENGE,\n ATTRIBUTE_CHECKOUT_REDIRECT_URL,\n ATTRIBUTE_CHECKOUT_VERSION,\n ATTRIBUTE_SHOP_ID,\n ATTRIBUTE_SHOP_PERMANENT_DOMAIN,\n ATTRIBUTE_FIRST_NAME,\n ATTRIBUTE_LAST_NAME,\n ATTRIBUTE_REQUIRE_VERIFICATION,\n ATTRIBUTE_CHECKOUT_TOKEN,\n ATTRIBUTE_TRANSACTION_PARAMS,\n ATTRIBUTE_COMPACT,\n ATTRIBUTE_POSITION_VARIANT,\n ATTRIBUTE_AVOID_SDK_SESSION,\n ATTRIBUTE_SOURCE,\n} from '../../constants/loginButton';\n\nimport ShopFollowButton from './shop-follow-button';\nimport ShopLoginDefault from './shop-login-default';\n\nconst actionTypeToTagName: {[key in ShopActionType]: string | null} = {\n [ShopActionType.Follow]: 'shop-follow-button',\n [ShopActionType.Default]: 'shop-login-default',\n // Prequal uses the same component as Default\n [ShopActionType.Prequal]: 'shop-login-default',\n [ShopActionType.PopUp]: 'shop-login-default',\n // Checkout sheet flow (action) is not supported by `shop-login-button`\n // It can only be used by rendering `shop-pay-checkout-sheet` directly\n [ShopActionType.CheckoutSheet]: null,\n [ShopActionType.Custom]: 'shop-login-default',\n};\n\ninterface ShopLoginButtonAttributes {\n [ATTRIBUTE_VERSION]?: Version;\n [ATTRIBUTE_CLIENT_ID]?: string;\n [ATTRIBUTE_HIDE_BUTTON]: boolean;\n [ATTRIBUTE_DISABLE_SIGN_UP]: boolean;\n [ATTRIBUTE_AUTO_OPEN]: boolean;\n [ATTRIBUTE_REDIRECT_TYPE]?: string | null;\n [ATTRIBUTE_REDIRECT_URI]?: string | null;\n [ATTRIBUTE_UX_MODE]?: UxMode | null;\n [ATTRIBUTE_ANALYTICS_CONTEXT]: string;\n [ATTRIBUTE_ANALYTICS_TRACE_ID]?: string;\n [ATTRIBUTE_COMPACT]?: boolean;\n [ATTRIBUTE_POSITION_VARIANT]?: PositionVariant;\n [ATTRIBUTE_RESPONSE_TYPE]?: string | null;\n [ATTRIBUTE_RESPONSE_MODE]?: string | null;\n [ATTRIBUTE_CODE_CHALLENGE]?: string | null;\n [ATTRIBUTE_CODE_CHALLENGE_METHOD]?: string | null;\n [ATTRIBUTE_STATE]?: string | null;\n [ATTRIBUTE_SCOPE]?: string | null;\n [ATTRIBUTE_AVOID_PAY_ALT_DOMAIN]: boolean;\n [ATTRIBUTE_AVOID_SDK_SESSION]: boolean;\n [ATTRIBUTE_ACTION]?: ShopActionType;\n [ATTRIBUTE_FLOW]?: ShopActionType;\n [ATTRIBUTE_FLOW_VERSION]: string;\n [ATTRIBUTE_EMAIL]: string;\n [ATTRIBUTE_ANCHOR_SELECTOR]?: string | null;\n [ATTRIBUTE_API_KEY]?: string | null;\n [ATTRIBUTE_DEV_MODE]: boolean;\n [ATTRIBUTE_KEEP_MODAL_OPEN]: boolean;\n [ATTRIBUTE_MODAL_TITLE]?: string | null;\n [ATTRIBUTE_MODAL_DESCRIPTION]?: string | null;\n [ATTRIBUTE_MODAL_LOGO_SRC]?: string | null;\n [ATTRIBUTE_POP_UP_NAME]?: string | null;\n [ATTRIBUTE_POP_UP_FEATURES]?: string | null;\n [ATTRIBUTE_MODAL_BRAND]?: string | null;\n [ATTRIBUTE_CONSENT_CHALLENGE]: boolean;\n [ATTRIBUTE_CHECKOUT_REDIRECT_URL]?: string | null;\n [ATTRIBUTE_CHECKOUT_VERSION]?: string | null;\n [ATTRIBUTE_CHECKOUT_TOKEN]?: string | null;\n [ATTRIBUTE_TRANSACTION_PARAMS]?: string | null;\n [ATTRIBUTE_SHOP_ID]?: string;\n [ATTRIBUTE_SHOP_PERMANENT_DOMAIN]?: string;\n [ATTRIBUTE_FIRST_NAME]?: string;\n [ATTRIBUTE_LAST_NAME]?: string;\n [ATTRIBUTE_REQUIRE_VERIFICATION]: boolean;\n [ATTRIBUTE_SOURCE]: string;\n}\n\nconst defaultAttributes: ShopLoginButtonAttributes = {\n [ATTRIBUTE_HIDE_BUTTON]: false,\n [ATTRIBUTE_DISABLE_SIGN_UP]: false,\n [ATTRIBUTE_AUTO_OPEN]: false,\n [ATTRIBUTE_ANALYTICS_CONTEXT]: '',\n [ATTRIBUTE_AVOID_PAY_ALT_DOMAIN]: false,\n [ATTRIBUTE_AVOID_SDK_SESSION]: false,\n [ATTRIBUTE_FLOW_VERSION]: 'unspecified',\n [ATTRIBUTE_EMAIL]: '',\n [ATTRIBUTE_DEV_MODE]: false,\n [ATTRIBUTE_KEEP_MODAL_OPEN]: false,\n [ATTRIBUTE_CONSENT_CHALLENGE]: false,\n [ATTRIBUTE_REQUIRE_VERIFICATION]: false,\n [ATTRIBUTE_SOURCE]: 'unspcified',\n};\n\nexport default class ShopLoginButton extends WebComponent {\n #actionType: ShopActionType | undefined;\n #actionButton: ShopFollowButton | ShopLoginDefault | undefined;\n\n static get observedAttributes(): string[] {\n return [\n ATTRIBUTE_CLIENT_ID,\n ATTRIBUTE_VERSION,\n ATTRIBUTE_FLOW_VERSION,\n ATTRIBUTE_STOREFRONT_ORIGIN,\n ATTRIBUTE_HIDE_BUTTON,\n ATTRIBUTE_DISABLE_SIGN_UP,\n ATTRIBUTE_AUTO_OPEN,\n ATTRIBUTE_COMPACT,\n ATTRIBUTE_POSITION_VARIANT,\n ATTRIBUTE_REDIRECT_TYPE,\n ATTRIBUTE_REDIRECT_URI,\n ATTRIBUTE_ANALYTICS_CONTEXT,\n ATTRIBUTE_REDIRECT_URI,\n ATTRIBUTE_UX_MODE,\n ATTRIBUTE_RESPONSE_TYPE,\n ATTRIBUTE_RESPONSE_MODE,\n ATTRIBUTE_CODE_CHALLENGE,\n ATTRIBUTE_CODE_CHALLENGE_METHOD,\n ATTRIBUTE_STATE,\n ATTRIBUTE_SCOPE,\n ATTRIBUTE_EMAIL,\n ATTRIBUTE_ANCHOR_SELECTOR,\n ATTRIBUTE_DEV_MODE,\n ATTRIBUTE_MODAL_TITLE,\n ATTRIBUTE_MODAL_DESCRIPTION,\n ATTRIBUTE_MODAL_LOGO_SRC,\n ATTRIBUTE_API_KEY,\n ATTRIBUTE_POP_UP_NAME,\n ATTRIBUTE_POP_UP_FEATURES,\n ATTRIBUTE_MODAL_BRAND,\n ATTRIBUTE_CONSENT_CHALLENGE,\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n ATTRIBUTE_CHECKOUT_REDIRECT_URL,\n ATTRIBUTE_CHECKOUT_VERSION,\n ATTRIBUTE_CHECKOUT_TOKEN,\n ATTRIBUTE_TRANSACTION_PARAMS,\n ATTRIBUTE_SHOP_ID,\n ATTRIBUTE_SHOP_PERMANENT_DOMAIN,\n ATTRIBUTE_FIRST_NAME,\n ATTRIBUTE_LAST_NAME,\n ATTRIBUTE_REQUIRE_VERIFICATION,\n ATTRIBUTE_AVOID_PAY_ALT_DOMAIN,\n ATTRIBUTE_AVOID_SDK_SESSION,\n ATTRIBUTE_KEEP_MODAL_OPEN,\n ATTRIBUTE_SOURCE,\n ];\n }\n\n // Allows getting the clientId as a property externally. Internally, use the private _clientId variable.\n get clientId(): string | undefined {\n return this._getAttributeValueWithDefault(ATTRIBUTE_CLIENT_ID);\n }\n\n // Allows setting the clientId property externally, reflects value in the attribute.\n set clientId(newClientId: string | undefined) {\n this.updateAttribute(ATTRIBUTE_CLIENT_ID, newClientId);\n }\n\n set redirectUri(newRedirectUri: string | undefined) {\n this.updateAttribute(ATTRIBUTE_REDIRECT_URI, newRedirectUri);\n }\n\n get version(): Version | undefined {\n return this._getAttributeValueWithDefault(ATTRIBUTE_VERSION);\n }\n\n set version(newVersion: Version | undefined) {\n this.updateAttribute(ATTRIBUTE_VERSION, newVersion);\n }\n\n get email(): string {\n return this._getAttributeValueWithDefault(ATTRIBUTE_EMAIL);\n }\n\n set email(newEmail: string) {\n this.updateAttribute(ATTRIBUTE_EMAIL, newEmail);\n }\n\n set firstName(newFirstName: string | undefined) {\n this.updateAttribute(ATTRIBUTE_FIRST_NAME, newFirstName);\n }\n\n set lastName(newLastName: string | undefined) {\n this.updateAttribute(ATTRIBUTE_LAST_NAME, newLastName);\n }\n\n set popUpName(newPopUpName: string | undefined) {\n this.updateAttribute(ATTRIBUTE_POP_UP_NAME, newPopUpName);\n }\n\n set popUpFeatures(newPopUpFeatures: string | undefined) {\n this.updateAttribute(ATTRIBUTE_POP_UP_FEATURES, newPopUpFeatures);\n }\n\n connectedCallback(): void {\n this.#actionType = getValidAttribute(\n this.getAttribute(ATTRIBUTE_ACTION),\n ShopActionType,\n ShopActionType.Default,\n );\n\n this.#actionButton = this._createActionButton({\n actionType: this.#actionType,\n attributes: this._getAttributeValues(),\n });\n if (!this.shadowRoot) {\n this.attachShadow({mode: 'open'});\n }\n if (this.#actionButton) {\n this.shadowRoot!.innerHTML = '';\n this.shadowRoot?.appendChild(this.#actionButton);\n }\n }\n\n disconnectedCallback(): void {}\n\n attributeChangedCallback(\n name: keyof ShopLoginButtonAttributes,\n _oldValue: string,\n newValue: string | null,\n ): void {\n const attributeValue = newValue || this._getAttributeValueWithDefault(name);\n\n if (typeof attributeValue === 'boolean') {\n this.updateAttribute(name, attributeValue ? '' : undefined);\n } else {\n this.updateAttribute(name, attributeValue || undefined);\n }\n\n if (newValue === null) {\n this.#actionButton?.removeAttribute(name);\n } else {\n this.#actionButton?.setAttribute(name, newValue);\n }\n }\n\n requestShow(email: string): void {\n if (this.#actionButton && 'requestShow' in this.#actionButton) {\n this.#actionButton.requestShow(email);\n }\n }\n\n listenToInput(inputElement: HTMLInputElement): void {\n if (this.#actionButton && 'listenToInput' in this.#actionButton) {\n this.#actionButton.listenToInput(inputElement);\n }\n }\n\n stopListeningToInput() {\n if (!(this.#actionButton && 'stopListeningToInput' in this.#actionButton))\n return;\n\n this.#actionButton.stopListeningToInput();\n }\n\n setPasswordManagerDetection(\n passwordManagerDetection: PasswordManagerDetection,\n ) {\n if (\n this.#actionButton &&\n 'setPasswordManagerDetection' in this.#actionButton\n ) {\n this.#actionButton.setPasswordManagerDetection(passwordManagerDetection);\n }\n }\n\n // Overrides to enforce type safety\n protected dispatchCustomEvent(type: ShopLoginEventType, detail?: any): void {\n super.dispatchCustomEvent(type, detail);\n }\n\n private _createActionButton({\n actionType,\n attributes,\n }: {\n actionType: ShopActionType;\n attributes: ShopLoginButtonAttributes;\n }): ShopFollowButton | ShopLoginDefault | undefined {\n const tagName = actionTypeToTagName[actionType];\n if (!tagName) return undefined;\n\n const actionButton = document.createElement(tagName) as\n | ShopFollowButton\n | ShopLoginDefault\n | undefined;\n if (!actionButton) return undefined;\n\n Object.entries(attributes).forEach(([key, value]) => {\n if (value) {\n actionButton.setAttribute(key, String(value));\n }\n });\n\n return actionButton;\n }\n\n private _getAttributeValues() {\n return ShopLoginButton.observedAttributes.reduce(\n (acc, attributeName) => ({\n ...acc,\n [attributeName]: this._getAttributeValueWithDefault(\n attributeName as keyof ShopLoginButtonAttributes,\n ),\n }),\n {\n ...defaultAttributes,\n [ATTRIBUTE_FLOW]: this._getAttributeValueWithDefault(\n ATTRIBUTE_ACTION,\n ) as ShopActionType,\n },\n );\n }\n\n private _getAttributeValueWithDefault<\n TAttributeName extends keyof ShopLoginButtonAttributes,\n >(attributeName: TAttributeName): ShopLoginButtonAttributes[TAttributeName] {\n switch (attributeName) {\n case ATTRIBUTE_ACTION:\n case ATTRIBUTE_FLOW:\n return getValidAttribute(\n this.getAttribute(ATTRIBUTE_ACTION),\n ShopActionType,\n ShopActionType.Default,\n ) as ShopLoginButtonAttributes[TAttributeName];\n case ATTRIBUTE_HIDE_BUTTON:\n case ATTRIBUTE_DISABLE_SIGN_UP:\n case ATTRIBUTE_AUTO_OPEN:\n case ATTRIBUTE_AVOID_PAY_ALT_DOMAIN:\n case ATTRIBUTE_AVOID_SDK_SESSION:\n case ATTRIBUTE_DEV_MODE:\n case ATTRIBUTE_KEEP_MODAL_OPEN:\n case ATTRIBUTE_CONSENT_CHALLENGE:\n case ATTRIBUTE_REQUIRE_VERIFICATION:\n case ATTRIBUTE_COMPACT:\n return this.getBooleanAttribute(\n attributeName,\n ) as ShopLoginButtonAttributes[TAttributeName];\n case ATTRIBUTE_ANALYTICS_CONTEXT:\n case ATTRIBUTE_EMAIL:\n return (this.getAttribute(attributeName) ||\n '') as ShopLoginButtonAttributes[TAttributeName];\n case ATTRIBUTE_FLOW_VERSION:\n return (this.getAttribute(attributeName) ||\n 'unspecified') as ShopLoginButtonAttributes[TAttributeName];\n case ATTRIBUTE_ANALYTICS_TRACE_ID:\n return (this.getAttribute(attributeName) ||\n getAnalyticsTraceId()) as ShopLoginButtonAttributes[TAttributeName];\n default:\n return (this.getAttribute(attributeName) ||\n undefined) as ShopLoginButtonAttributes[TAttributeName];\n }\n }\n}\n\n/**\n * Define the shop-login-button custom element.\n */\nexport function defineElement() {\n defineCustomElement('shop-login-button', ShopLoginButton);\n}\n","import {DefaultComponentAnalyticsContext as AnalyticsContext} from '__deprecated__/constants/loginDefault';\nimport {MonorailSchema} from '__deprecated__/common/analytics';\nimport {produceMonorailEvent} from '__deprecated__/common/analytics/MonorailTracker';\nimport {CloseRequestedReason} from '__deprecated__/types/shopSheetModal';\n\nimport DefaultComponentMonorailTracker from './DefaultComponentMonorailTracker';\n\nexport default class ShopPayCheckoutSheetMonorailTracker extends DefaultComponentMonorailTracker {\n /**\n * @param {object} params The constructor params.\n * @param {string} params.elementName The name of the element (e.g. `shop-pay-button`, `shop-login-button`, `shopify-payment-terms`).\n * @param {string} params.analyticsTraceId A UUID that can correlate all analytics events fired for the same user flow. I.e. Could be\n * used to correlate events between Shop JS and Pay for the Shop Login flow.\n * @param {AnalyticsContext} params.analyticsContext The context of the analytics event.\n * This is used to dismabinuate between different flows that use the same default component.\n * @param {string} params.checkoutVersion A checkout version such as \"classic\" or \"checkout_one_checkout_sheet\"\n * @param {number} params.shopId The numeric id of the shop.\n * @param {number} params.shopPermanentDomain The 'myshopify' domain of the shop.\n * @param {string} params.checkoutToken A checkout token if present.\n */\n constructor({\n elementName,\n analyticsTraceId,\n analyticsContext,\n shopId,\n shopPermanentDomain,\n checkoutToken,\n checkoutVersion,\n }: {\n elementName: string;\n analyticsTraceId: string;\n analyticsContext: AnalyticsContext;\n checkoutVersion: string;\n shopId?: number;\n shopPermanentDomain?: string;\n checkoutToken?: string;\n }) {\n super({\n elementName,\n analyticsTraceId,\n analyticsContext,\n shopId,\n shopPermanentDomain,\n checkoutToken,\n checkoutVersion,\n });\n }\n\n /**\n * Fired when the shop-pay-checkout-sheet is closed\n * @param {CloseRequestedReason} reason The reason the modal was closed\n */\n trackModalClosed(reason?: CloseRequestedReason) {\n const payload = {\n checkoutToken: this._checkoutToken || '',\n shopId: this._shopId,\n shopifyDomain: this._shopPermanentDomain,\n action: getCloseAction(reason || ''),\n checkoutVersion: this._checkoutVersion,\n };\n\n produceMonorailEvent({\n schemaId: MonorailSchema.ShopifyPayPaymentPageUiInteraction,\n payload,\n });\n }\n}\n\n/**\n * @param {string} reason The reason the modal was closed\n * @returns {string} The action to be sent as part of the ShopifyPayPaymentPageUiInteraction monorail event\n */\nfunction getCloseAction(reason: string) {\n return (\n {\n closeButton: 'close_sheet_x_click',\n overlay: 'close_sheet_outside_click',\n keyboard: 'close_sheet_keyboard_click',\n }[reason] ?? 'close_sheet_other'\n );\n}\n","import {pickLogoColor} from './colors';\nimport {defineCustomElement} from './init';\n\nexport class ShopSwirl extends HTMLElement {\n constructor() {\n super();\n\n const template = document.createElement('template');\n const size = this.getAttribute('size');\n // If not specified, will assume a white background and render the purple logo.\n const backgroundColor = this.getAttribute('background-color') || '#FFF';\n\n template.innerHTML = getTemplateContents(\n size ? Number.parseInt(size, 10) : undefined,\n backgroundColor,\n );\n\n this.attachShadow({mode: 'open'}).appendChild(\n template.content.cloneNode(true),\n );\n }\n}\n\n/**\n * @param {number} size size of the logo.\n * @param {string} backgroundColor hex or rgb string for background color.\n * @returns {string} HTML content for the logo.\n */\nfunction getTemplateContents(size = 36, backgroundColor: string) {\n const [red, green, blue] = pickLogoColor(backgroundColor);\n const color = `rgb(${red}, ${green}, ${blue})`;\n const sizeRatio = 23 / 20;\n const height = size;\n const width = Math.round(height / sizeRatio);\n\n return `\n \n \n \n \n `;\n}\n\n/**\n * Define the shop-swirl custom element.\n */\nexport function defineElement() {\n defineCustomElement('shop-swirl', ShopSwirl);\n}\n","import {colors} from '../../../common/colors';\nimport {\n createStatusIndicator,\n ShopStatusIndicator,\n StatusIndicatorLoader,\n} from '../../../common/shop-status-indicator';\nimport {\n AuthorizeState,\n LoginButtonProcessingStatus as ProcessingStatus,\n} from '../../../types';\n\nexport const ELEMENT_CLASS_NAME = 'shop-modal-content';\n\ninterface Content {\n title?: string;\n description?: string;\n disclaimer?: string;\n authorizeState?: AuthorizeState;\n email?: string;\n status?: ProcessingStatus;\n}\n\nexport class ModalContent extends HTMLElement {\n #rootElement: ShadowRoot;\n\n // Header Elements\n #headerWrapper!: HTMLDivElement;\n #headerTitle!: HTMLHeadingElement;\n #headerDescription!: HTMLDivElement;\n\n // Main Content Elements\n #contentWrapper!: HTMLDivElement;\n #contentProcessingWrapper!: HTMLDivElement;\n #contentProcessingUser!: HTMLDivElement;\n #contentStatusIndicator?: ShopStatusIndicator;\n #contentChildrenWrapper!: HTMLDivElement;\n\n // Disclaimer Elements\n #disclaimerText!: HTMLDivElement;\n\n // Storage for content\n #contentStore: Content = {};\n\n constructor() {\n super();\n\n const template = document.createElement('template');\n template.innerHTML = getContent();\n this.#rootElement = this.attachShadow({mode: 'open'});\n this.#rootElement.appendChild(template.content.cloneNode(true));\n\n this.#headerWrapper = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}`,\n )!;\n this.#headerTitle = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-title`,\n )!;\n this.#headerDescription = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-description`,\n )!;\n this.#contentWrapper = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-content`,\n )!;\n this.#contentProcessingWrapper = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-processing`,\n )!;\n this.#contentProcessingUser = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-processing-user`,\n )!;\n this.#contentChildrenWrapper = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-children`,\n )!;\n this.#disclaimerText = this.#rootElement.querySelector(\n `.${ELEMENT_CLASS_NAME}-disclaimer`,\n )!;\n }\n\n hideDivider() {\n this.#headerWrapper.classList.add('hide-divider');\n }\n\n showDivider() {\n this.#headerWrapper.classList.remove('hide-divider');\n }\n\n update(content: Content) {\n this.#contentStore = {\n ...this.#contentStore,\n ...content,\n };\n\n this.#updateHeader();\n this.#updateMainContent();\n this.#updateDisclaimer();\n }\n\n #updateHeader() {\n const {title, description, authorizeState} = this.#contentStore;\n const visible = title || description;\n\n this.#headerWrapper.classList.toggle('hidden', !visible);\n this.#headerTitle.classList.toggle('hidden', !title);\n this.#headerDescription.classList.toggle('hidden', !description);\n\n this.#headerTitle.textContent = title || '';\n this.#headerDescription.textContent = description || '';\n\n if (authorizeState) {\n this.#headerWrapper.classList.toggle(\n 'hide-divider',\n authorizeState === AuthorizeState.Start,\n );\n\n this.#headerWrapper.classList.toggle(\n `${ELEMENT_CLASS_NAME}--small`,\n authorizeState === AuthorizeState.Start,\n );\n }\n }\n\n #updateMainContent() {\n const {authorizeState, status, email} = this.#contentStore;\n const contentWrapperVisible = Boolean(authorizeState || status);\n const processingWrapperVisible = Boolean(status && email);\n const childrenWrapperVisible = Boolean(\n contentWrapperVisible && !processingWrapperVisible,\n );\n\n this.#contentWrapper.classList.toggle('hidden', !contentWrapperVisible);\n this.#contentProcessingWrapper.classList.toggle(\n 'hidden',\n !processingWrapperVisible,\n );\n this.#contentChildrenWrapper.classList.toggle(\n 'hidden',\n !childrenWrapperVisible,\n );\n\n if (!this.#contentStatusIndicator && processingWrapperVisible) {\n const loaderType =\n authorizeState === AuthorizeState.OneClick\n ? StatusIndicatorLoader.Branded\n : StatusIndicatorLoader.Regular;\n this.#contentStatusIndicator = createStatusIndicator(loaderType);\n this.#contentProcessingWrapper.appendChild(this.#contentStatusIndicator);\n this.#contentStatusIndicator?.setStatus({\n status: 'loading',\n message: '',\n });\n }\n\n this.#contentProcessingUser.textContent = email || '';\n }\n\n #updateDisclaimer() {\n const {disclaimer} = this.#contentStore;\n const visible = Boolean(disclaimer);\n\n this.#disclaimerText.classList.toggle('hidden', !visible);\n this.#disclaimerText.innerHTML = disclaimer || '';\n }\n}\n\n/**\n * @returns {string} element styles and content\n */\nfunction getContent() {\n return `\n \n
\n

\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n `;\n}\n\nif (!customElements.get('shop-modal-content')) {\n customElements.define('shop-modal-content', ModalContent);\n}\n\n/**\n * helper function which creates a new modal content element\n * @param {object} content modal content\n * @param {boolean} hideDivider whether the bottom divider should be hidden\n * @returns {ModalContent} a new ModalContent element\n */\nexport function createModalContent(\n content: Content,\n hideDivider = false,\n): ModalContent {\n const modalContent = document.createElement(\n 'shop-modal-content',\n ) as ModalContent;\n if (hideDivider) {\n modalContent.hideDivider();\n }\n modalContent.update(content);\n\n return modalContent;\n}\n","import {I18n} from '../../../common/translator/i18n';\nimport {\n ShopLogo,\n createShopHeartIcon,\n ShopHeartIcon,\n} from '../../../common/svg';\nimport Bugsnag from '../../../common/bugsnag';\nimport {calculateContrast, inferBackgroundColor} from '../../../common/colors';\n\nconst ATTRIBUTE_FOLLOWING = 'following';\n\nexport class FollowOnShopButton extends HTMLElement {\n private _rootElement: ShadowRoot | null = null;\n private _button: HTMLButtonElement | null = null;\n private _wrapper: HTMLSpanElement | null = null;\n private _heartIcon: ShopHeartIcon | null = null;\n private _followSpan: HTMLSpanElement | null = null;\n private _followingSpan: HTMLSpanElement | null = null;\n private _i18n: I18n | null = null;\n private _followTextWidth = 0;\n private _followingTextWidth = 0;\n\n constructor() {\n super();\n\n if (!customElements.get('shop-logo')) {\n customElements.define('shop-logo', ShopLogo);\n }\n }\n\n async connectedCallback(): Promise {\n await this._initTranslations();\n this._initElements();\n }\n\n setFollowing({\n following = true,\n skipAnimation = false,\n }: {\n following?: boolean;\n skipAnimation?: boolean;\n }) {\n this._button?.classList.toggle(`button--animating`, !skipAnimation);\n this._button?.classList.toggle(`button--following`, following);\n\n if (this._followSpan !== null && this._followingSpan !== null) {\n this._followSpan.ariaHidden = following ? 'true' : 'false';\n this._followingSpan.ariaHidden = following ? 'false' : 'true';\n }\n\n this.style.setProperty(\n '--button-width',\n `${following ? this._followingTextWidth : this._followTextWidth}px`,\n );\n\n if (\n window.matchMedia(`(prefers-reduced-motion: reduce)`).matches ||\n skipAnimation\n ) {\n this._heartIcon?.setFilled(following);\n } else {\n this._button\n ?.querySelector('.follow-text')\n ?.addEventListener('transitionend', () => {\n this._heartIcon?.setFilled(following);\n });\n }\n }\n\n setFocused() {\n this._button?.focus();\n }\n\n private async _initTranslations() {\n try {\n // BUILD_LOCALE is used for generating localized bundles.\n // See ./scripts/i18n-dynamic-import-replacer-rollup.mjs for more info.\n // eslint-disable-next-line no-process-env\n const locale = process.env.BUILD_LOCALE || I18n.getDefaultLanguage();\n const dictionary = await import(`../translations/${locale}.json`);\n this._i18n = new I18n({[locale]: dictionary});\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n return null;\n }\n\n private _initElements() {\n const template = document.createElement('template');\n template.innerHTML = getTemplateContents();\n\n this._rootElement = this.attachShadow({mode: 'open'});\n this._rootElement.appendChild(template.content.cloneNode(true));\n\n if (this._i18n) {\n const followText = this._i18n.translate('follow_on_shop.follow', {\n shop: getShopLogoHtml('white'),\n });\n const followingText = this._i18n.translate('follow_on_shop.following', {\n shop: getShopLogoHtml('black'),\n });\n this._rootElement.querySelector('slot[name=\"follow-text\"]')!.innerHTML =\n followText;\n this._rootElement.querySelector(\n 'slot[name=\"following-text\"]',\n )!.innerHTML = followingText;\n }\n\n this._button = this._rootElement.querySelector(`.button`)!;\n this._wrapper = this._button.querySelector(`.follow-icon-wrapper`)!;\n this._followSpan = this._rootElement?.querySelector('span.follow-text');\n this._followingSpan = this._rootElement?.querySelector(\n 'span.following-text',\n );\n\n this._heartIcon = createShopHeartIcon();\n this._wrapper.prepend(this._heartIcon);\n\n this._followTextWidth =\n this._rootElement.querySelector('.follow-text')?.scrollWidth || 0;\n this._followingTextWidth =\n this._rootElement.querySelector('.following-text')?.scrollWidth || 0;\n this.style.setProperty(\n '--reserved-width',\n `${Math.max(this._followTextWidth, this._followingTextWidth)}px`,\n );\n\n this.setFollowing({\n following: this.hasAttribute(ATTRIBUTE_FOLLOWING),\n skipAnimation: true,\n });\n\n this._setButtonStyle();\n }\n\n /**\n * Adds extra classes to the parent button component depending on the following calculations\n * 1. If the currently detected background color has a higher contrast ratio with white than black, the \"button--dark\" class will be added\n * 2. If the currently detected background color has a contrast ratio <= 3.06 ,the \"button--bordered\" class will be added\n *\n * When the \"button--dark\" class is added, the \"following\" text and shop logo should be changed to white.\n * When the \"button--bordered\" class is added, the button should have a border.\n */\n private _setButtonStyle() {\n const background = inferBackgroundColor(this);\n const isDark =\n calculateContrast(background, '#ffffff') >\n calculateContrast(background, '#000000');\n const isBordered = calculateContrast(background, '#5433EB') <= 3.06;\n\n this._button?.classList.toggle('button--dark', isDark);\n this._button?.classList.toggle('button--bordered', isBordered);\n\n if (isDark && this._i18n) {\n const followingText = this._i18n.translate('follow_on_shop.following', {\n shop: getShopLogoHtml('white'),\n });\n this._rootElement!.querySelector(\n 'slot[name=\"following-text\"]',\n )!.innerHTML = followingText;\n }\n }\n}\n\nif (!customElements.get('follow-on-shop-button')) {\n customElements.define('follow-on-shop-button', FollowOnShopButton);\n}\n\n/**\n * Get the template contents for the follow on shop trigger button.\n * @returns {string} string The template for the follow on shop trigger button\n */\nfunction getTemplateContents() {\n return `\n \n \n `;\n}\n\n/**\n * helper function to create a follow on shop trigger button\n * @param {string} color The color of the Shop logo.\n * @returns {string} The HTML for the Shop logo in the Follow on Shop button.\n */\nexport function getShopLogoHtml(color: string): string {\n return ``;\n}\n\n/**\n * helper function for building a Follow on Shop Button\n * @param {boolean} following Whether the user is following the shop.\n * @returns {FollowOnShopButton} - a Follow on Shop Button\n */\nexport function createFollowButton(following: boolean): FollowOnShopButton {\n const element = document.createElement('follow-on-shop-button');\n\n if (following) {\n element.setAttribute(ATTRIBUTE_FOLLOWING, '');\n }\n\n return element as FollowOnShopButton;\n}\n","import {createShopHeartIcon, ShopHeartIcon} from '../../../common/svg';\nimport {colors} from '../../../common/colors';\n\nexport const ELEMENT_NAME = 'store-logo';\n\nexport class StoreLogo extends HTMLElement {\n #rootElement: ShadowRoot;\n #wrapper: HTMLDivElement;\n #logoWrapper: HTMLDivElement;\n #logoImg: HTMLImageElement;\n #logoText: HTMLSpanElement;\n #heartIcon: ShopHeartIcon;\n\n #storeName = '';\n #logoSrc = '';\n\n constructor() {\n super();\n\n const template = document.createElement('template');\n template.innerHTML = getContent();\n this.#rootElement = this.attachShadow({mode: 'open'});\n this.#rootElement.appendChild(template.content.cloneNode(true));\n\n this.#wrapper = this.#rootElement.querySelector(`.${ELEMENT_NAME}`)!;\n this.#logoWrapper = this.#rootElement.querySelector(\n `.${ELEMENT_NAME}-logo-wrapper`,\n )!;\n this.#logoImg = this.#logoWrapper.querySelector('img')!;\n this.#logoText = this.#logoWrapper.querySelector('span')!;\n\n this.#heartIcon = createShopHeartIcon();\n this.#rootElement\n .querySelector(`.${ELEMENT_NAME}-icon-wrapper`)!\n .append(this.#heartIcon);\n }\n\n update({name, logoSrc}: {name?: string; logoSrc?: string}) {\n this.#storeName = name || this.#storeName;\n this.#logoSrc = logoSrc || this.#logoSrc;\n\n this.#updateDom();\n }\n\n connectedCallback() {\n this.#logoImg.addEventListener('error', () => {\n this.#logoSrc = '';\n this.#updateDom();\n });\n }\n\n setFavorited() {\n this.#wrapper.classList.add(`${ELEMENT_NAME}--favorited`);\n\n if (window.matchMedia(`(prefers-reduced-motion: reduce)`).matches) {\n this.#heartIcon.setFilled();\n return Promise.resolve();\n } else {\n return new Promise((resolve) => {\n this.#heartIcon.addEventListener('animationstart', () => {\n this.#heartIcon.setFilled();\n });\n\n this.#heartIcon.addEventListener('animationend', () => {\n setTimeout(resolve, 1000);\n });\n });\n }\n }\n\n #updateDom() {\n const name = this.#storeName;\n const currentLogoSrc = this.#logoImg.src;\n\n this.#logoText.textContent = name.charAt(0);\n this.#logoText.ariaLabel = name;\n\n if (this.#logoSrc && this.#logoSrc !== currentLogoSrc) {\n this.#logoImg.src = this.#logoSrc;\n this.#logoImg.alt = name;\n this.#logoWrapper.classList.remove(`${ELEMENT_NAME}-logo-wrapper--text`);\n this.#logoWrapper.classList.add(`${ELEMENT_NAME}-logo-wrapper--image`);\n } else if (!this.#logoSrc) {\n this.#logoWrapper.classList.remove(`${ELEMENT_NAME}-logo-wrapper--image`);\n this.#logoWrapper.classList.add(`${ELEMENT_NAME}-logo-wrapper--text`);\n }\n }\n}\n\n/**\n * @returns {string} the HTML content for the StoreLogo\n */\nfunction getContent() {\n return `\n \n
\n
\n \"\"\n \n
\n
\n
\n `;\n}\n\nif (!customElements.get(ELEMENT_NAME)) {\n customElements.define(ELEMENT_NAME, StoreLogo);\n}\n\n/**\n * helper function to create a new store logo component\n * @returns {StoreLogo} a new StoreLogo element\n */\nexport function createStoreLogo() {\n const storeLogo = document.createElement(ELEMENT_NAME) as StoreLogo;\n\n return storeLogo;\n}\n","import {constraintWidthInViewport} from '__deprecated__/common/utils/constraintWidthInViewport';\nimport {ShopifyPayModalState} from '__deprecated__/common/analytics';\nimport {StorageManager} from '__deprecated__/common/utils/storageManager';\n\nimport {PayMessageSender} from '../../common/MessageSender';\nimport {defineCustomElement} from '../../common/init';\nimport {StoreMetadata} from '../../common/utils/types';\nimport Bugsnag from '../../common/bugsnag';\nimport {IFrameEventSource} from '../../common/MessageEventSource';\nimport MessageListener from '../../common/MessageListener';\nimport {ShopSheetModal} from '../../common/shop-sheet-modal/shop-sheet-modal';\nimport {\n PAY_AUTH_DOMAIN,\n PAY_AUTH_DOMAIN_ALT,\n SHOP_WEBSITE_DOMAIN,\n validateStorefrontOrigin,\n} from '../../common/utils/urls';\nimport {I18n} from '../../common/translator/i18n';\nimport {\n exchangeLoginCookie,\n getAnalyticsTraceId,\n getStoreMeta,\n isMobileBrowser,\n updateAttribute,\n ShopHubTopic,\n removeOnePasswordPrompt,\n} from '../../common/utils';\nimport ConnectedWebComponent from '../../common/ConnectedWebComponent';\nimport {\n sheetModalBuilder,\n SheetModalManager,\n} from '../../common/shop-sheet-modal/shop-sheet-modal-builder';\nimport {\n AuthorizeState,\n LoginButtonCompletedEvent as CompletedEvent,\n LoginButtonMessageEventData as MessageEventData,\n OAuthParams,\n OAuthParamsV1,\n ShopActionType,\n LoginButtonVersion as Version,\n SdkErrorCode,\n} from '../../types';\nimport {\n ATTRIBUTE_CLIENT_ID,\n ATTRIBUTE_STOREFRONT_ORIGIN,\n ATTRIBUTE_VERSION,\n ERRORS,\n LOAD_TIMEOUT_MS,\n ATTRIBUTE_DEV_MODE,\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n} from '../../constants/loginButton';\nimport {\n createGetAppButtonHtml,\n createScanCodeTooltipHtml,\n SHOP_FOLLOW_BUTTON_HTML,\n} from '../../constants/followButton';\n\nimport {FollowOnShopMonorailTracker} from './analytics';\nimport {createModalContent, ModalContent} from './components/modal-content';\nimport {buildAuthorizeUrl} from './authorize';\nimport {\n createFollowButton,\n FollowOnShopButton,\n} from './components/follow-on-shop-button';\nimport {createStoreLogo, StoreLogo} from './components/store-logo';\n\nenum ModalOpenStatus {\n Closed = 'closed',\n Mounting = 'mounting',\n Open = 'open',\n}\n\nexport default class ShopFollowButton extends ConnectedWebComponent {\n #rootElement: ShadowRoot;\n #analyticsTraceId = getAnalyticsTraceId();\n #clientId = '';\n #version: Version = '2';\n #storefrontOrigin = window.location.origin;\n #devMode = false;\n #monorailTracker = new FollowOnShopMonorailTracker({\n elementName: 'shop-follow-button',\n analyticsTraceId: this.#analyticsTraceId,\n });\n\n #buttonInViewportObserver: IntersectionObserver | undefined;\n\n #followShopButton: FollowOnShopButton | undefined;\n #isFollowing = false;\n #storefrontMeta: StoreMetadata | null = null;\n\n #iframe: HTMLIFrameElement | undefined;\n #iframeListener: MessageListener | undefined;\n #iframeMessenger: PayMessageSender | undefined;\n #iframeLoadTimeout: ReturnType | undefined;\n\n #authorizeModalManager: SheetModalManager | undefined;\n #followModalManager: SheetModalManager | undefined;\n\n #authorizeModal: ShopSheetModal | undefined;\n #authorizeLogo: StoreLogo | undefined;\n #authorizeModalContent: ModalContent | undefined;\n #authorizeModalOpenedStatus: ModalOpenStatus = ModalOpenStatus.Closed;\n #followedModal: ShopSheetModal | undefined;\n #followedModalContent: ModalContent | undefined;\n #followedTooltip: HTMLDivElement | undefined;\n #storageManager = new StorageManager('following', false);\n\n #i18n: I18n | null = null;\n\n #error = '';\n\n static get observedAttributes(): string[] {\n return [\n ATTRIBUTE_CLIENT_ID,\n ATTRIBUTE_VERSION,\n ATTRIBUTE_STOREFRONT_ORIGIN,\n ATTRIBUTE_DEV_MODE,\n ];\n }\n\n constructor() {\n super();\n\n this.#rootElement = this.attachShadow({mode: 'open'});\n this.#isFollowing = this.#storageManager.value;\n }\n\n #handleUserIdentityChange = () => {\n this.#updateSrc(true);\n };\n\n attributeChangedCallback(\n name: string,\n _oldValue: string,\n newValue: string,\n ): void {\n switch (name) {\n case ATTRIBUTE_VERSION:\n this.#version = newValue as Version;\n this.#updateSrc();\n break;\n case ATTRIBUTE_CLIENT_ID:\n this.#clientId = newValue;\n this.#updateSrc();\n break;\n case ATTRIBUTE_STOREFRONT_ORIGIN:\n this.#storefrontOrigin = newValue;\n validateStorefrontOrigin(this.#storefrontOrigin);\n break;\n case ATTRIBUTE_DEV_MODE:\n this.#devMode = newValue === 'true';\n this.#updateSrc();\n break;\n }\n }\n\n async connectedCallback(): Promise {\n this.subscribeToHub(\n ShopHubTopic.UserStatusIdentity,\n this.#handleUserIdentityChange,\n );\n\n await this.#initTranslations();\n this.#initElements();\n this.#initEvents();\n }\n\n async #initTranslations() {\n try {\n // BUILD_LOCALE is used for generating localized bundles.\n // See ./scripts/i18n-dynamic-import-replacer-rollup.mjs for more info.\n // eslint-disable-next-line no-process-env\n const locale = process.env.BUILD_LOCALE || I18n.getDefaultLanguage();\n const dictionary = await import(`./translations/${locale}.json`);\n this.#i18n = new I18n({[locale]: dictionary});\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n return null;\n }\n\n #initElements() {\n this.#followShopButton = createFollowButton(this.#isFollowing);\n this.#rootElement.innerHTML = SHOP_FOLLOW_BUTTON_HTML;\n this.#rootElement.appendChild(this.#followShopButton);\n }\n\n #initEvents() {\n this.#trackComponentLoadedEvent(this.#isFollowing);\n this.#trackComponentInViewportEvent();\n\n validateStorefrontOrigin(this.#storefrontOrigin);\n this.#followShopButton?.addEventListener('click', () => {\n // dev mode\n if (this.#devMode) {\n this.#isFollowing = !this.#isFollowing;\n this.#followShopButton?.setFollowing({\n following: this.#isFollowing,\n });\n return;\n }\n\n if (this.#isFollowing) {\n this.#monorailTracker.trackFollowingGetAppButtonPageImpression();\n\n if (isMobileBrowser()) {\n this.#createAndOpenAlreadyFollowingModal();\n } else {\n this.#createAlreadyFollowingTooltip();\n }\n } else {\n this.#monorailTracker.trackFollowButtonClicked();\n this.#createAndOpenFollowOnShopModal();\n }\n });\n }\n\n disconnectedCallback(): void {\n this.unsubscribeAllFromHub();\n this.#iframeListener?.destroy();\n this.#buttonInViewportObserver?.disconnect();\n this.#authorizeModalManager?.destroy();\n this.#followModalManager?.destroy();\n }\n\n #createAndOpenFollowOnShopModal() {\n if (this.#authorizeModal) {\n this.#openAuthorizeModal();\n return;\n }\n\n this.#authorizeLogo = this.#createStoreLogo();\n this.#authorizeModalContent = createModalContent({});\n this.#authorizeModalContent.append(this.#createIframe());\n\n this.#authorizeModalManager = sheetModalBuilder()\n .withInnerHTML(SHOP_FOLLOW_BUTTON_HTML)\n .build();\n this.#authorizeModalManager.setNametagSuffix('follow');\n this.#authorizeModal = this.#authorizeModalManager.sheetModal;\n this.#authorizeModal.setAttribute(\n ATTRIBUTE_ANALYTICS_TRACE_ID,\n this.#analyticsTraceId,\n );\n this.#authorizeModal.appendChild(this.#authorizeLogo);\n this.#authorizeModal.appendChild(this.#authorizeModalContent);\n this.#authorizeModal.addEventListener(\n 'modalcloserequest',\n this.#closeAuthorizeModal.bind(this),\n );\n\n this.#authorizeModal.setMonorailTracker(this.#monorailTracker);\n this.#authorizeModalOpenedStatus = ModalOpenStatus.Mounting;\n }\n\n async #createAndOpenAlreadyFollowingModal() {\n if (!this.#followedModal) {\n this.#followModalManager = sheetModalBuilder()\n .withInnerHTML(SHOP_FOLLOW_BUTTON_HTML)\n .build();\n this.#followModalManager.setNametagSuffix('followed');\n this.#followedModal = this.#followModalManager.sheetModal;\n this.#followedModal.setMonorailTracker(this.#monorailTracker);\n this.#followedModal.setAttribute('disable-popup', 'true');\n const storeMeta = await this.#fetchStorefrontMetadata();\n const storeName = storeMeta?.name ?? 'the store';\n const title = this.#i18n?.translate(\n 'follow_on_shop.following_modal.title',\n {store: storeName},\n );\n const description = this.#i18n?.translate(\n 'follow_on_shop.following_modal.subtitle',\n );\n this.#followedModalContent = createModalContent(\n {\n title,\n description,\n },\n true,\n );\n this.#followedModal.appendChild(this.#followedModalContent);\n this.#followedModal.appendChild(\n await this.#createAlreadyFollowingModalButton(),\n );\n this.#followedModal.addEventListener('modalcloserequest', async () => {\n if (this.#followedModal) {\n await this.#followedModal.close();\n }\n this.#followShopButton?.setFocused();\n });\n\n if (title) {\n this.#followedModal.setAttribute('title', title);\n }\n }\n\n this.#followedModal.open();\n this.#monorailTracker.trackFollowingGetAppButtonPageImpression();\n }\n\n #createStoreLogo(): StoreLogo {\n const storeLogo = createStoreLogo();\n\n this.#fetchStorefrontMetadata()\n .then((storefrontMeta) => {\n storeLogo.update({\n name: storefrontMeta?.name || '',\n logoSrc: storefrontMeta?.id\n ? `${SHOP_WEBSITE_DOMAIN}/shops/${storefrontMeta.id}/logo?width=58`\n : '',\n });\n })\n .catch(() => {\n /** no-op */\n });\n\n return storeLogo;\n }\n\n #createIframe(): HTMLIFrameElement {\n this.#iframe = document.createElement('iframe');\n this.#iframe.tabIndex = 0;\n this.#updateSrc();\n\n const eventDestination: Window | undefined =\n this.ownerDocument?.defaultView || undefined;\n\n this.#iframeListener = new MessageListener(\n new IFrameEventSource(this.#iframe),\n [PAY_AUTH_DOMAIN, PAY_AUTH_DOMAIN_ALT, this.#storefrontOrigin],\n this.#handlePostMessage.bind(this),\n eventDestination,\n );\n this.#iframeMessenger = new PayMessageSender(this.#iframe);\n\n updateAttribute(this.#iframe, 'allow', 'publickey-credentials-get *');\n\n return this.#iframe;\n }\n\n async #createAlreadyFollowingModalButton(): Promise {\n const buttonWrapper = document.createElement('div');\n const storeMeta = await this.#fetchStorefrontMetadata();\n const storeId = storeMeta?.id;\n\n const buttonText =\n this.#i18n?.translate('follow_on_shop.following_modal.continue', {\n defaultValue: 'Continue',\n }) ?? '';\n const buttonLink = storeId ? `https://shop.app/sid/${storeId}` : '#';\n buttonWrapper.innerHTML = createGetAppButtonHtml(buttonLink, buttonText);\n buttonWrapper.addEventListener('click', async () => {\n this.#monorailTracker.trackFollowingGetAppButtonClicked();\n this.#followedModal?.close();\n });\n return buttonWrapper;\n }\n\n async #createAlreadyFollowingTooltip() {\n if (!this.#followedTooltip) {\n this.#followedTooltip = document.createElement('div');\n this.#followedTooltip.classList.add('fos-tooltip', 'fos-tooltip-hidden');\n\n const storeMeta = await this.#fetchStorefrontMetadata();\n const storeName = storeMeta?.name ?? 'the store';\n const description =\n this.#i18n?.translate('follow_on_shop.following_modal.qr_header', {\n store: storeName,\n }) ?? '';\n const qrCodeAltText =\n this.#i18n?.translate('follow_on_shop.following_modal.qr_alt_text') ??\n '';\n const storeId = storeMeta?.id;\n const qrCodeUrl = storeId\n ? `${SHOP_WEBSITE_DOMAIN}/qr/sid/${storeId}`\n : `#`;\n this.#followedTooltip.innerHTML = createScanCodeTooltipHtml(\n description,\n qrCodeUrl,\n qrCodeAltText,\n );\n\n this.#followedTooltip\n .querySelector('.fos-tooltip-overlay')\n ?.addEventListener('click', () => {\n this.#followedTooltip?.classList.toggle('fos-tooltip-hidden', true);\n });\n this.#followedTooltip?.addEventListener('click', () => {\n this.#followedTooltip?.classList.toggle('fos-tooltip-hidden', true);\n });\n\n this.#rootElement.appendChild(this.#followedTooltip);\n }\n\n this.#followedTooltip.classList.toggle('fos-tooltip-hidden', false);\n }\n\n #updateSrc(forced?: boolean) {\n if (this.#iframe) {\n const oauthParams: OAuthParams | OAuthParamsV1 = {\n clientId: this.#clientId,\n responseType: 'code',\n };\n const authorizeUrl = buildAuthorizeUrl({\n version: this.#version,\n analyticsTraceId: this.#analyticsTraceId,\n flow: ShopActionType.Follow,\n error: this.#error,\n oauthParams,\n });\n\n this.#initLoadTimeout();\n updateAttribute(this.#iframe, 'src', authorizeUrl, forced);\n Bugsnag.leaveBreadcrumb('Iframe url updated', {authorizeUrl}, 'state');\n }\n }\n\n #initLoadTimeout() {\n this.#clearLoadTimeout();\n this.#iframeLoadTimeout = setTimeout(() => {\n const error = ERRORS.temporarilyUnavailable;\n this.dispatchCustomEvent('error', {\n message: error.message,\n code: error.code,\n });\n // eslint-disable-next-line no-warning-comments\n // TODO: replace this bugsnag notify with a Observe-able event\n // Bugsnag.notify(\n // new PayTimeoutError(`Pay failed to load within ${LOAD_TIMEOUT_MS}ms.`),\n // {component: this.#component, src: this.iframe?.getAttribute('src')},\n // );\n this.#clearLoadTimeout();\n }, LOAD_TIMEOUT_MS);\n }\n\n #clearLoadTimeout() {\n if (!this.#iframeLoadTimeout) return;\n clearTimeout(this.#iframeLoadTimeout);\n this.#iframeLoadTimeout = undefined;\n }\n\n #trackComponentLoadedEvent(isFollowing: boolean) {\n this.#monorailTracker.trackFollowButtonPageImpression(isFollowing);\n }\n\n #trackComponentInViewportEvent() {\n this.#buttonInViewportObserver = new IntersectionObserver((entries) => {\n for (const {isIntersecting} of entries) {\n if (isIntersecting) {\n this.#buttonInViewportObserver?.disconnect();\n this.#monorailTracker.trackFollowButtonInViewport();\n }\n }\n });\n\n this.#buttonInViewportObserver.observe(this.#followShopButton!);\n }\n\n async #fetchStorefrontMetadata() {\n if (!this.#storefrontMeta) {\n this.#storefrontMeta = await getStoreMeta(this.#storefrontOrigin);\n }\n\n return this.#storefrontMeta;\n }\n\n async #handleCompleted({\n loggedIn,\n shouldFinalizeLogin,\n email,\n givenNameFirstInitial,\n avatar,\n }: Partial) {\n this.#storageManager.set(true);\n\n if (loggedIn) {\n if (shouldFinalizeLogin) {\n exchangeLoginCookie(this.#storefrontOrigin, (error) => {\n Bugsnag.notify(new Error(error));\n });\n\n this.publishToHub(ShopHubTopic.UserSessionCreate, {\n email: givenNameFirstInitial || email,\n initial: givenNameFirstInitial || email?.[0] || '',\n avatar,\n });\n }\n }\n\n this.dispatchCustomEvent('completed', {\n loggedIn,\n email,\n });\n\n await this.#authorizeLogo?.setFavorited();\n await this.#authorizeModal?.close();\n this.#iframeListener?.destroy();\n this.#followShopButton?.setFollowing({following: true});\n this.#isFollowing = true;\n this.#trackComponentLoadedEvent(true);\n }\n\n #handleError(code: string, message: string, email?: string): void {\n this.#clearLoadTimeout();\n\n if (code === SdkErrorCode.RetriableServerError) {\n // this will render an iframe with continue as button\n this.#authorizeModalContent?.update({\n status: undefined,\n });\n\n this.#error = code;\n this.#updateSrc(true);\n }\n\n this.dispatchCustomEvent('error', {\n code,\n message,\n email,\n });\n }\n\n async #handleLoaded({\n clientName,\n logoSrc,\n }: {\n clientName?: string;\n logoSrc?: string;\n }) {\n if (clientName || logoSrc) {\n this.#authorizeLogo!.update({\n name: clientName,\n logoSrc,\n });\n }\n\n this.#monorailTracker.trackShopPayModalStateChange({\n currentState: ShopifyPayModalState.Loaded,\n });\n\n if (this.#authorizeModalOpenedStatus === ModalOpenStatus.Mounting) {\n this.#openAuthorizeModal();\n this.#authorizeModalOpenedStatus = ModalOpenStatus.Open;\n this.#clearLoadTimeout();\n }\n }\n\n async #openAuthorizeModal() {\n const result = await this.#authorizeModal!.open();\n if (result) {\n this.#iframeMessenger?.postMessage({\n type: 'sheetmodalopened',\n });\n }\n }\n\n async #closeAuthorizeModal() {\n if (this.#authorizeModal) {\n const result = await this.#authorizeModal.close();\n if (result) {\n this.#iframeMessenger?.postMessage({type: 'sheetmodalclosed'});\n // Remove the 1password custom element from the DOM after the sheet modal is closed.\n removeOnePasswordPrompt();\n }\n }\n this.#followShopButton?.setFocused();\n }\n\n #handlePostMessage(data: MessageEventData) {\n switch (data.type) {\n case 'loaded':\n this.#handleLoaded(data);\n break;\n case 'resize_iframe':\n this.#iframe!.style.height = `${data.height}px`;\n this.#iframe!.style.width = `${constraintWidthInViewport(data.width, this.#iframe!)}px`;\n break;\n case 'completed':\n this.#handleCompleted(data as CompletedEvent);\n break;\n case 'error':\n this.#handleError(data.code, data.message, data.email);\n break;\n case 'content':\n this.#authorizeModal?.setAttribute('title', data.title);\n this.#authorizeModalContent?.update(data);\n this.#authorizeLogo?.classList.toggle(\n 'hidden',\n data.authorizeState === AuthorizeState.Captcha,\n );\n break;\n case 'processing_status_updated':\n this.#authorizeModalContent?.update(data);\n break;\n case 'close_requested':\n this.#closeAuthorizeModal();\n break;\n }\n }\n}\n\n/**\n * Define the shop-follow-button custom element.\n */\nexport function defineElement() {\n defineCustomElement('shop-follow-button', ShopFollowButton);\n}\n","import {startBugsnag, isBrowserSupported} from '../../common/init';\nimport {defineElement as defineShopSwirl} from '../../common/shop-swirl';\n\nimport {defineElement as defineShopFollowButton} from './shop-follow-button';\nimport {defineElement as defineShopLoginButton} from './shop-login-button';\nimport {defineElement as defineShopLoginDefault} from './shop-login-default';\n\n/**\n * Initialize the login button web components.\n * This is the entry point that will be used for code-splitting.\n */\nfunction init() {\n if (!isBrowserSupported()) return;\n // eslint-disable-next-line no-process-env\n startBugsnag({bundle: 'loginButton', bundleLocale: process.env.BUILD_LOCALE});\n\n // The order of these calls is not significant. However, it is worth noting that\n // ShopFollowButton and ShopLoginDefault all rely on the ShopLoginButton.\n // To ensure that the ShopLoginButton is available when the other components are\n // defined, we prioritize defining the ShopLoginButton first.\n defineShopLoginButton();\n defineShopFollowButton();\n defineShopLoginDefault();\n defineShopSwirl();\n}\n\ninit();\n"],"names":["FollowOnShopMonorailTracker","MonorailTrackerBase","constructor","elementName","analyticsTraceId","super","flow","SHOP_FOLLOW_FLOW","trackFollowButtonPageImpression","isFollowing","this","trackPageImpression","page","LoginWithShopSdkPageName","ComponentLoadedFollowing","ComponentLoadedNotFollowing","trackFollowButtonInViewport","FollowButtonShownInViewport","trackFollowingGetAppButtonPageImpression","FollowingGetShopAppCta","trackFollowButtonClicked","trackShopPayLoginWithShopSdkUserAction","userAction","LoginWithShopSdkUserAction","FollowOnShopClicked","trackFollowingGetAppButtonClicked","FollowingGetShopAppClick","DefaultComponentMonorailTracker","analyticsContext","AnalyticsContext","Default","flowVersion","checkoutVersion","checkoutToken","shopId","shopPermanentDomain","ANALYTICS_CONTEXT_TO_FLOW_MAP","_emailEnteredUserActionTracked","_passwordManagerAutofillDetected","trackLoginDefaultButtonClicked","SignInWithShopClicked","trackEmailEnteredAction","EmailEntered","trackPasswordManagerAutofillDetected","PasswordManagerAutofillDetected","ClassicCustomerAccountsMonorailTracker","ClassicCustomerAccounts","trackClassicCustomerAccountsLoginPageImpression","ClassicCustomerAccountLogin","trackClassicCustomerAccountsCreateAccountPageImpression","ClassicCustomerAccountCreateAccount","trackClassicCustomerAccountsAccountPageImpression","ClassicCustomerAccount","trackClassicCustomerAccountsContinueWithShopPageImpression","ContinueWithShop","trackClassicCustomerAccountsCreateAccountAction","CreateAccountLinkClicked","AUTH_DOMAIN_CORE","window","location","origin","getCoreAuthDomain","buildAuthorizeUrl","version","apiKey","isCompactLayout","isFullView","signUpEnabled","oauthParams","avoidPayAltDomain","avoidSdkSession","hideCopy","modalCustomized","popupWindowParams","consentChallenge","checkoutRedirectUrl","transactionParams","requireVerification","uxMode","error","Boolean","undefined","clientId","isOAuthParamsV1","redirectType","scope","responseType","responseMode","redirect","redirectUri","popUpName","popUpFeatures","_hideCopy","params","URLSearchParams","Object","assign","target_origin","response_mode","response_type","client_id","redirect_type","redirect_uri","locale","analytics_trace_id","analytics_context","booleanQueryParam","flow_version","codeChallenge","code_challenge","codeChallengeMethod","code_challenge_method","state","checkout_version","checkout_token","transaction_params","shop_id","pop_up_name","pop_up_features","PAY_AUTH_DOMAIN","buildPayAuthorizeUrl","api_key","checkout_redirect_url","buildCoreAuthorizeUrl","LoginWithShopButton","HTMLElement","_LoginWithShopButton_rootElement","set","_LoginWithShopButton_i18n","customElements","get","define","ShopLogo","connectedCallback","__classPrivateFieldGet","_LoginWithShopButton_instances","_LoginWithShopButton_initTranslations","call","shadowRoot","template","document","createElement","innerHTML","getShopLogoHtml","__classPrivateFieldSet","attachShadow","mode","appendChild","content","cloneNode","loginText","translate","shop","querySelector","setFocused","_b","_a","focus","color","dictionary","I18n","Error","Bugsnag","notify","sanitizeModalText","text","DOMPurify","isSupported","sanitize","ALLOWED_TAGS","DEFAULT_STATE","step","AuthorizeModalTextStep","Start","configurable","headerVisible","headerDividerVisible","headerTemplate","descriptionTemplate","userNameKnown","sessionDetected","templateVariables","clientName","store","defaultPhoneAuthReducer","action","type","AuthorizeModalTextActionType","Init","payload","personalizeConsentChallenge","PersonalizeConsent","userFound","OneClick","PopUpOpened","Restart","email","phoneNumber","UserMatched","hasName","userCookieExists","UserNotMatched","SignUp","VerificationStepChanged","phone","verificationStepToModalStep","replaceAll","legalTextVariant","legalTextTemplate","EmailVerification","WebAuthnVerification","PhoneVerification","LoginDefaultView","_sheetModal","_sheetModalManager","sheetModal","rootElement","options","_isCompact","_isHeaderless","_analyticsContext","DefaultComponentAnalyticsContext","_flowVersion","_authenticationLevel","AuthenticationLevel","Phone","_state","_rootElement","sheetModalBuilder","build","onOpen","_onOpen","onClose","_onClose","setCompact","value","setHeaderless","init","attributes","getModalAttributes","copyTemplateToDom","getShopLoginDefaultTemplate","_modalHeader","HEADER_CLASS_NAME","_footerElement","FOOTER_CLASS_NAME","_footerContent","FOOTER_CONTENT_CLASS_NAME","_iframe","IFRAME_CLASS_NAME","addEventListener","eventDetails","__awaiter","closeAuthorizeModal","detail","setAttribute","ATTRIBUTE_COMPACT","setMonorailTracker","_monorailTracker","classList","add","IFRAME_COMPACT_CLASS_NAME","parentNode","removeChild","_d","_c","updateAttribute","setModalAnalyticsTraceId","ATTRIBUTE_ANALYTICS_TRACE_ID","setModalPositionVariant","variant","ATTRIBUTE_POSITION_VARIANT","showModal","open","refreshHeaderIframeHeight","openAuthorizeModal","AuthorizeModal","reason","close","_continueButton","destroy","setContinueButtonVisible","isVisible","remove","_uxMode","_authorizeUrl","href","SignInWithShopButton","monorailTracker","setAnalyticsContext","setFlowVersion","getUxMode","setUxMode","setAuthorizeUrl","authorizeUrl","setAuthenticationLevel","authenticationLevel","onContentLoaded","setFlow","_flow","setNametagSuffix","getIframe","setAnchorSelector","anchorSelector","ATTRIBUTE_ANCHOR_SELECTOR","setBrand","brand","resizeIframe","height","width","style","constraintWidthInViewport","render","setHeaderVisible","setHeaderDividerVisible","_modalLogoSrc","updateHeaderLogo","renderHeaderTemplate","renderHeaderDescriptionTemplate","renderFooterContent","dispatch","CheckoutExtension","newState","defaultEmailAuthReducer","classicCustomerAccountsSignUpReducer","CheckoutModal","checkoutModalReducer","PaymentRequest","paymentRequestReducer","src","_headerLogo","firstChild","_headerContentsContainer","insertBefore","maxHeight","headerTitle","_modalTitle","replace","message","includes","_i18n","_headerTitle","textContent","headerDescription","_modalDescription","_headerDescription","privacyPolicyUrl","termsOfServiceUrl","authorizeText","privacyPolicy","termsOfService","shopTermsOfServiceLink","privacyPolicyLink","setFooterVisible","toggle","HIDDEN_ELEMENT_CLASS_NAME","_headerIframe","headerContainerIframeBody","contentDocument","HEADER_STYLE","HEADER_CONTENTS_CONTAINER_CLASS_NAME","HEADER_TITLE_CLASS_NAME","HEADER_DESCRIPTION_CLASS_NAME","display","flexDirection","ResizeObserver","_headerResizeObserver","observe","heightStyle","getBoundingClientRect","HEADER_DIVIDER_CLASS_NAME","setCloseButtonVisible","setCloseButtonVisibility","setCustomizedModalContent","modalTitle","modalDescription","modalLogo","sanitizeModalCustomization","getCustomizedModalContent","setTranslations","i18n","isModalCustomized","attributeNames","getAttributeNames","updateAttributeConditionally","ATTRIBUTE_HEADERLESS","map","name","getAttribute","join","CONTEXTS_SERVING_COPY_FROM_SHOP_JS","SILENT_SDK_ERROR_CODES","SdkErrorCode","CaptchaChallenge","ShopLoginDefault","ConnectedWebComponent","observedAttributes","ATTRIBUTE_CLIENT_ID","ATTRIBUTE_VERSION","ATTRIBUTE_STOREFRONT_ORIGIN","ATTRIBUTE_HIDE_BUTTON","ATTRIBUTE_DISABLE_SIGN_UP","ATTRIBUTE_AUTO_OPEN","ATTRIBUTE_REDIRECT_TYPE","ATTRIBUTE_REDIRECT_URI","ATTRIBUTE_UX_MODE","ATTRIBUTE_ANALYTICS_CONTEXT","ATTRIBUTE_RESPONSE_TYPE","ATTRIBUTE_RESPONSE_MODE","ATTRIBUTE_CODE_CHALLENGE","ATTRIBUTE_CODE_CHALLENGE_METHOD","ATTRIBUTE_STATE","ATTRIBUTE_SCOPE","ATTRIBUTE_AVOID_PAY_ALT_DOMAIN","ATTRIBUTE_AVOID_SDK_SESSION","ATTRIBUTE_FLOW","ATTRIBUTE_FLOW_VERSION","ATTRIBUTE_EMAIL","ATTRIBUTE_MODAL_TITLE","ATTRIBUTE_MODAL_DESCRIPTION","ATTRIBUTE_MODAL_LOGO_SRC","ATTRIBUTE_API_KEY","ATTRIBUTE_POP_UP_NAME","ATTRIBUTE_POP_UP_FEATURES","ATTRIBUTE_MODAL_BRAND","ATTRIBUTE_CONSENT_CHALLENGE","ATTRIBUTE_CHECKOUT_REDIRECT_URL","ATTRIBUTE_CHECKOUT_VERSION","ATTRIBUTE_CHECKOUT_TOKEN","ATTRIBUTE_TRANSACTION_PARAMS","ATTRIBUTE_SHOP_ID","ATTRIBUTE_SHOP_PERMANENT_DOMAIN","ATTRIBUTE_FIRST_NAME","ATTRIBUTE_LAST_NAME","ATTRIBUTE_REQUIRE_VERIFICATION","ATTRIBUTE_SOURCE","_ShopLoginDefault_analyticsTraceId","getAnalyticsTraceId","_ShopLoginDefault_clientId","_ShopLoginDefault_version","_ShopLoginDefault_storefrontOrigin","_ShopLoginDefault_monorailTracker","_ShopLoginDefault_redirectType","_ShopLoginDefault_redirectUri","_ShopLoginDefault_uxMode","_ShopLoginDefault_popUpName","_ShopLoginDefault_popUpFeatures","_ShopLoginDefault_i18n","_disableSignUp","_autoOpen","_autoOpened","_avoidPayAltDomain","_avoidSdkSession","ShopActionType","_error","_hideButton","_anchorSelector","_isCompactLayout","_hidePayCopy","_email","_authorizeModalOpened","_keepModalOpen","_requireVerification","_shouldListenToResizeMessage","_ShopLoginDefault_handleUserIdentityChange","_updateSrc","_ShopLoginDefault_onViewClose","dispatchCustomEvent","_iframeMessenger","postMessage","removeOnePasswordPrompt","_ShopLoginDefault_onViewOpen","_ShopLoginDefault_updateIfCompactEligible","forceInit","newIsCompactLayout","checkEligibleForCompactLayout","context","_view","_debouncedUpdateUserInfo","debounce","firstName","lastName","_passwordManagerDetection","isFilledWithPasswordManager","_updateUserInfo","isValidEmail","EMAIL_LISTENER_DEBOUNCE_MS","_payLoadedResolve","_payLoaded","Promise","resolve","attributeChangedCallback","_oldValue","newValue","attributePassed","_responseType","_responseMode","_codeChallenge","_codeChallengeMethod","_scope","validateStorefrontOrigin","_updateMonorailTracker","_e","_f","PositionVariant","_initEmail","_g","_h","_j","_k","_apiKey","_l","_consentChallenge","_checkoutRedirectUrl","_checkoutVersion","_checkoutToken","_transactionParams","_shopId","_shopPermanentDomain","_firstName","_lastName","_source","subscribeToHub","ShopHubTopic","UserStatusIdentity","getBooleanAttribute","ATTRIBUTE_KEEP_MODAL_OPEN","length","URL","validateModalCustomizations","_ShopLoginDefault_instances","_ShopLoginDefault_initTranslations","_initElements","trackFeatureInitialization","source","logError","_handleError","ApiUnavailable","eventDestination","ownerDocument","defaultView","_iframeListener","MessageListener","IFrameEventSource","PAY_AUTH_DOMAIN_ALT","_ShopLoginDefault_handlePostMessage","bind","PayMessageSender","waitForMessage","trackShopPayModalStateChange","currentState","ShopifyPayModalState","Loaded","_ShopLoginDefault_clearLoadTimeout","_updateEmailAbortController","abort","disconnectedCallback","unsubscribeAllFromHub","stopListeningToInput","setShouldListenToResizeMessage","requestShow","setPasswordManagerDetection","passwordManagerDetection","listenToInput","inputElement","handleNewValue","_inputListener","InputListener","ensureIframeIsLoaded","then","signal","aborted","AbortController","hideChange","shopUserMatchedPromise","captchaChallengePromise","reject","waitForCaptcha","code","err","race","AbortSignalReceivedError","forced","iframe","_buildAuthorizeUrl","_updateListeners","_iframeSrcTimeout","clearTimeout","setTimeout","_ShopLoginDefault_initLoadTimeout","updateIframeSrc","leaveBreadcrumb","eventSource","parseIntOrUndefined","_handleCompleted","loggedIn","customerAccessToken","customerAccessTokenExpiresAt","shouldFinalizeLogin","shopPayInstallmentsOnboarded","givenNameFirstInitial","avatar","exchangeLoginCookie","publishToHub","UserSessionCreate","initial","_maybeRedirect","_handleCustomFlowSideEffect","Prequal","queryParams","searchParams","concat","toString","RetriableServerError","recordOpentel","TelemetryMetricId","HandleSilentError","component","errorCode","_onPopUpOpened","didOpen","_onLoaded","authenticationLevelRequired","_onUserMatched","unzoomIos","_onUserNotMatched","apiError","_onEmailChangeRequested","_onVerificationStepChanged","defineElement","defineCustomElement","_iframeLoadTimeout","ERRORS","temporarilyUnavailable","LOAD_TIMEOUT_MS","data","actionTypeToTagName","Follow","PopUp","CheckoutSheet","Custom","defaultAttributes","ATTRIBUTE_DEV_MODE","ShopLoginButton","WebComponent","_ShopLoginButton_actionType","_ShopLoginButton_actionButton","_getAttributeValueWithDefault","newClientId","newRedirectUri","newVersion","newEmail","newFirstName","newLastName","newPopUpName","newPopUpFeatures","getValidAttribute","ATTRIBUTE_ACTION","_createActionButton","actionType","_getAttributeValues","attributeValue","removeAttribute","tagName","actionButton","entries","forEach","key","String","reduce","acc","attributeName","ShopPayCheckoutSheetMonorailTracker","trackModalClosed","shopifyDomain","getCloseAction","produceMonorailEvent","schemaId","MonorailSchema","ShopifyPayPaymentPageUiInteraction","closeButton","overlay","keyboard","ShopSwirl","size","backgroundColor","red","green","blue","pickLogoColor","sizeRatio","Math","round","getTemplateContents","Number","parseInt","ELEMENT_CLASS_NAME","ModalContent","_ModalContent_rootElement","_ModalContent_headerWrapper","_ModalContent_headerTitle","_ModalContent_headerDescription","_ModalContent_contentWrapper","_ModalContent_contentProcessingWrapper","_ModalContent_contentProcessingUser","_ModalContent_contentStatusIndicator","_ModalContent_contentChildrenWrapper","_ModalContent_disclaimerText","_ModalContent_contentStore","colors","hideDivider","showDivider","update","_ModalContent_instances","_ModalContent_updateHeader","_ModalContent_updateMainContent","_ModalContent_updateDisclaimer","createModalContent","modalContent","title","description","authorizeState","visible","AuthorizeState","status","contentWrapperVisible","processingWrapperVisible","childrenWrapperVisible","loaderType","StatusIndicatorLoader","Branded","Regular","createStatusIndicator","setStatus","disclaimer","ATTRIBUTE_FOLLOWING","FollowOnShopButton","_button","_wrapper","_heartIcon","_followSpan","_followingSpan","_followTextWidth","_followingTextWidth","_initTranslations","setFollowing","following","skipAnimation","ariaHidden","setProperty","matchMedia","matches","setFilled","followText","followingText","createShopHeartIcon","prepend","scrollWidth","max","hasAttribute","_setButtonStyle","background","inferBackgroundColor","isDark","calculateContrast","isBordered","ELEMENT_NAME","StoreLogo","_StoreLogo_rootElement","_StoreLogo_wrapper","_StoreLogo_logoWrapper","_StoreLogo_logoImg","_StoreLogo_logoText","_StoreLogo_heartIcon","_StoreLogo_storeName","_StoreLogo_logoSrc","foregroundSecondary","white","append","logoSrc","_StoreLogo_instances","_StoreLogo_updateDom","setFavorited","ModalOpenStatus","currentLogoSrc","charAt","ariaLabel","alt","ShopFollowButton","_ShopFollowButton_rootElement","_ShopFollowButton_analyticsTraceId","_ShopFollowButton_clientId","_ShopFollowButton_version","_ShopFollowButton_storefrontOrigin","_ShopFollowButton_devMode","_ShopFollowButton_monorailTracker","_ShopFollowButton_buttonInViewportObserver","_ShopFollowButton_followShopButton","_ShopFollowButton_isFollowing","_ShopFollowButton_storefrontMeta","_ShopFollowButton_iframe","_ShopFollowButton_iframeListener","_ShopFollowButton_iframeMessenger","_ShopFollowButton_iframeLoadTimeout","_ShopFollowButton_authorizeModalManager","_ShopFollowButton_followModalManager","_ShopFollowButton_authorizeModal","_ShopFollowButton_authorizeLogo","_ShopFollowButton_authorizeModalContent","_ShopFollowButton_authorizeModalOpenedStatus","Closed","_ShopFollowButton_followedModal","_ShopFollowButton_followedModalContent","_ShopFollowButton_followedTooltip","_ShopFollowButton_storageManager","StorageManager","_ShopFollowButton_i18n","_ShopFollowButton_error","_ShopFollowButton_handleUserIdentityChange","_ShopFollowButton_instances","_ShopFollowButton_updateSrc","_ShopFollowButton_initTranslations","_ShopFollowButton_initElements","_ShopFollowButton_initEvents","disconnect","element","createFollowButton","SHOP_FOLLOW_BUTTON_HTML","_ShopFollowButton_trackComponentInViewportEvent","isMobileBrowser","_ShopFollowButton_createAndOpenAlreadyFollowingModal","_ShopFollowButton_createAlreadyFollowingTooltip","_ShopFollowButton_createAndOpenFollowOnShopModal","_ShopFollowButton_openAuthorizeModal","_ShopFollowButton_createIframe","withInnerHTML","_ShopFollowButton_closeAuthorizeModal","Mounting","storeMeta","_ShopFollowButton_fetchStorefrontMetadata","storeName","_ShopFollowButton_createAlreadyFollowingModalButton","storeLogo","storefrontMeta","id","SHOP_WEBSITE_DOMAIN","catch","tabIndex","_ShopFollowButton_handlePostMessage","buttonWrapper","storeId","buttonText","defaultValue","buttonLink","createGetAppButtonHtml","qrCodeAltText","qrCodeUrl","createScanCodeTooltipHtml","_ShopFollowButton_initLoadTimeout","_ShopFollowButton_clearLoadTimeout","IntersectionObserver","isIntersecting","getStoreMeta","_ShopFollowButton_trackComponentLoadedEvent","_ShopFollowButton_handleLoaded","Open","_ShopFollowButton_handleCompleted","_ShopFollowButton_handleError","Captcha","isBrowserSupported","startBugsnag","bundle","bundleLocale","defineShopLoginButton","defineShopLoginDefault"],"mappings":"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"}