@bigcommerce/checkout-sdk 1.611.0 → 1.612.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- (()=>{"use strict";var t={780:t=>{t.exports=require("iframe-resizer")},252:t=>{t.exports=require("iframe-resizer/js/iframeResizer.contentWindow")}},e={};function o(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,o),i.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{o.r(n),o.d(n,{createEmbeddedCheckoutMessenger:()=>U,embedCheckout:()=>A});const t=require("@bigcommerce/request-sender"),e=require("tslib");var r={size:70,color:"#d9d9d9",backgroundColor:"#ffffff"},i="embedded-checkout-loading-indicator-rotation";const s=function(){function t(t){this.styles=(0,e.__assign)((0,e.__assign)({},r),t&&t.styles),this.containerStyles=(0,e.__assign)({},t&&t.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}return t.prototype.show=function(t){if(t){var e=document.getElementById(t);if(!e)throw new Error("Unable to attach the loading indicator because the parent ID is not valid.");e.appendChild(this.container)}this.container.style.visibility="visible",this.container.style.opacity="1"},t.prototype.hide=function(){var t=this,e=function(){t.container.style.visibility="hidden",t.container.removeEventListener("transitionend",e)};this.container.addEventListener("transitionend",e),this.container.style.opacity="0"},t.prototype.buildContainer=function(){var t=document.createElement("div");return t.style.display="block",t.style.bottom="0",t.style.left="0",t.style.height="100%",t.style.width="100%",t.style.position="absolute",t.style.right="0",t.style.top="0",t.style.transition="all 250ms ease-out",t.style.opacity="0",this.setStyleAttribute(t,this.containerStyles),t},t.prototype.buildIndicator=function(){var t=document.createElement("div");return t.style.display="block",t.style.width=this.styles.size+"px",t.style.height=this.styles.size+"px",t.style.borderRadius=this.styles.size+"px",t.style.border="solid 1px",t.style.borderColor=this.styles.backgroundColor+" "+this.styles.backgroundColor+" "+this.styles.color+" "+this.styles.color,t.style.margin="0 auto",t.style.position="absolute",t.style.left="0",t.style.right="0",t.style.top="50%",t.style.transform="translateY(-50%) rotate(0deg)",t.style.transformStyle="preserve-3d",t.style.animation=i+" 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)",t},t.prototype.setStyleAttribute=function(t,e){Object.keys(e).forEach((function(o){t.style.setProperty(o,e[o])}))},t.prototype.defineAnimation=function(){var t;if(!document.getElementById(i)){var e=document.createElement("style");e.id=i,null===(t=document.head)||void 0===t||t.appendChild(e),e.sheet instanceof CSSStyleSheet&&e.sheet.insertRule("\n @keyframes "+i+" {\n 0% { transform: translateY(-50%) rotate(0deg); }\n 100% { transform: translateY(-50%) rotate(360deg); }\n }\n ",0)}},t}(),a=function(t){function o(e){var o,n,r=this.constructor,i=t.call(this,e||"An unexpected error has occurred.")||this;return i.name="StandardError",i.type="standard",o=i,n=r.prototype,Object.setPrototypeOf?Object.setPrototypeOf(o,n):o.__proto__=n,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,r):i.stack=new Error(i.message).stack,i}return(0,e.__extends)(o,t),o}(Error),c=function(t){function o(e){var o=t.call(this,e||"Invalid arguments have been provided.")||this;return o.name="InvalidArgumentError",o.type="invalid_argument",o}return(0,e.__extends)(o,t),o}(a);function d(t){if(!/^(https?:)?\/\//.test(t))throw new c("The provided URL must be absolute.");var e=document.createElement("a");e.href=t;var o=e.port&&-1!==t.indexOf(e.hostname+":"+e.port)?e.port:"";return{hash:e.hash,hostname:e.hostname,href:e.href,origin:e.protocol+"//"+e.hostname+(o?":"+o:""),pathname:e.pathname,port:o,protocol:e.protocol,search:e.search}}function u(t){return d(0===t.hostname.indexOf("www")?t.href:t.href.replace(t.hostname,"www."+t.hostname))}const p=function(t,o,n){return o&&n?h(0,o,n):function(t){var o=function(t){function o(){return null!==t&&t.apply(this,arguments)||this}return(0,e.__extends)(o,t),o}(t);return Object.getOwnPropertyNames(t.prototype).forEach((function(e){var n=Object.getOwnPropertyDescriptor(t.prototype,e);n&&"constructor"!==e&&Object.defineProperty(o.prototype,e,h(t.prototype,e,n))})),o}(t)};function h(t,o,n){if("function"!=typeof n.value)return n;var r=n.value;return{get:function(){var t=r.bind(this);return Object.defineProperty(this,o,(0,e.__assign)((0,e.__assign)({},n),{value:t})),t},set:function(t){r=t}}}function l(t,e){return t.type===e}const f=function(){function t(t){this._sourceOrigins=[d(t).origin,u(d(t)).origin],this._isListening=!1,this._listeners={}}return t.prototype.listen=function(){this._isListening||(this._isListening=!0,window.addEventListener("message",this._handleMessage))},t.prototype.stopListen=function(){this._isListening&&(this._isListening=!1,window.removeEventListener("message",this._handleMessage))},t.prototype.addListener=function(t,e){var o=this._listeners[t];o||(this._listeners[t]=o=[]),-1===o.indexOf(e)&&o.push(e)},t.prototype.removeListener=function(t,e){var o=this._listeners[t];if(o){var n=o.indexOf(e);n>=0&&o.splice(n,1)}},t.prototype.trigger=function(t,e){var o=this._listeners[t.type];o&&o.forEach((function(o){return e?o(t,e):o(t)}))},t.prototype._handleMessage=function(t){if(-1!==this._sourceOrigins.indexOf(t.origin)&&l(t.data,t.data.type)){var o=t.data,n=o.context,r=(0,e.__rest)(o,["context"]);this.trigger(r,n)}},(0,e.__decorate)([p],t.prototype,"_handleMessage",null),t}(),m=require("rxjs"),y=require("rxjs/operators"),_=function(){function t(t,e,o){this._targetWindow=e,this._context=o,this._targetOrigin="*"===t?"*":d(t).origin}return t.prototype.post=function(t,o){var n=this,r=this._targetWindow;if(window!==r){if(!r)throw new Error("Unable to post message because target window is not set.");var i=o&&(0,m.fromEvent)(window,"message").pipe((0,y.filter)((function(t){return t.origin===n._targetOrigin&&l(t.data,t.data.type)&&-1!==[o.successType,o.errorType].indexOf(t.data.type)})),(0,y.map)((function(t){if(o.errorType===t.data.type)throw t.data;return t.data})),(0,y.take)(1)).toPromise();return r.postMessage((0,e.__assign)((0,e.__assign)({},t),{context:this._context}),this._targetOrigin),i}},t.prototype.setTarget=function(t){this._targetWindow=t},t.prototype.setContext=function(t){this._context=t},t}(),g=require("local-storage-fallback");var v=o.n(g);const w=function(){function t(t){this._namespace=t}return t.prototype.getItem=function(t){var e=v().getItem(this.withNamespace(t));if(null===e)return null;try{return JSON.parse(e)}catch(e){return this.removeItem(this.withNamespace(t)),null}},t.prototype.getItemOnce=function(t){var e=this.getItem(t);return this.removeItem(t),e},t.prototype.setItem=function(t,e){return v().setItem(this.withNamespace(t),JSON.stringify(e))},t.prototype.removeItem=function(t){return v().removeItem(this.withNamespace(t))},t.prototype.withNamespace=function(t){return this._namespace+"."+t},t}();var b;!function(t){t.CheckoutComplete="CHECKOUT_COMPLETE",t.CheckoutError="CHECKOUT_ERROR",t.CheckoutLoaded="CHECKOUT_LOADED",t.FrameError="FRAME_ERROR",t.FrameLoaded="FRAME_LOADED",t.SignedOut="SIGNED_OUT"}(b||(b={}));var E={body:{},headers:{},status:0};const C=function(t){function o(e){var o=t.call(this,e,{message:e.body.title})||this;return o.name="InvalidLoginTokenError",o.type="invalid_login_token",o}return(0,e.__extends)(o,t),o}(function(t){function o(e,o){var n=void 0===o?{}:o,r=n.message,i=n.errors,s=this,a=e||E,c=a.body,d=a.headers,u=a.status;return(s=t.call(this,r||"An unexpected error has occurred.")||this).name="RequestError",s.type="request",s.body=c,s.headers=d,s.status=u,s.errors=i||[],s}return(0,e.__extends)(o,t),o}(a));var L;!function(t){t.MissingContainer="missing_container",t.MissingContent="missing_content",t.UnknownError="unknown_error"}(L||(L={}));const O=function(t){function o(e,o){void 0===o&&(o=L.UnknownError);var n=t.call(this,e||"Unable to embed the checkout form.")||this;return n.subtype=o,n.name="NotEmbeddableError",n.type="not_embeddable",n}return(0,e.__extends)(o,t),o}(a);var k;!function(t){t.StyleConfigured="STYLE_CONFIGURED"}(k||(k={}));var S="isCookieAllowed",I="lastAllowCookieAttempt";const x=function(){function t(t,e,o,n,r,i,s,a){var c=this;this._iframeCreator=t,this._messageListener=e,this._messagePoster=o,this._loadingIndicator=n,this._requestSender=r,this._storage=i,this._location=s,this._options=a,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(b.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(b.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(b.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(b.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(b.SignedOut,this._options.onSignOut),this._messageListener.addListener(b.FrameLoaded,(function(){return c._configureStyles()}))}return t.prototype.attach=function(){var t=this;return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then((function(){return t._attemptLogin()})).then((function(e){return t._iframeCreator.createFrame(e,t._options.containerId)})).then((function(e){t._iframe=e,t._configureStyles(),t._loadingIndicator.hide()})).catch((function(e){return t._isAttached=!1,t._retryAllowCookie(e).catch((function(){throw t._messageListener.trigger({type:b.FrameError,payload:e}),t._loadingIndicator.hide(),e}))})).then((function(){return t})))},t.prototype.detach=function(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))},t.prototype._configureStyles=function(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:k.StyleConfigured,payload:this._options.styles}))},t.prototype._attemptLogin=function(){return/^\/login\/token/.test(d(this._options.url).pathname)?this._requestSender.post(this._options.url).then((function(t){return t.body.redirectUrl})).catch((function(t){return Promise.reject(new C(t))})):Promise.resolve(this._options.url)},t.prototype._allowCookie=function(){if(this._storage.getItem(S))return Promise.resolve();this._storage.setItem(S,!0),this._storage.setItem(I,Date.now());var t=d(this._options.url).origin+"/embedded-checkout/allow-cookie?returnUrl="+encodeURIComponent(this._location.href);return document.body.style.visibility="hidden",this._location.replace(t),new Promise((function(){}))},t.prototype._retryAllowCookie=function(t){var e=Number(this._storage.getItem(I));return(!e||Date.now()-e>6e5)&&t instanceof O&&t.subtype===L.MissingContent?(this._storage.removeItem(I),this._storage.removeItem(S),this._allowCookie()):Promise.reject()},(0,e.__decorate)([p],t)}(),M=function(){function t(t){this._options=t}return t.prototype.createFrame=function(t,e){var o=document.getElementById(e),n=(this._options||{}).timeout,r=void 0===n?6e4:n;if(!o)throw new O("Unable to embed the iframe because the container element could not be found.",L.MissingContainer);var i=document.createElement("iframe");return i.src=t,i.style.border="none",i.style.display="none",i.style.width="100%",i.allowPaymentRequest=!0,o.appendChild(i),this._toResizableFrame(i,r).catch((function(t){throw o.removeChild(i),t}))},t.prototype._toResizableFrame=function(t,e){return new Promise((function(n,r){var i=window.setTimeout((function(){r(new O("Unable to embed the iframe because the content could not be loaded."))}),e),s=function(e){var i,s;if((e.origin===d(t.src).origin||e.origin===u(d(t.src)).origin)&&(l(e.data,b.FrameError)&&(a(),r(new O(e.data.payload.message,L.MissingContent))),l(e.data,b.FrameLoaded))){t.style.display="";var c=(i={scrolling:!1,sizeWidth:!1,heightCalculationMethod:e.data.payload&&e.data.payload.contentId?"taggedElement":"lowestElement"},s=t,(0,o(780).iframeResizer)(i,s));a(),n(c[c.length-1])}},a=function(){window.removeEventListener("message",s),window.clearTimeout(i)};window.addEventListener("message",s)}))},t}();var P="BigCommerce.EmbeddedCheckout";function A(e){var o=d(e.url).origin;return new x(new M,new f(o),new _(o),new s({styles:e.styles&&e.styles.loadingIndicator}),(0,t.createRequestSender)(),new w(P),window.location,e).attach()}function F(t){if(t.payload&&t.payload.contentId){var e=document.getElementById(t.payload.contentId);e&&!e.hasAttribute("data-iframe-height")&&e.setAttribute("data-iframe-height","")}}function R(t){return"object"==typeof t&&null!==t&&"message"in t&&"type"in t}const T=function(){function t(t,e,o,n){void 0===n&&(n={}),this._messageListener=t,this._messagePoster=e,this._untargetedMessagePoster=o,this._messageHandlers=n,this._messageListener.listen()}return t.prototype.postComplete=function(){var t={type:b.CheckoutComplete};this._postMessage(t)},t.prototype.postError=function(t){var e={type:b.CheckoutError,payload:this._transformError(t)};this._postMessage(e)},t.prototype.postFrameError=function(t){var e={type:b.FrameError,payload:this._transformError(t)};this._postMessage(e,{untargeted:!0})},t.prototype.postFrameLoaded=function(t){var e={type:b.FrameLoaded,payload:t};this._postMessage(e)},t.prototype.postLoaded=function(){var t={type:b.CheckoutLoaded};this._postMessage(t)},t.prototype.postSignedOut=function(){var t={type:b.SignedOut};this._postMessage(t)},t.prototype.receiveStyles=function(t){this._messageListener.addListener(k.StyleConfigured,(function(e){var o=e.payload;t(o)}))},t.prototype._postMessage=function(t,e){if(this._notifyMessageHandlers(t),e&&e.untargeted)return this._untargetedMessagePoster.post(t);this._messagePoster.post(t)},t.prototype._notifyMessageHandlers=function(t){var e=this;Object.keys(this._messageHandlers).forEach((function(o){if(t.type===o){var n=e._messageHandlers[o];n&&n.call(null,t)}}))},t.prototype._transformError=function(t){return{message:t.message,type:R(t)?t.type:void 0,subtype:R(t)?t.subtype:void 0}},(0,e.__decorate)([p],t)}(),j=function(){function t(){}return t.prototype.postComplete=function(){},t.prototype.postError=function(){},t.prototype.postFrameError=function(){},t.prototype.postFrameLoaded=function(){},t.prototype.postLoaded=function(){},t.prototype.postSignedOut=function(){},t.prototype.receiveStyles=function(){},(0,e.__decorate)([p],t)}();function U(t){var e;o(252);var n=t.parentWindow||window.parent;return window===n?new j:new T(new f(t.parentOrigin),new _(t.parentOrigin,n),new _("*",n),((e={})[b.FrameLoaded]=F,e))}})(),module.exports=n})();
1
+ (()=>{"use strict";var t={780:t=>{t.exports=require("iframe-resizer")},252:t=>{t.exports=require("iframe-resizer/js/iframeResizer.contentWindow")}},e={};function o(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,o),i.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{o.r(n),o.d(n,{createEmbeddedCheckoutMessenger:()=>U,embedCheckout:()=>A});const t=require("@bigcommerce/request-sender"),e=require("tslib");var r={size:70,color:"#d9d9d9",backgroundColor:"#ffffff"},i="embedded-checkout-loading-indicator-rotation";const s=function(){function t(t){this.styles=(0,e.__assign)((0,e.__assign)({},r),t&&t.styles),this.containerStyles=(0,e.__assign)({},t&&t.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}return t.prototype.show=function(t){if(t){var e=document.getElementById(t);if(!e)throw new Error("Unable to attach the loading indicator because the parent ID is not valid.");e.appendChild(this.container)}this.container.style.visibility="visible",this.container.style.opacity="1"},t.prototype.hide=function(){var t=this,e=function(){t.container.style.visibility="hidden",t.container.removeEventListener("transitionend",e)};this.container.addEventListener("transitionend",e),this.container.style.opacity="0"},t.prototype.buildContainer=function(){var t=document.createElement("div");return t.style.display="block",t.style.bottom="0",t.style.left="0",t.style.height="100%",t.style.width="100%",t.style.position="absolute",t.style.right="0",t.style.top="0",t.style.transition="all 250ms ease-out",t.style.opacity="0",this.setStyleAttribute(t,this.containerStyles),t},t.prototype.buildIndicator=function(){var t=document.createElement("div");return t.style.display="block",t.style.width=this.styles.size+"px",t.style.height=this.styles.size+"px",t.style.borderRadius=this.styles.size+"px",t.style.border="solid 1px",t.style.borderColor=this.styles.backgroundColor+" "+this.styles.backgroundColor+" "+this.styles.color+" "+this.styles.color,t.style.margin="0 auto",t.style.position="absolute",t.style.left="0",t.style.right="0",t.style.top="50%",t.style.transform="translateY(-50%) rotate(0deg)",t.style.transformStyle="preserve-3d",t.style.animation=i+" 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)",t},t.prototype.setStyleAttribute=function(t,e){Object.keys(e).forEach((function(o){t.style.setProperty(o,e[o])}))},t.prototype.defineAnimation=function(){var t;if(!document.getElementById(i)){var e=document.createElement("style");e.id=i,null===(t=document.head)||void 0===t||t.appendChild(e),e.sheet instanceof CSSStyleSheet&&e.sheet.insertRule("\n @keyframes "+i+" {\n 0% { transform: translateY(-50%) rotate(0deg); }\n 100% { transform: translateY(-50%) rotate(360deg); }\n }\n ",0)}},t}(),a=function(t){function o(e){var o,n,r=this.constructor,i=t.call(this,e||"An unexpected error has occurred.")||this;return i.name="StandardError",i.type="standard",o=i,n=r.prototype,Object.setPrototypeOf?Object.setPrototypeOf(o,n):o.__proto__=n,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,r):i.stack=new Error(i.message).stack,i}return(0,e.__extends)(o,t),o}(Error),c=function(t){function o(e){var o=t.call(this,e||"Invalid arguments have been provided.")||this;return o.name="InvalidArgumentError",o.type="invalid_argument",o}return(0,e.__extends)(o,t),o}(a);function d(t){if(!/^(https?:)?\/\//.test(t))throw new c("The provided URL must be absolute.");var e=document.createElement("a");e.href=t;var o=e.port&&-1!==t.indexOf(e.hostname+":"+e.port)?e.port:"";return{hash:e.hash,hostname:e.hostname,href:e.href,origin:e.protocol+"//"+e.hostname+(o?":"+o:""),pathname:e.pathname,port:o,protocol:e.protocol,search:e.search}}function u(t){return d(0===t.hostname.indexOf("www")?t.href:t.href.replace(t.hostname,"www."+t.hostname))}const p=function(t,o,n){return o&&n?h(0,o,n):function(t){var o=function(t){function o(){return null!==t&&t.apply(this,arguments)||this}return(0,e.__extends)(o,t),o}(t);return Object.getOwnPropertyNames(t.prototype).forEach((function(e){var n=Object.getOwnPropertyDescriptor(t.prototype,e);n&&"constructor"!==e&&Object.defineProperty(o.prototype,e,h(t.prototype,e,n))})),o}(t)};function h(t,o,n){if("function"!=typeof n.value)return n;var r=n.value;return{get:function(){var t=r.bind(this);return Object.defineProperty(this,o,(0,e.__assign)((0,e.__assign)({},n),{value:t})),t},set:function(t){r=t}}}function l(t,e){return t.type===e}const f=function(){function t(t){this._sourceOrigins=[d(t).origin,u(d(t)).origin],this._isListening=!1,this._listeners={}}return t.prototype.listen=function(){this._isListening||(this._isListening=!0,window.addEventListener("message",this._handleMessage))},t.prototype.stopListen=function(){this._isListening&&(this._isListening=!1,window.removeEventListener("message",this._handleMessage))},t.prototype.addListener=function(t,e){var o=this._listeners[t];o||(this._listeners[t]=o=[]),-1===o.indexOf(e)&&o.push(e)},t.prototype.removeListener=function(t,e){var o=this._listeners[t];if(o){var n=o.indexOf(e);n>=0&&o.splice(n,1)}},t.prototype.trigger=function(t,e){var o=this._listeners[t.type];o&&o.forEach((function(o){return e?o(t,e):o(t)}))},t.prototype._handleMessage=function(t){if(-1!==this._sourceOrigins.indexOf(t.origin)&&l(t.data,t.data.type)){var o=t.data,n=o.context,r=(0,e.__rest)(o,["context"]);this.trigger(r,n)}},(0,e.__decorate)([p],t.prototype,"_handleMessage",null),t}(),m=require("rxjs"),y=require("rxjs/operators"),_=function(){function t(t,e,o){this._targetWindow=e,this._context=o,this._targetOrigin="*"===t?"*":d(t).origin}return t.prototype.post=function(t,o){var n=this,r=this._targetWindow;if(window!==r){if(!r)throw new Error("Unable to post message because target window is not set.");var i=o&&(0,m.fromEvent)(window,"message").pipe((0,y.filter)((function(t){return t.origin===n._targetOrigin&&l(t.data,t.data.type)&&-1!==[o.successType,o.errorType].indexOf(t.data.type)})),(0,y.map)((function(t){if(o.errorType===t.data.type)throw t.data;return t.data})),(0,y.take)(1)).toPromise();return r.postMessage((0,e.__assign)((0,e.__assign)({},t),{context:this._context}),this._targetOrigin),i}},t.prototype.setTarget=function(t){this._targetWindow=t},t.prototype.setContext=function(t){this._context=t},t}(),g=require("local-storage-fallback");var v=o.n(g);const w=function(){function t(t){this._namespace=t}return t.prototype.getItem=function(t){var e=v().getItem(this.withNamespace(t));if(null===e)return null;try{return JSON.parse(e)}catch(e){return this.removeItem(this.withNamespace(t)),null}},t.prototype.getItemOnce=function(t){var e=this.getItem(t);return this.removeItem(t),e},t.prototype.setItem=function(t,e){return v().setItem(this.withNamespace(t),JSON.stringify(e))},t.prototype.removeItem=function(t){return v().removeItem(this.withNamespace(t))},t.prototype.withNamespace=function(t){return this._namespace+"."+t},t}();var b;!function(t){t.CheckoutComplete="CHECKOUT_COMPLETE",t.CheckoutError="CHECKOUT_ERROR",t.CheckoutLoaded="CHECKOUT_LOADED",t.FrameError="FRAME_ERROR",t.FrameLoaded="FRAME_LOADED",t.SignedOut="SIGNED_OUT"}(b||(b={}));var E={body:{},headers:{},status:0};const C=function(t){function o(e){var o=t.call(this,e,{message:e.body.title})||this;return o.name="InvalidLoginTokenError",o.type="invalid_login_token",o}return(0,e.__extends)(o,t),o}(function(t){function o(e,o){var n=void 0===o?{}:o,r=n.message,i=n.errors,s=this,a=e||E,c=a.body,d=a.headers,u=a.status;return(s=t.call(this,r||"An unexpected error has occurred.")||this).name="RequestError",s.type="request",s.body=c,s.headers=d,s.status=u,s.errors=i||[],s}return(0,e.__extends)(o,t),o}(a));var L;!function(t){t.MissingContainer="missing_container",t.MissingContent="missing_content",t.UnknownError="unknown_error"}(L||(L={}));const O=function(t){function o(e,o){void 0===o&&(o=L.UnknownError);var n=t.call(this,e||"Unable to embed the checkout form.")||this;return n.subtype=o,n.name="NotEmbeddableError",n.type="not_embeddable",n}return(0,e.__extends)(o,t),o}(a);var k;!function(t){t.StyleConfigured="STYLE_CONFIGURED"}(k||(k={}));var S="isCookieAllowed",I="lastAllowCookieAttempt";const x=function(){function t(t,e,o,n,r,i,s,a){var c=this;this._iframeCreator=t,this._messageListener=e,this._messagePoster=o,this._loadingIndicator=n,this._requestSender=r,this._storage=i,this._location=s,this._options=a,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(b.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(b.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(b.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(b.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(b.SignedOut,this._options.onSignOut),this._messageListener.addListener(b.FrameLoaded,(function(){return c._configureStyles()}))}return t.prototype.attach=function(){var t=this;return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then((function(){return t._attemptLogin()})).then((function(e){return t._iframeCreator.createFrame(e,t._options.containerId)})).then((function(e){t._iframe=e,t._configureStyles(),t._loadingIndicator.hide()})).catch((function(e){return t._isAttached=!1,t._retryAllowCookie(e).catch((function(){throw t._messageListener.trigger({type:b.FrameError,payload:e}),t._loadingIndicator.hide(),e}))})).then((function(){return t})))},t.prototype.detach=function(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))},t.prototype._configureStyles=function(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:k.StyleConfigured,payload:this._options.styles}))},t.prototype._attemptLogin=function(){return/^\/login\/token/.test(d(this._options.url).pathname)?this._requestSender.post(this._options.url).then((function(t){return t.body.redirectUrl})).catch((function(t){return Promise.reject(new C(t))})):Promise.resolve(this._options.url)},t.prototype._allowCookie=function(){if(this._storage.getItem(S))return Promise.resolve();this._storage.setItem(S,!0),this._storage.setItem(I,Date.now());var t=d(this._options.url).origin+"/embedded-checkout/allow-cookie?returnUrl="+encodeURIComponent(this._location.href);return document.body.style.visibility="hidden",this._location.replace(t),new Promise((function(){}))},t.prototype._retryAllowCookie=function(t){var e=Number(this._storage.getItem(I));return(!e||Date.now()-e>6e5)&&t instanceof O&&t.subtype===L.MissingContent?(this._storage.removeItem(I),this._storage.removeItem(S),this._allowCookie()):Promise.reject()},(0,e.__decorate)([p],t)}(),M=function(){function t(t){this._options=t}return t.prototype.createFrame=function(t,e){var o=document.getElementById(e),n=(this._options||{}).timeout,r=void 0===n?6e4:n;if(!o)throw new O("Unable to embed the iframe because the container element could not be found.",L.MissingContainer);var i=document.createElement("iframe");return i.src=t,i.style.border="none",i.style.display="none",i.style.width="100%",i.allowPaymentRequest=!0,i.allow="payment",o.appendChild(i),this._toResizableFrame(i,r).catch((function(t){throw o.removeChild(i),t}))},t.prototype._toResizableFrame=function(t,e){return new Promise((function(n,r){var i=window.setTimeout((function(){r(new O("Unable to embed the iframe because the content could not be loaded."))}),e),s=function(e){var i,s;if((e.origin===d(t.src).origin||e.origin===u(d(t.src)).origin)&&(l(e.data,b.FrameError)&&(a(),r(new O(e.data.payload.message,L.MissingContent))),l(e.data,b.FrameLoaded))){t.style.display="";var c=(i={scrolling:!1,sizeWidth:!1,heightCalculationMethod:e.data.payload&&e.data.payload.contentId?"taggedElement":"lowestElement"},s=t,(0,o(780).iframeResizer)(i,s));a(),n(c[c.length-1])}},a=function(){window.removeEventListener("message",s),window.clearTimeout(i)};window.addEventListener("message",s)}))},t}();var P="BigCommerce.EmbeddedCheckout";function A(e){var o=d(e.url).origin;return new x(new M,new f(o),new _(o),new s({styles:e.styles&&e.styles.loadingIndicator}),(0,t.createRequestSender)(),new w(P),window.location,e).attach()}function F(t){if(t.payload&&t.payload.contentId){var e=document.getElementById(t.payload.contentId);e&&!e.hasAttribute("data-iframe-height")&&e.setAttribute("data-iframe-height","")}}function R(t){return"object"==typeof t&&null!==t&&"message"in t&&"type"in t}const T=function(){function t(t,e,o,n){void 0===n&&(n={}),this._messageListener=t,this._messagePoster=e,this._untargetedMessagePoster=o,this._messageHandlers=n,this._messageListener.listen()}return t.prototype.postComplete=function(){var t={type:b.CheckoutComplete};this._postMessage(t)},t.prototype.postError=function(t){var e={type:b.CheckoutError,payload:this._transformError(t)};this._postMessage(e)},t.prototype.postFrameError=function(t){var e={type:b.FrameError,payload:this._transformError(t)};this._postMessage(e,{untargeted:!0})},t.prototype.postFrameLoaded=function(t){var e={type:b.FrameLoaded,payload:t};this._postMessage(e)},t.prototype.postLoaded=function(){var t={type:b.CheckoutLoaded};this._postMessage(t)},t.prototype.postSignedOut=function(){var t={type:b.SignedOut};this._postMessage(t)},t.prototype.receiveStyles=function(t){this._messageListener.addListener(k.StyleConfigured,(function(e){var o=e.payload;t(o)}))},t.prototype._postMessage=function(t,e){if(this._notifyMessageHandlers(t),e&&e.untargeted)return this._untargetedMessagePoster.post(t);this._messagePoster.post(t)},t.prototype._notifyMessageHandlers=function(t){var e=this;Object.keys(this._messageHandlers).forEach((function(o){if(t.type===o){var n=e._messageHandlers[o];n&&n.call(null,t)}}))},t.prototype._transformError=function(t){return{message:t.message,type:R(t)?t.type:void 0,subtype:R(t)?t.subtype:void 0}},(0,e.__decorate)([p],t)}(),j=function(){function t(){}return t.prototype.postComplete=function(){},t.prototype.postError=function(){},t.prototype.postFrameError=function(){},t.prototype.postFrameLoaded=function(){},t.prototype.postLoaded=function(){},t.prototype.postSignedOut=function(){},t.prototype.receiveStyles=function(){},(0,e.__decorate)([p],t)}();function U(t){var e;o(252);var n=t.parentWindow||window.parent;return window===n?new j:new T(new f(t.parentOrigin),new _(t.parentOrigin,n),new _("*",n),((e={})[b.FrameLoaded]=F,e))}})(),module.exports=n})();
2
2
  //# sourceMappingURL=embedded-checkout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedded-checkout.js","mappings":"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","sources":["webpack://@bigcommerce/checkout-sdk/external commonjs \"iframe-resizer\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"iframe-resizer/js/iframeResizer.contentWindow\"","webpack://@bigcommerce/checkout-sdk/webpack/bootstrap","webpack://@bigcommerce/checkout-sdk/webpack/runtime/compat get default export","webpack://@bigcommerce/checkout-sdk/webpack/runtime/define property getters","webpack://@bigcommerce/checkout-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@bigcommerce/checkout-sdk/webpack/runtime/make namespace object","webpack://@bigcommerce/checkout-sdk/external commonjs \"@bigcommerce/request-sender\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"tslib\"","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/loading-indicator/loading-indicator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/standard-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/set-prototype-of.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/invalid-argument-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/url/parse-url.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/url/append-www.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/bind-decorator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/is-iframe-event.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-event-listener.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs/operators\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-event-poster.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"local-storage-fallback\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/storage/browser-storage.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/embedded-checkout-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/errors/invalid-login-token-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/errors/not-embeddable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/embedded-content-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/embedded-checkout.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/resizable-iframe-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-resizer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/embed-checkout.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/handle-frame-loaded-event.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/custom-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/iframe-embedded-checkout-messenger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/noop-embedded-checkout-messenger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/create-embedded-checkout-messenger.ts"],"sourcesContent":["module.exports = require(\"iframe-resizer\");","module.exports = require(\"iframe-resizer/js/iframeResizer.contentWindow\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/request-sender\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"tslib\");","import {\n LoadingIndicatorContainerStyles,\n LoadingIndicatorStyles,\n} from './loading-indicator-styles';\n\nconst DEFAULT_STYLES: LoadingIndicatorStyles = {\n size: 70,\n color: '#d9d9d9',\n backgroundColor: '#ffffff',\n};\n\nconst ROTATION_ANIMATION = 'embedded-checkout-loading-indicator-rotation';\n\ninterface LoadingIndicatorOptions {\n styles?: LoadingIndicatorStyles;\n containerStyles?: LoadingIndicatorContainerStyles;\n}\n\nexport default class LoadingIndicator {\n private container: HTMLElement;\n private indicator: HTMLElement;\n private styles: LoadingIndicatorStyles;\n private containerStyles: LoadingIndicatorContainerStyles;\n\n constructor(options?: LoadingIndicatorOptions) {\n this.styles = { ...DEFAULT_STYLES, ...(options && options.styles) };\n this.containerStyles = { ...(options && options.containerStyles) };\n\n this.defineAnimation();\n\n this.container = this.buildContainer();\n this.indicator = this.buildIndicator();\n\n this.container.appendChild(this.indicator);\n }\n\n show(parentId?: string): void {\n if (parentId) {\n const parent = document.getElementById(parentId);\n\n if (!parent) {\n throw new Error(\n 'Unable to attach the loading indicator because the parent ID is not valid.',\n );\n }\n\n parent.appendChild(this.container);\n }\n\n this.container.style.visibility = 'visible';\n this.container.style.opacity = '1';\n }\n\n hide(): void {\n const handleTransitionEnd = () => {\n this.container.style.visibility = 'hidden';\n\n this.container.removeEventListener('transitionend', handleTransitionEnd);\n };\n\n this.container.addEventListener('transitionend', handleTransitionEnd);\n\n this.container.style.opacity = '0';\n }\n\n private buildContainer(): HTMLElement {\n const container = document.createElement('div');\n\n container.style.display = 'block';\n container.style.bottom = '0';\n container.style.left = '0';\n container.style.height = '100%';\n container.style.width = '100%';\n container.style.position = 'absolute';\n container.style.right = '0';\n container.style.top = '0';\n container.style.transition = 'all 250ms ease-out';\n container.style.opacity = '0';\n\n this.setStyleAttribute(container, this.containerStyles);\n\n return container;\n }\n\n private buildIndicator(): HTMLElement {\n const indicator = document.createElement('div');\n\n indicator.style.display = 'block';\n indicator.style.width = `${this.styles.size}px`;\n indicator.style.height = `${this.styles.size}px`;\n indicator.style.borderRadius = `${this.styles.size}px`;\n indicator.style.border = 'solid 1px';\n indicator.style.borderColor = `${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`;\n indicator.style.margin = '0 auto';\n indicator.style.position = 'absolute';\n indicator.style.left = '0';\n indicator.style.right = '0';\n indicator.style.top = '50%';\n indicator.style.transform = 'translateY(-50%) rotate(0deg)';\n indicator.style.transformStyle = 'preserve-3d';\n indicator.style.animation = `${ROTATION_ANIMATION} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`;\n\n return indicator;\n }\n\n private setStyleAttribute(element: HTMLElement, attrs: { [key: string]: string }): void {\n Object.keys(attrs).forEach((k) => {\n element.style.setProperty(k, attrs[k]);\n });\n }\n\n private defineAnimation(): void {\n // In order to define CSS animation, we need to insert a stylesheet into the host frame.\n // We only have to do it once.\n if (document.getElementById(ROTATION_ANIMATION)) {\n return;\n }\n\n const style = document.createElement('style');\n\n style.id = ROTATION_ANIMATION;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n document.head?.appendChild(style);\n\n if (style.sheet instanceof CSSStyleSheet) {\n // We need to provide the 2nd parameter for IE11, even though it is\n // 0 by default for all other browsers.\n style.sheet.insertRule(\n `\n @keyframes ${ROTATION_ANIMATION} {\n 0% { transform: translateY(-50%) rotate(0deg); }\n 100% { transform: translateY(-50%) rotate(360deg); }\n }\n `,\n 0,\n );\n }\n }\n}\n","import { setPrototypeOf } from '../../utility';\n\nimport CustomError from './custom-error';\n\n/**\n * This error type should not be constructed directly. It is a base class for\n * all custom errors thrown in this library.\n */\nexport default abstract class StandardError extends Error implements CustomError {\n name = 'StandardError';\n type = 'standard';\n\n constructor(message?: string) {\n super(message || 'An unexpected error has occurred.');\n\n setPrototypeOf(this, new.target.prototype);\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, new.target);\n } else {\n this.stack = new Error(this.message).stack;\n }\n }\n}\n","export default function setPrototypeOf(object: any, prototype: object) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(object, prototype);\n } else {\n object.__proto__ = prototype;\n }\n\n return object;\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a method is unable to proceed because the\n * caller has not provided all the arguments according to their requirements,\n * i.e.: if an argument is missing or it is not the expected data type.\n */\nexport default class InvalidArgumentError extends StandardError {\n constructor(message?: string) {\n super(message || 'Invalid arguments have been provided.');\n\n this.name = 'InvalidArgumentError';\n this.type = 'invalid_argument';\n }\n}\n","import { InvalidArgumentError } from '../error/errors';\n\nimport Url from './url';\n\nexport default function parseUrl(url: string): Url {\n if (!/^(https?:)?\\/\\//.test(url)) {\n throw new InvalidArgumentError('The provided URL must be absolute.');\n }\n\n // new URL() is not supported in IE11, use anchor tag instead\n const anchor = document.createElement('a');\n\n anchor.href = url;\n\n // IE11 returns 80 or 443 for the port number depending on the URL scheme,\n // even if the port number is not specified in the URL.\n const port =\n anchor.port && url.indexOf(`${anchor.hostname}:${anchor.port}`) !== -1 ? anchor.port : '';\n\n return {\n hash: anchor.hash,\n hostname: anchor.hostname,\n href: anchor.href,\n origin: `${anchor.protocol}//${anchor.hostname}${port ? `:${port}` : ''}`,\n pathname: anchor.pathname,\n port,\n protocol: anchor.protocol,\n search: anchor.search,\n };\n}\n","import parseUrl from './parse-url';\nimport Url from './url';\n\nexport default function appendWww(url: Url): Url {\n return parseUrl(\n url.hostname.indexOf('www') === 0\n ? url.href\n : url.href.replace(url.hostname, `www.${url.hostname}`),\n );\n}\n","/**\n * Decorates a class or a method by binding all its prototype methods or itself\n * to the calling instance respectively.\n */\nfunction bindDecorator<T extends Method>(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\nfunction bindDecorator<T extends Constructor<object>>(target: T): T;\n\nfunction bindDecorator(target: any, key?: any, descriptor?: any): any {\n if (!key || !descriptor) {\n return bindClassDecorator(target);\n }\n\n return bindMethodDecorator(target, key, descriptor);\n}\n\nexport default bindDecorator;\n\n/**\n * Decorates a class by binding all its prototype methods to the calling\n * instance.\n */\nexport function bindClassDecorator<T extends Constructor<object>>(target: T): T {\n const decoratedTarget = class extends target {};\n\n Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n if (!descriptor || key === 'constructor') {\n return;\n }\n\n Object.defineProperty(\n decoratedTarget.prototype,\n key,\n bindMethodDecorator(target.prototype, key, descriptor),\n );\n });\n\n return decoratedTarget;\n}\n\n/**\n * Decorates a method by binding it to the calling instance.\n */\nexport function bindMethodDecorator<T extends Method>(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n if (typeof descriptor.value !== 'function') {\n return descriptor;\n }\n\n let method: T = descriptor.value;\n\n return {\n get() {\n const boundMethod = method.bind(this) as T;\n\n Object.defineProperty(this, key, {\n ...descriptor,\n value: boundMethod,\n });\n\n return boundMethod;\n },\n set(value) {\n method = value;\n },\n };\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\n","import IframeEvent from './iframe-event';\n\nexport default function isIframeEvent<TEvent extends IframeEvent<TType>, TType extends string>(\n object: any,\n type: TType,\n): object is TEvent {\n return object.type === type;\n}\n","import { appendWww, parseUrl } from '../url';\nimport { bindDecorator as bind } from '../utility';\n\nimport { IframeEventMap } from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport default class IframeEventListener<\n TEventMap extends IframeEventMap<keyof TEventMap>,\n TContext = undefined,\n> {\n private _isListening: boolean;\n private _listeners: EventListeners<TEventMap, TContext>;\n private _sourceOrigins: string[];\n\n constructor(sourceOrigin: string) {\n this._sourceOrigins = [\n parseUrl(sourceOrigin).origin,\n appendWww(parseUrl(sourceOrigin)).origin,\n ];\n this._isListening = false;\n this._listeners = {};\n }\n\n listen(): void {\n if (this._isListening) {\n return;\n }\n\n this._isListening = true;\n\n window.addEventListener('message', this._handleMessage);\n }\n\n stopListen(): void {\n if (!this._isListening) {\n return;\n }\n\n this._isListening = false;\n\n window.removeEventListener('message', this._handleMessage);\n }\n\n addListener<TType extends keyof TEventMap>(\n type: TType,\n listener: (event: TEventMap[TType], context?: TContext) => void,\n ): void {\n let listeners = this._listeners[type];\n\n if (!listeners) {\n this._listeners[type] = listeners = [];\n }\n\n if (listeners.indexOf(listener) === -1) {\n listeners.push(listener);\n }\n }\n\n removeListener<TType extends keyof TEventMap>(\n type: TType,\n listener: (event: TEventMap[TType], context?: TContext) => void,\n ): void {\n const listeners = this._listeners[type];\n\n if (!listeners) {\n return;\n }\n\n const index = listeners.indexOf(listener);\n\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void {\n const listeners = this._listeners[event.type];\n\n if (!listeners) {\n return;\n }\n\n listeners.forEach((listener) => (context ? listener(event, context) : listener(event)));\n }\n\n @bind\n private _handleMessage(messageEvent: MessageEvent): void {\n if (\n this._sourceOrigins.indexOf(messageEvent.origin) === -1 ||\n !isIframeEvent(messageEvent.data as TEventMap[keyof TEventMap], messageEvent.data.type)\n ) {\n return;\n }\n\n const { context, ...event } = messageEvent.data;\n\n this.trigger(event, context);\n }\n}\n\ntype EventListeners<TEventMap, TContext = undefined> = {\n [key in keyof TEventMap]?: Array<(event: TEventMap[key], context?: TContext) => void>;\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs/operators\");","import { fromEvent } from 'rxjs';\nimport { filter, map, take } from 'rxjs/operators';\n\nimport { parseUrl } from '../url';\n\nimport IframeEvent from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport interface IframeEventPostOptions<\n TSuccessEvent extends IframeEvent,\n TErrorEvent extends IframeEvent,\n> {\n errorType?: TErrorEvent['type'];\n successType?: TSuccessEvent['type'];\n}\n\nexport default class IframeEventPoster<TEvent, TContext = undefined> {\n private _targetOrigin: string;\n\n constructor(targetOrigin: string, private _targetWindow?: Window, private _context?: TContext) {\n this._targetOrigin = targetOrigin === '*' ? '*' : parseUrl(targetOrigin).origin;\n }\n\n post(event: TEvent): void;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n ): Promise<TSuccessEvent>;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options?: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n ): Promise<TSuccessEvent> | void {\n const targetWindow = this._targetWindow;\n\n if (window === targetWindow) {\n return;\n }\n\n if (!targetWindow) {\n throw new Error('Unable to post message because target window is not set.');\n }\n\n const result =\n options &&\n fromEvent<MessageEvent>(window, 'message')\n .pipe(\n filter(\n (event) =>\n event.origin === this._targetOrigin &&\n isIframeEvent(event.data, event.data.type) &&\n [options.successType, options.errorType].indexOf(event.data.type) !==\n -1,\n ),\n map((event) => {\n if (options.errorType === event.data.type) {\n throw event.data;\n }\n\n return event.data;\n }),\n take(1),\n )\n .toPromise();\n\n targetWindow.postMessage({ ...event, context: this._context }, this._targetOrigin);\n\n return result;\n }\n\n setTarget(window: Window) {\n this._targetWindow = window;\n }\n\n setContext(context: TContext) {\n this._context = context;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"local-storage-fallback\");","import { default as storage } from 'local-storage-fallback';\n\nexport default class BrowserStorage {\n constructor(private _namespace: string) {}\n\n getItem<TValue = any>(key: string): TValue | null {\n const rawValue = storage.getItem(this.withNamespace(key));\n\n if (rawValue === null) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n // Clean up invalid values\n this.removeItem(this.withNamespace(key));\n\n return null;\n }\n }\n\n getItemOnce<TValue = any>(key: string): TValue | null {\n const value = this.getItem(key);\n\n this.removeItem(key);\n\n return value;\n }\n\n setItem<TValue = any>(key: string, value: TValue): void {\n return storage.setItem(this.withNamespace(key), JSON.stringify(value));\n }\n\n removeItem(key: string): void {\n return storage.removeItem(this.withNamespace(key));\n }\n\n private withNamespace(key: string): string {\n return `${this._namespace}.${key}`;\n }\n}\n","import EmbeddedCheckoutError from './embedded-checkout-error';\nimport { EmbeddedContentOptions } from './iframe-content';\n\nexport enum EmbeddedCheckoutEventType {\n CheckoutComplete = 'CHECKOUT_COMPLETE',\n CheckoutError = 'CHECKOUT_ERROR',\n CheckoutLoaded = 'CHECKOUT_LOADED',\n FrameError = 'FRAME_ERROR',\n FrameLoaded = 'FRAME_LOADED',\n SignedOut = 'SIGNED_OUT',\n}\n\nexport interface EmbeddedCheckoutEventMap {\n [EmbeddedCheckoutEventType.CheckoutComplete]: EmbeddedCheckoutCompleteEvent;\n [EmbeddedCheckoutEventType.CheckoutError]: EmbeddedCheckoutErrorEvent;\n [EmbeddedCheckoutEventType.CheckoutLoaded]: EmbeddedCheckoutLoadedEvent;\n [EmbeddedCheckoutEventType.FrameError]: EmbeddedCheckoutFrameErrorEvent;\n [EmbeddedCheckoutEventType.FrameLoaded]: EmbeddedCheckoutFrameLoadedEvent;\n [EmbeddedCheckoutEventType.SignedOut]: EmbeddedCheckoutSignedOutEvent;\n}\n\nexport type EmbeddedCheckoutEvent =\n | EmbeddedCheckoutCompleteEvent\n | EmbeddedCheckoutErrorEvent\n | EmbeddedCheckoutFrameErrorEvent\n | EmbeddedCheckoutFrameLoadedEvent\n | EmbeddedCheckoutLoadedEvent\n | EmbeddedCheckoutSignedOutEvent;\n\nexport interface EmbeddedCheckoutCompleteEvent {\n type: EmbeddedCheckoutEventType.CheckoutComplete;\n}\n\nexport interface EmbeddedCheckoutErrorEvent {\n type: EmbeddedCheckoutEventType.CheckoutError;\n payload: EmbeddedCheckoutError;\n}\n\nexport interface EmbeddedCheckoutLoadedEvent {\n type: EmbeddedCheckoutEventType.CheckoutLoaded;\n}\n\nexport interface EmbeddedCheckoutFrameErrorEvent {\n type: EmbeddedCheckoutEventType.FrameError;\n payload: EmbeddedCheckoutError;\n}\n\nexport interface EmbeddedCheckoutFrameLoadedEvent {\n type: EmbeddedCheckoutEventType.FrameLoaded;\n payload?: EmbeddedContentOptions;\n}\n\nexport interface EmbeddedCheckoutSignedOutEvent {\n type: EmbeddedCheckoutEventType.SignedOut;\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport StandardError from './standard-error';\n\nconst DEFAULT_RESPONSE = {\n body: {},\n headers: {},\n status: 0,\n};\n\n/**\n * Throw this error if we are unable to make a request to the server. It wraps\n * any server response into a JS error object.\n */\nexport default class RequestError<TBody = any> extends StandardError {\n body: TBody | {};\n headers: { [key: string]: any };\n errors: Array<{ code: string; message?: string }>;\n status: number;\n\n constructor(\n response?: Response<TBody | {}>,\n {\n message,\n errors,\n }: {\n message?: string;\n errors?: Array<{ code: string; message?: string }>;\n } = {},\n ) {\n const { body, headers, status } = response || DEFAULT_RESPONSE;\n\n super(message || 'An unexpected error has occurred.');\n\n this.name = 'RequestError';\n this.type = 'request';\n this.body = body;\n this.headers = headers;\n this.status = status;\n this.errors = errors || [];\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../../common/error/errors';\n\n/**\n * Throw this error we are not able to sign in a shopper because the provided\n * login token is invalid.\n */\nexport default class InvalidLoginTokenError extends RequestError {\n constructor(response: Response<InternalErrorResponseBody>) {\n super(response, { message: response.body.title });\n\n this.name = 'InvalidLoginTokenError';\n this.type = 'invalid_login_token';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\nexport enum NotEmbeddableErrorType {\n MissingContainer = 'missing_container',\n MissingContent = 'missing_content',\n UnknownError = 'unknown_error',\n}\n\n/**\n * Throw this error if we are not able to embed the checkout form as an iframe.\n * This can be due to the fact that the provided container ID is invalid, or the\n * checkout form fails to load inside the iframe. It can also be due to an\n * unknown reason.\n */\nexport default class NotEmbeddableError extends StandardError {\n constructor(\n message?: string,\n public subtype: NotEmbeddableErrorType = NotEmbeddableErrorType.UnknownError,\n ) {\n super(message || 'Unable to embed the checkout form.');\n\n this.name = 'NotEmbeddableError';\n this.type = 'not_embeddable';\n }\n}\n","import EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nexport enum EmbeddedContentEventType {\n StyleConfigured = 'STYLE_CONFIGURED',\n}\n\nexport interface EmbeddedContentEventMap {\n [EmbeddedContentEventType.StyleConfigured]: EmbeddedContentStyleConfiguredEvent;\n}\n\nexport type EmbeddedContentEvent = EmbeddedContentStyleConfiguredEvent;\n\nexport interface EmbeddedContentStyleConfiguredEvent {\n type: EmbeddedContentEventType.StyleConfigured;\n payload: EmbeddedCheckoutStyles;\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { IFrameComponent, IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\nimport { parseUrl } from '../common/url';\nimport { bindDecorator as bind } from '../common/utility';\n\nimport EmbeddedCheckoutError from './embedded-checkout-error';\nimport { EmbeddedCheckoutEventMap, EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport { InvalidLoginTokenError, NotEmbeddableError, NotEmbeddableErrorType } from './errors';\nimport { EmbeddedContentEvent, EmbeddedContentEventType } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nexport const ALLOW_COOKIE_ATTEMPT_INTERVAL = 10 * 60 * 1000;\nexport const IS_COOKIE_ALLOWED_KEY = 'isCookieAllowed';\nexport const LAST_ALLOW_COOKIE_ATTEMPT_KEY = 'lastAllowCookieAttempt';\n\n@bind\nexport default class EmbeddedCheckout {\n private _iframe?: IFrameComponent;\n private _isAttached: boolean;\n\n /**\n * @internal\n */\n constructor(\n private _iframeCreator: ResizableIframeCreator,\n private _messageListener: IframeEventListener<EmbeddedCheckoutEventMap>,\n private _messagePoster: IframeEventPoster<EmbeddedContentEvent>,\n private _loadingIndicator: LoadingIndicator,\n private _requestSender: RequestSender,\n private _storage: BrowserStorage,\n private _location: Location,\n private _options: EmbeddedCheckoutOptions,\n ) {\n this._isAttached = false;\n\n if (this._options.onComplete) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.CheckoutComplete,\n this._options.onComplete,\n );\n }\n\n if (this._options.onError) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.CheckoutError,\n this._options.onError,\n );\n }\n\n if (this._options.onLoad) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.CheckoutLoaded,\n this._options.onLoad,\n );\n }\n\n if (this._options.onFrameLoad) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.FrameLoaded,\n this._options.onFrameLoad,\n );\n }\n\n if (this._options.onSignOut) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.SignedOut,\n this._options.onSignOut,\n );\n }\n\n this._messageListener.addListener(EmbeddedCheckoutEventType.FrameLoaded, () =>\n this._configureStyles(),\n );\n }\n\n attach(): Promise<this> {\n if (this._isAttached) {\n return Promise.resolve(this);\n }\n\n this._isAttached = true;\n this._messageListener.listen();\n this._loadingIndicator.show(this._options.containerId);\n\n return this._allowCookie()\n .then(() => this._attemptLogin())\n .then((url) => this._iframeCreator.createFrame(url, this._options.containerId))\n .then((iframe) => {\n this._iframe = iframe;\n\n this._configureStyles();\n this._loadingIndicator.hide();\n })\n .catch((error) => {\n this._isAttached = false;\n\n return this._retryAllowCookie(error).catch(() => {\n this._messageListener.trigger({\n type: EmbeddedCheckoutEventType.FrameError,\n payload: error,\n });\n\n this._loadingIndicator.hide();\n\n throw error;\n });\n })\n .then(() => this);\n }\n\n detach(): void {\n if (!this._isAttached) {\n return;\n }\n\n this._isAttached = false;\n this._messageListener.stopListen();\n\n if (this._iframe && this._iframe.parentNode) {\n this._iframe.parentNode.removeChild(this._iframe);\n this._iframe.iFrameResizer.close();\n }\n }\n\n private _configureStyles(): void {\n if (!this._iframe || !this._iframe.contentWindow || !this._options.styles) {\n return;\n }\n\n this._messagePoster.setTarget(this._iframe.contentWindow);\n\n this._messagePoster.post({\n type: EmbeddedContentEventType.StyleConfigured,\n payload: this._options.styles,\n });\n }\n\n private _attemptLogin(): Promise<string> {\n if (!/^\\/login\\/token/.test(parseUrl(this._options.url).pathname)) {\n return Promise.resolve(this._options.url);\n }\n\n return this._requestSender\n .post<{ redirectUrl: string }>(this._options.url)\n .then(({ body: { redirectUrl } }) => redirectUrl)\n .catch((response) => Promise.reject(new InvalidLoginTokenError(response)));\n }\n\n /**\n * This workaround is required for certain browsers (namely Safari) that\n * prevent session cookies to be set for a third party website unless the\n * user has recently visited such website. Therefore, before we attempt to\n * login or set an active cart in the session, we need to first redirect the\n * user to the domain of Embedded Checkout.\n */\n private _allowCookie(): Promise<void> {\n if (this._storage.getItem(IS_COOKIE_ALLOWED_KEY)) {\n return Promise.resolve();\n }\n\n this._storage.setItem(IS_COOKIE_ALLOWED_KEY, true);\n\n // It could be possible that the flag is set to true but the browser has\n // already removed the permission to store third-party cookies. In that\n // case, we should try to redirect the user again. But we only want to\n // do it once within a fixed interval. This is to avoid getting into a\n // redirect loop if the shopper actually doesn't have a valid card\n // session.\n this._storage.setItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY, Date.now());\n\n const { origin } = parseUrl(this._options.url);\n const redirectUrl = `${origin}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(\n this._location.href,\n )}`;\n\n document.body.style.visibility = 'hidden';\n this._location.replace(redirectUrl);\n\n return new Promise<never>(() => {});\n }\n\n private _retryAllowCookie(error: EmbeddedCheckoutError): Promise<void> {\n const lastAttempt = Number(this._storage.getItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY));\n const canRetry =\n (!lastAttempt || Date.now() - lastAttempt > ALLOW_COOKIE_ATTEMPT_INTERVAL) &&\n error instanceof NotEmbeddableError &&\n error.subtype === NotEmbeddableErrorType.MissingContent;\n\n if (!canRetry) {\n return Promise.reject();\n }\n\n this._storage.removeItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY);\n this._storage.removeItem(IS_COOKIE_ALLOWED_KEY);\n\n return this._allowCookie();\n }\n}\n","import { IFrameComponent, iframeResizer, isIframeEvent } from '../common/iframe';\nimport { appendWww, parseUrl } from '../common/url';\n\nimport { EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport { NotEmbeddableError, NotEmbeddableErrorType } from './errors';\n\nexport default class ResizableIframeCreator {\n constructor(private _options?: { timeout: number }) {}\n\n createFrame(src: string, containerId: string): Promise<IFrameComponent> {\n const container = document.getElementById(containerId);\n const { timeout = 60000 } = this._options || {};\n\n if (!container) {\n throw new NotEmbeddableError(\n 'Unable to embed the iframe because the container element could not be found.',\n NotEmbeddableErrorType.MissingContainer,\n );\n }\n\n const iframe = document.createElement('iframe');\n\n iframe.src = src;\n iframe.style.border = 'none';\n iframe.style.display = 'none';\n iframe.style.width = '100%';\n iframe.allowPaymentRequest = true;\n\n container.appendChild(iframe);\n\n return this._toResizableFrame(iframe, timeout).catch((error) => {\n container.removeChild(iframe);\n\n throw error;\n });\n }\n\n private _toResizableFrame(\n iframe: HTMLIFrameElement,\n timeoutInterval: number,\n ): Promise<IFrameComponent> {\n // Can't simply listen to `load` event because it always gets triggered even if there's an error.\n // Instead, listen to the `load` inside the iframe and let the parent frame know when it happens.\n return new Promise((resolve, reject) => {\n const timeout = window.setTimeout(() => {\n reject(\n new NotEmbeddableError(\n 'Unable to embed the iframe because the content could not be loaded.',\n ),\n );\n }, timeoutInterval);\n\n const handleMessage = (event: MessageEvent) => {\n if (\n event.origin !== parseUrl(iframe.src).origin &&\n event.origin !== appendWww(parseUrl(iframe.src)).origin\n ) {\n return;\n }\n\n if (isIframeEvent(event.data, EmbeddedCheckoutEventType.FrameError)) {\n teardown();\n reject(\n new NotEmbeddableError(\n event.data.payload.message,\n NotEmbeddableErrorType.MissingContent,\n ),\n );\n }\n\n if (isIframeEvent(event.data, EmbeddedCheckoutEventType.FrameLoaded)) {\n iframe.style.display = '';\n\n const contentId = event.data.payload && event.data.payload.contentId;\n const iframes = iframeResizer(\n {\n scrolling: false,\n sizeWidth: false,\n heightCalculationMethod: contentId ? 'taggedElement' : 'lowestElement',\n },\n iframe,\n );\n\n teardown();\n resolve(iframes[iframes.length - 1]);\n }\n };\n\n const teardown = () => {\n window.removeEventListener('message', handleMessage);\n window.clearTimeout(timeout);\n };\n\n window.addEventListener('message', handleMessage);\n });\n }\n}\n","import { IFrameComponent, IFrameOptions } from 'iframe-resizer';\n\nexport {\n HeightCalculationMethod,\n IFrameComponent,\n IFrameMessageData,\n IFrameObject,\n IFrameOptions,\n IFramePage,\n IFramePageOptions,\n IFrameResizedData,\n IFrameScrollData,\n PageInfo,\n WidthCalculationMethod,\n} from 'iframe-resizer';\n\n// The reason why we are wrapping the original `iframeResizer` function imported\n// from the package is because the package sets up event listeners (window\n// resize etc...) as soon as the package is imported. Therefore, to defer the\n// side effect from happening until the function is actually being used, we are\n// importing the package inside this function. To minimise the chance of\n// importing the original package inadvertently, we are also re-exporting all of\n// its public interfaces. The re-exports do not cause any side effect because\n// they are plain TypeScript interfaces; meaning they are only used for type\n// checks rather than for code output.\nexport function iframeResizer(\n options: IFrameOptions,\n target: string | HTMLElement,\n): IFrameComponent[] {\n /* eslint-disable @typescript-eslint/no-var-requires */\n const { iframeResizer: originalIframeResizer } = require('iframe-resizer');\n\n return originalIframeResizer(options, target);\n}\n\n// We also need to wrap the original `iframeResizer.contentWindow` because\n// similarly the package sets up event listeners as soon as the package gets\n// imported. Another reason is that if it is imported at the top level using a\n// regular import statement, it will be stripped out by Webpack as it is\n// considered as \"unused\", unless we explicitly mark it as a package that\n// produces side effects.\nexport function setupContentWindowForIframeResizer(): void {\n require('iframe-resizer/js/iframeResizer.contentWindow');\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\nimport { parseUrl } from '../common/url';\n\nimport EmbeddedCheckout from './embedded-checkout';\nimport { EmbeddedCheckoutEventMap } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport { EmbeddedContentEvent } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nconst STORAGE_PREFIX = 'BigCommerce.EmbeddedCheckout';\n\n/**\n * Embed the checkout form in an iframe.\n *\n * @remarks\n * Once the iframe is embedded, it will automatically resize according to the\n * size of the checkout form. It will also notify the parent window when certain\n * events have occurred. i.e.: when the form is loaded and ready to be used.\n *\n * ```js\n * embedCheckout({\n * url: 'https://checkout/url',\n * containerId: 'container-id',\n * });\n * ```\n *\n * @param options - Options for embedding the checkout form.\n * @returns A promise that resolves to an instance of `EmbeddedCheckout`.\n */\nexport default function embedCheckout(options: EmbeddedCheckoutOptions): Promise<EmbeddedCheckout> {\n const origin = parseUrl(options.url).origin;\n const embeddedCheckout = new EmbeddedCheckout(\n new ResizableIframeCreator(),\n new IframeEventListener<EmbeddedCheckoutEventMap>(origin),\n new IframeEventPoster<EmbeddedContentEvent>(origin),\n new LoadingIndicator({ styles: options.styles && options.styles.loadingIndicator }),\n createRequestSender(),\n new BrowserStorage(STORAGE_PREFIX),\n window.location,\n options,\n );\n\n return embeddedCheckout.attach();\n}\n","import { EmbeddedCheckoutFrameLoadedEvent } from '../embedded-checkout-events';\n\nexport default function handleFrameLoadedEvent(message: EmbeddedCheckoutFrameLoadedEvent): void {\n if (!message.payload || !message.payload.contentId) {\n return;\n }\n\n const body = document.getElementById(message.payload.contentId);\n\n if (!body || body.hasAttribute('data-iframe-height')) {\n return;\n }\n\n body.setAttribute('data-iframe-height', '');\n}\n","export default interface CustomError extends Error {\n message: string;\n type: string;\n subtype?: string;\n}\n\nexport function isCustomError(error: unknown): error is CustomError {\n return typeof error === 'object' && error !== null && 'message' in error && 'type' in error;\n}\n","import { CustomError, isCustomError } from '../../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { bindDecorator as bind } from '../../common/utility';\nimport EmbeddedCheckoutError from '../embedded-checkout-error';\nimport {\n EmbeddedCheckoutCompleteEvent,\n EmbeddedCheckoutErrorEvent,\n EmbeddedCheckoutEvent,\n EmbeddedCheckoutEventMap,\n EmbeddedCheckoutEventType,\n EmbeddedCheckoutFrameErrorEvent,\n EmbeddedCheckoutFrameLoadedEvent,\n EmbeddedCheckoutLoadedEvent,\n EmbeddedCheckoutSignedOutEvent,\n} from '../embedded-checkout-events';\nimport EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\nimport { EmbeddedContentEventMap, EmbeddedContentEventType } from './embedded-content-events';\nimport EmbeddedContentOptions from './embedded-content-options';\n\n@bind\nexport default class IframeEmbeddedCheckoutMessenger implements EmbeddedCheckoutMessenger {\n /**\n * @internal\n */\n constructor(\n private _messageListener: IframeEventListener<EmbeddedContentEventMap>,\n private _messagePoster: IframeEventPoster<EmbeddedCheckoutEvent>,\n private _untargetedMessagePoster: IframeEventPoster<EmbeddedCheckoutEvent>,\n private _messageHandlers: EventCallbacks<EmbeddedCheckoutEventMap> = {},\n ) {\n this._messageListener.listen();\n }\n\n postComplete(): void {\n const message: EmbeddedCheckoutCompleteEvent = {\n type: EmbeddedCheckoutEventType.CheckoutComplete,\n };\n\n this._postMessage(message);\n }\n\n postError(payload: Error | CustomError): void {\n const message: EmbeddedCheckoutErrorEvent = {\n type: EmbeddedCheckoutEventType.CheckoutError,\n payload: this._transformError(payload),\n };\n\n this._postMessage(message);\n }\n\n postFrameError(payload: Error | CustomError): void {\n const message: EmbeddedCheckoutFrameErrorEvent = {\n type: EmbeddedCheckoutEventType.FrameError,\n payload: this._transformError(payload),\n };\n\n // Ideally, all messages should be targeted at a specific origin.\n // However, for `FrameError` message, we have to post it in an\n // untargeted fashion. This is because the error could be caused by a\n // missing cart. That makes it not possible to determine of site origin\n // of the parent window. Nevertheless, we still want to notify the\n // parent window about the error.\n this._postMessage(message, { untargeted: true });\n }\n\n postFrameLoaded(payload?: EmbeddedContentOptions): void {\n const message: EmbeddedCheckoutFrameLoadedEvent = {\n type: EmbeddedCheckoutEventType.FrameLoaded,\n payload,\n };\n\n this._postMessage(message);\n }\n\n postLoaded(): void {\n const message: EmbeddedCheckoutLoadedEvent = {\n type: EmbeddedCheckoutEventType.CheckoutLoaded,\n };\n\n this._postMessage(message);\n }\n\n postSignedOut(): void {\n const message: EmbeddedCheckoutSignedOutEvent = {\n type: EmbeddedCheckoutEventType.SignedOut,\n };\n\n this._postMessage(message);\n }\n\n receiveStyles(handler: (styles: EmbeddedCheckoutStyles) => void): void {\n this._messageListener.addListener(\n EmbeddedContentEventType.StyleConfigured,\n ({ payload }) => {\n handler(payload);\n },\n );\n }\n\n private _postMessage(message: EmbeddedCheckoutEvent, options?: { untargeted?: boolean }): void {\n this._notifyMessageHandlers(message);\n\n if (options && options.untargeted) {\n return this._untargetedMessagePoster.post(message);\n }\n\n this._messagePoster.post(message);\n }\n\n private _notifyMessageHandlers(message: EmbeddedCheckoutEvent): void {\n Object.keys(this._messageHandlers).forEach((key) => {\n if (message.type !== key) {\n return;\n }\n\n const handler = this._messageHandlers[key];\n\n if (handler) {\n (handler as (event: EmbeddedCheckoutEvent) => void).call(null, message);\n }\n });\n }\n\n private _transformError(error: Error | CustomError): EmbeddedCheckoutError {\n return {\n message: error.message,\n type: isCustomError(error) ? error.type : undefined,\n subtype: isCustomError(error) ? error.subtype : undefined,\n };\n }\n}\n\nexport type EventCallbacks<TEventMap> = {\n [key in keyof TEventMap]?: (event: TEventMap[key]) => void;\n};\n","import { bindDecorator as bind } from '../../common/utility';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\n\n@bind\nexport default class NoopEmbeddedCheckoutMessenger implements EmbeddedCheckoutMessenger {\n postComplete(): void {}\n\n postError(): void {}\n\n postFrameError(): void {}\n\n postFrameLoaded(): void {}\n\n postLoaded(): void {}\n\n postSignedOut(): void {}\n\n receiveStyles(): void {}\n}\n","import {\n IframeEventListener,\n IframeEventPoster,\n setupContentWindowForIframeResizer,\n} from '../../common/iframe';\nimport { EmbeddedCheckoutEvent, EmbeddedCheckoutEventType } from '../embedded-checkout-events';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\nimport EmbeddedCheckoutMessengerOptions from './embedded-checkout-messenger-options';\nimport { EmbeddedContentEventMap } from './embedded-content-events';\nimport handleFrameLoadedEvent from './handle-frame-loaded-event';\nimport IframeEmbeddedCheckoutMessenger from './iframe-embedded-checkout-messenger';\nimport NoopEmbeddedCheckoutMessenger from './noop-embedded-checkout-messenger';\n\n/**\n * Create an instance of `EmbeddedCheckoutMessenger`.\n *\n * @remarks\n * The object is responsible for posting messages to the parent window from the\n * iframe when certain events have occurred. For example, when the checkout\n * form is first loaded, you should notify the parent window about it.\n *\n * The iframe can only be embedded in domains that are allowed by the store.\n *\n * ```ts\n * const messenger = createEmbeddedCheckoutMessenger({\n * parentOrigin: 'https://some/website',\n * });\n *\n * messenger.postFrameLoaded();\n * ```\n *\n * @alpha\n * Please note that this feature is currently in an early stage of development.\n * Therefore the API is unstable and not ready for public consumption.\n *\n * @param options - Options for creating `EmbeddedCheckoutMessenger`\n * @returns - An instance of `EmbeddedCheckoutMessenger`\n */\nexport default function createEmbeddedCheckoutMessenger(\n options: EmbeddedCheckoutMessengerOptions,\n): EmbeddedCheckoutMessenger {\n setupContentWindowForIframeResizer();\n\n const parentWindow = options.parentWindow || window.parent;\n\n // Return a No-op messenger if it is not called inside an iframe\n if (window === parentWindow) {\n return new NoopEmbeddedCheckoutMessenger();\n }\n\n return new IframeEmbeddedCheckoutMessenger(\n new IframeEventListener<EmbeddedContentEventMap>(options.parentOrigin),\n new IframeEventPoster<EmbeddedCheckoutEvent>(options.parentOrigin, parentWindow),\n new IframeEventPoster<EmbeddedCheckoutEvent>('*', parentWindow),\n { [EmbeddedCheckoutEventType.FrameLoaded]: handleFrameLoadedEvent },\n );\n}\n"],"names":["module","exports","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","DEFAULT_STYLES","size","color","backgroundColor","ROTATION_ANIMATION","options","this","styles","containerStyles","defineAnimation","container","buildContainer","indicator","buildIndicator","appendChild","show","parentId","document","getElementById","Error","style","visibility","opacity","hide","handleTransitionEnd","removeEventListener","addEventListener","createElement","display","bottom","left","height","width","position","right","top","transition","setStyleAttribute","borderRadius","border","borderColor","margin","transform","transformStyle","animation","element","attrs","keys","forEach","k","setProperty","id","head","sheet","CSSStyleSheet","insertRule","message","object","name","type","setPrototypeOf","__proto__","captureStackTrace","stack","parseUrl","url","test","anchor","href","port","indexOf","hostname","hash","origin","protocol","pathname","search","appendWww","replace","target","descriptor","bindMethodDecorator","decoratedTarget","getOwnPropertyNames","getOwnPropertyDescriptor","bindClassDecorator","_","method","boundMethod","bind","set","isIframeEvent","sourceOrigin","_sourceOrigins","_isListening","_listeners","listen","window","_handleMessage","stopListen","addListener","listener","listeners","push","removeListener","index","splice","trigger","event","context","messageEvent","data","targetOrigin","_targetWindow","_context","_targetOrigin","post","targetWindow","result","fromEvent","pipe","filter","successType","errorType","map","take","toPromise","postMessage","setTarget","setContext","_namespace","getItem","rawValue","withNamespace","JSON","parse","error","removeItem","getItemOnce","setItem","stringify","EmbeddedCheckoutEventType","DEFAULT_RESPONSE","body","headers","status","response","title","errors","NotEmbeddableErrorType","subtype","UnknownError","EmbeddedContentEventType","IS_COOKIE_ALLOWED_KEY","LAST_ALLOW_COOKIE_ATTEMPT_KEY","_iframeCreator","_messageListener","_messagePoster","_loadingIndicator","_requestSender","_storage","_location","_options","_isAttached","onComplete","CheckoutComplete","onError","CheckoutError","onLoad","CheckoutLoaded","onFrameLoad","FrameLoaded","onSignOut","SignedOut","_configureStyles","attach","Promise","resolve","containerId","_allowCookie","then","_attemptLogin","createFrame","iframe","_iframe","catch","_retryAllowCookie","FrameError","payload","detach","parentNode","removeChild","iFrameResizer","close","contentWindow","StyleConfigured","reject","Date","now","redirectUrl","encodeURIComponent","lastAttempt","Number","MissingContent","EmbeddedCheckout","src","timeout","MissingContainer","allowPaymentRequest","_toResizableFrame","timeoutInterval","setTimeout","handleMessage","teardown","iframes","scrolling","sizeWidth","heightCalculationMethod","contentId","originalIframeResizer","length","clearTimeout","STORAGE_PREFIX","embedCheckout","loadingIndicator","createRequestSender","location","handleFrameLoadedEvent","hasAttribute","setAttribute","isCustomError","_untargetedMessagePoster","_messageHandlers","postComplete","_postMessage","postError","_transformError","postFrameError","untargeted","postFrameLoaded","postLoaded","postSignedOut","receiveStyles","handler","_notifyMessageHandlers","IframeEmbeddedCheckoutMessenger","NoopEmbeddedCheckoutMessenger","createEmbeddedCheckoutMessenger","parentWindow","parent","parentOrigin"],"sourceRoot":""}
1
+ {"version":3,"file":"embedded-checkout.js","mappings":"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","sources":["webpack://@bigcommerce/checkout-sdk/external commonjs \"iframe-resizer\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"iframe-resizer/js/iframeResizer.contentWindow\"","webpack://@bigcommerce/checkout-sdk/webpack/bootstrap","webpack://@bigcommerce/checkout-sdk/webpack/runtime/compat get default export","webpack://@bigcommerce/checkout-sdk/webpack/runtime/define property getters","webpack://@bigcommerce/checkout-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@bigcommerce/checkout-sdk/webpack/runtime/make namespace object","webpack://@bigcommerce/checkout-sdk/external commonjs \"@bigcommerce/request-sender\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"tslib\"","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/loading-indicator/loading-indicator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/standard-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/set-prototype-of.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/invalid-argument-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/url/parse-url.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/url/append-www.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/utility/bind-decorator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/is-iframe-event.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-event-listener.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs/operators\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-event-poster.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"local-storage-fallback\"","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/storage/browser-storage.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/embedded-checkout-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/errors/invalid-login-token-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/errors/not-embeddable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/embedded-content-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/embedded-checkout.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/resizable-iframe-creator.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/iframe/iframe-resizer.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/embed-checkout.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/handle-frame-loaded-event.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/common/error/errors/custom-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/iframe-embedded-checkout-messenger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/noop-embedded-checkout-messenger.ts","webpack://@bigcommerce/checkout-sdk/./packages/core/src/embedded-checkout/iframe-content/create-embedded-checkout-messenger.ts"],"sourcesContent":["module.exports = require(\"iframe-resizer\");","module.exports = require(\"iframe-resizer/js/iframeResizer.contentWindow\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@bigcommerce/request-sender\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"tslib\");","import {\n LoadingIndicatorContainerStyles,\n LoadingIndicatorStyles,\n} from './loading-indicator-styles';\n\nconst DEFAULT_STYLES: LoadingIndicatorStyles = {\n size: 70,\n color: '#d9d9d9',\n backgroundColor: '#ffffff',\n};\n\nconst ROTATION_ANIMATION = 'embedded-checkout-loading-indicator-rotation';\n\ninterface LoadingIndicatorOptions {\n styles?: LoadingIndicatorStyles;\n containerStyles?: LoadingIndicatorContainerStyles;\n}\n\nexport default class LoadingIndicator {\n private container: HTMLElement;\n private indicator: HTMLElement;\n private styles: LoadingIndicatorStyles;\n private containerStyles: LoadingIndicatorContainerStyles;\n\n constructor(options?: LoadingIndicatorOptions) {\n this.styles = { ...DEFAULT_STYLES, ...(options && options.styles) };\n this.containerStyles = { ...(options && options.containerStyles) };\n\n this.defineAnimation();\n\n this.container = this.buildContainer();\n this.indicator = this.buildIndicator();\n\n this.container.appendChild(this.indicator);\n }\n\n show(parentId?: string): void {\n if (parentId) {\n const parent = document.getElementById(parentId);\n\n if (!parent) {\n throw new Error(\n 'Unable to attach the loading indicator because the parent ID is not valid.',\n );\n }\n\n parent.appendChild(this.container);\n }\n\n this.container.style.visibility = 'visible';\n this.container.style.opacity = '1';\n }\n\n hide(): void {\n const handleTransitionEnd = () => {\n this.container.style.visibility = 'hidden';\n\n this.container.removeEventListener('transitionend', handleTransitionEnd);\n };\n\n this.container.addEventListener('transitionend', handleTransitionEnd);\n\n this.container.style.opacity = '0';\n }\n\n private buildContainer(): HTMLElement {\n const container = document.createElement('div');\n\n container.style.display = 'block';\n container.style.bottom = '0';\n container.style.left = '0';\n container.style.height = '100%';\n container.style.width = '100%';\n container.style.position = 'absolute';\n container.style.right = '0';\n container.style.top = '0';\n container.style.transition = 'all 250ms ease-out';\n container.style.opacity = '0';\n\n this.setStyleAttribute(container, this.containerStyles);\n\n return container;\n }\n\n private buildIndicator(): HTMLElement {\n const indicator = document.createElement('div');\n\n indicator.style.display = 'block';\n indicator.style.width = `${this.styles.size}px`;\n indicator.style.height = `${this.styles.size}px`;\n indicator.style.borderRadius = `${this.styles.size}px`;\n indicator.style.border = 'solid 1px';\n indicator.style.borderColor = `${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`;\n indicator.style.margin = '0 auto';\n indicator.style.position = 'absolute';\n indicator.style.left = '0';\n indicator.style.right = '0';\n indicator.style.top = '50%';\n indicator.style.transform = 'translateY(-50%) rotate(0deg)';\n indicator.style.transformStyle = 'preserve-3d';\n indicator.style.animation = `${ROTATION_ANIMATION} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`;\n\n return indicator;\n }\n\n private setStyleAttribute(element: HTMLElement, attrs: { [key: string]: string }): void {\n Object.keys(attrs).forEach((k) => {\n element.style.setProperty(k, attrs[k]);\n });\n }\n\n private defineAnimation(): void {\n // In order to define CSS animation, we need to insert a stylesheet into the host frame.\n // We only have to do it once.\n if (document.getElementById(ROTATION_ANIMATION)) {\n return;\n }\n\n const style = document.createElement('style');\n\n style.id = ROTATION_ANIMATION;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n document.head?.appendChild(style);\n\n if (style.sheet instanceof CSSStyleSheet) {\n // We need to provide the 2nd parameter for IE11, even though it is\n // 0 by default for all other browsers.\n style.sheet.insertRule(\n `\n @keyframes ${ROTATION_ANIMATION} {\n 0% { transform: translateY(-50%) rotate(0deg); }\n 100% { transform: translateY(-50%) rotate(360deg); }\n }\n `,\n 0,\n );\n }\n }\n}\n","import { setPrototypeOf } from '../../utility';\n\nimport CustomError from './custom-error';\n\n/**\n * This error type should not be constructed directly. It is a base class for\n * all custom errors thrown in this library.\n */\nexport default abstract class StandardError extends Error implements CustomError {\n name = 'StandardError';\n type = 'standard';\n\n constructor(message?: string) {\n super(message || 'An unexpected error has occurred.');\n\n setPrototypeOf(this, new.target.prototype);\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, new.target);\n } else {\n this.stack = new Error(this.message).stack;\n }\n }\n}\n","export default function setPrototypeOf(object: any, prototype: object) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(object, prototype);\n } else {\n object.__proto__ = prototype;\n }\n\n return object;\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a method is unable to proceed because the\n * caller has not provided all the arguments according to their requirements,\n * i.e.: if an argument is missing or it is not the expected data type.\n */\nexport default class InvalidArgumentError extends StandardError {\n constructor(message?: string) {\n super(message || 'Invalid arguments have been provided.');\n\n this.name = 'InvalidArgumentError';\n this.type = 'invalid_argument';\n }\n}\n","import { InvalidArgumentError } from '../error/errors';\n\nimport Url from './url';\n\nexport default function parseUrl(url: string): Url {\n if (!/^(https?:)?\\/\\//.test(url)) {\n throw new InvalidArgumentError('The provided URL must be absolute.');\n }\n\n // new URL() is not supported in IE11, use anchor tag instead\n const anchor = document.createElement('a');\n\n anchor.href = url;\n\n // IE11 returns 80 or 443 for the port number depending on the URL scheme,\n // even if the port number is not specified in the URL.\n const port =\n anchor.port && url.indexOf(`${anchor.hostname}:${anchor.port}`) !== -1 ? anchor.port : '';\n\n return {\n hash: anchor.hash,\n hostname: anchor.hostname,\n href: anchor.href,\n origin: `${anchor.protocol}//${anchor.hostname}${port ? `:${port}` : ''}`,\n pathname: anchor.pathname,\n port,\n protocol: anchor.protocol,\n search: anchor.search,\n };\n}\n","import parseUrl from './parse-url';\nimport Url from './url';\n\nexport default function appendWww(url: Url): Url {\n return parseUrl(\n url.hostname.indexOf('www') === 0\n ? url.href\n : url.href.replace(url.hostname, `www.${url.hostname}`),\n );\n}\n","/**\n * Decorates a class or a method by binding all its prototype methods or itself\n * to the calling instance respectively.\n */\nfunction bindDecorator<T extends Method>(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\nfunction bindDecorator<T extends Constructor<object>>(target: T): T;\n\nfunction bindDecorator(target: any, key?: any, descriptor?: any): any {\n if (!key || !descriptor) {\n return bindClassDecorator(target);\n }\n\n return bindMethodDecorator(target, key, descriptor);\n}\n\nexport default bindDecorator;\n\n/**\n * Decorates a class by binding all its prototype methods to the calling\n * instance.\n */\nexport function bindClassDecorator<T extends Constructor<object>>(target: T): T {\n const decoratedTarget = class extends target {};\n\n Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n if (!descriptor || key === 'constructor') {\n return;\n }\n\n Object.defineProperty(\n decoratedTarget.prototype,\n key,\n bindMethodDecorator(target.prototype, key, descriptor),\n );\n });\n\n return decoratedTarget;\n}\n\n/**\n * Decorates a method by binding it to the calling instance.\n */\nexport function bindMethodDecorator<T extends Method>(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n if (typeof descriptor.value !== 'function') {\n return descriptor;\n }\n\n let method: T = descriptor.value;\n\n return {\n get() {\n const boundMethod = method.bind(this) as T;\n\n Object.defineProperty(this, key, {\n ...descriptor,\n value: boundMethod,\n });\n\n return boundMethod;\n },\n set(value) {\n method = value;\n },\n };\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\n","import IframeEvent from './iframe-event';\n\nexport default function isIframeEvent<TEvent extends IframeEvent<TType>, TType extends string>(\n object: any,\n type: TType,\n): object is TEvent {\n return object.type === type;\n}\n","import { appendWww, parseUrl } from '../url';\nimport { bindDecorator as bind } from '../utility';\n\nimport { IframeEventMap } from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport default class IframeEventListener<\n TEventMap extends IframeEventMap<keyof TEventMap>,\n TContext = undefined,\n> {\n private _isListening: boolean;\n private _listeners: EventListeners<TEventMap, TContext>;\n private _sourceOrigins: string[];\n\n constructor(sourceOrigin: string) {\n this._sourceOrigins = [\n parseUrl(sourceOrigin).origin,\n appendWww(parseUrl(sourceOrigin)).origin,\n ];\n this._isListening = false;\n this._listeners = {};\n }\n\n listen(): void {\n if (this._isListening) {\n return;\n }\n\n this._isListening = true;\n\n window.addEventListener('message', this._handleMessage);\n }\n\n stopListen(): void {\n if (!this._isListening) {\n return;\n }\n\n this._isListening = false;\n\n window.removeEventListener('message', this._handleMessage);\n }\n\n addListener<TType extends keyof TEventMap>(\n type: TType,\n listener: (event: TEventMap[TType], context?: TContext) => void,\n ): void {\n let listeners = this._listeners[type];\n\n if (!listeners) {\n this._listeners[type] = listeners = [];\n }\n\n if (listeners.indexOf(listener) === -1) {\n listeners.push(listener);\n }\n }\n\n removeListener<TType extends keyof TEventMap>(\n type: TType,\n listener: (event: TEventMap[TType], context?: TContext) => void,\n ): void {\n const listeners = this._listeners[type];\n\n if (!listeners) {\n return;\n }\n\n const index = listeners.indexOf(listener);\n\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void {\n const listeners = this._listeners[event.type];\n\n if (!listeners) {\n return;\n }\n\n listeners.forEach((listener) => (context ? listener(event, context) : listener(event)));\n }\n\n @bind\n private _handleMessage(messageEvent: MessageEvent): void {\n if (\n this._sourceOrigins.indexOf(messageEvent.origin) === -1 ||\n !isIframeEvent(messageEvent.data as TEventMap[keyof TEventMap], messageEvent.data.type)\n ) {\n return;\n }\n\n const { context, ...event } = messageEvent.data;\n\n this.trigger(event, context);\n }\n}\n\ntype EventListeners<TEventMap, TContext = undefined> = {\n [key in keyof TEventMap]?: Array<(event: TEventMap[key], context?: TContext) => void>;\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs/operators\");","import { fromEvent } from 'rxjs';\nimport { filter, map, take } from 'rxjs/operators';\n\nimport { parseUrl } from '../url';\n\nimport IframeEvent from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport interface IframeEventPostOptions<\n TSuccessEvent extends IframeEvent,\n TErrorEvent extends IframeEvent,\n> {\n errorType?: TErrorEvent['type'];\n successType?: TSuccessEvent['type'];\n}\n\nexport default class IframeEventPoster<TEvent, TContext = undefined> {\n private _targetOrigin: string;\n\n constructor(targetOrigin: string, private _targetWindow?: Window, private _context?: TContext) {\n this._targetOrigin = targetOrigin === '*' ? '*' : parseUrl(targetOrigin).origin;\n }\n\n post(event: TEvent): void;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n ): Promise<TSuccessEvent>;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options?: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n ): Promise<TSuccessEvent> | void {\n const targetWindow = this._targetWindow;\n\n if (window === targetWindow) {\n return;\n }\n\n if (!targetWindow) {\n throw new Error('Unable to post message because target window is not set.');\n }\n\n const result =\n options &&\n fromEvent<MessageEvent>(window, 'message')\n .pipe(\n filter(\n (event) =>\n event.origin === this._targetOrigin &&\n isIframeEvent(event.data, event.data.type) &&\n [options.successType, options.errorType].indexOf(event.data.type) !==\n -1,\n ),\n map((event) => {\n if (options.errorType === event.data.type) {\n throw event.data;\n }\n\n return event.data;\n }),\n take(1),\n )\n .toPromise();\n\n targetWindow.postMessage({ ...event, context: this._context }, this._targetOrigin);\n\n return result;\n }\n\n setTarget(window: Window) {\n this._targetWindow = window;\n }\n\n setContext(context: TContext) {\n this._context = context;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"local-storage-fallback\");","import { default as storage } from 'local-storage-fallback';\n\nexport default class BrowserStorage {\n constructor(private _namespace: string) {}\n\n getItem<TValue = any>(key: string): TValue | null {\n const rawValue = storage.getItem(this.withNamespace(key));\n\n if (rawValue === null) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n } catch (error) {\n // Clean up invalid values\n this.removeItem(this.withNamespace(key));\n\n return null;\n }\n }\n\n getItemOnce<TValue = any>(key: string): TValue | null {\n const value = this.getItem(key);\n\n this.removeItem(key);\n\n return value;\n }\n\n setItem<TValue = any>(key: string, value: TValue): void {\n return storage.setItem(this.withNamespace(key), JSON.stringify(value));\n }\n\n removeItem(key: string): void {\n return storage.removeItem(this.withNamespace(key));\n }\n\n private withNamespace(key: string): string {\n return `${this._namespace}.${key}`;\n }\n}\n","import EmbeddedCheckoutError from './embedded-checkout-error';\nimport { EmbeddedContentOptions } from './iframe-content';\n\nexport enum EmbeddedCheckoutEventType {\n CheckoutComplete = 'CHECKOUT_COMPLETE',\n CheckoutError = 'CHECKOUT_ERROR',\n CheckoutLoaded = 'CHECKOUT_LOADED',\n FrameError = 'FRAME_ERROR',\n FrameLoaded = 'FRAME_LOADED',\n SignedOut = 'SIGNED_OUT',\n}\n\nexport interface EmbeddedCheckoutEventMap {\n [EmbeddedCheckoutEventType.CheckoutComplete]: EmbeddedCheckoutCompleteEvent;\n [EmbeddedCheckoutEventType.CheckoutError]: EmbeddedCheckoutErrorEvent;\n [EmbeddedCheckoutEventType.CheckoutLoaded]: EmbeddedCheckoutLoadedEvent;\n [EmbeddedCheckoutEventType.FrameError]: EmbeddedCheckoutFrameErrorEvent;\n [EmbeddedCheckoutEventType.FrameLoaded]: EmbeddedCheckoutFrameLoadedEvent;\n [EmbeddedCheckoutEventType.SignedOut]: EmbeddedCheckoutSignedOutEvent;\n}\n\nexport type EmbeddedCheckoutEvent =\n | EmbeddedCheckoutCompleteEvent\n | EmbeddedCheckoutErrorEvent\n | EmbeddedCheckoutFrameErrorEvent\n | EmbeddedCheckoutFrameLoadedEvent\n | EmbeddedCheckoutLoadedEvent\n | EmbeddedCheckoutSignedOutEvent;\n\nexport interface EmbeddedCheckoutCompleteEvent {\n type: EmbeddedCheckoutEventType.CheckoutComplete;\n}\n\nexport interface EmbeddedCheckoutErrorEvent {\n type: EmbeddedCheckoutEventType.CheckoutError;\n payload: EmbeddedCheckoutError;\n}\n\nexport interface EmbeddedCheckoutLoadedEvent {\n type: EmbeddedCheckoutEventType.CheckoutLoaded;\n}\n\nexport interface EmbeddedCheckoutFrameErrorEvent {\n type: EmbeddedCheckoutEventType.FrameError;\n payload: EmbeddedCheckoutError;\n}\n\nexport interface EmbeddedCheckoutFrameLoadedEvent {\n type: EmbeddedCheckoutEventType.FrameLoaded;\n payload?: EmbeddedContentOptions;\n}\n\nexport interface EmbeddedCheckoutSignedOutEvent {\n type: EmbeddedCheckoutEventType.SignedOut;\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport StandardError from './standard-error';\n\nconst DEFAULT_RESPONSE = {\n body: {},\n headers: {},\n status: 0,\n};\n\n/**\n * Throw this error if we are unable to make a request to the server. It wraps\n * any server response into a JS error object.\n */\nexport default class RequestError<TBody = any> extends StandardError {\n body: TBody | {};\n headers: { [key: string]: any };\n errors: Array<{ code: string; message?: string }>;\n status: number;\n\n constructor(\n response?: Response<TBody | {}>,\n {\n message,\n errors,\n }: {\n message?: string;\n errors?: Array<{ code: string; message?: string }>;\n } = {},\n ) {\n const { body, headers, status } = response || DEFAULT_RESPONSE;\n\n super(message || 'An unexpected error has occurred.');\n\n this.name = 'RequestError';\n this.type = 'request';\n this.body = body;\n this.headers = headers;\n this.status = status;\n this.errors = errors || [];\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../../common/error/errors';\n\n/**\n * Throw this error we are not able to sign in a shopper because the provided\n * login token is invalid.\n */\nexport default class InvalidLoginTokenError extends RequestError {\n constructor(response: Response<InternalErrorResponseBody>) {\n super(response, { message: response.body.title });\n\n this.name = 'InvalidLoginTokenError';\n this.type = 'invalid_login_token';\n }\n}\n","import { StandardError } from '../../common/error/errors';\n\nexport enum NotEmbeddableErrorType {\n MissingContainer = 'missing_container',\n MissingContent = 'missing_content',\n UnknownError = 'unknown_error',\n}\n\n/**\n * Throw this error if we are not able to embed the checkout form as an iframe.\n * This can be due to the fact that the provided container ID is invalid, or the\n * checkout form fails to load inside the iframe. It can also be due to an\n * unknown reason.\n */\nexport default class NotEmbeddableError extends StandardError {\n constructor(\n message?: string,\n public subtype: NotEmbeddableErrorType = NotEmbeddableErrorType.UnknownError,\n ) {\n super(message || 'Unable to embed the checkout form.');\n\n this.name = 'NotEmbeddableError';\n this.type = 'not_embeddable';\n }\n}\n","import EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nexport enum EmbeddedContentEventType {\n StyleConfigured = 'STYLE_CONFIGURED',\n}\n\nexport interface EmbeddedContentEventMap {\n [EmbeddedContentEventType.StyleConfigured]: EmbeddedContentStyleConfiguredEvent;\n}\n\nexport type EmbeddedContentEvent = EmbeddedContentStyleConfiguredEvent;\n\nexport interface EmbeddedContentStyleConfiguredEvent {\n type: EmbeddedContentEventType.StyleConfigured;\n payload: EmbeddedCheckoutStyles;\n}\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { IFrameComponent, IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\nimport { parseUrl } from '../common/url';\nimport { bindDecorator as bind } from '../common/utility';\n\nimport EmbeddedCheckoutError from './embedded-checkout-error';\nimport { EmbeddedCheckoutEventMap, EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport { InvalidLoginTokenError, NotEmbeddableError, NotEmbeddableErrorType } from './errors';\nimport { EmbeddedContentEvent, EmbeddedContentEventType } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nexport const ALLOW_COOKIE_ATTEMPT_INTERVAL = 10 * 60 * 1000;\nexport const IS_COOKIE_ALLOWED_KEY = 'isCookieAllowed';\nexport const LAST_ALLOW_COOKIE_ATTEMPT_KEY = 'lastAllowCookieAttempt';\n\n@bind\nexport default class EmbeddedCheckout {\n private _iframe?: IFrameComponent;\n private _isAttached: boolean;\n\n /**\n * @internal\n */\n constructor(\n private _iframeCreator: ResizableIframeCreator,\n private _messageListener: IframeEventListener<EmbeddedCheckoutEventMap>,\n private _messagePoster: IframeEventPoster<EmbeddedContentEvent>,\n private _loadingIndicator: LoadingIndicator,\n private _requestSender: RequestSender,\n private _storage: BrowserStorage,\n private _location: Location,\n private _options: EmbeddedCheckoutOptions,\n ) {\n this._isAttached = false;\n\n if (this._options.onComplete) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.CheckoutComplete,\n this._options.onComplete,\n );\n }\n\n if (this._options.onError) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.CheckoutError,\n this._options.onError,\n );\n }\n\n if (this._options.onLoad) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.CheckoutLoaded,\n this._options.onLoad,\n );\n }\n\n if (this._options.onFrameLoad) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.FrameLoaded,\n this._options.onFrameLoad,\n );\n }\n\n if (this._options.onSignOut) {\n this._messageListener.addListener(\n EmbeddedCheckoutEventType.SignedOut,\n this._options.onSignOut,\n );\n }\n\n this._messageListener.addListener(EmbeddedCheckoutEventType.FrameLoaded, () =>\n this._configureStyles(),\n );\n }\n\n attach(): Promise<this> {\n if (this._isAttached) {\n return Promise.resolve(this);\n }\n\n this._isAttached = true;\n this._messageListener.listen();\n this._loadingIndicator.show(this._options.containerId);\n\n return this._allowCookie()\n .then(() => this._attemptLogin())\n .then((url) => this._iframeCreator.createFrame(url, this._options.containerId))\n .then((iframe) => {\n this._iframe = iframe;\n\n this._configureStyles();\n this._loadingIndicator.hide();\n })\n .catch((error) => {\n this._isAttached = false;\n\n return this._retryAllowCookie(error).catch(() => {\n this._messageListener.trigger({\n type: EmbeddedCheckoutEventType.FrameError,\n payload: error,\n });\n\n this._loadingIndicator.hide();\n\n throw error;\n });\n })\n .then(() => this);\n }\n\n detach(): void {\n if (!this._isAttached) {\n return;\n }\n\n this._isAttached = false;\n this._messageListener.stopListen();\n\n if (this._iframe && this._iframe.parentNode) {\n this._iframe.parentNode.removeChild(this._iframe);\n this._iframe.iFrameResizer.close();\n }\n }\n\n private _configureStyles(): void {\n if (!this._iframe || !this._iframe.contentWindow || !this._options.styles) {\n return;\n }\n\n this._messagePoster.setTarget(this._iframe.contentWindow);\n\n this._messagePoster.post({\n type: EmbeddedContentEventType.StyleConfigured,\n payload: this._options.styles,\n });\n }\n\n private _attemptLogin(): Promise<string> {\n if (!/^\\/login\\/token/.test(parseUrl(this._options.url).pathname)) {\n return Promise.resolve(this._options.url);\n }\n\n return this._requestSender\n .post<{ redirectUrl: string }>(this._options.url)\n .then(({ body: { redirectUrl } }) => redirectUrl)\n .catch((response) => Promise.reject(new InvalidLoginTokenError(response)));\n }\n\n /**\n * This workaround is required for certain browsers (namely Safari) that\n * prevent session cookies to be set for a third party website unless the\n * user has recently visited such website. Therefore, before we attempt to\n * login or set an active cart in the session, we need to first redirect the\n * user to the domain of Embedded Checkout.\n */\n private _allowCookie(): Promise<void> {\n if (this._storage.getItem(IS_COOKIE_ALLOWED_KEY)) {\n return Promise.resolve();\n }\n\n this._storage.setItem(IS_COOKIE_ALLOWED_KEY, true);\n\n // It could be possible that the flag is set to true but the browser has\n // already removed the permission to store third-party cookies. In that\n // case, we should try to redirect the user again. But we only want to\n // do it once within a fixed interval. This is to avoid getting into a\n // redirect loop if the shopper actually doesn't have a valid card\n // session.\n this._storage.setItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY, Date.now());\n\n const { origin } = parseUrl(this._options.url);\n const redirectUrl = `${origin}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(\n this._location.href,\n )}`;\n\n document.body.style.visibility = 'hidden';\n this._location.replace(redirectUrl);\n\n return new Promise<never>(() => {});\n }\n\n private _retryAllowCookie(error: EmbeddedCheckoutError): Promise<void> {\n const lastAttempt = Number(this._storage.getItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY));\n const canRetry =\n (!lastAttempt || Date.now() - lastAttempt > ALLOW_COOKIE_ATTEMPT_INTERVAL) &&\n error instanceof NotEmbeddableError &&\n error.subtype === NotEmbeddableErrorType.MissingContent;\n\n if (!canRetry) {\n return Promise.reject();\n }\n\n this._storage.removeItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY);\n this._storage.removeItem(IS_COOKIE_ALLOWED_KEY);\n\n return this._allowCookie();\n }\n}\n","import { IFrameComponent, iframeResizer, isIframeEvent } from '../common/iframe';\nimport { appendWww, parseUrl } from '../common/url';\n\nimport { EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport { NotEmbeddableError, NotEmbeddableErrorType } from './errors';\n\nexport default class ResizableIframeCreator {\n constructor(private _options?: { timeout: number }) {}\n\n createFrame(src: string, containerId: string): Promise<IFrameComponent> {\n const container = document.getElementById(containerId);\n const { timeout = 60000 } = this._options || {};\n\n if (!container) {\n throw new NotEmbeddableError(\n 'Unable to embed the iframe because the container element could not be found.',\n NotEmbeddableErrorType.MissingContainer,\n );\n }\n\n const iframe = document.createElement('iframe');\n\n iframe.src = src;\n iframe.style.border = 'none';\n iframe.style.display = 'none';\n iframe.style.width = '100%';\n iframe.allowPaymentRequest = true;\n iframe.allow = 'payment';\n\n container.appendChild(iframe);\n\n return this._toResizableFrame(iframe, timeout).catch((error) => {\n container.removeChild(iframe);\n\n throw error;\n });\n }\n\n private _toResizableFrame(\n iframe: HTMLIFrameElement,\n timeoutInterval: number,\n ): Promise<IFrameComponent> {\n // Can't simply listen to `load` event because it always gets triggered even if there's an error.\n // Instead, listen to the `load` inside the iframe and let the parent frame know when it happens.\n return new Promise((resolve, reject) => {\n const timeout = window.setTimeout(() => {\n reject(\n new NotEmbeddableError(\n 'Unable to embed the iframe because the content could not be loaded.',\n ),\n );\n }, timeoutInterval);\n\n const handleMessage = (event: MessageEvent) => {\n if (\n event.origin !== parseUrl(iframe.src).origin &&\n event.origin !== appendWww(parseUrl(iframe.src)).origin\n ) {\n return;\n }\n\n if (isIframeEvent(event.data, EmbeddedCheckoutEventType.FrameError)) {\n teardown();\n reject(\n new NotEmbeddableError(\n event.data.payload.message,\n NotEmbeddableErrorType.MissingContent,\n ),\n );\n }\n\n if (isIframeEvent(event.data, EmbeddedCheckoutEventType.FrameLoaded)) {\n iframe.style.display = '';\n\n const contentId = event.data.payload && event.data.payload.contentId;\n const iframes = iframeResizer(\n {\n scrolling: false,\n sizeWidth: false,\n heightCalculationMethod: contentId ? 'taggedElement' : 'lowestElement',\n },\n iframe,\n );\n\n teardown();\n resolve(iframes[iframes.length - 1]);\n }\n };\n\n const teardown = () => {\n window.removeEventListener('message', handleMessage);\n window.clearTimeout(timeout);\n };\n\n window.addEventListener('message', handleMessage);\n });\n }\n}\n","import { IFrameComponent, IFrameOptions } from 'iframe-resizer';\n\nexport {\n HeightCalculationMethod,\n IFrameComponent,\n IFrameMessageData,\n IFrameObject,\n IFrameOptions,\n IFramePage,\n IFramePageOptions,\n IFrameResizedData,\n IFrameScrollData,\n PageInfo,\n WidthCalculationMethod,\n} from 'iframe-resizer';\n\n// The reason why we are wrapping the original `iframeResizer` function imported\n// from the package is because the package sets up event listeners (window\n// resize etc...) as soon as the package is imported. Therefore, to defer the\n// side effect from happening until the function is actually being used, we are\n// importing the package inside this function. To minimise the chance of\n// importing the original package inadvertently, we are also re-exporting all of\n// its public interfaces. The re-exports do not cause any side effect because\n// they are plain TypeScript interfaces; meaning they are only used for type\n// checks rather than for code output.\nexport function iframeResizer(\n options: IFrameOptions,\n target: string | HTMLElement,\n): IFrameComponent[] {\n /* eslint-disable @typescript-eslint/no-var-requires */\n const { iframeResizer: originalIframeResizer } = require('iframe-resizer');\n\n return originalIframeResizer(options, target);\n}\n\n// We also need to wrap the original `iframeResizer.contentWindow` because\n// similarly the package sets up event listeners as soon as the package gets\n// imported. Another reason is that if it is imported at the top level using a\n// regular import statement, it will be stripped out by Webpack as it is\n// considered as \"unused\", unless we explicitly mark it as a package that\n// produces side effects.\nexport function setupContentWindowForIframeResizer(): void {\n require('iframe-resizer/js/iframeResizer.contentWindow');\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\nimport { parseUrl } from '../common/url';\n\nimport EmbeddedCheckout from './embedded-checkout';\nimport { EmbeddedCheckoutEventMap } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport { EmbeddedContentEvent } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nconst STORAGE_PREFIX = 'BigCommerce.EmbeddedCheckout';\n\n/**\n * Embed the checkout form in an iframe.\n *\n * @remarks\n * Once the iframe is embedded, it will automatically resize according to the\n * size of the checkout form. It will also notify the parent window when certain\n * events have occurred. i.e.: when the form is loaded and ready to be used.\n *\n * ```js\n * embedCheckout({\n * url: 'https://checkout/url',\n * containerId: 'container-id',\n * });\n * ```\n *\n * @param options - Options for embedding the checkout form.\n * @returns A promise that resolves to an instance of `EmbeddedCheckout`.\n */\nexport default function embedCheckout(options: EmbeddedCheckoutOptions): Promise<EmbeddedCheckout> {\n const origin = parseUrl(options.url).origin;\n const embeddedCheckout = new EmbeddedCheckout(\n new ResizableIframeCreator(),\n new IframeEventListener<EmbeddedCheckoutEventMap>(origin),\n new IframeEventPoster<EmbeddedContentEvent>(origin),\n new LoadingIndicator({ styles: options.styles && options.styles.loadingIndicator }),\n createRequestSender(),\n new BrowserStorage(STORAGE_PREFIX),\n window.location,\n options,\n );\n\n return embeddedCheckout.attach();\n}\n","import { EmbeddedCheckoutFrameLoadedEvent } from '../embedded-checkout-events';\n\nexport default function handleFrameLoadedEvent(message: EmbeddedCheckoutFrameLoadedEvent): void {\n if (!message.payload || !message.payload.contentId) {\n return;\n }\n\n const body = document.getElementById(message.payload.contentId);\n\n if (!body || body.hasAttribute('data-iframe-height')) {\n return;\n }\n\n body.setAttribute('data-iframe-height', '');\n}\n","export default interface CustomError extends Error {\n message: string;\n type: string;\n subtype?: string;\n}\n\nexport function isCustomError(error: unknown): error is CustomError {\n return typeof error === 'object' && error !== null && 'message' in error && 'type' in error;\n}\n","import { CustomError, isCustomError } from '../../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { bindDecorator as bind } from '../../common/utility';\nimport EmbeddedCheckoutError from '../embedded-checkout-error';\nimport {\n EmbeddedCheckoutCompleteEvent,\n EmbeddedCheckoutErrorEvent,\n EmbeddedCheckoutEvent,\n EmbeddedCheckoutEventMap,\n EmbeddedCheckoutEventType,\n EmbeddedCheckoutFrameErrorEvent,\n EmbeddedCheckoutFrameLoadedEvent,\n EmbeddedCheckoutLoadedEvent,\n EmbeddedCheckoutSignedOutEvent,\n} from '../embedded-checkout-events';\nimport EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\nimport { EmbeddedContentEventMap, EmbeddedContentEventType } from './embedded-content-events';\nimport EmbeddedContentOptions from './embedded-content-options';\n\n@bind\nexport default class IframeEmbeddedCheckoutMessenger implements EmbeddedCheckoutMessenger {\n /**\n * @internal\n */\n constructor(\n private _messageListener: IframeEventListener<EmbeddedContentEventMap>,\n private _messagePoster: IframeEventPoster<EmbeddedCheckoutEvent>,\n private _untargetedMessagePoster: IframeEventPoster<EmbeddedCheckoutEvent>,\n private _messageHandlers: EventCallbacks<EmbeddedCheckoutEventMap> = {},\n ) {\n this._messageListener.listen();\n }\n\n postComplete(): void {\n const message: EmbeddedCheckoutCompleteEvent = {\n type: EmbeddedCheckoutEventType.CheckoutComplete,\n };\n\n this._postMessage(message);\n }\n\n postError(payload: Error | CustomError): void {\n const message: EmbeddedCheckoutErrorEvent = {\n type: EmbeddedCheckoutEventType.CheckoutError,\n payload: this._transformError(payload),\n };\n\n this._postMessage(message);\n }\n\n postFrameError(payload: Error | CustomError): void {\n const message: EmbeddedCheckoutFrameErrorEvent = {\n type: EmbeddedCheckoutEventType.FrameError,\n payload: this._transformError(payload),\n };\n\n // Ideally, all messages should be targeted at a specific origin.\n // However, for `FrameError` message, we have to post it in an\n // untargeted fashion. This is because the error could be caused by a\n // missing cart. That makes it not possible to determine of site origin\n // of the parent window. Nevertheless, we still want to notify the\n // parent window about the error.\n this._postMessage(message, { untargeted: true });\n }\n\n postFrameLoaded(payload?: EmbeddedContentOptions): void {\n const message: EmbeddedCheckoutFrameLoadedEvent = {\n type: EmbeddedCheckoutEventType.FrameLoaded,\n payload,\n };\n\n this._postMessage(message);\n }\n\n postLoaded(): void {\n const message: EmbeddedCheckoutLoadedEvent = {\n type: EmbeddedCheckoutEventType.CheckoutLoaded,\n };\n\n this._postMessage(message);\n }\n\n postSignedOut(): void {\n const message: EmbeddedCheckoutSignedOutEvent = {\n type: EmbeddedCheckoutEventType.SignedOut,\n };\n\n this._postMessage(message);\n }\n\n receiveStyles(handler: (styles: EmbeddedCheckoutStyles) => void): void {\n this._messageListener.addListener(\n EmbeddedContentEventType.StyleConfigured,\n ({ payload }) => {\n handler(payload);\n },\n );\n }\n\n private _postMessage(message: EmbeddedCheckoutEvent, options?: { untargeted?: boolean }): void {\n this._notifyMessageHandlers(message);\n\n if (options && options.untargeted) {\n return this._untargetedMessagePoster.post(message);\n }\n\n this._messagePoster.post(message);\n }\n\n private _notifyMessageHandlers(message: EmbeddedCheckoutEvent): void {\n Object.keys(this._messageHandlers).forEach((key) => {\n if (message.type !== key) {\n return;\n }\n\n const handler = this._messageHandlers[key];\n\n if (handler) {\n (handler as (event: EmbeddedCheckoutEvent) => void).call(null, message);\n }\n });\n }\n\n private _transformError(error: Error | CustomError): EmbeddedCheckoutError {\n return {\n message: error.message,\n type: isCustomError(error) ? error.type : undefined,\n subtype: isCustomError(error) ? error.subtype : undefined,\n };\n }\n}\n\nexport type EventCallbacks<TEventMap> = {\n [key in keyof TEventMap]?: (event: TEventMap[key]) => void;\n};\n","import { bindDecorator as bind } from '../../common/utility';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\n\n@bind\nexport default class NoopEmbeddedCheckoutMessenger implements EmbeddedCheckoutMessenger {\n postComplete(): void {}\n\n postError(): void {}\n\n postFrameError(): void {}\n\n postFrameLoaded(): void {}\n\n postLoaded(): void {}\n\n postSignedOut(): void {}\n\n receiveStyles(): void {}\n}\n","import {\n IframeEventListener,\n IframeEventPoster,\n setupContentWindowForIframeResizer,\n} from '../../common/iframe';\nimport { EmbeddedCheckoutEvent, EmbeddedCheckoutEventType } from '../embedded-checkout-events';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\nimport EmbeddedCheckoutMessengerOptions from './embedded-checkout-messenger-options';\nimport { EmbeddedContentEventMap } from './embedded-content-events';\nimport handleFrameLoadedEvent from './handle-frame-loaded-event';\nimport IframeEmbeddedCheckoutMessenger from './iframe-embedded-checkout-messenger';\nimport NoopEmbeddedCheckoutMessenger from './noop-embedded-checkout-messenger';\n\n/**\n * Create an instance of `EmbeddedCheckoutMessenger`.\n *\n * @remarks\n * The object is responsible for posting messages to the parent window from the\n * iframe when certain events have occurred. For example, when the checkout\n * form is first loaded, you should notify the parent window about it.\n *\n * The iframe can only be embedded in domains that are allowed by the store.\n *\n * ```ts\n * const messenger = createEmbeddedCheckoutMessenger({\n * parentOrigin: 'https://some/website',\n * });\n *\n * messenger.postFrameLoaded();\n * ```\n *\n * @alpha\n * Please note that this feature is currently in an early stage of development.\n * Therefore the API is unstable and not ready for public consumption.\n *\n * @param options - Options for creating `EmbeddedCheckoutMessenger`\n * @returns - An instance of `EmbeddedCheckoutMessenger`\n */\nexport default function createEmbeddedCheckoutMessenger(\n options: EmbeddedCheckoutMessengerOptions,\n): EmbeddedCheckoutMessenger {\n setupContentWindowForIframeResizer();\n\n const parentWindow = options.parentWindow || window.parent;\n\n // Return a No-op messenger if it is not called inside an iframe\n if (window === parentWindow) {\n return new NoopEmbeddedCheckoutMessenger();\n }\n\n return new IframeEmbeddedCheckoutMessenger(\n new IframeEventListener<EmbeddedContentEventMap>(options.parentOrigin),\n new IframeEventPoster<EmbeddedCheckoutEvent>(options.parentOrigin, parentWindow),\n new IframeEventPoster<EmbeddedCheckoutEvent>('*', parentWindow),\n { [EmbeddedCheckoutEventType.FrameLoaded]: handleFrameLoadedEvent },\n );\n}\n"],"names":["module","exports","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","DEFAULT_STYLES","size","color","backgroundColor","ROTATION_ANIMATION","options","this","styles","containerStyles","defineAnimation","container","buildContainer","indicator","buildIndicator","appendChild","show","parentId","document","getElementById","Error","style","visibility","opacity","hide","handleTransitionEnd","removeEventListener","addEventListener","createElement","display","bottom","left","height","width","position","right","top","transition","setStyleAttribute","borderRadius","border","borderColor","margin","transform","transformStyle","animation","element","attrs","keys","forEach","k","setProperty","id","head","sheet","CSSStyleSheet","insertRule","message","object","name","type","setPrototypeOf","__proto__","captureStackTrace","stack","parseUrl","url","test","anchor","href","port","indexOf","hostname","hash","origin","protocol","pathname","search","appendWww","replace","target","descriptor","bindMethodDecorator","decoratedTarget","getOwnPropertyNames","getOwnPropertyDescriptor","bindClassDecorator","_","method","boundMethod","bind","set","isIframeEvent","sourceOrigin","_sourceOrigins","_isListening","_listeners","listen","window","_handleMessage","stopListen","addListener","listener","listeners","push","removeListener","index","splice","trigger","event","context","messageEvent","data","targetOrigin","_targetWindow","_context","_targetOrigin","post","targetWindow","result","fromEvent","pipe","filter","successType","errorType","map","take","toPromise","postMessage","setTarget","setContext","_namespace","getItem","rawValue","withNamespace","JSON","parse","error","removeItem","getItemOnce","setItem","stringify","EmbeddedCheckoutEventType","DEFAULT_RESPONSE","body","headers","status","response","title","errors","NotEmbeddableErrorType","subtype","UnknownError","EmbeddedContentEventType","IS_COOKIE_ALLOWED_KEY","LAST_ALLOW_COOKIE_ATTEMPT_KEY","_iframeCreator","_messageListener","_messagePoster","_loadingIndicator","_requestSender","_storage","_location","_options","_isAttached","onComplete","CheckoutComplete","onError","CheckoutError","onLoad","CheckoutLoaded","onFrameLoad","FrameLoaded","onSignOut","SignedOut","_configureStyles","attach","Promise","resolve","containerId","_allowCookie","then","_attemptLogin","createFrame","iframe","_iframe","catch","_retryAllowCookie","FrameError","payload","detach","parentNode","removeChild","iFrameResizer","close","contentWindow","StyleConfigured","reject","Date","now","redirectUrl","encodeURIComponent","lastAttempt","Number","MissingContent","EmbeddedCheckout","src","timeout","MissingContainer","allowPaymentRequest","allow","_toResizableFrame","timeoutInterval","setTimeout","handleMessage","teardown","iframes","scrolling","sizeWidth","heightCalculationMethod","contentId","originalIframeResizer","length","clearTimeout","STORAGE_PREFIX","embedCheckout","loadingIndicator","createRequestSender","location","handleFrameLoadedEvent","hasAttribute","setAttribute","isCustomError","_untargetedMessagePoster","_messageHandlers","postComplete","_postMessage","postError","_transformError","postFrameError","untargeted","postFrameLoaded","postLoaded","postSignedOut","receiveStyles","handler","_notifyMessageHandlers","IframeEmbeddedCheckoutMessenger","NoopEmbeddedCheckoutMessenger","createEmbeddedCheckoutMessenger","parentWindow","parent","parentOrigin"],"sourceRoot":""}